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 a619a10..1e386aa 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -987,6 +987,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 f06ee8c..1280a55 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -713,6 +713,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 fe3820f..ff1270b 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -772,3 +772,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 bcaac8f..938f972 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -929,6 +929,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