diff --git a/hack/vendor.sh b/hack/vendor.sh index bd5da440fd..a250b4cc74 100755 --- a/hack/vendor.sh +++ b/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/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go index 8d24df8c57..f8e1755233 100644 --- a/integration-cli/docker_cli_daemon_test.go +++ b/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" diff --git a/vendor/src/github.com/docker/libnetwork/controller.go b/vendor/src/github.com/docker/libnetwork/controller.go index a0cb4cb5d2..e1d8277fac 100644 --- a/vendor/src/github.com/docker/libnetwork/controller.go +++ b/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/vendor/src/github.com/docker/libnetwork/ipam/allocator.go b/vendor/src/github.com/docker/libnetwork/ipam/allocator.go index bec7c75343..f90c7c1805 100644 --- a/vendor/src/github.com/docker/libnetwork/ipam/allocator.go +++ b/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/vendor/src/github.com/docker/libnetwork/ipam/utils.go b/vendor/src/github.com/docker/libnetwork/ipam/utils.go index 2d9c6b17bf..d524b47830 100644 --- a/vendor/src/github.com/docker/libnetwork/ipam/utils.go +++ b/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) }