vcl: support inter worker rpc
[vpp.git] / src / vnet / l2 / l2_fwd.c
index f1d215a..a1674e0 100644 (file)
@@ -61,8 +61,7 @@ typedef struct
 typedef struct
 {
   /* per-pkt trace data */
-  u8 src[6];
-  u8 dst[6];
+  u8 dst_and_src[12];
   u32 sw_if_index;
   u16 bd_index;
   l2fib_entry_result_t result;
@@ -79,8 +78,9 @@ format_l2fwd_trace (u8 * s, va_list * args)
   s =
     format (s,
            "l2-fwd:   sw_if_index %d dst %U src %U bd_index %d result [0x%llx, %d] %U",
-           t->sw_if_index, format_ethernet_address, t->dst,
-           format_ethernet_address, t->src, t->bd_index, t->result.raw,
+           t->sw_if_index, format_ethernet_address, t->dst_and_src,
+           format_ethernet_address, t->dst_and_src + 6,
+           t->bd_index, t->result.raw,
            t->result.fields.sw_if_index, format_l2fib_entry_result_flags,
            t->result.fields.flags);
   return s;
@@ -92,7 +92,7 @@ l2fwd_main_t l2fwd_main;
 extern l2fwd_main_t l2fwd_main;
 #endif
 
-static vlib_node_registration_t l2fwd_node;
+extern vlib_node_registration_t l2fwd_node;
 
 #define foreach_l2fwd_error                            \
 _(L2FWD,         "L2 forward packets")                 \
@@ -262,7 +262,6 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
       const ethernet_header_t *h0, *h1, *h2, *h3;
       l2fib_entry_key_t key0, key1, key2, key3;
       l2fib_entry_result_t result0, result1, result2, result3;
-      u32 bucket0, bucket1, bucket2, bucket3;
 
       /* Prefetch next iteration. */
       {
@@ -303,10 +302,6 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                       &key1,   /* not used */
                       &key2,   /* not used */
                       &key3,   /* not used */
-                      &bucket0,        /* not used */
-                      &bucket1,        /* not used */
-                      &bucket2,        /* not used */
-                      &bucket3,        /* not used */
                       &result0,
                       &result1,
                       &result2,
@@ -329,8 +324,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              l2fwd_trace_t *t = vlib_add_trace (vm, node, b[0], sizeof (*t));
              t->sw_if_index = sw_if_index0;
              t->bd_index = vnet_buffer (b[0])->l2.bd_index;
-             clib_memcpy (t->src, h0->src_address, 6);
-             clib_memcpy (t->dst, h0->dst_address, 6);
+             clib_memcpy_fast (t->dst_and_src, h0->dst_address,
+                               sizeof (h0->dst_address) +
+                               sizeof (h0->src_address));
              t->result = result0;
            }
          if (b[1]->flags & VLIB_BUFFER_IS_TRACED)
@@ -338,8 +334,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              l2fwd_trace_t *t = vlib_add_trace (vm, node, b[1], sizeof (*t));
              t->sw_if_index = sw_if_index1;
              t->bd_index = vnet_buffer (b[1])->l2.bd_index;
-             clib_memcpy (t->src, h1->src_address, 6);
-             clib_memcpy (t->dst, h1->dst_address, 6);
+             clib_memcpy_fast (t->dst_and_src, h1->dst_address,
+                               sizeof (h1->dst_address) +
+                               sizeof (h1->src_address));
              t->result = result1;
            }
          if (b[2]->flags & VLIB_BUFFER_IS_TRACED)
@@ -347,8 +344,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              l2fwd_trace_t *t = vlib_add_trace (vm, node, b[2], sizeof (*t));
              t->sw_if_index = sw_if_index2;
              t->bd_index = vnet_buffer (b[2])->l2.bd_index;
-             clib_memcpy (t->src, h2->src_address, 6);
-             clib_memcpy (t->dst, h2->dst_address, 6);
+             clib_memcpy_fast (t->dst_and_src, h2->dst_address,
+                               sizeof (h2->dst_address) +
+                               sizeof (h2->src_address));
              t->result = result2;
            }
          if (b[3]->flags & VLIB_BUFFER_IS_TRACED)
@@ -356,8 +354,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              l2fwd_trace_t *t = vlib_add_trace (vm, node, b[3], sizeof (*t));
              t->sw_if_index = sw_if_index3;
              t->bd_index = vnet_buffer (b[3])->l2.bd_index;
-             clib_memcpy (t->src, h3->src_address, 6);
-             clib_memcpy (t->dst, h3->dst_address, 6);
+             clib_memcpy_fast (t->dst_and_src, h3->dst_address,
+                               sizeof (h3->dst_address) +
+                               sizeof (h3->src_address));
              t->result = result3;
            }
        }
@@ -373,7 +372,6 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
       ethernet_header_t *h0;
       l2fib_entry_key_t key0;
       l2fib_entry_result_t result0;
-      u32 bucket0;
 
       sw_if_index0 = vnet_buffer (b[0])->sw_if_index[VLIB_RX];
 
@@ -383,9 +381,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
 #ifdef COUNTERS
       em->counters[node_counter_base_index + L2FWD_ERROR_L2FWD] += 1;
 #endif
-      l2fib_lookup_1 (msm->mac_table, &cached_key, &cached_result, h0->dst_address, vnet_buffer (b[0])->l2.bd_index, &key0,    /* not used */
-                     &bucket0, /* not used */
-                     &result0);
+      l2fib_lookup_1 (msm->mac_table, &cached_key, &cached_result,
+                     h0->dst_address, vnet_buffer (b[0])->l2.bd_index, &key0,
+                     /* not used */ &result0);
       l2fwd_process (vm, node, msm, em, b[0], sw_if_index0, &result0, next);
 
       if (do_trace && PREDICT_FALSE (b[0]->flags & VLIB_BUFFER_IS_TRACED))
@@ -393,8 +391,9 @@ l2fwd_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          l2fwd_trace_t *t = vlib_add_trace (vm, node, b[0], sizeof (*t));
          t->sw_if_index = sw_if_index0;
          t->bd_index = vnet_buffer (b[0])->l2.bd_index;
-         clib_memcpy (t->src, h0->src_address, 6);
-         clib_memcpy (t->dst, h0->dst_address, 6);
+         clib_memcpy_fast (t->dst_and_src, h0->dst_address,
+                           sizeof (h0->dst_address) +
+                           sizeof (h0->src_address));
          t->result = result0;
        }
 
@@ -418,7 +417,7 @@ VLIB_NODE_FN (l2fwd_node) (vlib_main_t * vm,
 }
 
 /* *INDENT-OFF* */
-VLIB_REGISTER_NODE (l2fwd_node,static) = {
+VLIB_REGISTER_NODE (l2fwd_node) = {
   .name = "l2-fwd",
   .vector_size = sizeof (u32),
   .format_trace = format_l2fwd_trace,