ip: remove unnecesary inlining in ip4-rewrite node
[vpp.git] / src / vnet / ip / ip4_forward.c
index 5903ef8..ddf97d4 100644 (file)
@@ -677,8 +677,8 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm,
       ip_interface_address_t *ia;
       vnet_sw_interface_t *sif;
 
-      pool_foreach(sif, vnm->interface_main.sw_interfaces,
-      ({
+      pool_foreach (sif, vnm->interface_main.sw_interfaces)
+       {
           if (im->fib_index_by_sw_if_index[sw_if_index] ==
               im->fib_index_by_sw_if_index[sif->sw_if_index])
             {
@@ -728,7 +728,7 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm,
                      }
                  }));
             }
-      }));
+      }
     }
   /* *INDENT-ON* */
 
@@ -1417,9 +1417,10 @@ ip4_local_l4_csum_validate (vlib_main_t * vm, vlib_buffer_t * p,
     }
 }
 
-#define ip4_local_csum_is_offloaded(_b)                                        \
-    _b->flags & VNET_BUFFER_F_OFFLOAD_TCP_CKSUM                                \
-       || _b->flags & VNET_BUFFER_F_OFFLOAD_UDP_CKSUM
+#define ip4_local_csum_is_offloaded(_b)                                       \
+  ((_b->flags & VNET_BUFFER_F_OFFLOAD) &&                                     \
+   (vnet_buffer2 (_b)->oflags &                                               \
+    (VNET_BUFFER_OFFLOAD_F_TCP_CKSUM | VNET_BUFFER_OFFLOAD_F_UDP_CKSUM)))
 
 #define ip4_local_need_csum_check(is_tcp_udp, _b)                      \
     (is_tcp_udp && !(_b->flags & VNET_BUFFER_F_L4_CHECKSUM_COMPUTED    \
@@ -2066,15 +2067,13 @@ ip4_ttl_and_checksum_check (vlib_buffer_t * b, ip4_header_t * ip, u16 * next,
 
   /* Verify checksum. */
   ASSERT (ip4_header_checksum_is_valid (ip) ||
-         (b->flags & VNET_BUFFER_F_OFFLOAD_IP_CKSUM));
+         (vnet_buffer2 (b)->oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM));
 }
 
-
 always_inline uword
-ip4_rewrite_inline_with_gso (vlib_main_t * vm,
-                            vlib_node_runtime_t * node,
-                            vlib_frame_t * frame,
-                            int do_counters, int is_midchain, int is_mcast)
+ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node,
+                   vlib_frame_t *frame, int do_counters, int is_midchain,
+                   int is_mcast)
 {
   ip_lookup_main_t *lm = &ip4_main.lookup_main;
   u32 *from = vlib_frame_vector_args (frame);
@@ -2109,8 +2108,11 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
       u32 tx_sw_if_index0, tx_sw_if_index1;
       u8 *p;
 
-      vlib_prefetch_buffer_header (b[6], LOAD);
-      vlib_prefetch_buffer_header (b[7], LOAD);
+      if (is_midchain)
+       {
+         vlib_prefetch_buffer_header (b[6], LOAD);
+         vlib_prefetch_buffer_header (b[7], LOAD);
+       }
 
       adj_index0 = vnet_buffer (b[0])->ip.adj_index[VLIB_TX];
       adj_index1 = vnet_buffer (b[1])->ip.adj_index[VLIB_TX];
@@ -2265,9 +2267,9 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
       if (is_midchain)
        {
          if (error0 == IP4_ERROR_NONE)
-           adj_midchain_fixup (vm, adj0, b[0]);
+           adj_midchain_fixup (vm, adj0, b[0], VNET_LINK_IP4);
          if (error1 == IP4_ERROR_NONE)
-           adj_midchain_fixup (vm, adj1, b[1]);
+           adj_midchain_fixup (vm, adj1, b[1], VNET_LINK_IP4);
        }
 
       if (is_mcast)
@@ -2399,7 +2401,7 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                                                           b[0]) + rw_len0);
 
          if (is_midchain)
-           adj_midchain_fixup (vm, adj0, b[0]);
+           adj_midchain_fixup (vm, adj0, b[0], VNET_LINK_IP4);
 
          if (is_mcast)
            /* copy bytes from the IP address into the MAC rewrite */
@@ -2502,7 +2504,7 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
               vlib_buffer_length_in_chain (vm, b[0]) + rw_len0);
 
          if (is_midchain)
-           adj_midchain_fixup (vm, adj0, b[0]);
+           adj_midchain_fixup (vm, adj0, b[0], VNET_LINK_IP4);
 
          if (is_mcast)
            /* copy bytes from the IP address into the MAC rewrite */
@@ -2532,17 +2534,6 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
   return frame->n_vectors;
 }
 
-always_inline uword
-ip4_rewrite_inline (vlib_main_t * vm,
-                   vlib_node_runtime_t * node,
-                   vlib_frame_t * frame,
-                   int do_counters, int is_midchain, int is_mcast)
-{
-  return ip4_rewrite_inline_with_gso (vm, node, frame, do_counters,
-                                     is_midchain, is_mcast);
-}
-
-
 /** @brief IPv4 rewrite node.
     @node ip4-rewrite
 
@@ -2768,24 +2759,6 @@ VLIB_CLI_COMMAND (lookup_test_command, static) =
 };
 /* *INDENT-ON* */
 
-#ifndef CLIB_MARCH_VARIANT
-int
-vnet_set_ip4_flow_hash (u32 table_id, u32 flow_hash_config)
-{
-  u32 fib_index;
-
-  fib_index = fib_table_find (FIB_PROTOCOL_IP4, table_id);
-
-  if (~0 == fib_index)
-    return VNET_API_ERROR_NO_SUCH_FIB;
-
-  fib_table_set_flow_hash_config (fib_index, FIB_PROTOCOL_IP4,
-                                 flow_hash_config);
-
-  return 0;
-}
-#endif
-
 static clib_error_t *
 set_ip_flow_hash_command_fn (vlib_main_t * vm,
                             unformat_input_t * input,
@@ -2800,8 +2773,12 @@ set_ip_flow_hash_command_fn (vlib_main_t * vm,
     {
       if (unformat (input, "table %d", &table_id))
        matched = 1;
-#define _(a,v) \
-    else if (unformat (input, #a)) { flow_hash_config |= v; matched=1;}
+#define _(a, b, v)                                                            \
+  else if (unformat (input, #a))                                              \
+  {                                                                           \
+    flow_hash_config |= v;                                                    \
+    matched = 1;                                                              \
+  }
       foreach_flow_hash_bit
 #undef _
        else
@@ -2812,7 +2789,7 @@ set_ip_flow_hash_command_fn (vlib_main_t * vm,
     return clib_error_return (0, "unknown input `%U'",
                              format_unformat_error, input);
 
-  rv = vnet_set_ip4_flow_hash (table_id, flow_hash_config);
+  rv = ip_flow_hash_set (AF_IP4, table_id, flow_hash_config);
   switch (rv)
     {
     case 0: