cnat: reduce compile time 24/29724/3
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>
Mon, 2 Nov 2020 16:29:52 +0000 (17:29 +0100)
committerMatthew Smith <mgsmith@netgate.com>
Thu, 5 Nov 2020 16:47:38 +0000 (16:47 +0000)
Compile time reduced from ~30s to 2s for
cnat_node_vip.c & cnat_node_snat.c This doesn't
impact performance for now as ts update rwlock
is the main bottleneck.

Type: improvement

Change-Id: Ic92df300ae0dfddc5235c350bd021e73e7c850d9
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
src/plugins/cnat/cnat_node_snat.c
src/plugins/cnat/cnat_node_vip.c

index d92200f..8166df6 100644 (file)
@@ -55,17 +55,17 @@ format_cnat_snat_trace (u8 * s, va_list * args)
 /* CNat sub for source NAT as a feature arc on ip[46]-unicast
    This node's sub shouldn't apply to the same flows as
    cnat_vip_inline */
-always_inline uword
-cnat_snat_inline (vlib_main_t * vm,
-                 vlib_node_runtime_t * node,
-                 vlib_buffer_t * b,
-                 cnat_node_ctx_t * ctx, int rv, cnat_session_t * session)
+static uword
+cnat_snat_node_fn (vlib_main_t * vm,
+                  vlib_node_runtime_t * node,
+                  vlib_buffer_t * b,
+                  cnat_node_ctx_t * ctx, int rv, cnat_session_t * session)
 {
   cnat_main_t *cm = &cnat_main;
   int created_session = 0;
-  ip4_header_t *ip4;
+  ip4_header_t *ip4 = NULL;
   ip_protocol_t iproto;
-  ip6_header_t *ip6;
+  ip6_header_t *ip6 = NULL;
   udp_header_t *udp0;
   u32 arc_next0;
   u16 next0;
@@ -182,9 +182,9 @@ VLIB_NODE_FN (cnat_snat_ip4_node) (vlib_main_t * vm,
                                   vlib_frame_t * frame)
 {
   if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE)))
-    return cnat_node_inline (vm, node, frame, cnat_snat_inline, AF_IP4,
+    return cnat_node_inline (vm, node, frame, cnat_snat_node_fn, AF_IP4,
                             1 /* do_trace */ );
-  return cnat_node_inline (vm, node, frame, cnat_snat_inline, AF_IP4,
+  return cnat_node_inline (vm, node, frame, cnat_snat_node_fn, AF_IP4,
                           0 /* do_trace */ );
 }
 
@@ -193,9 +193,9 @@ VLIB_NODE_FN (cnat_snat_ip6_node) (vlib_main_t * vm,
                                   vlib_frame_t * frame)
 {
   if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE)))
-    return cnat_node_inline (vm, node, frame, cnat_snat_inline, AF_IP6,
+    return cnat_node_inline (vm, node, frame, cnat_snat_node_fn, AF_IP6,
                             1 /* do_trace */ );
-  return cnat_node_inline (vm, node, frame, cnat_snat_inline, AF_IP6,
+  return cnat_node_inline (vm, node, frame, cnat_snat_node_fn, AF_IP6,
                           0 /* do_trace */ );
 }
 
index bbce5f3..8dd53ad 100644 (file)
@@ -65,11 +65,11 @@ format_cnat_translation_trace (u8 * s, va_list * args)
 }
 
 /* CNat sub for NAT behind a fib entry (VIP or interposed real IP) */
-always_inline uword
-cnat_vip_inline (vlib_main_t * vm,
-                vlib_node_runtime_t * node,
-                vlib_buffer_t * b,
-                cnat_node_ctx_t * ctx, int rv, cnat_session_t * session)
+static uword
+cnat_vip_node_fn (vlib_main_t * vm,
+                 vlib_node_runtime_t * node,
+                 vlib_buffer_t * b,
+                 cnat_node_ctx_t * ctx, int rv, cnat_session_t * session)
 {
   vlib_combined_counter_main_t *cntm = &cnat_translation_counters;
   const cnat_translation_t *ct = NULL;
@@ -251,9 +251,9 @@ VLIB_NODE_FN (cnat_vip_ip4_node) (vlib_main_t * vm,
                                  vlib_frame_t * frame)
 {
   if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE)))
-    return cnat_node_inline (vm, node, frame, cnat_vip_inline, AF_IP4,
+    return cnat_node_inline (vm, node, frame, cnat_vip_node_fn, AF_IP4,
                             1 /* do_trace */ );
-  return cnat_node_inline (vm, node, frame, cnat_vip_inline, AF_IP4,
+  return cnat_node_inline (vm, node, frame, cnat_vip_node_fn, AF_IP4,
                           0 /* do_trace */ );
 }
 
@@ -262,9 +262,9 @@ VLIB_NODE_FN (cnat_vip_ip6_node) (vlib_main_t * vm,
                                  vlib_frame_t * frame)
 {
   if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE)))
-    return cnat_node_inline (vm, node, frame, cnat_vip_inline, AF_IP6,
+    return cnat_node_inline (vm, node, frame, cnat_vip_node_fn, AF_IP6,
                             1 /* do_trace */ );
-  return cnat_node_inline (vm, node, frame, cnat_vip_inline, AF_IP6,
+  return cnat_node_inline (vm, node, frame, cnat_vip_node_fn, AF_IP6,
                           0 /* do_trace */ );
 }