From 62ba8c349be35f53bd5368a5b6a7b3eec7ef85f7 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Mon, 9 Nov 2015 15:29:54 -0800 Subject: [PATCH 1/2] Vendoring libnetwork 5978c276ad20e104d6acd749da6ee6a8930055ae - To bring in ip-range fix Signed-off-by: Alessandro Boch Upstream-commit: 9c395537bce1e787ae34d90b2de81df3a47c5ff9 Component: engine --- components/engine/hack/vendor.sh | 2 +- .../vendor/src/github.com/docker/libnetwork/controller.go | 5 +---- .../src/github.com/docker/libnetwork/ipam/allocator.go | 6 +----- .../vendor/src/github.com/docker/libnetwork/ipam/utils.go | 6 +++--- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/components/engine/hack/vendor.sh b/components/engine/hack/vendor.sh index df1c45721b..9470e77507 100755 --- a/components/engine/hack/vendor.sh +++ b/components/engine/hack/vendor.sh @@ -22,7 +22,7 @@ clone git github.com/vdemeester/shakers 3c10293ce22b900c27acad7b28656196fcc2f73b clone git golang.org/x/net 3cffabab72adf04f8e3b01c5baf775361837b5fe https://github.com/golang/net.git #get libnetwork packages -clone git github.com/docker/libnetwork 5305ea570b85d61dd0fd261cd7e1680da1884678 +clone git github.com/docker/libnetwork 5978c276ad20e104d6acd749da6ee6a8930055ae clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4 diff --git a/components/engine/vendor/src/github.com/docker/libnetwork/controller.go b/components/engine/vendor/src/github.com/docker/libnetwork/controller.go index a0cb4cb5d2..e1d8277fac 100644 --- a/components/engine/vendor/src/github.com/docker/libnetwork/controller.go +++ b/components/engine/vendor/src/github.com/docker/libnetwork/controller.go @@ -128,14 +128,11 @@ type ipamData struct { type driverTable map[string]*driverData -//type networkTable map[string]*network -//type endpointTable map[string]*endpoint type ipamTable map[string]*ipamData type sandboxTable map[string]*sandbox type controller struct { - id string - //networks networkTable + id string drivers driverTable ipamDrivers ipamTable sandboxes sandboxTable diff --git a/components/engine/vendor/src/github.com/docker/libnetwork/ipam/allocator.go b/components/engine/vendor/src/github.com/docker/libnetwork/ipam/allocator.go index bec7c75343..f90c7c1805 100644 --- a/components/engine/vendor/src/github.com/docker/libnetwork/ipam/allocator.go +++ b/components/engine/vendor/src/github.com/docker/libnetwork/ipam/allocator.go @@ -220,7 +220,7 @@ func (a *Allocator) parsePoolRequest(addressSpace, pool, subPool string, v6 bool return nil, nil, nil, ipamapi.ErrInvalidPool } if subPool != "" { - if ipr, err = getAddressRange(subPool); err != nil { + if ipr, err = getAddressRange(subPool, nw); err != nil { return nil, nil, nil, err } } @@ -431,9 +431,6 @@ func (a *Allocator) ReleaseAddress(poolID string, address net.IP) error { aSpace.Unlock() mask := p.Pool.Mask - if p.Range != nil { - mask = p.Range.Sub.Mask - } h, err := types.GetHostPartIP(address, mask) if err != nil { @@ -471,7 +468,6 @@ func (a *Allocator) getAddress(nw *net.IPNet, bitmask *bitseq.Handle, prefAddres ordinal = ipToUint64(types.GetMinimalIP(hostPart)) err = bitmask.Set(ordinal) } else { - base.IP = ipr.Sub.IP ordinal, err = bitmask.SetAnyInRange(ipr.Start, ipr.End) } if err != nil { diff --git a/components/engine/vendor/src/github.com/docker/libnetwork/ipam/utils.go b/components/engine/vendor/src/github.com/docker/libnetwork/ipam/utils.go index 2d9c6b17bf..d524b47830 100644 --- a/components/engine/vendor/src/github.com/docker/libnetwork/ipam/utils.go +++ b/components/engine/vendor/src/github.com/docker/libnetwork/ipam/utils.go @@ -15,12 +15,12 @@ const ( v6 = 6 ) -func getAddressRange(pool string) (*AddressRange, error) { +func getAddressRange(pool string, masterNw *net.IPNet) (*AddressRange, error) { ip, nw, err := net.ParseCIDR(pool) if err != nil { return nil, ipamapi.ErrInvalidSubPool } - lIP, e := types.GetHostPartIP(nw.IP, nw.Mask) + lIP, e := types.GetHostPartIP(nw.IP, masterNw.Mask) if e != nil { return nil, fmt.Errorf("failed to compute range's lowest ip address: %v", e) } @@ -28,7 +28,7 @@ func getAddressRange(pool string) (*AddressRange, error) { if e != nil { return nil, fmt.Errorf("failed to compute range's broadcast ip address: %v", e) } - hIP, e := types.GetHostPartIP(bIP, nw.Mask) + hIP, e := types.GetHostPartIP(bIP, masterNw.Mask) if e != nil { return nil, fmt.Errorf("failed to compute range's highest ip address: %v", e) } From efb8f1f3fe83f2fd3b90d6ef49a6c321234fea30 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Mon, 9 Nov 2015 15:30:30 -0800 Subject: [PATCH 2/2] Fix fixed-cidr daemon option - Logic is broken when gateway ip falls in ip-range and ip-range is not the first block in the network Signed-off-by: Alessandro Boch Upstream-commit: c7cd65962448888ceb1cec6a355fc7fd04f3be53 Component: engine --- .../integration-cli/docker_cli_daemon_test.go | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/components/engine/integration-cli/docker_cli_daemon_test.go b/components/engine/integration-cli/docker_cli_daemon_test.go index 8d24df8c57..f8e1755233 100644 --- a/components/engine/integration-cli/docker_cli_daemon_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_test.go @@ -794,7 +794,33 @@ func (s *DockerDaemonSuite) TestDaemonBridgeFixedCidr(c *check.C) { } } -func (s *DockerDaemonSuite) TestDaemonBridgeFixedCidrFixedCIDREqualBridgeNetwork(c *check.C) { +func (s *DockerDaemonSuite) TestDaemonBridgeFixedCidr2(c *check.C) { + d := s.d + + bridgeName := "external-bridge" + bridgeIP := "10.2.2.1/16" + + out, err := createInterface(c, "bridge", bridgeName, bridgeIP) + c.Assert(err, check.IsNil, check.Commentf(out)) + defer deleteInterface(c, bridgeName) + + err = d.StartWithBusybox("--bip", bridgeIP, "--fixed-cidr", "10.2.2.0/24") + c.Assert(err, check.IsNil) + defer s.d.Restart() + + out, err = d.Cmd("run", "-d", "--name", "bb", "busybox", "top") + c.Assert(err, checker.IsNil, check.Commentf(out)) + defer d.Cmd("stop", "bb") + + out, err = d.Cmd("exec", "bb", "/bin/sh", "-c", "ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'") + c.Assert(out, checker.Equals, "10.2.2.0\n") + + out, err = d.Cmd("run", "--rm", "busybox", "/bin/sh", "-c", "ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'") + c.Assert(err, checker.IsNil, check.Commentf(out)) + c.Assert(out, checker.Equals, "10.2.2.2\n") +} + +func (s *DockerDaemonSuite) TestDaemonBridgeFixedCIDREqualBridgeNetwork(c *check.C) { d := s.d bridgeName := "external-bridge"