From 541d5f4508d0914229f6f901276e2404396c318d Mon Sep 17 00:00:00 2001 From: zhangzujian Date: Wed, 31 Jul 2024 01:44:49 +0000 Subject: [PATCH] cni-server: disable udp-fragmentation-offload (#4342) Signed-off-by: zhangzujian --- pkg/daemon/ovs_linux.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pkg/daemon/ovs_linux.go b/pkg/daemon/ovs_linux.go index 67d0663896d..7f417a0cbb6 100644 --- a/pkg/daemon/ovs_linux.go +++ b/pkg/daemon/ovs_linux.go @@ -244,11 +244,11 @@ func configureContainerNic(nicName, ifName, ipAddr, gateway string, isDefaultRou if err = configureAdditionalNic(ifName, ipAddr); err != nil { return err } - if err = configureNic(nicName, ipAddr, macAddr, mtu, detectIPConflict); err != nil { + if err = configureNic(nicName, ipAddr, macAddr, mtu, detectIPConflict, false); err != nil { return err } } else { - if err = configureNic(ifName, ipAddr, macAddr, mtu, detectIPConflict); err != nil { + if err = configureNic(ifName, ipAddr, macAddr, mtu, detectIPConflict, true); err != nil { return err } } @@ -411,7 +411,7 @@ func configureNodeNic(portName, ip, gw, joinCIDR string, macAddr net.HardwareAdd } } - if err = configureNic(util.NodeNic, ip, macAddr, mtu, false); err != nil { + if err = configureNic(util.NodeNic, ip, macAddr, mtu, false, false); err != nil { return err } @@ -592,7 +592,7 @@ func configureNodeGwNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu i klog.V(3).Infof("node external nic %q already in ns %s", util.NodeGwNic, util.NodeGwNsPath) } return ns.WithNetNSPath(gwNS.Path(), func(_ ns.NetNS) error { - if err = configureNic(util.NodeGwNic, ip, macAddr, mtu, true); err != nil { + if err = configureNic(util.NodeGwNic, ip, macAddr, mtu, true, false); err != nil { klog.Errorf("failed to congigure node gw nic %s, %v", util.NodeGwNic, err) return err } @@ -829,7 +829,7 @@ func configureMirrorLink(portName string, _ int) error { return nil } -func configureNic(link, ip string, macAddr net.HardwareAddr, mtu int, detectIPConflict bool) error { +func configureNic(link, ip string, macAddr net.HardwareAddr, mtu int, detectIPConflict, setUfoOff bool) error { nodeLink, err := netlink.LinkByName(link) if err != nil { return fmt.Errorf("can not find nic %s: %v", link, err) @@ -916,6 +916,14 @@ func configureNic(link, ip string, macAddr net.HardwareAddr, mtu int, detectIPCo } } + if setUfoOff { + cmd := fmt.Sprintf("if ethtool -k %s | grep -q ^udp-fragmentation-offload; then ethtool -K %s ufo off; fi", link, link) + if output, err := exec.Command("sh", "-xc", cmd).CombinedOutput(); err != nil { + klog.Error(err) + return fmt.Errorf("failed to disable udp-fragmentation-offload feature of device %s to off: %w, %s", link, err, output) + } + } + return nil }