reason: in order to make manage kata-containers related source code more easy, we decide to move all kata related source repo into kata-containers repo. Signed-off-by: jiangpengfei <jiangpengfei9@huawei.com>
79 lines
2.6 KiB
Diff
79 lines
2.6 KiB
Diff
From be0d60f5fa88267afb26125681a217ef9476e133 Mon Sep 17 00:00:00 2001
|
|
From: holyfei <yangfeiyu20102011@163.com>
|
|
Date: Sat, 19 Sep 2020 12:47:14 +0800
|
|
Subject: [PATCH] runtime: fix del-iface doesn't delete the tap interface in
|
|
the host problem
|
|
|
|
reason: kata-runtime add-iface support add exist tap device in the host or
|
|
new created tap device by kata-network add-iface process. If add interface
|
|
is exist tap device, del-iface will not delete the tap device, so we need
|
|
to judge the deleted interface is exist device or new created, which is judged
|
|
by the VMFds of the tap Link and del-iface will load this info from the
|
|
network.json in 1.7.0 version. However, 1.11.1 version don't write the VMFds
|
|
into the persiste.json file, del-iface can not figure out which tap is exist
|
|
already or new created, so cause the this problem.
|
|
---
|
|
virtcontainers/endpoint.go | 2 ++
|
|
virtcontainers/persist/api/network.go | 5 +++++
|
|
virtcontainers/tap_endpoint.go | 1 +
|
|
3 files changed, 8 insertions(+)
|
|
|
|
diff --git a/virtcontainers/endpoint.go b/virtcontainers/endpoint.go
|
|
index 7efcf49c..3618792e 100644
|
|
--- a/virtcontainers/endpoint.go
|
|
+++ b/virtcontainers/endpoint.go
|
|
@@ -129,6 +129,7 @@ func saveTapIf(tapif *TapInterface) *persistapi.TapInterface {
|
|
HardAddr: tapif.TAPIface.HardAddr,
|
|
Addrs: tapif.TAPIface.Addrs,
|
|
},
|
|
+ VMFds: tapif.VMFds,
|
|
}
|
|
}
|
|
|
|
@@ -167,6 +168,7 @@ func loadTapIf(tapif *persistapi.TapInterface) *TapInterface {
|
|
HardAddr: tapif.TAPIface.HardAddr,
|
|
Addrs: tapif.TAPIface.Addrs,
|
|
},
|
|
+ VMFds: tapif.VMFds,
|
|
}
|
|
}
|
|
|
|
diff --git a/virtcontainers/persist/api/network.go b/virtcontainers/persist/api/network.go
|
|
index 53c6de44..c5611767 100644
|
|
--- a/virtcontainers/persist/api/network.go
|
|
+++ b/virtcontainers/persist/api/network.go
|
|
@@ -7,6 +7,8 @@
|
|
package persistapi
|
|
|
|
import (
|
|
+ "os"
|
|
+
|
|
"github.com/vishvananda/netlink"
|
|
)
|
|
|
|
@@ -45,6 +47,9 @@ type TapInterface struct {
|
|
Name string
|
|
TAPIface NetworkInterface
|
|
// remove VMFds and VhostFds
|
|
+ // add VMFds back to judge a tap interface is exist before add-iface
|
|
+ // or new created by kata-network add-iface
|
|
+ VMFds []*os.File
|
|
}
|
|
|
|
// TuntapInterface defines a tap interface
|
|
diff --git a/virtcontainers/tap_endpoint.go b/virtcontainers/tap_endpoint.go
|
|
index 5a3e7f7e..0b6002aa 100644
|
|
--- a/virtcontainers/tap_endpoint.go
|
|
+++ b/virtcontainers/tap_endpoint.go
|
|
@@ -199,6 +199,7 @@ func unTapNetwork(endpoint *TapEndpoint) error {
|
|
return nil
|
|
}
|
|
|
|
+ networkLogger().Debug("untap the new created tap interface")
|
|
name := endpoint.TapInterface.TAPIface.Name
|
|
netHandle, err := netlink.NewHandle()
|
|
if err != nil {
|
|
--
|
|
2.11.0
|
|
|