From 2f98b3ee90be84e918016605e3c64ebfef9ef68b Mon Sep 17 00:00:00 2001 From: Ruidong Cao Date: Fri, 9 Nov 2018 17:07:14 +0800 Subject: [PATCH] network: support hotplug a nic several times Bind back the nic's MAC in HotDetach. So we don't need to modify nic's MAC in description to hotplug it again. Fixes: #894 Signed-off-by: Ruidong Cao --- virtcontainers/network.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/virtcontainers/network.go b/virtcontainers/network.go index d4b8e10093..a0846e638b 100644 --- a/virtcontainers/network.go +++ b/virtcontainers/network.go @@ -985,6 +985,15 @@ func untapNetworkPair(endpoint Endpoint) error { return err } + hardAddr, err := net.ParseMAC(netPair.TAPIface.HardAddr) + if err != nil { + return err + } + if err := netHandle.LinkSetHardwareAddr(link, hardAddr); err != nil { + return fmt.Errorf("Could not set MAC address %s for veth interface %s: %s", + netPair.VirtIface.HardAddr, netPair.VirtIface.Name, err) + } + if err := netHandle.LinkSetDown(link); err != nil { return fmt.Errorf("Could not disable veth %s: %s", netPair.VirtIface.Name, err) } @@ -1038,6 +1047,15 @@ func unBridgeNetworkPair(endpoint Endpoint) error { return err } + hardAddr, err := net.ParseMAC(netPair.TAPIface.HardAddr) + if err != nil { + return err + } + if err := netHandle.LinkSetHardwareAddr(link, hardAddr); err != nil { + return fmt.Errorf("Could not set MAC address %s for veth interface %s: %s", + netPair.VirtIface.HardAddr, netPair.VirtIface.Name, err) + } + if err := netHandle.LinkSetDown(link); err != nil { return fmt.Errorf("Could not disable veth %s: %s", netPair.VirtIface.Name, err) }