aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c')
-rw-r--r--src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c b/src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c
index 5a1b2d38..8069bf55 100644
--- a/src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c
+++ b/src/plugins/odp/ipsec/esp_decrypt_ipsec_api.c
@@ -179,6 +179,7 @@ odp_ipsec_esp_decrypt_node_fn (vlib_main_t * vm,
else
next0 = ESP_DECRYPT_NEXT_IP4_INPUT;
+ odp_ipsec_packet_result_t result;
odp_packet_t pkt = odp_packet_from_vlib_buffer (i_b0);
odp_packet_t out_pkt;
@@ -210,6 +211,16 @@ odp_ipsec_esp_decrypt_node_fn (vlib_main_t * vm,
if (!is_async)
{
+ odp_ipsec_result (&result, out_pkt);
+ if (PREDICT_FALSE (result.status.all != ODP_IPSEC_OK))
+ {
+ vlib_node_increment_counter (vm,
+ odp_ipsec_esp_decrypt_node.index,
+ ESP_DECRYPT_ERROR_DECRYPTION_FAILED,
+ from_frame->n_vectors);
+ goto trace;
+ }
+
o_b0 = vlib_buffer_from_odp_packet (out_pkt);
/* add the change of the ODP data offset
@@ -222,14 +233,6 @@ odp_ipsec_esp_decrypt_node_fn (vlib_main_t * vm,
odp_packet_len (out_pkt) - sizeof (ethernet_header_t);
vnet_buffer (o_b0)->sw_if_index[VLIB_TX] = (u32) ~ 0;
-
- vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,
- n_left_to_next, bi0, next0);
- }
- else
- {
- to_next -= 1;
- n_left_to_next += 1;
}
trace:
@@ -240,6 +243,17 @@ odp_ipsec_esp_decrypt_node_fn (vlib_main_t * vm,
tr->crypto_alg = sa0->crypto_alg;
tr->integ_alg = sa0->integ_alg;
}
+
+ if (!is_async)
+ {
+ vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next,
+ n_left_to_next, bi0, next0);
+ }
+ else
+ {
+ to_next -= 1;
+ n_left_to_next += 1;
+ }
}
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}