Browse code

Vendoring libnetwork 0.6.0-rc6

Signed-off-by: Alessandro Boch <aboch@docker.com>

Alessandro Boch authored on 2016/01/31 13:03:03
Showing 7 changed files
... ...
@@ -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
... ...
@@ -1,5 +1,8 @@
1 1
 # Changelog
2 2
 
3
+## 0.6.0-rc6 (2016-01-30)
4
+- Properly fixes https://github.com/docker/docker/issues/18814
5
+
3 6
 ## 0.6.0-rc5 (2016-01-26)
4 7
 - Cleanup stale overlay sandboxes
5 8
 
... ...
@@ -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
 	}