The route repository remembers all routes per an interface, during deconfigure,
the routes are automatically removed from the machine (netns).
Signed-off-by: Elad Raz <eladr(a)mellanox.com>
---
lnst/Controller/Machine.py | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 12bb34b..2660cd7 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -607,6 +607,7 @@ class Interface(object):
self._mtu = None
self._driver = None
self._devlink = None
+ self._routes = []
def get_id(self):
return self._id
@@ -760,18 +761,26 @@ class Interface(object):
self._id, ips)
def add_route(self, dest, ipv6 = False):
+ self._routes+= [(dest, None, ipv6)]
self._machine._rpc_call_x(self._netns, "add_route",
self._id, dest, ipv6)
def del_route(self, dest, ipv6 = False):
+ for i, val in enumerate(self._routes):
+ if val == (dest, None, ipv6):
+ del self._routes[i]
self._machine._rpc_call_x(self._netns, "del_route",
self._id, dest, ipv6)
def add_nhs_route(self, dest, nhs, ipv6 = False):
+ self._routes+= [(dest, nhs, ipv6)]
self._machine._rpc_call_x(self._netns, "add_nhs_route",
self._id, dest, nhs, ipv6)
def del_nhs_route(self, dest, nhs, ipv6 = False):
+ for i, val in enumerate(self._routes):
+ if val == (dest, nhs, ipv6):
+ del self._routes[i]
self._machine._rpc_call_x(self._netns, "del_nhs_route",
self._id, dest, nhs, ipv6)
@@ -872,6 +881,12 @@ class Interface(object):
if not self._configured:
return
+ while self._routes != []:
+ if self._routes[1] == None:
+ del_route(self._routes[0], self._routes[2])
+ else:
+ del_route(self._routes[0], self._routes[1], self._routes[2])
+
self._machine._rpc_call_x(self._netns, "deconfigure_interface",
self.get_id())
if self._netns != None:
--
2.4.3