The set_address() command changes at run-time an interface IP addresses.
The command flushes all previous addresses and set new ones.
Signed-off-by: Elad Raz <eladr(a)mellanox.com>
Signed-off-by: Jiri Pirko <jiri(a)mellanox.com>
---
lnst/Controller/Machine.py | 5 +++++
lnst/Controller/Task.py | 3 +++
lnst/Slave/InterfaceManager.py | 6 ++++++
lnst/Slave/NetConfigDevice.py | 3 +++
lnst/Slave/NetTestSlave.py | 8 ++++++++
5 files changed, 25 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 3c3bc1f..8b9fa0f 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -690,6 +690,11 @@ class Interface(object):
self._id)
return stats
+ def set_addresses(self, ips):
+ self._addresses = ips
+ self._machine._rpc_call_x(self._netns, "set_addresses",
+ self._id, ips)
+
def update_from_slave(self):
if_data = self._machine._rpc_call_x(self._netns, "get_if_data",
self._id)
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py
index fb5966f..b1a17be 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -546,6 +546,9 @@ class InterfaceAPI(object):
self._if.configure()
self._if.up()
+ def set_addresses(self, ips):
+ self._if.set_addresses(ips)
+
def destroy(self):
self._host._remove_iface(self)
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index ebb76c2..6ddbe52 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -547,6 +547,12 @@ class Device(object):
"tx_collsns": tx_stats[5]})
return stats
+ def set_addresses(self, ips):
+ self._conf.set_addresses(ips)
+ exec_cmd("ip addr flush %s" % self._name)
+ for address in ips:
+ exec_cmd("ip addr add %s dev %s" % (address, self._name))
+
def set_netns(self, netns):
self._netns = netns
return
diff --git a/lnst/Slave/NetConfigDevice.py b/lnst/Slave/NetConfigDevice.py
index dd053a6..8290772 100644
--- a/lnst/Slave/NetConfigDevice.py
+++ b/lnst/Slave/NetConfigDevice.py
@@ -68,6 +68,9 @@ class NetConfigDeviceGeneric(object):
die_on_err=False)
exec_cmd("ip link set %s down" % config["name"])
+ def set_addresses(self, ips):
+ self._dev_config["addresses"] = ips
+
@classmethod
def type_init(self):
if self._modulename and self._moduleload:
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 127542a..5eeb30c 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -193,6 +193,14 @@ class SlaveMethods:
return None
return dev.link_stats()
+ def set_addresses(self, if_id, ips):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is None:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ dev.set_addresses(ips)
+ return True
+
def set_device_up(self, if_id):
dev = self._if_manager.get_mapped_device(if_id)
dev.up()
--
2.4.3