diff --git a/libnetwork/ipallocator/allocator.go b/libnetwork/ipallocator/allocator.go index 36a5871310..1560099937 100644 --- a/libnetwork/ipallocator/allocator.go +++ b/libnetwork/ipallocator/allocator.go @@ -70,18 +70,14 @@ func (a *IPAllocator) RegisterSubnet(network *net.IPNet, subnet *net.IPNet) erro if _, ok := a.allocatedIPs[key]; ok { return ErrNetworkAlreadyRegistered } - n := newAllocatedMap(network) - beginIP, endIP := netutils.NetworkRange(subnet) - begin := big.NewInt(0).Add(ipToBigInt(beginIP), big.NewInt(1)) - end := big.NewInt(0).Sub(ipToBigInt(endIP), big.NewInt(1)) // Check that subnet is within network - if !(begin.Cmp(n.begin) >= 0 && end.Cmp(n.end) <= 0 && begin.Cmp(end) == -1) { + beginIP, endIP := netutils.NetworkRange(subnet) + if !(network.Contains(beginIP) && network.Contains(endIP)) { return ErrBadSubnet } - n.begin.Set(begin) - n.end.Set(end) - n.last.Sub(begin, big.NewInt(1)) + + n := newAllocatedMap(subnet) a.allocatedIPs[key] = n return nil }