api: binary api cleanup
[vpp.git] / src / vnet / adj / rewrite.c
index 9150f2c..c8508c4 100644 (file)
 #include <vnet/vnet.h>
 #include <vnet/ip/lookup.h>
 
-void
-vnet_rewrite_copy_slow_path (vnet_rewrite_data_t * p0,
-                            vnet_rewrite_data_t * rw0,
-                            word n_left, uword most_likely_size)
-{
-  uword n_done =
-    round_pow2 (most_likely_size, sizeof (rw0[0])) / sizeof (rw0[0]);
-
-  p0 -= n_done;
-  rw0 -= n_done;
-
-  /* As we enter the cleanup loop, p0 and rw0 point to the last chunk written
-     by the fast path. Hence, the constant 1, which the
-     vnet_rewrite_copy_one macro renders as p0[-1] = rw0[-1]. */
-
-  while (n_left > 0)
-    {
-      vnet_rewrite_copy_one (p0, rw0, 1);
-      p0--;
-      rw0--;
-      n_left--;
-    }
-}
-
 u8 *
 format_vnet_rewrite (u8 * s, va_list * args)
 {
@@ -72,22 +48,23 @@ format_vnet_rewrite (u8 * s, va_list * args)
   CLIB_UNUSED (u32 indent) = va_arg (*args, u32);
   vnet_main_t *vnm = vnet_get_main ();
 
+  ASSERT (rw->data_bytes <= max_data_bytes);
+
   if (rw->sw_if_index != ~0)
     {
       vnet_sw_interface_t *si;
-      si = vnet_get_sw_interface_safe (vnm, rw->sw_if_index);
+      si = vnet_get_sw_interface_or_null (vnm, rw->sw_if_index);
       if (NULL != si)
-       s = format (s, "%U: ", format_vnet_sw_interface_name, vnm, si);
+       s = format (s, "%U:", format_vnet_sw_interface_name, vnm, si);
       else
        s = format (s, "DELETED:%d", rw->sw_if_index);
     }
 
+  s = format (s, " mtu:%d", rw->max_l3_packet_bytes);
+
   /* Format rewrite string. */
   if (rw->data_bytes > 0)
-
-    s = format (s, "%U",
-               format_hex_bytes,
-               rw->data + max_data_bytes - rw->data_bytes, rw->data_bytes);
+    s = format (s, " %U", format_hex_bytes, rw->data, rw->data_bytes);
 
   return s;
 }
@@ -102,12 +79,22 @@ vnet_tx_node_index_for_sw_interface (vnet_main_t * vnm, u32 sw_if_index)
 void
 vnet_rewrite_init (vnet_main_t * vnm,
                   u32 sw_if_index,
+                  vnet_link_t linkt,
                   u32 this_node, u32 next_node, vnet_rewrite_header_t * rw)
 {
   rw->sw_if_index = sw_if_index;
   rw->next_index = vlib_node_add_next (vnm->vlib_main, this_node, next_node);
   rw->max_l3_packet_bytes =
-    vnet_sw_interface_get_mtu (vnm, sw_if_index, VLIB_TX);
+    vnet_sw_interface_get_mtu (vnm, sw_if_index, vnet_link_to_mtu (linkt));
+}
+
+void
+vnet_rewrite_update_mtu (vnet_main_t * vnm, vnet_link_t linkt,
+                        vnet_rewrite_header_t * rw)
+{
+  rw->max_l3_packet_bytes =
+    vnet_sw_interface_get_mtu (vnm, rw->sw_if_index,
+                              vnet_link_to_mtu (linkt));
 }
 
 void
@@ -125,7 +112,7 @@ vnet_rewrite_for_sw_interface (vnet_main_t * vnm,
     vnet_get_hw_interface_class (vnm, hw->hw_class_index);
   u8 *rewrite = NULL;
 
-  vnet_rewrite_init (vnm, sw_if_index, node_index,
+  vnet_rewrite_init (vnm, sw_if_index, link_type, node_index,
                     vnet_tx_node_index_for_sw_interface (vnm, sw_if_index),
                     rw);
 
@@ -138,31 +125,6 @@ vnet_rewrite_for_sw_interface (vnet_main_t * vnm,
   vec_free (rewrite);
 }
 
-void
-vnet_rewrite_for_tunnel (vnet_main_t * vnm,
-                        u32 tx_sw_if_index,
-                        u32 rewrite_node_index,
-                        u32 post_rewrite_node_index,
-                        vnet_rewrite_header_t * rw,
-                        u8 * rewrite_data, u32 rewrite_length)
-{
-  ip_adjacency_t *adj = 0;
-  /*
-   * Installed into vnet_buffer(b)->sw_if_index[VLIB_TX] e.g.
-   * by ip4_rewrite_inline. If the post-rewrite node injects into
-   * ipX-forward, this will be interpreted as a FIB number.
-   */
-  rw->sw_if_index = tx_sw_if_index;
-  rw->next_index = vlib_node_add_next (vnm->vlib_main, rewrite_node_index,
-                                      post_rewrite_node_index);
-  rw->max_l3_packet_bytes = (u16) ~ 0; /* we can't know at this point */
-
-  ASSERT (rewrite_length < sizeof (adj->rewrite_data));
-  /* Leave room for ethernet + VLAN tag */
-  vnet_rewrite_set_data_internal (rw, sizeof (adj->rewrite_data),
-                                 rewrite_data, rewrite_length);
-}
-
 void
 serialize_vnet_rewrite (serialize_main_t * m, va_list * va)
 {