Prechádzať zdrojové kódy

Delete veth on ep leave in overlay driver

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 9 rokov pred
rodič
commit
fe2fa218d8

+ 11 - 0
libnetwork/drivers/overlay/joinleave.go

@@ -54,6 +54,8 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo,
 		return err
 	}
 
+	ep.ifName = name2
+
 	// Set the container interface and its peer MTU to 1450 to allow
 	// for 50 bytes vxlan encap (inner eth header(14) + outer IP(20) +
 	// outer UDP(8) + vxlan header(8))
@@ -134,5 +136,14 @@ func (d *driver) Leave(nid, eid string) error {
 
 	n.leaveSandbox()
 
+	link, err := netlink.LinkByName(ep.ifName)
+	if err != nil {
+		log.Warnf("Failed to retrieve interface link for interface removal on endpoint leave: %v", err)
+		return nil
+	}
+	if err := netlink.LinkDel(link); err != nil {
+		log.Warnf("Failed to delete interface link on endpoint leave: %v", err)
+	}
+
 	return nil
 }

+ 4 - 3
libnetwork/drivers/overlay/ov_endpoint.go

@@ -11,9 +11,10 @@ import (
 type endpointTable map[string]*endpoint
 
 type endpoint struct {
-	id   string
-	mac  net.HardwareAddr
-	addr *net.IPNet
+	id     string
+	ifName string
+	mac    net.HardwareAddr
+	addr   *net.IPNet
 }
 
 func (n *network) endpoint(eid string) *endpoint {