diff --git a/libnetwork/drivers/overlay/joinleave.go b/libnetwork/drivers/overlay/joinleave.go index 997a3e77b7..a520453a63 100644 --- a/libnetwork/drivers/overlay/joinleave.go +++ b/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 } diff --git a/libnetwork/drivers/overlay/ov_endpoint.go b/libnetwork/drivers/overlay/ov_endpoint.go index 7a861a97a3..c3fe10cf5a 100644 --- a/libnetwork/drivers/overlay/ov_endpoint.go +++ b/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 {