X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fipsec%2Fah_decrypt.c;h=629e7f031c4f4fd514a78160b6a25b9a69df94fd;hb=eba31ecebed1a7d168da17194cab7a8955761f2b;hp=a2fc07faebf7ab53912d188681364937f53ec9d1;hpb=de847277c9879c014fb4557e884360a4e6492783;p=vpp.git diff --git a/src/vnet/ipsec/ah_decrypt.c b/src/vnet/ipsec/ah_decrypt.c index a2fc07faebf..629e7f031c4 100644 --- a/src/vnet/ipsec/ah_decrypt.c +++ b/src/vnet/ipsec/ah_decrypt.c @@ -81,7 +81,7 @@ 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); @@ -89,6 +89,7 @@ ah_decrypt_inline (vlib_main_t * vm, int icv_size = 0; 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; @@ -158,20 +162,16 @@ ah_decrypt_inline (vlib_main_t * vm, if (PREDICT_FALSE (rv)) { - if (is_ip6) - vlib_node_increment_counter (vm, - ah6_decrypt_node.index, - AH_DECRYPT_ERROR_REPLAY, 1); - else - vlib_node_increment_counter (vm, - ah4_decrypt_node.index, - AH_DECRYPT_ERROR_REPLAY, 1); + vlib_node_increment_counter (vm, node->node_index, + AH_DECRYPT_ERROR_REPLAY, 1); goto trace; } } + 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; if (PREDICT_TRUE (sa0->integ_alg != IPSEC_INTEG_ALG_NONE)) @@ -206,22 +206,15 @@ 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, sa0->integ_key_len, - (u8 *) ih4, i_b0->current_length, sig, sa0->use_esn, - sa0->seq_hi); + hmac_calc (sa0->integ_alg, sa0->integ_key.data, + sa0->integ_key.len, (u8 *) ih4, i_b0->current_length, + sig, sa0->use_esn, sa0->seq_hi); if (PREDICT_FALSE (memcmp (digest, sig, icv_size))) { - if (is_ip6) - vlib_node_increment_counter (vm, - ah6_decrypt_node.index, - AH_DECRYPT_ERROR_INTEG_ERROR, - 1); - else - vlib_node_increment_counter (vm, - ah4_decrypt_node.index, - AH_DECRYPT_ERROR_INTEG_ERROR, - 1); + vlib_node_increment_counter (vm, node->node_index, + AH_DECRYPT_ERROR_INTEG_ERROR, + 1); goto trace; } @@ -248,16 +241,9 @@ ah_decrypt_inline (vlib_main_t * vm, next0 = AH_DECRYPT_NEXT_IP6_INPUT; else { - if (is_ip6) - vlib_node_increment_counter (vm, - ah6_decrypt_node.index, - AH_DECRYPT_ERROR_DECRYPTION_FAILED, - 1); - else - vlib_node_increment_counter (vm, - ah4_decrypt_node.index, - AH_DECRYPT_ERROR_DECRYPTION_FAILED, - 1); + vlib_node_increment_counter (vm, node->node_index, + AH_DECRYPT_ERROR_DECRYPTION_FAILED, + 1); goto trace; } } @@ -320,14 +306,8 @@ ah_decrypt_inline (vlib_main_t * vm, } vlib_put_next_frame (vm, node, next_index, n_left_to_next); } - if (is_ip6) - vlib_node_increment_counter (vm, ah6_decrypt_node.index, - AH_DECRYPT_ERROR_RX_PKTS, - from_frame->n_vectors); - else - vlib_node_increment_counter (vm, ah4_decrypt_node.index, - AH_DECRYPT_ERROR_RX_PKTS, - from_frame->n_vectors); + vlib_node_increment_counter (vm, node->node_index, AH_DECRYPT_ERROR_RX_PKTS, + from_frame->n_vectors); return from_frame->n_vectors; }