diff options
-rw-r--r-- | src/vnet/udp/udp_encap.c | 2 | ||||
-rw-r--r-- | src/vnet/udp/udp_inlines.h | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/vnet/udp/udp_encap.c b/src/vnet/udp/udp_encap.c index 28ea56050a6..cb93adb8d39 100644 --- a/src/vnet/udp/udp_encap.c +++ b/src/vnet/udp/udp_encap.c @@ -64,7 +64,7 @@ udp_encap_add_and_lock (fib_protocol_t proto, u8 pfx_len = 0; index_t uei; - pool_get_aligned (udp_encap_pool, ue, CLIB_CACHE_LINE_BYTES); + pool_get_aligned_zero (udp_encap_pool, ue, CLIB_CACHE_LINE_BYTES); uei = ue - udp_encap_pool; vlib_validate_combined_counter (&(udp_encap_counters), uei); diff --git a/src/vnet/udp/udp_inlines.h b/src/vnet/udp/udp_inlines.h index 067289c9979..e4eb0c88e83 100644 --- a/src/vnet/udp/udp_inlines.h +++ b/src/vnet/udp/udp_inlines.h @@ -20,6 +20,7 @@ #include <vnet/ip/ip4.h> #include <vnet/ip/ip6.h> #include <vnet/udp/udp_packet.h> +#include <vnet/interface_output.h> always_inline void * vlib_buffer_push_udp (vlib_buffer_t * b, u16 sp, u16 dp, u8 offload_csum) @@ -99,6 +100,8 @@ always_inline void ip_udp_encap_one (vlib_main_t * vm, vlib_buffer_t * b0, u8 * ec0, word ec_len, u8 is_ip4) { + vnet_calc_checksums_inline (vm, b0, is_ip4, !is_ip4); + vlib_buffer_advance (b0, -ec_len); if (is_ip4) @@ -132,6 +135,9 @@ ip_udp_encap_two (vlib_main_t * vm, vlib_buffer_t * b0, vlib_buffer_t * b1, ASSERT (_vec_len (ec0) == _vec_len (ec1)); + vnet_calc_checksums_inline (vm, b0, is_v4, !is_v4); + vnet_calc_checksums_inline (vm, b1, is_v4, !is_v4); + vlib_buffer_advance (b0, -ec_len); vlib_buffer_advance (b1, -ec_len); |