From 85c83dfe81b245e212018324e236164f618075f7 Mon Sep 17 00:00:00 2001 From: bobz965 Date: Sat, 21 Sep 2024 11:21:32 +0800 Subject: [PATCH] allow set vxlan nic tx off Signed-off-by: bobz965 --- cmd/daemon/cniserver.go | 6 ++++++ cmd/daemon/init.go | 14 ++++++++++++++ cmd/daemon/init_windows.go | 5 +++++ pkg/daemon/config.go | 3 +++ pkg/daemon/ovs_linux.go | 1 + 5 files changed, 29 insertions(+) diff --git a/cmd/daemon/cniserver.go b/cmd/daemon/cniserver.go index adb591ae0b1..db96c6784b2 100644 --- a/cmd/daemon/cniserver.go +++ b/cmd/daemon/cniserver.go @@ -72,6 +72,12 @@ func main() { util.LogFatalAndExit(err, "failed to do the OS initialization") } + if config.SetTxOff && config.NetworkType == util.NetworkTypeVxlan { + if err := setVxlanNicTxOff(); err != nil { + util.LogFatalAndExit(err, "failed to do the OS initialization for vxlan case") + } + } + ctrl.SetLogger(klog.NewKlogr()) ctx := signals.SetupSignalHandler() stopCh := ctx.Done() diff --git a/cmd/daemon/init.go b/cmd/daemon/init.go index 60cc9897b76..409a3c8453a 100644 --- a/cmd/daemon/init.go +++ b/cmd/daemon/init.go @@ -12,6 +12,7 @@ import ( ) const geneveLinkName = "genev_sys_6081" +const vxlanLinkName = "vxlan_sys_4789" func printCaps() { currentCaps := cap.GetProc() @@ -30,3 +31,16 @@ func initForOS() error { // disable checksum for genev_sys_6081 as default return daemon.TurnOffNicTxChecksum(geneveLinkName) } + +func setVxlanNicTxOff() error { + if _, err := netlink.LinkByName(vxlanLinkName); err != nil { + if _, ok := err.(netlink.LinkNotFoundError); ok { + return nil + } + klog.Errorf("failed to get link %s: %v", vxlanLinkName, err) + return err + } + + // disable checksum for vxlan_sys_4789 as default + return daemon.TurnOffNicTxChecksum(vxlanLinkName) +} diff --git a/cmd/daemon/init_windows.go b/cmd/daemon/init_windows.go index 4cbdde1e8b6..30b2de1ad88 100644 --- a/cmd/daemon/init_windows.go +++ b/cmd/daemon/init_windows.go @@ -50,3 +50,8 @@ func initForOS() error { return nil } + +func setVxlanNicTxOff() error { + // TODO: implement this function + return nil +} diff --git a/pkg/daemon/config.go b/pkg/daemon/config.go index 8923edd4815..e44928ed736 100644 --- a/pkg/daemon/config.go +++ b/pkg/daemon/config.go @@ -71,6 +71,7 @@ type Configuration struct { UDPConnCheckPort int32 EnableTProxy bool OVSVsctlConcurrency int32 + SetTxOff bool } // ParseFlags will parse cmd args then init kubeClient and configuration @@ -114,6 +115,7 @@ func ParseFlags() *Configuration { argEnableTProxy = pflag.Bool("enable-tproxy", false, "enable tproxy for vpc pod liveness or readiness probe") argOVSVsctlConcurrency = pflag.Int32("ovs-vsctl-concurrency", 100, "concurrency limit of ovs-vsctl") argEnableOVNIPSec = pflag.Bool("enable-ovn-ipsec", false, "Whether to enable ovn ipsec") + argSetTxOff = pflag.Bool("set-tx-off", false, "Whether to set vxlan_sys_4789 tx off") ) // mute info log for ipset lib @@ -173,6 +175,7 @@ func ParseFlags() *Configuration { UDPConnCheckPort: *argUDPConnectivityCheckPort, EnableTProxy: *argEnableTProxy, OVSVsctlConcurrency: *argOVSVsctlConcurrency, + SetTxOff: *argSetTxOff, } return config } diff --git a/pkg/daemon/ovs_linux.go b/pkg/daemon/ovs_linux.go index 1f64f58507f..9b177e25447 100644 --- a/pkg/daemon/ovs_linux.go +++ b/pkg/daemon/ovs_linux.go @@ -1839,6 +1839,7 @@ func TurnOffNicTxChecksum(nicName string) error { elapsed := float64((time.Since(start)) / time.Millisecond) klog.V(4).Infof("command %s %s in %vms", "ethtool", strings.Join(args, " "), elapsed) if err != nil { + klog.Error(err) return fmt.Errorf("failed to turn off nic tx checksum, output %s, err %s", string(output), err.Error()) } return nil