From: Simon Rowe Date: Wed, 26 Jan 2011 17:39:04 +0000 (+0000) Subject: CA-46342: add ethtool GRO and LRO support to PIF other-config X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=8881e1ab9bbde68c5974061455141c4fd78c48e6;p=xcp%2Fxen-api.git CA-46342: add ethtool GRO and LRO support to PIF other-config Signed-off-by: Simon Rowe --- diff --git a/scripts/InterfaceReconfigure.py b/scripts/InterfaceReconfigure.py index a034be19..58911ff7 100644 --- a/scripts/InterfaceReconfigure.py +++ b/scripts/InterfaceReconfigure.py @@ -277,7 +277,7 @@ _TUNNEL_XML_TAG = "tunnel" _BOND_XML_TAG = "bond" _NETWORK_XML_TAG = "network" -_ETHTOOL_OTHERCONFIG_ATTRS = ['ethtool-%s' % x for x in 'autoneg', 'speed', 'duplex', 'rx', 'tx', 'sg', 'tso', 'ufo', 'gso' ] +_ETHTOOL_OTHERCONFIG_ATTRS = ['ethtool-%s' % x for x in 'autoneg', 'speed', 'duplex', 'rx', 'tx', 'sg', 'tso', 'ufo', 'gso', 'gro', 'lro' ] _PIF_OTHERCONFIG_ATTRS = [ 'domain', 'peerdns', 'defaultroute', 'mtu', 'static-routes' ] + \ [ 'bond-%s' % x for x in 'mode', 'miimon', 'downdelay', 'updelay', 'use_carrier' ] + \ @@ -621,8 +621,9 @@ class DatabaseCache(object): # # # +PIF_OTHERCONFIG_DEFAULTS = {'gro': 'off', 'lro': 'off'} -def ethtool_settings(oc): +def ethtool_settings(oc, defaults = {}): settings = [] if oc.has_key('ethtool-speed'): val = oc['ethtool-speed'] @@ -645,7 +646,7 @@ def ethtool_settings(oc): else: log("Invalid value for ethtool-autoneg = %s. Must be on|true|off|false." % val) offload = [] - for opt in ("rx", "tx", "sg", "tso", "ufo", "gso"): + for opt in ("rx", "tx", "sg", "tso", "ufo", "gso", "gro", "lro"): if oc.has_key("ethtool-" + opt): val = oc["ethtool-" + opt] if val in ["true", "on"]: @@ -654,6 +655,8 @@ def ethtool_settings(oc): offload += [opt, 'off'] else: log("Invalid value for ethtool-%s = %s. Must be on|true|off|false." % (opt, val)) + elif opt in defaults: + offload += [opt, defaults[opt]] return settings,offload # By default the MTU is taken from the Network.MTU setting for VIF, diff --git a/scripts/InterfaceReconfigureBridge.py b/scripts/InterfaceReconfigureBridge.py index 1b1fde65..87043956 100644 --- a/scripts/InterfaceReconfigureBridge.py +++ b/scripts/InterfaceReconfigureBridge.py @@ -274,7 +274,8 @@ def _configure_physical_interface(pif): f.write("TYPE=Ethernet\n") f.write("HWADDR=%(MAC)s\n" % pifrec) - settings,offload = ethtool_settings(pifrec['other_config']) + settings,offload = ethtool_settings(pifrec['other_config'], + PIF_OTHERCONFIG_DEFAULTS) if len(settings): f.write("ETHTOOL_OPTS=\"%s\"\n" % str.join(" ", settings)) if len(offload): diff --git a/scripts/InterfaceReconfigureVswitch.py b/scripts/InterfaceReconfigureVswitch.py index 9ebbbd8b..a8dff539 100644 --- a/scripts/InterfaceReconfigureVswitch.py +++ b/scripts/InterfaceReconfigureVswitch.py @@ -459,7 +459,7 @@ class DatapathVswitch(Datapath): netdev_up(dev, mtu) - settings, offload = ethtool_settings(oc) + settings, offload = ethtool_settings(oc, PIF_OTHERCONFIG_DEFAULTS) if len(settings): run_command(['/sbin/ethtool', '-s', dev] + settings) if len(offload):