X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2Fipsec%2Fesp_encrypt.c;h=d29ca55ea2e448be7d218dc6d1d3b4b1fc0b2ecf;hb=eba31ecebed1a7d168da17194cab7a8955761f2b;hp=ded569f9d3d5daf87758a0a6a92c4854d5f47eab;hpb=b8f354470628e464452c062ca0802f59f8e572f3;p=vpp.git diff --git a/src/plugins/dpdk/ipsec/esp_encrypt.c b/src/plugins/dpdk/ipsec/esp_encrypt.c index ded569f9d3d..d29ca55ea2e 100644 --- a/src/plugins/dpdk/ipsec/esp_encrypt.c +++ b/src/plugins/dpdk/ipsec/esp_encrypt.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -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 { @@ -111,7 +112,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame, int is_ip6) { - u32 n_left_from, *from, *to_next, next_index; + u32 n_left_from, *from, *to_next, next_index, thread_index; ipsec_main_t *im = &ipsec_main; u32 thread_idx = vlib_get_thread_index (); dpdk_crypto_main_t *dcm = &dpdk_crypto_main; @@ -128,6 +129,7 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm, from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; + thread_index = vm->thread_index; ret = crypto_alloc_ops (numa, ops, n_left_from); if (ret) @@ -191,6 +193,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]); @@ -277,7 +281,9 @@ dpdk_esp_encrypt_inline (vlib_main_t * vm, orig_sz = b0->current_length; /* TODO multi-seg support - total_length_not_including_first_buffer */ - sa0->total_data_size += b0->current_length; + vlib_increment_combined_counter + (&ipsec_sa_counters, thread_index, sa_index0, + 1, b0->current_length); res->ops[res->n_ops] = op; res->bi[res->n_ops] = bi0; @@ -444,7 +450,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 +476,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 +542,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 +553,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 +562,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); } @@ -576,7 +580,6 @@ VLIB_NODE_FN (dpdk_esp4_encrypt_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (dpdk_esp4_encrypt_node) = { - .function = dpdk_esp4_encrypt_node_fn, .name = "dpdk-esp4-encrypt", .flags = VLIB_NODE_FLAG_IS_OUTPUT, .vector_size = sizeof (u32), @@ -600,7 +603,6 @@ VLIB_NODE_FN (dpdk_esp6_encrypt_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (dpdk_esp6_encrypt_node) = { - .function = dpdk_esp6_encrypt_node_fn, .name = "dpdk-esp6-encrypt", .flags = VLIB_NODE_FLAG_IS_OUTPUT, .vector_size = sizeof (u32),