dpdk-ipsec: store buffer index into crypto-op private
[vpp.git] / src / plugins / dpdk / ipsec / esp_encrypt.c
index 6be8e97..eea99eb 100644 (file)
@@ -22,6 +22,7 @@
 #include <vnet/ipsec/ipsec.h>
 #include <vnet/ipsec/esp.h>
 #include <vnet/udp/udp.h>
+#include <dpdk/buffer.h>
 #include <dpdk/ipsec/ipsec.h>
 #include <dpdk/device/dpdk.h>
 #include <dpdk/device/dpdk_priv.h>
@@ -63,8 +64,8 @@ static char *esp_encrypt_error_strings[] = {
 #undef _
 };
 
-vlib_node_registration_t dpdk_esp4_encrypt_node;
-vlib_node_registration_t dpdk_esp6_encrypt_node;
+extern vlib_node_registration_t dpdk_esp4_encrypt_node;
+extern vlib_node_registration_t dpdk_esp6_encrypt_node;
 
 typedef struct
 {
@@ -191,6 +192,8 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
          ASSERT (op->status == RTE_CRYPTO_OP_STATUS_NOT_PROCESSED);
 
          dpdk_op_priv_t *priv = crypto_op_get_priv (op);
+         /* store bi in op private */
+         priv->bi = bi0;
 
          u16 op_len =
            sizeof (op[0]) + sizeof (op[0].sym[0]) + sizeof (priv[0]);
@@ -444,7 +447,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
 
          /* The extra pad bytes would be overwritten by the digest */
          if (pad_bytes)
-           clib_memcpy (padding, pad_data, 16);
+           clib_memcpy_fast (padding, pad_data, 16);
 
          f0 = (esp_footer_t *) (padding + pad_bytes);
          f0->pad_length = pad_bytes;
@@ -470,8 +473,6 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
                }
            }
 
-         vnet_buffer (b0)->sw_if_index[VLIB_RX] =
-           vnet_buffer (b0)->sw_if_index[VLIB_RX];
          b0->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID;
 
          /* mbuf packet starts at ESP header */
@@ -538,7 +539,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
              u8 *p = vlib_buffer_get_current (b0);
              if (!sa0->is_tunnel)
                p += vnet_buffer (b0)->ip.save_rewrite_length;
-             clib_memcpy (tr->packet_data, p, sizeof (tr->packet_data));
+             clib_memcpy_fast (tr->packet_data, p, sizeof (tr->packet_data));
            }
        }
       vlib_put_next_frame (vm, node, next_index, n_left_to_next);
@@ -549,7 +550,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
                                   ESP_ENCRYPT_ERROR_RX_PKTS,
                                   from_frame->n_vectors);
 
-      crypto_enqueue_ops (vm, cwm, 1, dpdk_esp6_encrypt_node.index,
+      crypto_enqueue_ops (vm, cwm, dpdk_esp6_encrypt_node.index,
                          ESP_ENCRYPT_ERROR_ENQ_FAIL, numa);
     }
   else
@@ -558,7 +559,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
                                   ESP_ENCRYPT_ERROR_RX_PKTS,
                                   from_frame->n_vectors);
 
-      crypto_enqueue_ops (vm, cwm, 1, dpdk_esp4_encrypt_node.index,
+      crypto_enqueue_ops (vm, cwm, dpdk_esp4_encrypt_node.index,
                          ESP_ENCRYPT_ERROR_ENQ_FAIL, numa);
     }
 
@@ -567,18 +568,16 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm,
   return from_frame->n_vectors;
 }
 
-static uword
-dpdk_esp4_encrypt_node_fn (vlib_main_t * vm,
-                          vlib_node_runtime_t * node,
-                          vlib_frame_t * from_frame)
+VLIB_NODE_FN (dpdk_esp4_encrypt_node) (vlib_main_t * vm,
+                                      vlib_node_runtime_t * node,
+                                      vlib_frame_t * from_frame)
 {
   return dpdk_esp_encrypt_inline (vm, node, from_frame, 0 /*is_ip6 */ );
 }
 
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (dpdk_esp4_encrypt_node) = {
-  .function = dpdk_esp4_encrypt_node_fn,
-  .name = "dpdk4-esp-encrypt",
+  .name = "dpdk-esp4-encrypt",
   .flags = VLIB_NODE_FLAG_IS_OUTPUT,
   .vector_size = sizeof (u32),
   .format_trace = format_esp_encrypt_trace,
@@ -592,21 +591,16 @@ VLIB_REGISTER_NODE (dpdk_esp4_encrypt_node) = {
 };
 /* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (dpdk_esp4_encrypt_node,
-                             dpdk_esp4_encrypt_node_fn);
-
-static uword
-dpdk_esp6_encrypt_node_fn (vlib_main_t * vm,
-                          vlib_node_runtime_t * node,
-                          vlib_frame_t * from_frame)
+VLIB_NODE_FN (dpdk_esp6_encrypt_node) (vlib_main_t * vm,
+                                      vlib_node_runtime_t * node,
+                                      vlib_frame_t * from_frame)
 {
   return dpdk_esp_encrypt_inline (vm, node, from_frame, 1 /*is_ip6 */ );
 }
 
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (dpdk_esp6_encrypt_node) = {
-  .function = dpdk_esp6_encrypt_node_fn,
-  .name = "dpdk6-esp-encrypt",
+  .name = "dpdk-esp6-encrypt",
   .flags = VLIB_NODE_FLAG_IS_OUTPUT,
   .vector_size = sizeof (u32),
   .format_trace = format_esp_encrypt_trace,
@@ -620,8 +614,6 @@ VLIB_REGISTER_NODE (dpdk_esp6_encrypt_node) = {
 };
 /* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (dpdk_esp6_encrypt_node,
-                             dpdk_esp6_encrypt_node_fn);
 /*
  * fd.io coding-style-patch-verification: ON
  *