From: Ido Schimmel <idosch(a)mellanox.com>
We need to be able to test PAUSE frames functionality as part of the QoS
recipes, so add methods to turn PAUSE frames off and on via 'ethtool'.
Note that PAUSE frames are already turned off during
NetConfigDeviceEth's configure(), so I didn't bother turning PAUSE frames
off during its deconfigure() as well.
Signed-off-by: Ido Schimmel <idosch(a)mellanox.com>
---
lnst/Controller/Machine.py | 6 ++++++
lnst/Controller/Task.py | 6 ++++++
lnst/Slave/InterfaceManager.py | 8 ++++++++
lnst/Slave/NetTestSlave.py | 18 ++++++++++++++++++
4 files changed, 38 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 4f1afff..0c77702 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -989,6 +989,12 @@ class Interface(object):
def enable_lldp(self):
return self._machine._rpc_call_x(self._netns, "enable_lldp", self._id)
+ def set_pause_on(self):
+ return self._machine._rpc_call_x(self._netns, "set_pause_on",
self._id)
+
+ def set_pause_off(self):
+ return self._machine._rpc_call_x(self._netns, "set_pause_off",
self._id)
+
class StaticInterface(Interface):
""" Static interface
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py
index bbb31d6..61ce4ab 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -716,6 +716,12 @@ class InterfaceAPI(object):
def enable_lldp(self):
return self._if.enable_lldp()
+ def set_pause_on(self):
+ return self._if.set_pause_on()
+
+ def set_pause_off(self):
+ return self._if.set_pause_off()
+
class ModuleAPI(object):
""" An API class representing a module. """
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index 332d927..a71f1fc 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -774,3 +774,11 @@ class Device(object):
def enable_lldp(self):
self._conf.enable_lldp()
exec_cmd("lldptool -i %s -L adminStatus=rxtx" % self._name)
+
+ def set_pause_on(self):
+ exec_cmd("ethtool -A %s rx on tx on autoneg off" % self._name,
+ die_on_err=False)
+
+ def set_pause_off(self):
+ exec_cmd("ethtool -A %s rx off tx off autoneg off" % self._name,
+ die_on_err=False)
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 8f1e222..da5f471 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -939,6 +939,24 @@ class SlaveMethods:
dev.enable_lldp()
return True
+ def set_pause_on(self, if_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.set_pause_on()
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
+ def set_pause_off(self, if_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.set_pause_off()
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
class ServerHandler(ConnectionHandler):
def __init__(self, addr):
super(ServerHandler, self).__init__()
--
2.7.4