Hi,
I’ve faced an issue where GENEVE and VXLAN offload on RX path doesn’t work with
openvswitch OOT kernel module.
The problem reproduced at least on CentOS 7.5, 7.8 (but I think more recent
versions are affected too).
Initially the problem was observed with OVS 2.13, but it reproduces with 2.17
and master branches as well.
The problem is shown with tcpdump while iperf3 on top of VXLAN of GENEVE is run
(RX traffic; length 1448):
19:19:00.223575 IP 10.1.0.105.60228 > 10.1.0.106.6081: Geneve, Flags
[none], vni 0x0: IP 1.1.1.5.targus-getdata1 > 1.1.1.6.44652: Flags [.], seq
40722105:40723553, ack 38, win 64, options [nop,nop,TS val 2491722176 ecr
151867193], length 1448
The correct RX handling for GENEVE and VXLAN was broken in v2.10.0 release with
[1] commit (if I understand correctly).
With OVS kmod v2.9.x GRO for VXLAN and GENEVE packets works as expected.
In CentOS 7.x in kernel-devel packages there is no include/net/erspan.h header
file, therefore USE_UPSTREAM_TUNNEL macro is unset.
So I’ve tried to apply next patch:
diff --git a/acinclude.m4 b/acinclude.m4
index 914e27b93..cde232966 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -671,9 +671,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
[OVS_GREP_IFELSE([$KSRC/include/net/ip_tunnels.h],
[iptunnel_pull_offloads],
[OVS_GREP_IFELSE([$KSRC/include/net/dst_cache.h],
[dst_cache],
- [OVS_GREP_IFELSE([$KSRC/include/net/erspan.h],
[erspan_md2],
-
[OVS_DEFINE([USE_UPSTREAM_TUNNEL])])])])])
+
[OVS_DEFINE([USE_UPSTREAM_TUNNEL])])])])
+ OVS_GREP_IFELSE([$KSRC/include/net/erspan.h], [erspan_md2],
+ [OVS_DEFINE([USE_BUILTIN_ERSPAN_MD2])])
OVS_GREP_IFELSE([$KSRC/include/net/dst_cache.h], [dst_cache],
[OVS_DEFINE([USE_BUILTIN_DST_CACHE])])
OVS_GREP_IFELSE([$KSRC/include/net/mpls.h], [mpls_hdr],
diff --git a/datapath/linux/compat/include/net/erspan.h
b/datapath/linux/compat/include/net/erspan.h
index 4a6a8f240..a36ce727b 100644
--- a/datapath/linux/compat/include/net/erspan.h
+++ b/datapath/linux/compat/include/net/erspan.h
@@ -1,4 +1,4 @@
-#ifndef USE_UPSTREAM_TUNNEL
+#ifndef USE_BUILTIN_ERSPAN_MD2
#ifndef __LINUX_ERSPAN_H
#define __LINUX_ERSPAN_H
After the next patch the problem was resolved (length 65k):
19:05:13.500646 IP 10.1.0.105.51432 > 10.1.0.106.6081: Geneve, Flags
[none], vni 0x0: IP 1.1.1.5.targus-getdata1 > 1.1.1.6.54874: Flags [.], seq
185753153:185818313, ack 38, win 64, options [nop,nop,TS val 2490895458 ecr
151040475], length 65160
The problem is that with this change erspan functionality in OVS is broken and
I couldn’t understand where to see the root cause for this:
# ovs-vsctl add-port test at_erspan0 -- set int at_erspan0 type=erspan
options:key=1 options:remote_ip=10.1.0.101 options:erspan_ver=1
options:erspan_idx=1
ovs-vsctl: Error detected while setting up 'at_erspan0': could not add network
device at_erspan0 to ofproto (Address family not supported by protocol). See
ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".
In ovs logs:
2022-04-07T16:17:33.175Z|00051|dpif|WARN|system@ovs-system: failed to add
at_erspan0 as port: Address family not supported by protocol
2022-04-07T16:17:33.175Z|00052|bridge|WARN|could not add network device
at_erspan0 to ofproto (Address family not supported by protocol)
Can anybody help understand the best way to fix the initial (GRO for udp_tnl)
issue and not to break things around this? :)
Thanks.
1:
https://github.com/openvswitch/ovs/commit/e1ededf45f072c41295f1b441a6f106159ff191b
Regards,
Vladislav Odintsov
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev