VPP43 - NSH refactoring: Added nsh-map nodes
[vpp.git] / vnet / vnet / vxlan-gpe / encap.c
similarity index 77%
rename from vnet/vnet/nsh-vxlan-gpe/encap.c
rename to vnet/vnet/vxlan-gpe/encap.c
index af520b2..3ffe2a6 100644 (file)
 #include <vnet/vnet.h>
 #include <vnet/ip/ip.h>
 #include <vnet/ethernet/ethernet.h>
-#include <vnet/nsh-vxlan-gpe/nsh_vxlan_gpe.h>
+#include <vnet/vxlan-gpe/vxlan_gpe.h>
 
 /* Statistics (not really errors) */
-#define foreach_nsh_vxlan_gpe_encap_error    \
+#define foreach_vxlan_gpe_encap_error    \
 _(ENCAPSULATED, "good packets encapsulated")
 
-static char * nsh_vxlan_gpe_encap_error_strings[] = {
+static char * vxlan_gpe_encap_error_strings[] = {
 #define _(sym,string) string,
-  foreach_nsh_vxlan_gpe_encap_error
+  foreach_vxlan_gpe_encap_error
 #undef _
 };
 
 typedef enum {
-#define _(sym,str) NSH_VXLAN_GPE_ENCAP_ERROR_##sym,
-    foreach_nsh_vxlan_gpe_encap_error
+#define _(sym,str) VXLAN_GPE_ENCAP_ERROR_##sym,
+    foreach_vxlan_gpe_encap_error
 #undef _
-    NSH_VXLAN_GPE_ENCAP_N_ERROR,
-} nsh_vxlan_gpe_encap_error_t;
+    VXLAN_GPE_ENCAP_N_ERROR,
+} vxlan_gpe_encap_error_t;
 
 typedef enum {
-    NSH_VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP,
-    NSH_VXLAN_GPE_ENCAP_NEXT_DROP,
-    NSH_VXLAN_GPE_ENCAP_N_NEXT,
-} nsh_vxlan_gpe_encap_next_t;
+  VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP,
+  VXLAN_GPE_ENCAP_NEXT_DROP,
+  VXLAN_GPE_ENCAP_N_NEXT
+} vxlan_gpe_encap_next_t;
 
 typedef struct {
   u32 tunnel_index;
-} nsh_vxlan_gpe_encap_trace_t;
+} vxlan_gpe_encap_trace_t;
 
-u8 * format_nsh_vxlan_gpe_encap_trace (u8 * s, va_list * args)
+
+u8 * format_vxlan_gpe_encap_trace (u8 * s, va_list * args)
 {
   CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
   CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
-  nsh_vxlan_gpe_encap_trace_t * t 
-      = va_arg (*args, nsh_vxlan_gpe_encap_trace_t *);
+  vxlan_gpe_encap_trace_t * t 
+      = va_arg (*args, vxlan_gpe_encap_trace_t *);
 
-  s = format (s, "NSH-VXLAN-ENCAP: tunnel %d", t->tunnel_index);
+  s = format (s, "VXLAN-GPE-ENCAP: tunnel %d", t->tunnel_index);
   return s;
 }
 
@@ -61,12 +62,12 @@ u8 * format_nsh_vxlan_gpe_encap_trace (u8 * s, va_list * args)
 _(0) _(1) _(2) _(3) _(4) _(5) _(6)
 
 static uword
-nsh_vxlan_gpe_encap (vlib_main_t * vm,
+vxlan_gpe_encap (vlib_main_t * vm,
                vlib_node_runtime_t * node,
                vlib_frame_t * from_frame)
 {
   u32 n_left_from, next_index, * from, * to_next;
-  nsh_vxlan_gpe_main_t * ngm = &nsh_vxlan_gpe_main;
+  vxlan_gpe_main_t * ngm = &vxlan_gpe_main;
   vnet_main_t * vnm = ngm->vnet_main;
   vnet_interface_main_t * im = &vnm->interface_main;
   u32 pkts_encapsulated = 0;
@@ -92,8 +93,8 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
        {
           u32 bi0, bi1;
          vlib_buffer_t * b0, * b1;
-         u32 next0 = NSH_VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
-          u32 next1 = NSH_VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
+         u32 next0 = VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
+          u32 next1 = VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
           u32 sw_if_index0, sw_if_index1, len0, len1;
           vnet_hw_interface_t * hi0, * hi1;
           ip4_header_t * ip0, * ip1;
@@ -102,7 +103,7 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
           u64 * copy_src1, * copy_dst1;
           u32 * copy_src_last0, * copy_dst_last0;
           u32 * copy_src_last1, * copy_dst_last1;
-          nsh_vxlan_gpe_tunnel_t * t0, * t1;
+          vxlan_gpe_tunnel_t * t0, * t1;
           u16 new_l0, new_l1;
           ip_csum_t sum0, sum1;
 
@@ -158,9 +159,9 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
           copy_dst1 = (u64 *) ip1;
           copy_src1 = (u64 *) t1->rewrite;
 
-          ASSERT (sizeof (ip4_vxlan_gpe_and_nsh_header_t) == 60);
+          ASSERT (sizeof (ip4_vxlan_gpe_header_t) == 36);
 
-          /* Copy first 56 octets 8-bytes at a time */
+          /* Copy first 36 octets 8-bytes at a time */
 #define _(offs) copy_dst0[offs] = copy_src0[offs];
           foreach_fixed_header_offset;
 #undef _
@@ -259,14 +260,14 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
 
           if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
             {
-              nsh_vxlan_gpe_encap_trace_t *tr =
+              vxlan_gpe_encap_trace_t *tr =
                 vlib_add_trace (vm, node, b0, sizeof (*tr));
               tr->tunnel_index = t0 - ngm->tunnels;
             }
 
           if (PREDICT_FALSE(b1->flags & VLIB_BUFFER_IS_TRACED))
             {
-              nsh_vxlan_gpe_encap_trace_t *tr =
+              vxlan_gpe_encap_trace_t *tr =
                 vlib_add_trace (vm, node, b1, sizeof (*tr));
               tr->tunnel_index = t1 - ngm->tunnels;
             }
@@ -280,14 +281,14 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
        {
          u32 bi0;
          vlib_buffer_t * b0;
-         u32 next0 = NSH_VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
-      u32 sw_if_index0, len0;
+         u32 next0 = VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP;
+         u32 sw_if_index0, len0;
           vnet_hw_interface_t * hi0;
           ip4_header_t * ip0;
           udp_header_t * udp0;
           u64 * copy_src0, * copy_dst0;
           u32 * copy_src_last0, * copy_dst_last0;
-          nsh_vxlan_gpe_tunnel_t * t0;
+          vxlan_gpe_tunnel_t * t0;
           u16 new_l0;
           ip_csum_t sum0;
 
@@ -301,7 +302,7 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
          b0 = vlib_get_buffer (vm, bi0);
 
           /* 1-wide cache? */
-          sw_if_index0 = vnet_buffer(b0)->sw_if_index[VLIB_TX];
+         sw_if_index0 = vnet_buffer(b0)->sw_if_index[VLIB_TX];
           hi0 = vnet_get_sup_hw_interface
             (vnm, vnet_buffer(b0)->sw_if_index[VLIB_TX]);
 
@@ -317,9 +318,9 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
           copy_dst0 = (u64 *) ip0;
           copy_src0 = (u64 *) t0->rewrite;
 
-          ASSERT (sizeof (ip4_vxlan_gpe_and_nsh_header_t) == 60);
+          ASSERT (sizeof (ip4_vxlan_gpe_header_t) == 36);
 
-          /* Copy first 56 octets 8-bytes at a time */
+          /* Copy first 36 octets 8-bytes at a time */
 #define _(offs) copy_dst0[offs] = copy_src0[offs];
           foreach_fixed_header_offset;
 #undef _
@@ -354,32 +355,33 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
 
           /* Reset to look up tunnel partner in the configured FIB */
           vnet_buffer(b0)->sw_if_index[VLIB_TX] = t0->encap_fib_index;
-          vnet_buffer(b0)->sw_if_index[VLIB_RX] = sw_if_index0;
+         vnet_buffer(b0)->sw_if_index[VLIB_RX] = sw_if_index0;
           pkts_encapsulated ++;
 
-          len0 = vlib_buffer_length_in_chain(vm, b0);
-          stats_n_packets += 1;
-          stats_n_bytes += len0;
-
-          /* Batch stats increment on the same vxlan tunnel so counter is not
-           incremented per packet. Note stats are still incremented for deleted
-           and admin-down tunnel where packets are dropped. It is not worthwhile
-           to check for this rare case and affect normal path performance. */
-          if (PREDICT_FALSE(sw_if_index0 != stats_sw_if_index)) {
-            stats_n_packets -= 1;
-            stats_n_bytes -= len0;
-            if (stats_n_packets)
-              vlib_increment_combined_counter(
-                  im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_TX,
-                  cpu_index, stats_sw_if_index, stats_n_packets, stats_n_bytes);
-            stats_n_packets = 1;
-            stats_n_bytes = len0;
-            stats_sw_if_index = sw_if_index0;
-          }
-          if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
-            {
-              nsh_vxlan_gpe_encap_trace_t *tr =
-                vlib_add_trace (vm, node, b0, sizeof (*tr));
+         len0 = vlib_buffer_length_in_chain(vm, b0); 
+         stats_n_packets += 1; 
+         stats_n_bytes += len0; 
+         
+          /* Batch stats increment on the same vxlan tunnel so counter is not 
+          *  incremented per packet. Note stats are still incremented for deleted 
+          *  and admin-down tunnel where packets are dropped. It is not worthwhile 
+          *  to check for this rare case and affect normal path performance. */ 
+         if (PREDICT_FALSE(sw_if_index0 != stats_sw_if_index)) 
+           { 
+             stats_n_packets -= 1; 
+             stats_n_bytes -= len0; 
+             if (stats_n_packets) 
+               vlib_increment_combined_counter( 
+                                               im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_TX, 
+                                               cpu_index, stats_sw_if_index, stats_n_packets, stats_n_bytes); 
+             stats_n_packets = 1;
+             stats_n_bytes = len0; 
+             stats_sw_if_index = sw_if_index0; 
+           } 
+         if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
+           {
+             vxlan_gpe_encap_trace_t *tr =
+               vlib_add_trace (vm, node, b0, sizeof (*tr));
               tr->tunnel_index = t0 - ngm->tunnels;
             }
          vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
@@ -390,33 +392,34 @@ nsh_vxlan_gpe_encap (vlib_main_t * vm,
       vlib_put_next_frame (vm, node, next_index, n_left_to_next);
     }
   vlib_node_increment_counter (vm, node->node_index,
-                               NSH_VXLAN_GPE_ENCAP_ERROR_ENCAPSULATED,
+                               VXLAN_GPE_ENCAP_ERROR_ENCAPSULATED,
                                pkts_encapsulated);
   /* Increment any remaining batch stats */
-  if (stats_n_packets) {
-    vlib_increment_combined_counter(
-        im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_TX, cpu_index,
-        stats_sw_if_index, stats_n_packets, stats_n_bytes);
-    node->runtime_data[0] = stats_sw_if_index;
-  }
+  if (stats_n_packets) { 
+    vlib_increment_combined_counter( 
+                                   im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_TX, cpu_index, 
+                                   stats_sw_if_index, stats_n_packets, stats_n_bytes); 
+    node->runtime_data[0] = stats_sw_if_index; 
+  } 
 
   return from_frame->n_vectors;
 }
 
-VLIB_REGISTER_NODE (nsh_vxlan_gpe_encap_node) = {
-  .function = nsh_vxlan_gpe_encap,
-  .name = "nsh-vxlan-gpe-encap",
+VLIB_REGISTER_NODE (vxlan_gpe_encap_node) = {
+  .function = vxlan_gpe_encap,
+  .name = "vxlan-gpe-encap",
   .vector_size = sizeof (u32),
-  .format_trace = format_nsh_vxlan_gpe_encap_trace,
+  .format_trace = format_vxlan_gpe_encap_trace,
   .type = VLIB_NODE_TYPE_INTERNAL,
 
-  .n_errors = ARRAY_LEN(nsh_vxlan_gpe_encap_error_strings),
-  .error_strings = nsh_vxlan_gpe_encap_error_strings,
+  .n_errors = ARRAY_LEN(vxlan_gpe_encap_error_strings),
+  .error_strings = vxlan_gpe_encap_error_strings,
 
-  .n_next_nodes = NSH_VXLAN_GPE_ENCAP_N_NEXT,
+  .n_next_nodes = VXLAN_GPE_ENCAP_N_NEXT,
 
   .next_nodes = {
-        [NSH_VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP] = "ip4-lookup",
-        [NSH_VXLAN_GPE_ENCAP_NEXT_DROP] = "error-drop",
+        [VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP] = "ip4-lookup",
+        [VXLAN_GPE_ENCAP_NEXT_DROP] = "error-drop",
   },
 };
+