Typos. A bunch of typos I've been collecting.
[vpp.git] / src / vnet / geneve / decap.c
index db05214..ac1369d 100644 (file)
 #include <vnet/pg/pg.h>
 #include <vnet/geneve/geneve.h>
 
-vlib_node_registration_t geneve4_input_node;
-vlib_node_registration_t geneve6_input_node;
-
 typedef struct
 {
   u32 next_index;
   u32 tunnel_index;
   u32 error;
-  u32 vni;
+  u32 vni_rsvd;
 } geneve_rx_trace_t;
 
 static u8 *
@@ -40,12 +37,12 @@ format_geneve_rx_trace (u8 * s, va_list * args)
       s =
        format (s,
                "GENEVE decap from geneve_tunnel%d vni %d next %d error %d",
-               t->tunnel_index, t->vni, t->next_index, t->error);
+               t->tunnel_index, t->vni_rsvd, t->next_index, t->error);
     }
   else
     {
       s = format (s, "GENEVE decap error - tunnel for vni %d does not exist",
-                 t->vni);
+                 t->vni_rsvd);
     }
   return s;
 }
@@ -82,13 +79,13 @@ geneve_input (vlib_main_t * vm,
   geneve4_tunnel_key_t last_key4;
   geneve6_tunnel_key_t last_key6;
   u32 pkts_decapsulated = 0;
-  u32 thread_index = vlib_get_thread_index ();
+  u32 thread_index = vm->thread_index;
   u32 stats_sw_if_index, stats_n_packets, stats_n_bytes;
 
   if (is_ip4)
     last_key4.as_u64 = ~0;
   else
-    memset (&last_key6, 0xff, sizeof (last_key6));
+    clib_memset (&last_key6, 0xff, sizeof (last_key6));
 
   from = vlib_frame_vector_args (from_frame);
   n_left_from = from_frame->n_vectors;
@@ -147,6 +144,10 @@ geneve_input (vlib_main_t * vm,
          /* udp leaves current_data pointing at the geneve header */
          geneve0 = vlib_buffer_get_current (b0);
          geneve1 = vlib_buffer_get_current (b1);
+
+         vnet_geneve_hdr_1word_ntoh (geneve0);
+         vnet_geneve_hdr_1word_ntoh (geneve1);
+
          if (is_ip4)
            {
              vlib_buffer_advance
@@ -198,13 +199,14 @@ geneve_input (vlib_main_t * vm,
          tunnel_index1 = ~0;
          error1 = 0;
 
-         if (PREDICT_FALSE (geneve0->ver != GENEVE_VERSION))
+         if (PREDICT_FALSE
+             (vnet_get_geneve_version (geneve0) != GENEVE_VERSION))
            {
              error0 = GENEVE_ERROR_BAD_FLAGS;
              next0 = GENEVE_INPUT_NEXT_DROP;
              goto trace0;
            }
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
          if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve0) == 1))
            {
              error0 = GENEVE_ERROR_BAD_FLAGS;
@@ -215,7 +217,7 @@ geneve_input (vlib_main_t * vm,
          if (is_ip4)
            {
              key4_0.remote = ip4_0->src_address.as_u32;
-             key4_0.vni = geneve0->vni;
+             key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
 
              /* Make sure GENEVE tunnel exist according to packet SIP and VNI */
              if (PREDICT_FALSE (key4_0.as_u64 != last_key4.as_u64))
@@ -234,7 +236,7 @@ geneve_input (vlib_main_t * vm,
                tunnel_index0 = last_tunnel_index;
              t0 = pool_elt_at_index (vxm->tunnels, tunnel_index0);
 
-             /* Validate GENEVE tunnel encap-fib index agaist packet */
+             /* Validate GENEVE tunnel encap-fib index against packet */
              if (PREDICT_FALSE (validate_geneve_fib (b0, t0, is_ip4) == 0))
                {
                  error0 = GENEVE_ERROR_NO_SUCH_TUNNEL;
@@ -250,7 +252,7 @@ geneve_input (vlib_main_t * vm,
                  (ip4_address_is_multicast (&ip4_0->dst_address)))
                {
                  key4_0.remote = ip4_0->dst_address.as_u32;
-                 key4_0.vni = geneve0->vni;
+                 key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
                  /* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
                  p0 = hash_get (vxm->geneve4_tunnel_by_key, key4_0.as_u64);
                  if (PREDICT_TRUE (p0 != NULL))
@@ -268,7 +270,7 @@ geneve_input (vlib_main_t * vm,
            {
              key6_0.remote.as_u64[0] = ip6_0->src_address.as_u64[0];
              key6_0.remote.as_u64[1] = ip6_0->src_address.as_u64[1];
-             key6_0.vni = geneve0->vni;
+             key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
 
              /* Make sure GENEVE tunnel exist according to packet SIP and VNI */
              if (PREDICT_FALSE
@@ -281,14 +283,14 @@ geneve_input (vlib_main_t * vm,
                      next0 = GENEVE_INPUT_NEXT_DROP;
                      goto trace0;
                    }
-                 clib_memcpy (&last_key6, &key6_0, sizeof (key6_0));
+                 clib_memcpy_fast (&last_key6, &key6_0, sizeof (key6_0));
                  tunnel_index0 = last_tunnel_index = p0[0];
                }
              else
                tunnel_index0 = last_tunnel_index;
              t0 = pool_elt_at_index (vxm->tunnels, tunnel_index0);
 
-             /* Validate GENEVE tunnel encap-fib index agaist packet */
+             /* Validate GENEVE tunnel encap-fib index against packet */
              if (PREDICT_FALSE (validate_geneve_fib (b0, t0, is_ip4) == 0))
                {
                  error0 = GENEVE_ERROR_NO_SUCH_TUNNEL;
@@ -305,7 +307,7 @@ geneve_input (vlib_main_t * vm,
                {
                  key6_0.remote.as_u64[0] = ip6_0->dst_address.as_u64[0];
                  key6_0.remote.as_u64[1] = ip6_0->dst_address.as_u64[1];
-                 key6_0.vni = geneve0->vni;
+                 key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
                  p0 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_0);
                  if (PREDICT_TRUE (p0 != NULL))
                    {
@@ -361,16 +363,17 @@ geneve_input (vlib_main_t * vm,
              tr->next_index = next0;
              tr->error = error0;
              tr->tunnel_index = tunnel_index0;
-             tr->vni = vnet_get_geneve_vni (geneve0);
+             tr->vni_rsvd = vnet_get_geneve_vni (geneve0);
            }
 
-         if (PREDICT_FALSE (geneve1->ver != GENEVE_VERSION))
+         if (PREDICT_FALSE
+             (vnet_get_geneve_version (geneve1) != GENEVE_VERSION))
            {
              error1 = GENEVE_ERROR_BAD_FLAGS;
              next1 = GENEVE_INPUT_NEXT_DROP;
              goto trace1;
            }
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
          if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve1) == 1))
            {
              error1 = GENEVE_ERROR_BAD_FLAGS;
@@ -381,7 +384,7 @@ geneve_input (vlib_main_t * vm,
          if (is_ip4)
            {
              key4_1.remote = ip4_1->src_address.as_u32;
-             key4_1.vni = geneve1->vni;
+             key4_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
 
              /* Make sure unicast GENEVE tunnel exist by packet SIP and VNI */
              if (PREDICT_FALSE (key4_1.as_u64 != last_key4.as_u64))
@@ -400,7 +403,7 @@ geneve_input (vlib_main_t * vm,
                tunnel_index1 = last_tunnel_index;
              t1 = pool_elt_at_index (vxm->tunnels, tunnel_index1);
 
-             /* Validate GENEVE tunnel encap-fib index agaist packet */
+             /* Validate GENEVE tunnel encap-fib index against packet */
              if (PREDICT_FALSE (validate_geneve_fib (b1, t1, is_ip4) == 0))
                {
                  error1 = GENEVE_ERROR_NO_SUCH_TUNNEL;
@@ -416,7 +419,7 @@ geneve_input (vlib_main_t * vm,
                  (ip4_address_is_multicast (&ip4_1->dst_address)))
                {
                  key4_1.remote = ip4_1->dst_address.as_u32;
-                 key4_1.vni = geneve1->vni;
+                 key4_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
                  /* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
                  p1 = hash_get (vxm->geneve4_tunnel_by_key, key4_1.as_u64);
                  if (PREDICT_TRUE (p1 != NULL))
@@ -434,7 +437,7 @@ geneve_input (vlib_main_t * vm,
            {
              key6_1.remote.as_u64[0] = ip6_1->src_address.as_u64[0];
              key6_1.remote.as_u64[1] = ip6_1->src_address.as_u64[1];
-             key6_1.vni = geneve1->vni;
+             key6_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
 
              /* Make sure GENEVE tunnel exist according to packet SIP and VNI */
              if (PREDICT_FALSE
@@ -449,14 +452,14 @@ geneve_input (vlib_main_t * vm,
                      goto trace1;
                    }
 
-                 clib_memcpy (&last_key6, &key6_1, sizeof (key6_1));
+                 clib_memcpy_fast (&last_key6, &key6_1, sizeof (key6_1));
                  tunnel_index1 = last_tunnel_index = p1[0];
                }
              else
                tunnel_index1 = last_tunnel_index;
              t1 = pool_elt_at_index (vxm->tunnels, tunnel_index1);
 
-             /* Validate GENEVE tunnel encap-fib index agaist packet */
+             /* Validate GENEVE tunnel encap-fib index against packet */
              if (PREDICT_FALSE (validate_geneve_fib (b1, t1, is_ip4) == 0))
                {
                  error1 = GENEVE_ERROR_NO_SUCH_TUNNEL;
@@ -473,7 +476,7 @@ geneve_input (vlib_main_t * vm,
                {
                  key6_1.remote.as_u64[0] = ip6_1->dst_address.as_u64[0];
                  key6_1.remote.as_u64[1] = ip6_1->dst_address.as_u64[1];
-                 key6_1.vni = geneve1->vni;
+                 key6_1.vni = vnet_get_geneve_vni_bigendian (geneve1);
                  p1 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_1);
                  if (PREDICT_TRUE (p1 != NULL))
                    {
@@ -529,7 +532,7 @@ geneve_input (vlib_main_t * vm,
              tr->next_index = next1;
              tr->error = error1;
              tr->tunnel_index = tunnel_index1;
-             tr->vni = vnet_get_geneve_vni (geneve1);
+             tr->vni_rsvd = vnet_get_geneve_vni (geneve1);
            }
 
          vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
@@ -564,6 +567,8 @@ geneve_input (vlib_main_t * vm,
 
          /* udp leaves current_data pointing at the geneve header */
          geneve0 = vlib_buffer_get_current (b0);
+         vnet_geneve_hdr_1word_ntoh (geneve0);
+
          if (is_ip4)
            {
              vlib_buffer_advance
@@ -598,13 +603,14 @@ geneve_input (vlib_main_t * vm,
          tunnel_index0 = ~0;
          error0 = 0;
 
-         if (PREDICT_FALSE (geneve0->ver != GENEVE_VERSION))
+         if (PREDICT_FALSE
+             (vnet_get_geneve_version (geneve0) != GENEVE_VERSION))
            {
              error0 = GENEVE_ERROR_BAD_FLAGS;
              next0 = GENEVE_INPUT_NEXT_DROP;
              goto trace00;
            }
-#if SUPPORT_OPTIONS_HEADER==0
+#if SUPPORT_OPTIONS_HEADER==1
          if (PREDICT_FALSE (vnet_get_geneve_critical_bit (geneve0) == 1))
            {
              error0 = GENEVE_ERROR_BAD_FLAGS;
@@ -615,7 +621,7 @@ geneve_input (vlib_main_t * vm,
          if (is_ip4)
            {
              key4_0.remote = ip4_0->src_address.as_u32;
-             key4_0.vni = geneve0->vni;
+             key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
 
              /* Make sure unicast GENEVE tunnel exist by packet SIP and VNI */
              if (PREDICT_FALSE (key4_0.as_u64 != last_key4.as_u64))
@@ -650,7 +656,7 @@ geneve_input (vlib_main_t * vm,
                  (ip4_address_is_multicast (&ip4_0->dst_address)))
                {
                  key4_0.remote = ip4_0->dst_address.as_u32;
-                 key4_0.vni = geneve0->vni;
+                 key4_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
                  /* Make sure mcast GENEVE tunnel exist by packet DIP and VNI */
                  p0 = hash_get (vxm->geneve4_tunnel_by_key, key4_0.as_u64);
                  if (PREDICT_TRUE (p0 != NULL))
@@ -668,7 +674,7 @@ geneve_input (vlib_main_t * vm,
            {
              key6_0.remote.as_u64[0] = ip6_0->src_address.as_u64[0];
              key6_0.remote.as_u64[1] = ip6_0->src_address.as_u64[1];
-             key6_0.vni = geneve0->vni;
+             key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
 
              /* Make sure GENEVE tunnel exist according to packet SIP and VNI */
              if (PREDICT_FALSE
@@ -681,7 +687,7 @@ geneve_input (vlib_main_t * vm,
                      next0 = GENEVE_INPUT_NEXT_DROP;
                      goto trace00;
                    }
-                 clib_memcpy (&last_key6, &key6_0, sizeof (key6_0));
+                 clib_memcpy_fast (&last_key6, &key6_0, sizeof (key6_0));
                  tunnel_index0 = last_tunnel_index = p0[0];
                }
              else
@@ -705,7 +711,7 @@ geneve_input (vlib_main_t * vm,
                {
                  key6_0.remote.as_u64[0] = ip6_0->dst_address.as_u64[0];
                  key6_0.remote.as_u64[1] = ip6_0->dst_address.as_u64[1];
-                 key6_0.vni = geneve0->vni;
+                 key6_0.vni = vnet_get_geneve_vni_bigendian (geneve0);
                  p0 = hash_get_mem (vxm->geneve6_tunnel_by_key, &key6_0);
                  if (PREDICT_TRUE (p0 != NULL))
                    {
@@ -761,7 +767,7 @@ geneve_input (vlib_main_t * vm,
              tr->next_index = next0;
              tr->error = error0;
              tr->tunnel_index = tunnel_index0;
-             tr->vni = vnet_get_geneve_vni (geneve0);
+             tr->vni_rsvd = vnet_get_geneve_vni (geneve0);
            }
          vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
                                           to_next, n_left_to_next,
@@ -788,16 +794,16 @@ geneve_input (vlib_main_t * vm,
   return from_frame->n_vectors;
 }
 
-static uword
-geneve4_input (vlib_main_t * vm,
-              vlib_node_runtime_t * node, vlib_frame_t * from_frame)
+VLIB_NODE_FN (geneve4_input_node) (vlib_main_t * vm,
+                                  vlib_node_runtime_t * node,
+                                  vlib_frame_t * from_frame)
 {
   return geneve_input (vm, node, from_frame, /* is_ip4 */ 1);
 }
 
-static uword
-geneve6_input (vlib_main_t * vm,
-              vlib_node_runtime_t * node, vlib_frame_t * from_frame)
+VLIB_NODE_FN (geneve6_input_node) (vlib_main_t * vm,
+                                  vlib_node_runtime_t * node,
+                                  vlib_frame_t * from_frame)
 {
   return geneve_input (vm, node, from_frame, /* is_ip4 */ 0);
 }
@@ -811,7 +817,6 @@ static char *geneve_error_strings[] = {
 
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (geneve4_input_node) = {
-  .function = geneve4_input,
   .name = "geneve4-input",
   /* Takes a vector of packets. */
   .vector_size = sizeof (u32),
@@ -829,10 +834,7 @@ VLIB_REGISTER_NODE (geneve4_input_node) = {
   // $$$$ .unformat_buffer = unformat_geneve_header,
 };
 
-VLIB_NODE_FUNCTION_MULTIARCH (geneve4_input_node, geneve4_input)
-
 VLIB_REGISTER_NODE (geneve6_input_node) = {
-  .function = geneve6_input,
   .name = "geneve6-input",
   /* Takes a vector of packets. */
   .vector_size = sizeof (u32),
@@ -848,8 +850,6 @@ VLIB_REGISTER_NODE (geneve6_input_node) = {
   .format_trace = format_geneve_rx_trace,
   // $$$$ .unformat_buffer = unformat_geneve_header,
 };
-
-VLIB_NODE_FUNCTION_MULTIARCH (geneve6_input_node, geneve6_input)
 /* *INDENT-ON* */
 
 typedef enum
@@ -934,10 +934,8 @@ ip_geneve_bypass_inline (vlib_main_t * vm,
            }
 
          /* Setup packet for next IP feature */
-         vnet_feature_next (vnet_buffer (b0)->sw_if_index[VLIB_RX], &next0,
-                            b0);
-         vnet_feature_next (vnet_buffer (b1)->sw_if_index[VLIB_RX], &next1,
-                            b1);
+         vnet_feature_next (&next0, b0);
+         vnet_feature_next (&next1, b1);
 
          if (is_ip4)
            {
@@ -1152,8 +1150,7 @@ ip_geneve_bypass_inline (vlib_main_t * vm,
            ip60 = vlib_buffer_get_current (b0);
 
          /* Setup packet for next IP feature */
-         vnet_feature_next (vnet_buffer (b0)->sw_if_index[VLIB_RX], &next0,
-                            b0);
+         vnet_feature_next (&next0, b0);
 
          if (is_ip4)
            /* Treat IP4 frag packets as "experimental" protocol for now
@@ -1258,9 +1255,9 @@ ip_geneve_bypass_inline (vlib_main_t * vm,
   return frame->n_vectors;
 }
 
-static uword
-ip4_geneve_bypass (vlib_main_t * vm,
-                  vlib_node_runtime_t * node, vlib_frame_t * frame)
+VLIB_NODE_FN (ip4_geneve_bypass_node) (vlib_main_t * vm,
+                                      vlib_node_runtime_t * node,
+                                      vlib_frame_t * frame)
 {
   return ip_geneve_bypass_inline (vm, node, frame, /* is_ip4 */ 1);
 }
@@ -1268,7 +1265,7 @@ ip4_geneve_bypass (vlib_main_t * vm,
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (ip4_geneve_bypass_node) =
 {
-  .function = ip4_geneve_bypass,.name = "ip4-geneve-bypass",.vector_size =
+  .name = "ip4-geneve-bypass",.vector_size =
     sizeof (u32),.n_next_nodes = IP_GENEVE_BYPASS_N_NEXT,.next_nodes =
   {
   [IP_GENEVE_BYPASS_NEXT_DROP] = "error-drop",
@@ -1276,7 +1273,7 @@ VLIB_REGISTER_NODE (ip4_geneve_bypass_node) =
 ,.format_buffer = format_ip4_header,.format_trace =
     format_ip4_forward_next_trace,};
 
-VLIB_NODE_FUNCTION_MULTIARCH (ip4_geneve_bypass_node, ip4_geneve_bypass)
+#ifndef CLIB_MARCH_VARIANT
 /* Dummy init function to get us linked in. */
      clib_error_t *ip4_geneve_bypass_init (vlib_main_t * vm)
 {
@@ -1285,10 +1282,11 @@ VLIB_NODE_FUNCTION_MULTIARCH (ip4_geneve_bypass_node, ip4_geneve_bypass)
 
 VLIB_INIT_FUNCTION (ip4_geneve_bypass_init);
 /* *INDENT-ON* */
+#endif /* CLIB_MARCH_VARIANT */
 
-static uword
-ip6_geneve_bypass (vlib_main_t * vm,
-                  vlib_node_runtime_t * node, vlib_frame_t * frame)
+VLIB_NODE_FN (ip6_geneve_bypass_node) (vlib_main_t * vm,
+                                      vlib_node_runtime_t * node,
+                                      vlib_frame_t * frame)
 {
   return ip_geneve_bypass_inline (vm, node, frame, /* is_ip4 */ 0);
 }
@@ -1296,7 +1294,7 @@ ip6_geneve_bypass (vlib_main_t * vm,
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (ip6_geneve_bypass_node) =
 {
-  .function = ip6_geneve_bypass,.name = "ip6-geneve-bypass",.vector_size =
+  .name = "ip6-geneve-bypass",.vector_size =
     sizeof (u32),.n_next_nodes = IP_GENEVE_BYPASS_N_NEXT,.next_nodes =
   {
   [IP_GENEVE_BYPASS_NEXT_DROP] = "error-drop",
@@ -1305,14 +1303,16 @@ VLIB_REGISTER_NODE (ip6_geneve_bypass_node) =
     format_ip6_forward_next_trace,};
 /* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (ip6_geneve_bypass_node, ip6_geneve_bypass)
+#ifndef CLIB_MARCH_VARIANT
 /* Dummy init function to get us linked in. */
-     clib_error_t *ip6_geneve_bypass_init (vlib_main_t * vm)
+clib_error_t *
+ip6_geneve_bypass_init (vlib_main_t * vm)
 {
   return 0;
 }
 
 VLIB_INIT_FUNCTION (ip6_geneve_bypass_init);
+#endif /* CLIB_MARCH_VARIANT */
 
 /*
  * fd.io coding-style-patch-verification: ON