diff --git a/Gopkg.lock b/Gopkg.lock index ad9a77a6..2191bef9 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -52,7 +52,7 @@ "reference", ] pruneopts = "NUT" - revision = "83389a148052d74ac602f5f1d62f86ff2f3c4aa5" + revision = "master" [[projects]] branch = "master" @@ -112,11 +112,12 @@ version = "v0.3.3" [[projects]] - digest = "1:00d0d550a1f1d7ca03270ebc1e136f21f6b9dab37f0c37e9a90d56d2f7afcff9" + branch = "master" + digest = "1:3b4afe788202e2911355e54c30323ec56617c52015fcdff23380058f4cee8540" name = "github.com/docker/libnetwork" packages = ["ipamutils"] pruneopts = "NUT" - revision = "19279f0492417475b6bfbd0aa529f73e8f178fb5" + revision = "d7b61745d16675c9f548b19f06fda80d422a74f0" [[projects]] digest = "1:83e1563e140d0e650fbba6d1d4759c502b781143630b268ef3c3a121013cdfd7" diff --git a/Gopkg.toml b/Gopkg.toml index b598aec4..533cdc51 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -13,11 +13,11 @@ [[override]] name = "github.com/docker/distribution" - revision = "83389a148052d74ac602f5f1d62f86ff2f3c4aa5" + revision = "master" [[override]] name = "github.com/docker/libnetwork" - revision = "19279f0492417475b6bfbd0aa529f73e8f178fb5" + branch = "master" [[constraint]] name = "github.com/nightlyone/lockfile" diff --git a/vendor/github.com/docker/libnetwork/ipamutils/utils.go b/vendor/github.com/docker/libnetwork/ipamutils/utils.go index f8eca58e..3fd37cd8 100644 --- a/vendor/github.com/docker/libnetwork/ipamutils/utils.go +++ b/vendor/github.com/docker/libnetwork/ipamutils/utils.go @@ -5,23 +5,20 @@ import ( "fmt" "net" "sync" - - "github.com/sirupsen/logrus" ) var ( - // PredefinedBroadNetworks contains a list of 31 IPv4 private networks with host size 16 and 12 - // (172.17-31.x.x/16, 192.168.x.x/20) which do not overlap with the networks in `PredefinedGranularNetworks` - PredefinedBroadNetworks []*net.IPNet - // PredefinedGranularNetworks contains a list of 64K IPv4 private networks with host size 8 - // (10.x.x.x/24) which do not overlap with the networks in `PredefinedBroadNetworks` - PredefinedGranularNetworks []*net.IPNet - initNetworksOnce sync.Once - - defaultBroadNetwork = []*NetworkToSplit{{"172.17.0.0/16", 16}, {"172.18.0.0/16", 16}, {"172.19.0.0/16", 16}, + // PredefinedLocalScopeDefaultNetworks contains a list of 31 IPv4 private networks with host size 16 and 12 + // (172.17-31.x.x/16, 192.168.x.x/20) which do not overlap with the networks in `PredefinedGlobalScopeDefaultNetworks` + PredefinedLocalScopeDefaultNetworks []*net.IPNet + // PredefinedGlobalScopeDefaultNetworks contains a list of 64K IPv4 private networks with host size 8 + // (10.x.x.x/24) which do not overlap with the networks in `PredefinedLocalScopeDefaultNetworks` + PredefinedGlobalScopeDefaultNetworks []*net.IPNet + mutex sync.Mutex + localScopeDefaultNetworks = []*NetworkToSplit{{"172.17.0.0/16", 16}, {"172.18.0.0/16", 16}, {"172.19.0.0/16", 16}, {"172.20.0.0/14", 16}, {"172.24.0.0/14", 16}, {"172.28.0.0/14", 16}, {"192.168.0.0/16", 20}} - defaultGranularNetwork = []*NetworkToSplit{{"10.0.0.0/8", 24}} + globalScopeDefaultNetworks = []*NetworkToSplit{{"10.0.0.0/8", 24}} ) // NetworkToSplit represent a network that has to be split in chunks with mask length Size. @@ -34,19 +31,61 @@ type NetworkToSplit struct { Size int `json:"size"` } -// InitNetworks initializes the broad network pool and the granular network pool -func InitNetworks(defaultAddressPool []*NetworkToSplit) { - initNetworksOnce.Do(func() { - // error ingnored should never fail - PredefinedGranularNetworks, _ = splitNetworks(defaultGranularNetwork) - if defaultAddressPool == nil { - defaultAddressPool = defaultBroadNetwork - } - var err error - if PredefinedBroadNetworks, err = splitNetworks(defaultAddressPool); err != nil { - logrus.WithError(err).Error("InitAddressPools failed to initialize the default address pool") - } - }) +func init() { + var err error + if PredefinedGlobalScopeDefaultNetworks, err = splitNetworks(globalScopeDefaultNetworks); err != nil { + //we are going to panic in case of error as we should never get into this state + panic("InitAddressPools failed to initialize the global scope default address pool") + } + + if PredefinedLocalScopeDefaultNetworks, err = splitNetworks(localScopeDefaultNetworks); err != nil { + //we are going to panic in case of error as we should never get into this state + panic("InitAddressPools failed to initialize the local scope default address pool") + } +} + +// configDefaultNetworks configures local as well global default pool based on input +func configDefaultNetworks(defaultAddressPool []*NetworkToSplit, result *[]*net.IPNet) error { + mutex.Lock() + defer mutex.Unlock() + defaultNetworks, err := splitNetworks(defaultAddressPool) + if err != nil { + return err + } + *result = defaultNetworks + return nil +} + +// GetGlobalScopeDefaultNetworks returns PredefinedGlobalScopeDefaultNetworks +func GetGlobalScopeDefaultNetworks() []*net.IPNet { + mutex.Lock() + defer mutex.Unlock() + return PredefinedGlobalScopeDefaultNetworks +} + +// GetLocalScopeDefaultNetworks returns PredefinedLocalScopeDefaultNetworks +func GetLocalScopeDefaultNetworks() []*net.IPNet { + mutex.Lock() + defer mutex.Unlock() + return PredefinedLocalScopeDefaultNetworks +} + +// ConfigGlobalScopeDefaultNetworks configures global default pool. +// Ideally this will be called from SwarmKit as part of swarm init +func ConfigGlobalScopeDefaultNetworks(defaultAddressPool []*NetworkToSplit) error { + if defaultAddressPool == nil { + defaultAddressPool = globalScopeDefaultNetworks + } + return configDefaultNetworks(defaultAddressPool, &PredefinedGlobalScopeDefaultNetworks) +} + +// ConfigLocalScopeDefaultNetworks configures local default pool. +// Ideally this will be called during libnetwork init +func ConfigLocalScopeDefaultNetworks(defaultAddressPool []*NetworkToSplit) error { + if defaultAddressPool == nil { + return nil + } + return configDefaultNetworks(defaultAddressPool, &PredefinedLocalScopeDefaultNetworks) } // splitNetworks takes a slice of networks, split them accordingly and returns them