From: Tonghao Zhang <[email protected]> The old version of openvswitch doesn't remove the padding from packet before L3+ conntrack processing and then packets are dropped in linux kernel stack. The patch [1] fixes the issue. We fix this issue on gateway which running ovs-dpdk as a quick workaround. Padding should be removed because tunnel size + inner size > 64B. More detailes, see [1]
[1] - https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=9382fe71c0058465e942a633869629929102843d Signed-off-by: Tonghao Zhang <[email protected]> --- v2: add OVS_UNLIKELY v1: this version was submitted a year ago http://patchwork.ozlabs.org/project/openvswitch/patch/[email protected]/ --- lib/netdev-native-tnl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index b89dfdd52a86..e23d71d4aec1 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -149,11 +149,15 @@ void * netdev_tnl_push_ip_header(struct dp_packet *packet, const void *header, int size, int *ip_tot_size) { + int padding = dp_packet_l2_pad_size(packet); struct eth_header *eth; struct ip_header *ip; struct ovs_16aligned_ip6_hdr *ip6; eth = dp_packet_push_uninit(packet, size); + if (OVS_UNLIKELY(padding)) { + dp_packet_set_size(packet, dp_packet_size(packet) - padding); + } *ip_tot_size = dp_packet_size(packet) - sizeof (struct eth_header); memcpy(eth, header, size); -- 2.27.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
