From 71a28f1e6031094ef5afe61dfafceb1e165dbba4 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Wed, 11 Mar 2026 20:46:13 +0000
Subject: [PATCH] Remove interface on NetworkDriver.Leave
---
lib/NetworkDriver.py | 19 +++++++++++++++++--
1 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/lib/NetworkDriver.py b/lib/NetworkDriver.py
index 6fa4a0d..b6cdc6b 100644
--- a/lib/NetworkDriver.py
+++ b/lib/NetworkDriver.py
@@ -40,7 +40,16 @@
print(ip.link("set", index=idx, master=id_parent))
endpoint.Interface.Peer = ifname1
- return ifname0
+ return ifname0, ifname1
+
+
+def delete_interface(interface):
+ try:
+ with pyroute2.IPRoute() as ip:
+ idx = ip.link_lookup(ifname=interface)[0]
+ ip.link("delete", index=idx)
+ except:
+ pass
@app.route('/NetworkDriver.GetCapabilities', methods=['POST'])
@@ -108,7 +117,10 @@
network = networks[join.NetworkID]
endpoint = endpoints['{}-{}'.format(join.NetworkID, join.EndpointID)]
- interface = create_interface(endpoint, network)
+ interface, interface_external = create_interface(endpoint, network)
+
+ endpoint.internal_interface_name = interface
+ endpoint.external_interface_name = interface_external
gw4 = None
for net4 in network.IPv4:
@@ -141,6 +153,9 @@
@app.route('/NetworkDriver.Leave', methods=['POST'])
def Leave():
leave = LeaveEntity(**flask.request.get_json(force=True))
+ endpoint = endpoints.get('{}-{}'.format(leave.NetworkID, leave.EndpointID), None)
+ if endpoint is not None and endpoint.external_interface_name:
+ delete_interface(endpoint.external_interface_name)
return {}
--
Gitblit v1.10.0