// ShouldUseIptablesProxier returns true if we should use the iptables Proxier // instead of the "classic" userspace Proxier. This is determined by checking // the iptables version and for the existence of kernel features. It may return // an error if it fails to get the iptables version without error, in which // case it will also return false. func ShouldUseIptablesProxier() (bool, error) { exec := utilexec.New() minVersion, err := semver.NewVersion(iptablesMinVersion) if err != nil { return false, err } // returns "X.X.X", err versionString, err := utiliptables.GetIptablesVersionString(exec) if err != nil { return false, err } version, err := semver.NewVersion(versionString) if err != nil { return false, err } if version.LessThan(*minVersion) { return false, nil } // Check for the required sysctls. We don't care about the value, just // that it exists. If this Proxier is chosen, we'll iniialize it as we // need. _, err = getSysctl(sysctlRouteLocalnet) if err != nil { return false, err } return true, nil }
// ShouldUseIptablesProxier returns true if we should use the iptables Proxier instead of // the userspace Proxier. // This is determined by the iptables version. It may return an erorr if it fails to get the // itpables version without error, in which case it will also return false. func ShouldUseIptablesProxier() (bool, error) { exec := utilexec.New() minVersion, err := semver.NewVersion(IPTABLES_MIN_VERSION) if err != nil { return false, err } // returns "vX.X.X", err versionString, err := utiliptables.GetIptablesVersionString(exec) if err != nil { return false, err } // make a semver of the part after the v in "vX.X.X" version, err := semver.NewVersion(versionString[1:]) if err != nil { return false, err } return !version.LessThan(*minVersion), nil }