1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Vendoring libnetwork

Pull in version e5fea92a6c8a5968bdb8005bf959c6e23113b689

Fixes libnetwork regressions that stopped drivers that set routes from working.
Pulls in libnetwork PRs #546 #543

Signed-off-by: Tom Denham <tom@tomdee.co.uk>
This commit is contained in:
Tom Denham 2015-09-21 11:13:14 -07:00
parent f018c0430b
commit 499ade0116
9 changed files with 52 additions and 26 deletions

View file

@ -20,7 +20,7 @@ clone git github.com/tchap/go-patricia v2.1.0
clone git golang.org/x/net 3cffabab72adf04f8e3b01c5baf775361837b5fe https://github.com/golang/net.git clone git golang.org/x/net 3cffabab72adf04f8e3b01c5baf775361837b5fe https://github.com/golang/net.git
#get libnetwork packages #get libnetwork packages
clone git github.com/docker/libnetwork 00a92f066e628e4c6d50979c070df377575aad18 clone git github.com/docker/libnetwork e5fea92a6c8a5968bdb8005bf959c6e23113b689
clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b
clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4 clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4

View file

@ -23,6 +23,7 @@ _testmain.go
*.exe *.exe
*.test *.test
*.prof *.prof
cmd/dnet/dnet
# Coverage # Coverage
*.tmp *.tmp

View file

@ -1,4 +1,4 @@
.PHONY: all all-local build build-local check check-code check-format run-tests check-local integration-tests install-deps coveralls circle-ci .PHONY: all all-local build build-local check check-code check-format run-tests check-local integration-tests install-deps coveralls circle-ci start-services clean
SHELL=/bin/bash SHELL=/bin/bash
build_image=libnetwork-build build_image=libnetwork-build
dockerargs = --privileged -v $(shell pwd):/go/src/github.com/docker/libnetwork -w /go/src/github.com/docker/libnetwork dockerargs = --privileged -v $(shell pwd):/go/src/github.com/docker/libnetwork -w /go/src/github.com/docker/libnetwork
@ -7,9 +7,9 @@ docker = docker run --rm -it ${dockerargs} ${container_env} ${build_image}
ciargs = -e "COVERALLS_TOKEN=$$COVERALLS_TOKEN" -e "INSIDECONTAINER=-incontainer=true" ciargs = -e "COVERALLS_TOKEN=$$COVERALLS_TOKEN" -e "INSIDECONTAINER=-incontainer=true"
cidocker = docker run ${ciargs} ${dockerargs} golang:1.4 cidocker = docker run ${ciargs} ${dockerargs} golang:1.4
all: ${build_image}.created build check integration-tests all: ${build_image}.created build check integration-tests clean
integration-tests: integration-tests: ./cmd/dnet/dnet
@if [ ! -d ./integration-tmp ]; then \ @if [ ! -d ./integration-tmp ]; then \
mkdir -p ./integration-tmp; \ mkdir -p ./integration-tmp; \
git clone https://github.com/sstephenson/bats.git ./integration-tmp/bats; \ git clone https://github.com/sstephenson/bats.git ./integration-tmp/bats; \
@ -17,6 +17,15 @@ integration-tests:
fi fi
@./integration-tmp/bin/bats ./test/integration/dnet @./integration-tmp/bin/bats ./test/integration/dnet
./cmd/dnet/dnet:
make build-local
clean:
@if [ -e ./cmd/dnet/dnet ]; then \
echo "Removing dnet binary"; \
rm -rf ./cmd/dnet/dnet; \
fi
all-local: check-local build-local all-local: check-local build-local
${build_image}.created: ${build_image}.created:
@ -67,10 +76,10 @@ run-tests:
done done
@echo "Done running tests" @echo "Done running tests"
check-local: check-format check-code run-tests check-local: check-format check-code start-services run-tests
install-deps: install-deps:
apt-get update && apt-get -y install iptables apt-get update && apt-get -y install iptables zookeeperd
git clone https://github.com/golang/tools /go/src/golang.org/x/tools git clone https://github.com/golang/tools /go/src/golang.org/x/tools
go install golang.org/x/tools/cmd/vet go install golang.org/x/tools/cmd/vet
go install golang.org/x/tools/cmd/goimports go install golang.org/x/tools/cmd/goimports
@ -88,3 +97,6 @@ coveralls:
circle-ci: circle-ci:
@${cidocker} make install-deps build-local check-local coveralls @${cidocker} make install-deps build-local check-local coveralls
make integration-tests make integration-tests
start-services:
service zookeeper start

View file

@ -192,8 +192,8 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo,
} }
ifaceName := res.InterfaceName ifaceName := res.InterfaceName
if ifaceName == nil { if jinfo.InterfaceName() != nil && ifaceName == nil {
return fmt.Errorf("no interface name information received") return fmt.Errorf("no interface name information received while one is expected")
} }
if iface := jinfo.InterfaceName(); iface != nil { if iface := jinfo.InterfaceName(); iface != nil {

View file

@ -203,19 +203,8 @@ func (ep *endpoint) AddStaticRoute(destination *net.IPNet, routeType int, nextHo
ep.joinInfo.StaticRoutes = append(ep.joinInfo.StaticRoutes, &r) ep.joinInfo.StaticRoutes = append(ep.joinInfo.StaticRoutes, &r)
} else { } else {
// If the route doesn't specify a next-hop, it must be a connected route, bound to an interface. // If the route doesn't specify a next-hop, it must be a connected route, bound to an interface.
if err := ep.addInterfaceRoute(&r); err != nil { ep.iface.routes = append(ep.iface.routes, r.Destination)
return err
} }
}
return nil
}
func (ep *endpoint) addInterfaceRoute(route *types.StaticRoute) error {
ep.Lock()
defer ep.Unlock()
iface := ep.iface
iface.routes = append(iface.routes, route.Destination)
return nil return nil
} }

View file

@ -271,6 +271,11 @@ func (n *networkNamespace) AddInterface(srcName, dstPrefix string, options ...If
return fmt.Errorf("failed to set link up: %v", err) return fmt.Errorf("failed to set link up: %v", err)
} }
// Set the routes on the interface. This can only be done when the interface is up.
if err := setInterfaceRoutes(iface, i); err != nil {
return fmt.Errorf("error setting interface %q routes to %q: %v", iface.Attrs().Name, i.Routes(), err)
}
n.Lock() n.Lock()
n.iFaces = append(n.iFaces, i) n.iFaces = append(n.iFaces, i)
n.Unlock() n.Unlock()
@ -288,7 +293,6 @@ func configureInterface(iface netlink.Link, i *nwIface) error {
{setInterfaceName, fmt.Sprintf("error renaming interface %q to %q", ifaceName, i.DstName())}, {setInterfaceName, fmt.Sprintf("error renaming interface %q to %q", ifaceName, i.DstName())},
{setInterfaceIP, fmt.Sprintf("error setting interface %q IP to %q", ifaceName, i.Address())}, {setInterfaceIP, fmt.Sprintf("error setting interface %q IP to %q", ifaceName, i.Address())},
{setInterfaceIPv6, fmt.Sprintf("error setting interface %q IPv6 to %q", ifaceName, i.AddressIPv6())}, {setInterfaceIPv6, fmt.Sprintf("error setting interface %q IPv6 to %q", ifaceName, i.AddressIPv6())},
{setInterfaceRoutes, fmt.Sprintf("error setting interface %q routes to %q", ifaceName, i.Routes())},
{setInterfaceMaster, fmt.Sprintf("error setting interface %q master to %q", ifaceName, i.DstMaster())}, {setInterfaceMaster, fmt.Sprintf("error setting interface %q master to %q", ifaceName, i.DstMaster())},
} }
@ -346,7 +350,7 @@ func setInterfaceRoutes(iface netlink.Link, i *nwIface) error {
// In older kernels (like the one in Centos 6.6 distro) sysctl does not have netns support. Therefore // In older kernels (like the one in Centos 6.6 distro) sysctl does not have netns support. Therefore
// we cannot gather the statistics from /sys/class/net/<dev>/statistics/<counter> files. Per-netns stats // we cannot gather the statistics from /sys/class/net/<dev>/statistics/<counter> files. Per-netns stats
// are naturally found in /proc/net/dev in kernels which support netns (ifconfig relyes on that). // are naturally found in /proc/net/dev in kernels which support netns (ifconfig relies on that).
const ( const (
netStatsFile = "/proc/net/dev" netStatsFile = "/proc/net/dev"
base = "[ ]*%s:([ ]+[0-9]+){16}" base = "[ ]*%s:([ ]+[0-9]+){16}"

View file

@ -49,7 +49,7 @@ func init() {
} }
func createBasePath() { func createBasePath() {
err := os.MkdirAll(prefix, 0644) err := os.MkdirAll(prefix, 0755)
if err != nil { if err != nil {
panic("Could not create net namespace path directory") panic("Could not create net namespace path directory")
} }

View file

@ -416,6 +416,7 @@ func (sb *sandbox) clearNetworkResources(ep *endpoint) error {
const ( const (
defaultPrefix = "/var/lib/docker/network/files" defaultPrefix = "/var/lib/docker/network/files"
dirPerm = 0755
filePerm = 0644 filePerm = 0644
) )
@ -777,7 +778,7 @@ func (eh *epHeap) Pop() interface{} {
} }
func createBasePath(dir string) error { func createBasePath(dir string) error {
return os.MkdirAll(dir, filePerm) return os.MkdirAll(dir, dirPerm)
} }
func createFile(path string) error { func createFile(path string) error {

View file

@ -174,7 +174,11 @@ func (c *controller) watchNetworks() error {
cs := c.store cs := c.store
c.Unlock() c.Unlock()
nwPairs, err := cs.KVStore().WatchTree(datastore.Key(datastore.NetworkKeyPrefix), nil) networkKey := datastore.Key(datastore.NetworkKeyPrefix)
if err := ensureKeys(networkKey, cs); err != nil {
return fmt.Errorf("failed to ensure if the network keys are valid and present in store: %v", err)
}
nwPairs, err := cs.KVStore().WatchTree(networkKey, nil)
if err != nil { if err != nil {
return err return err
} }
@ -228,7 +232,11 @@ func (n *network) watchEndpoints() error {
stopCh := n.stopWatchCh stopCh := n.stopWatchCh
n.Unlock() n.Unlock()
epPairs, err := cs.KVStore().WatchTree(datastore.Key(tmp.KeyPrefix()...), stopCh) endpointKey := datastore.Key(tmp.KeyPrefix()...)
if err := ensureKeys(endpointKey, cs); err != nil {
return fmt.Errorf("failed to ensure if the endpoint keys are valid and present in store: %v", err)
}
epPairs, err := cs.KVStore().WatchTree(endpointKey, stopCh)
if err != nil { if err != nil {
return err return err
} }
@ -362,3 +370,14 @@ func (c *controller) processEndpointUpdate(ep *endpoint) bool {
return false return false
} }
func ensureKeys(key string, cs datastore.DataStore) error {
exists, err := cs.KVStore().Exists(key)
if err != nil {
return err
}
if exists {
return nil
}
return cs.KVStore().Put(key, []byte{}, nil)
}