X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fipsec%2Fah_decrypt.c;h=2488fa918f676798ae537f505dad1f39bdb9a529;hb=91f17dc7c4e79343b8fba924e7cea6380a0e6653;hp=7d2bf814fcc2546056286c1af2e83749545ef606;hpb=8d7c502002636da1cb7c71a87757f328e7c2c4fd;p=vpp.git diff --git a/src/vnet/ipsec/ah_decrypt.c b/src/vnet/ipsec/ah_decrypt.c index 7d2bf814fcc..2488fa918f6 100644 --- a/src/vnet/ipsec/ah_decrypt.c +++ b/src/vnet/ipsec/ah_decrypt.c @@ -22,6 +22,7 @@ #include #include #include +#include #define foreach_ah_decrypt_next \ _ (DROP, "error-drop") \ @@ -81,14 +82,14 @@ ah_decrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame, int is_ip6) { - u32 n_left_from, *from, next_index, *to_next; + u32 n_left_from, *from, next_index, *to_next, thread_index; ipsec_main_t *im = &ipsec_main; - ipsec_proto_main_t *em = &ipsec_proto_main; from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; - int icv_size = 0; + int icv_size; next_index = node->cached_next_index; + thread_index = vm->thread_index; while (n_left_from > 0) { @@ -131,6 +132,9 @@ ah_decrypt_inline (vlib_main_t * vm, sa_index0 = vnet_buffer (i_b0)->ipsec.sad_index; sa0 = pool_elt_at_index (im->sad, sa_index0); + vlib_prefetch_combined_counter (&ipsec_sa_counters, + thread_index, sa_index0); + if (is_ip6) { ip6_ext_header_t *prev = NULL; @@ -164,16 +168,15 @@ ah_decrypt_inline (vlib_main_t * vm, } } + vlib_increment_combined_counter + (&ipsec_sa_counters, thread_index, sa_index0, + 1, i_b0->current_length); - sa0->total_data_size += i_b0->current_length; - icv_size = - em->ipsec_proto_main_integ_algs[sa0->integ_alg].trunc_size; + icv_size = im->integ_algs[sa0->integ_alg].trunc_size; if (PREDICT_TRUE (sa0->integ_alg != IPSEC_INTEG_ALG_NONE)) { u8 sig[64]; - u8 digest[64]; - clib_memset (sig, 0, sizeof (sig)); - clib_memset (digest, 0, sizeof (digest)); + u8 digest[icv_size]; u8 *icv = ah0->auth_data; memcpy (digest, icv, icv_size); clib_memset (icv, 0, icv_size); @@ -200,7 +203,7 @@ ah_decrypt_inline (vlib_main_t * vm, icv_padding_len = ah_calc_icv_padding_len (icv_size, 0 /* is_ipv6 */ ); } - hmac_calc (sa0->integ_alg, sa0->integ_key.data, + hmac_calc (vm, sa0->integ_alg, sa0->integ_key.data, sa0->integ_key.len, (u8 *) ih4, i_b0->current_length, sig, sa0->use_esn, sa0->seq_hi);