In order to test link negotiation it is useful to have methods that can
change the carrier state of an interface from a task.
Add the 'set_carrier_on' and 'set_carrier_off' methods for interfaces.
Unlike existing methods, these methods only change the carrier state and
nothing else (e.g. setting an address).
Signed-off-by: Ido Schimmel <idosch(a)mellanox.com>
Signed-off-by: Jiri Pirko <jiri(a)mellanox.com>
---
lnst/Controller/Machine.py | 14 ++++++++++++++
lnst/Controller/Task.py | 6 ++++++
lnst/Slave/InterfaceManager.py | 6 ++++++
lnst/Slave/NetTestSlave.py | 18 ++++++++++++++++++
4 files changed, 44 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index e60e1ea..6a9f6f2 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -717,6 +717,20 @@ class Interface(object):
else:
self._machine._rpc_call("set_device_down", self._id)
+ def set_carrier_on(self):
+ netns = self._netns
+ if netns != None:
+ self._machine._rpc_call_to_netns(netns, "set_carrier_on",
self._id)
+ else:
+ self._machine._rpc_call("set_carrier_on", self._id)
+
+ def set_carrier_off(self):
+ netns = self._netns
+ if netns != None:
+ self._machine._rpc_call_to_netns(netns, "set_carrier_off",
self._id)
+ else:
+ self._machine._rpc_call("set_carrier_off", self._id)
+
def initialize(self):
phys_devs = self._machine._rpc_call("map_if_by_hwaddr",
self._id, self._hwaddr)
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py
index 0d437f3..f1e882f 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -370,6 +370,12 @@ class InterfaceAPI(object):
def set_mtu(self, mtu):
return self._if.set_mtu(mtu)
+ def set_carrier_on(self):
+ return self._if.set_carrier_on()
+
+ def set_carrier_off(self):
+ return self._if.set_carrier_off()
+
class ModuleAPI(object):
""" An API class representing a module. """
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index 09f3be9..0360d10 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -486,6 +486,12 @@ class Device(object):
else:
exec_cmd("ip link set %s down" % self._name)
+ def carrier_on(self):
+ exec_cmd("ip link set %s up" % self._name)
+
+ def carrier_off(self):
+ exec_cmd("ip link set %s down" % self._name)
+
def set_netns(self, netns):
self._netns = netns
return
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 775d4a5..73f116e 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -174,6 +174,24 @@ class SlaveMethods:
return False
return True
+ def set_carrier_on(self, if_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.carrier_on()
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
+ def set_carrier_off(self, if_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.carrier_off()
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
def set_unmapped_device_down(self, hwaddr):
dev = self._if_manager.get_device_by_hwaddr(hwaddr)
if dev is not None:
--
2.4.6