Signed-off-by: Alessandro Boch <aboch@docker.com>
| ... | ... |
@@ -27,7 +27,7 @@ clone git github.com/RackSec/srslog 6eb773f331e46fbba8eecb8e794e635e75fc04de |
| 27 | 27 |
clone git github.com/imdario/mergo 0.2.1 |
| 28 | 28 |
|
| 29 | 29 |
#get libnetwork packages |
| 30 |
-clone git github.com/docker/libnetwork v0.6.0-rc5 |
|
| 30 |
+clone git github.com/docker/libnetwork v0.6.0-rc6 |
|
| 31 | 31 |
clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec |
| 32 | 32 |
clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b |
| 33 | 33 |
clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4 |
| ... | ... |
@@ -49,33 +49,33 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, |
| 49 | 49 |
|
| 50 | 50 |
sbox := n.sandbox() |
| 51 | 51 |
|
| 52 |
- name1, name2, err := createVethPair() |
|
| 52 |
+ overlayIfName, containerIfName, err := createVethPair() |
|
| 53 | 53 |
if err != nil {
|
| 54 | 54 |
return err |
| 55 | 55 |
} |
| 56 | 56 |
|
| 57 |
- ep.ifName = name2 |
|
| 57 |
+ ep.ifName = overlayIfName |
|
| 58 | 58 |
|
| 59 | 59 |
// Set the container interface and its peer MTU to 1450 to allow |
| 60 | 60 |
// for 50 bytes vxlan encap (inner eth header(14) + outer IP(20) + |
| 61 | 61 |
// outer UDP(8) + vxlan header(8)) |
| 62 |
- veth, err := netlink.LinkByName(name1) |
|
| 62 |
+ veth, err := netlink.LinkByName(overlayIfName) |
|
| 63 | 63 |
if err != nil {
|
| 64 |
- return fmt.Errorf("cound not find link by name %s: %v", name1, err)
|
|
| 64 |
+ return fmt.Errorf("cound not find link by name %s: %v", overlayIfName, err)
|
|
| 65 | 65 |
} |
| 66 | 66 |
err = netlink.LinkSetMTU(veth, vxlanVethMTU) |
| 67 | 67 |
if err != nil {
|
| 68 | 68 |
return err |
| 69 | 69 |
} |
| 70 | 70 |
|
| 71 |
- if err := sbox.AddInterface(name1, "veth", |
|
| 71 |
+ if err := sbox.AddInterface(overlayIfName, "veth", |
|
| 72 | 72 |
sbox.InterfaceOptions().Master(s.brName)); err != nil {
|
| 73 | 73 |
return fmt.Errorf("could not add veth pair inside the network sandbox: %v", err)
|
| 74 | 74 |
} |
| 75 | 75 |
|
| 76 |
- veth, err = netlink.LinkByName(name2) |
|
| 76 |
+ veth, err = netlink.LinkByName(containerIfName) |
|
| 77 | 77 |
if err != nil {
|
| 78 |
- return fmt.Errorf("could not find link by name %s: %v", name2, err)
|
|
| 78 |
+ return fmt.Errorf("could not find link by name %s: %v", containerIfName, err)
|
|
| 79 | 79 |
} |
| 80 | 80 |
err = netlink.LinkSetMTU(veth, vxlanVethMTU) |
| 81 | 81 |
if err != nil {
|
| ... | ... |
@@ -96,7 +96,7 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, |
| 96 | 96 |
} |
| 97 | 97 |
|
| 98 | 98 |
if iNames := jinfo.InterfaceName(); iNames != nil {
|
| 99 |
- err = iNames.SetNames(name2, "eth") |
|
| 99 |
+ err = iNames.SetNames(containerIfName, "eth") |
|
| 100 | 100 |
if err != nil {
|
| 101 | 101 |
return err |
| 102 | 102 |
} |
| ... | ... |
@@ -136,14 +136,5 @@ func (d *driver) Leave(nid, eid string) error {
|
| 136 | 136 |
|
| 137 | 137 |
n.leaveSandbox() |
| 138 | 138 |
|
| 139 |
- link, err := netlink.LinkByName(ep.ifName) |
|
| 140 |
- if err != nil {
|
|
| 141 |
- log.Warnf("Failed to retrieve interface link for interface removal on endpoint leave: %v", err)
|
|
| 142 |
- return nil |
|
| 143 |
- } |
|
| 144 |
- if err := netlink.LinkDel(link); err != nil {
|
|
| 145 |
- log.Warnf("Failed to delete interface link on endpoint leave: %v", err)
|
|
| 146 |
- } |
|
| 147 |
- |
|
| 148 | 139 |
return nil |
| 149 | 140 |
} |
| ... | ... |
@@ -4,8 +4,10 @@ import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
"net" |
| 6 | 6 |
|
| 7 |
+ log "github.com/Sirupsen/logrus" |
|
| 7 | 8 |
"github.com/docker/libnetwork/driverapi" |
| 8 | 9 |
"github.com/docker/libnetwork/netutils" |
| 10 |
+ "github.com/vishvananda/netlink" |
|
| 9 | 11 |
) |
| 10 | 12 |
|
| 11 | 13 |
type endpointTable map[string]*endpoint |
| ... | ... |
@@ -97,6 +99,20 @@ func (d *driver) DeleteEndpoint(nid, eid string) error {
|
| 97 | 97 |
} |
| 98 | 98 |
|
| 99 | 99 |
n.deleteEndpoint(eid) |
| 100 |
+ |
|
| 101 |
+ if ep.ifName == "" {
|
|
| 102 |
+ return nil |
|
| 103 |
+ } |
|
| 104 |
+ |
|
| 105 |
+ link, err := netlink.LinkByName(ep.ifName) |
|
| 106 |
+ if err != nil {
|
|
| 107 |
+ log.Debugf("Failed to retrieve interface (%s)'s link on endpoint (%s) delete: %v", ep.ifName, ep.id, err)
|
|
| 108 |
+ return nil |
|
| 109 |
+ } |
|
| 110 |
+ if err := netlink.LinkDel(link); err != nil {
|
|
| 111 |
+ log.Debugf("Failed to delete interface (%s)'s link on endpoint (%s) delete: %v", ep.ifName, ep.id, err)
|
|
| 112 |
+ } |
|
| 113 |
+ |
|
| 100 | 114 |
return nil |
| 101 | 115 |
} |
| 102 | 116 |
|
| ... | ... |
@@ -160,7 +160,9 @@ func (n *network) destroySandbox() {
|
| 160 | 160 |
sbox := n.sandbox() |
| 161 | 161 |
if sbox != nil {
|
| 162 | 162 |
for _, iface := range sbox.Info().Interfaces() {
|
| 163 |
- iface.Remove() |
|
| 163 |
+ if err := iface.Remove(); err != nil {
|
|
| 164 |
+ logrus.Debugf("Remove interface %s failed: %v", iface.SrcName(), err)
|
|
| 165 |
+ } |
|
| 164 | 166 |
} |
| 165 | 167 |
|
| 166 | 168 |
for _, s := range n.subnets {
|
| ... | ... |
@@ -8,6 +8,7 @@ import ( |
| 8 | 8 |
"sync" |
| 9 | 9 |
"syscall" |
| 10 | 10 |
|
| 11 |
+ log "github.com/Sirupsen/logrus" |
|
| 11 | 12 |
"github.com/docker/libnetwork/types" |
| 12 | 13 |
"github.com/vishvananda/netlink" |
| 13 | 14 |
) |
| ... | ... |
@@ -127,7 +128,7 @@ func (i *nwIface) Remove() error {
|
| 127 | 127 |
|
| 128 | 128 |
err = netlink.LinkSetName(iface, i.SrcName()) |
| 129 | 129 |
if err != nil {
|
| 130 |
- fmt.Println("LinkSetName failed: ", err)
|
|
| 130 |
+ log.Debugf("LinkSetName failed for interface %s: %v", i.SrcName(), err)
|
|
| 131 | 131 |
return err |
| 132 | 132 |
} |
| 133 | 133 |
|
| ... | ... |
@@ -139,7 +140,7 @@ func (i *nwIface) Remove() error {
|
| 139 | 139 |
} else if !isDefault {
|
| 140 | 140 |
// Move the network interface to caller namespace. |
| 141 | 141 |
if err := netlink.LinkSetNsFd(iface, callerFD); err != nil {
|
| 142 |
- fmt.Println("LinkSetNsPid failed: ", err)
|
|
| 142 |
+ log.Debugf("LinkSetNsPid failed for interface %s: %v", i.SrcName(), err)
|
|
| 143 | 143 |
return err |
| 144 | 144 |
} |
| 145 | 145 |
} |
| ... | ... |
@@ -589,7 +589,7 @@ func releaseOSSboxResources(osSbox osl.Sandbox, ep *endpoint) {
|
| 589 | 589 |
// Only remove the interfaces owned by this endpoint from the sandbox. |
| 590 | 590 |
if ep.hasInterface(i.SrcName()) {
|
| 591 | 591 |
if err := i.Remove(); err != nil {
|
| 592 |
- log.Debugf("Remove interface failed: %v", err)
|
|
| 592 |
+ log.Debugf("Remove interface %s failed: %v", i.SrcName(), err)
|
|
| 593 | 593 |
} |
| 594 | 594 |
} |
| 595 | 595 |
} |