X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2Fipsec%2Fesp_decrypt.c;h=ae35ab5aaae3fabbc45e3efb6db5fd18d828c66e;hb=refs%2Fchanges%2F51%2F26351%2F3;hp=a82f63e6e5b0355a3d7d66d460d9cedc01bf0e02;hpb=6afaae156a9ab9de79474367d8873407f3b12a71;p=vpp.git diff --git a/src/plugins/dpdk/ipsec/esp_decrypt.c b/src/plugins/dpdk/ipsec/esp_decrypt.c index a82f63e6e5b..ae35ab5aaae 100644 --- a/src/plugins/dpdk/ipsec/esp_decrypt.c +++ b/src/plugins/dpdk/ipsec/esp_decrypt.c @@ -256,7 +256,10 @@ dpdk_esp_decrypt_inline (vlib_main_t * vm, if (is_ip6) priv->next = DPDK_CRYPTO_INPUT_NEXT_DECRYPT6_POST; else - priv->next = DPDK_CRYPTO_INPUT_NEXT_DECRYPT4_POST; + { + priv->next = DPDK_CRYPTO_INPUT_NEXT_DECRYPT4_POST; + b0->flags |= VNET_BUFFER_F_IS_IP4; + } /* FIXME multi-seg */ vlib_increment_combined_counter @@ -330,7 +333,10 @@ dpdk_esp_decrypt_inline (vlib_main_t * vm, /* _aad[3] should always be 0 */ if (PREDICT_FALSE (ipsec_sa_is_set_USE_ESN (sa0))) - _aad[2] = clib_host_to_net_u32 (sa0->seq_hi); + { + _aad[2] = _aad[1]; + _aad[1] = clib_host_to_net_u32 (sa0->seq_hi); + } else _aad[2] = 0; } @@ -587,8 +593,7 @@ dpdk_esp_decrypt_post_inline (vlib_main_t * vm, { if (f0->next_header == IP_PROTOCOL_IP_IN_IP) next0 = ESP_DECRYPT_NEXT_IP4_INPUT; - else if (ipsec_sa_is_set_IS_TUNNEL_V6 (sa0) - && f0->next_header == IP_PROTOCOL_IPV6) + else if (f0->next_header == IP_PROTOCOL_IPV6) next0 = ESP_DECRYPT_NEXT_IP6_INPUT; else { @@ -611,16 +616,14 @@ dpdk_esp_decrypt_post_inline (vlib_main_t * vm, if ((ih4->ip_version_and_header_length & 0xF0) == 0x40) { u16 ih4_len = ip4_header_bytes (ih4); - vlib_buffer_advance (b0, -ih4_len - udp_encap_adv); + vlib_buffer_advance (b0, -ih4_len); next0 = ESP_DECRYPT_NEXT_IP4_INPUT; - if (!ipsec_sa_is_set_UDP_ENCAP (sa0)) - { - oh4 = vlib_buffer_get_current (b0); - memmove (oh4, ih4, ih4_len); - oh4->protocol = f0->next_header; - oh4->length = clib_host_to_net_u16 (b0->current_length); - oh4->checksum = ip4_header_checksum (oh4); - } + + oh4 = vlib_buffer_get_current (b0); + memmove (oh4, ih4, ih4_len); + oh4->protocol = f0->next_header; + oh4->length = clib_host_to_net_u16 (b0->current_length); + oh4->checksum = ip4_header_checksum (oh4); } else if ((ih4->ip_version_and_header_length & 0xF0) == 0x60) {