sr: update NH value for Ethernet payloads
[vpp.git] / src / plugins / srv6-ad / node.c
index 776d283..9d4ea44 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * node.c
+ *
  * Copyright (c) 2015 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -12,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <vlib/vlib.h>
 #include <vnet/vnet.h>
 #include <vppinfra/error.h>
@@ -153,7 +156,7 @@ end_ad_processing (vlib_buffer_t * b0,
   /* Make sure next header is valid */
   if (PREDICT_FALSE (next_hdr != IP_PROTOCOL_IPV6 &&
                     next_hdr != IP_PROTOCOL_IP_IN_IP &&
-                    next_hdr != IP_PROTOCOL_IP6_NONXT))
+                    next_hdr != IP_PROTOCOL_IP6_ETHERNET))
     {
       return;
     }
@@ -166,13 +169,13 @@ end_ad_processing (vlib_buffer_t * b0,
     {
       vec_validate (ls0_mem->rewrite, total_size - 1);
     }
-  clib_memcpy (ls0_mem->rewrite, ip0, total_size);
+  clib_memcpy_fast (ls0_mem->rewrite, ip0, total_size);
   ls0_mem->rw_len = total_size;
 
   /* Remove IP header and extensions */
   vlib_buffer_advance (b0, total_size);
 
-  if (next_hdr == IP_PROTOCOL_IP6_NONXT)
+  if (next_hdr == IP_PROTOCOL_IP6_ETHERNET)
     {
       /* Set output interface */
       vnet_buffer (b0)->sw_if_index[VLIB_TX] = ls0_mem->sw_if_index_out;
@@ -349,8 +352,8 @@ srv6_ad2_rewrite_fn (vlib_main_t * vm,
              ASSERT (VLIB_BUFFER_PRE_DATA_SIZE >=
                      (ls0_mem->rw_len + b0->current_data));
 
-             clib_memcpy (((u8 *) en0) - ls0_mem->rw_len,
-                          ls0_mem->rewrite, ls0_mem->rw_len);
+             clib_memcpy_fast (((u8 *) en0) - ls0_mem->rw_len,
+                               ls0_mem->rewrite, ls0_mem->rw_len);
              vlib_buffer_advance (b0, -(word) ls0_mem->rw_len);
 
              ip0 = vlib_buffer_get_current (b0);
@@ -373,10 +376,10 @@ srv6_ad2_rewrite_fn (vlib_main_t * vm,
                }
              else
                {
-                 clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
-                              sizeof tr->src.as_u8);
-                 clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
-                              sizeof tr->dst.as_u8);
+                 clib_memcpy_fast (tr->src.as_u8, ip0->src_address.as_u8,
+                                   sizeof tr->src.as_u8);
+                 clib_memcpy_fast (tr->dst.as_u8, ip0->dst_address.as_u8,
+                                   sizeof tr->dst.as_u8);
                }
            }
 
@@ -484,8 +487,8 @@ srv6_ad4_rewrite_fn (vlib_main_t * vm,
              ASSERT (VLIB_BUFFER_PRE_DATA_SIZE >=
                      (ls0_mem->rw_len + b0->current_data));
 
-             clib_memcpy (((u8 *) ip0_encap) - ls0_mem->rw_len,
-                          ls0_mem->rewrite, ls0_mem->rw_len);
+             clib_memcpy_fast (((u8 *) ip0_encap) - ls0_mem->rw_len,
+                               ls0_mem->rewrite, ls0_mem->rw_len);
              vlib_buffer_advance (b0, -(word) ls0_mem->rw_len);
 
              ip0 = vlib_buffer_get_current (b0);
@@ -516,10 +519,10 @@ srv6_ad4_rewrite_fn (vlib_main_t * vm,
                }
              else
                {
-                 clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
-                              sizeof tr->src.as_u8);
-                 clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
-                              sizeof tr->dst.as_u8);
+                 clib_memcpy_fast (tr->src.as_u8, ip0->src_address.as_u8,
+                                   sizeof tr->src.as_u8);
+                 clib_memcpy_fast (tr->dst.as_u8, ip0->dst_address.as_u8,
+                                   sizeof tr->dst.as_u8);
                }
            }
 
@@ -626,8 +629,8 @@ srv6_ad6_rewrite_fn (vlib_main_t * vm,
              ASSERT (VLIB_BUFFER_PRE_DATA_SIZE >=
                      (ls0_mem->rw_len + b0->current_data));
 
-             clib_memcpy (((u8 *) ip0_encap) - ls0_mem->rw_len,
-                          ls0_mem->rewrite, ls0_mem->rw_len);
+             clib_memcpy_fast (((u8 *) ip0_encap) - ls0_mem->rw_len,
+                               ls0_mem->rewrite, ls0_mem->rw_len);
              vlib_buffer_advance (b0, -(word) ls0_mem->rw_len);
 
              ip0 = vlib_buffer_get_current (b0);
@@ -654,10 +657,10 @@ srv6_ad6_rewrite_fn (vlib_main_t * vm,
                }
              else
                {
-                 clib_memcpy (tr->src.as_u8, ip0->src_address.as_u8,
-                              sizeof tr->src.as_u8);
-                 clib_memcpy (tr->dst.as_u8, ip0->dst_address.as_u8,
-                              sizeof tr->dst.as_u8);
+                 clib_memcpy_fast (tr->src.as_u8, ip0->src_address.as_u8,
+                                   sizeof tr->src.as_u8);
+                 clib_memcpy_fast (tr->dst.as_u8, ip0->dst_address.as_u8,
+                                   sizeof tr->dst.as_u8);
                }
            }
 
@@ -705,9 +708,9 @@ VLIB_REGISTER_NODE (srv6_ad6_rewrite_node) = {
 /* *INDENT-ON* */
 
 /*
-* fd.io coding-style-patch-verification: ON
-*
-* Local Variables:
-* eval: (c-set-style "gnu")
-* End:
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
 */