Skip to content

Commit b6ba572

Browse files
Flavio Criscianiselansen
authored andcommitted
Applied changes to clean up the patch
Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com> Applied changes to clean up the patch Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
1 parent d034b57 commit b6ba572

6 files changed

Lines changed: 84 additions & 67 deletions

File tree

config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type DaemonCfg struct {
4141
DriverCfg map[string]interface{}
4242
ClusterProvider cluster.Provider
4343
NetworkControlPlaneMTU int
44-
DefaultAddressPool []*ipamutils.PredefinedPools
44+
DefaultAddressPool []*ipamutils.NetworkToSplit
4545
}
4646

4747
// ClusterCfg represents cluster configuration
@@ -113,7 +113,7 @@ func OptionDefaultDriver(dd string) Option {
113113
}
114114

115115
// OptionDefaultAddressPoolConfig function returns an option setter for default address pool
116-
func OptionDefaultAddressPoolConfig(addressPool []*ipamutils.PredefinedPools) Option {
116+
func OptionDefaultAddressPoolConfig(addressPool []*ipamutils.NetworkToSplit) Option {
117117
return func(c *Config) {
118118
c.Daemon.DefaultAddressPool = addressPool
119119
}

drivers_ipam.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/docker/libnetwork/ipamutils"
1010
)
1111

12-
func initIPAMDrivers(r *drvregistry.DrvRegistry, lDs, gDs interface{}, addressPool []*ipamutils.PredefinedPools) error {
12+
func initIPAMDrivers(r *drvregistry.DrvRegistry, lDs, gDs interface{}, addressPool []*ipamutils.NetworkToSplit) error {
1313
builtinIpam.SetDefaultIPAddressPool(addressPool)
1414
for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){
1515
builtinIpam.Init,

ipams/builtin/builtin_unix.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
var (
1515
// defaultAddressPool Stores user configured subnet list
16-
defaultAddressPool []*ipamutils.PredefinedPools
16+
defaultAddressPool []*ipamutils.NetworkToSplit
1717
)
1818

1919
// Init registers the built-in ipam service with libnetwork
@@ -48,11 +48,11 @@ func Init(ic ipamapi.Callback, l, g interface{}) error {
4848
}
4949

5050
// SetDefaultIPAddressPool stores default address pool.
51-
func SetDefaultIPAddressPool(addressPool []*ipamutils.PredefinedPools) {
51+
func SetDefaultIPAddressPool(addressPool []*ipamutils.NetworkToSplit) {
5252
defaultAddressPool = addressPool
5353
}
5454

5555
// GetDefaultIPAddressPool returns default address pool.
56-
func GetDefaultIPAddressPool() []*ipamutils.PredefinedPools {
56+
func GetDefaultIPAddressPool() []*ipamutils.NetworkToSplit {
5757
return defaultAddressPool
5858
}

ipams/builtin/builtin_windows.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515

1616
var (
1717
// defaultAddressPool Stores user configured subnet list
18-
defaultAddressPool []*ipamutils.PredefinedPools
18+
defaultAddressPool []*ipamutils.NetworkToSplit
1919
)
2020

2121
// InitDockerDefault registers the built-in ipam service with libnetwork
@@ -62,11 +62,11 @@ func Init(ic ipamapi.Callback, l, g interface{}) error {
6262
}
6363

6464
// SetDefaultIPAddressPool stores default address pool .
65-
func SetDefaultIPAddressPool(addressPool []*ipamutils.PredefinedPools) {
65+
func SetDefaultIPAddressPool(addressPool []*ipamutils.NetworkToSplit) {
6666
defaultAddressPool = addressPool
6767
}
6868

6969
// GetDefaultIPAddressPool returns default address pool .
70-
func GetDefaultIPAddressPool() []*ipamutils.PredefinedPools {
70+
func GetDefaultIPAddressPool() []*ipamutils.NetworkToSplit {
7171
return defaultAddressPool
7272
}

ipamutils/utils.go

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,85 +17,57 @@ var (
1717
// (10.x.x.x/24) which do not overlap with the networks in `PredefinedBroadNetworks`
1818
PredefinedGranularNetworks []*net.IPNet
1919
initNetworksOnce sync.Once
20+
21+
defaultBroadNetwork = []*NetworkToSplit{{"172.17.0.0/16", 16}, {"172.18.0.0/16", 16}, {"172.19.0.0/16", 16},
22+
{"172.20.0.0/14", 16}, {"172.24.0.0/14", 16}, {"172.28.0.0/14", 16},
23+
{"192.168.0.0/16", 20}}
24+
defaultGranularNetwork = []*NetworkToSplit{{"10.0.0.0/8", 24}}
2025
)
2126

22-
// PredefinedPools represent a set of address pools with prefix length Size.
23-
// Each pool in the set is derived from the Base pool. Base is to be passed
24-
// in CIDR format.Currently we support only local scope networks
27+
// NetworkToSplit represent a network that has to be split in chunks with mask length Size.
28+
// Each subnet in the set is derived from the Base pool. Base is to be passed
29+
// in CIDR format.
2530
// Example: a Base "10.10.0.0/16 with Size 24 will define the set of 256
2631
// 10.10.[0-255].0/24 address pools
27-
type PredefinedPools struct {
32+
type NetworkToSplit struct {
2833
Base string `json:"base"`
2934
Size int `json:"size"`
3035
}
3136

32-
// InitNetworks initializes the local predefined address pools
33-
// with the default values.
34-
func InitNetworks(defaultAddressPool []*PredefinedPools) {
37+
// InitNetworks initializes the broad network pool and the granular network pool
38+
func InitNetworks(defaultAddressPool []*NetworkToSplit) {
3539
initNetworksOnce.Do(func() {
36-
isPredefinedPool := false
37-
PredefinedGranularNetworks = initGranularPredefinedNetworks()
40+
// error ingnored should never fail
41+
PredefinedGranularNetworks, _ = splitNetworks(defaultGranularNetwork)
3842
if defaultAddressPool == nil {
39-
defaultAddressPool = []*PredefinedPools{{"172.17.0.0/12", 16}, {"192.168.0.0/16", 20}}
40-
isPredefinedPool = true
43+
defaultAddressPool = defaultBroadNetwork
4144
}
42-
if err := InitAddressPools(defaultAddressPool); err != nil {
45+
var err error
46+
if PredefinedBroadNetworks, err = splitNetworks(defaultAddressPool); err != nil {
4347
logrus.WithError(err).Error("InitAddressPools failed to initialize the default address pool")
4448
}
45-
if isPredefinedPool {
46-
PredefinedBroadNetworks = append(PredefinedBroadNetworks[:0], PredefinedBroadNetworks[1:]...)
47-
}
4849
})
4950
}
50-
func initBroadPredefinedNetworks() []*net.IPNet {
51-
pl := make([]*net.IPNet, 0, 31)
52-
mask := []byte{255, 255, 0, 0}
53-
for i := 17; i < 32; i++ {
54-
pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask})
55-
}
56-
mask20 := []byte{255, 255, 240, 0}
57-
for i := 0; i < 16; i++ {
58-
pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20})
59-
}
60-
return pl
61-
}
6251

63-
func initGranularPredefinedNetworks() []*net.IPNet {
64-
pl := make([]*net.IPNet, 0, 256*256)
65-
mask := []byte{255, 255, 255, 0}
66-
for i := 0; i < 256; i++ {
67-
for j := 0; j < 256; j++ {
68-
pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask})
69-
}
70-
}
71-
return pl
72-
}
73-
74-
// InitAddressPools allows to initialize the local scope predefined
75-
// address pools to the desired values. It fails is invalid input is passed
76-
// or if the predefined pools were already initialized.
77-
func InitAddressPools(list []*PredefinedPools) error {
52+
// splitNetworks takes a slice of networks, split them accordingly and returns them
53+
func splitNetworks(list []*NetworkToSplit) ([]*net.IPNet, error) {
7854
localPools := make([]*net.IPNet, 0, len(list))
7955

8056
for _, p := range list {
81-
if p == nil {
82-
continue
83-
}
8457
_, b, err := net.ParseCIDR(p.Base)
8558
if err != nil {
86-
return fmt.Errorf("invalid base pool %q: %v", p.Base, err)
59+
return nil, fmt.Errorf("invalid base pool %q: %v", p.Base, err)
8760
}
8861
ones, _ := b.Mask.Size()
8962
if p.Size <= 0 || p.Size < ones {
90-
return fmt.Errorf("invalid pools size: %d", p.Size)
63+
return nil, fmt.Errorf("invalid pools size: %d", p.Size)
9164
}
92-
localPools = append(localPools, initPools(p.Size, b)...)
65+
localPools = append(localPools, splitNetwork(p.Size, b)...)
9366
}
94-
PredefinedBroadNetworks = localPools
95-
return nil
67+
return localPools, nil
9668
}
9769

98-
func initPools(size int, base *net.IPNet) []*net.IPNet {
70+
func splitNetwork(size int, base *net.IPNet) []*net.IPNet {
9971
one, bits := base.Mask.Size()
10072
mask := net.CIDRMask(size, bits)
10173
n := 1 << uint(size-one)

ipamutils/utils_test.go

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,40 @@
11
package ipamutils
22

33
import (
4+
"net"
45
"sync"
56
"testing"
67

78
_ "github.com/docker/libnetwork/testutils"
89
"github.com/stretchr/testify/assert"
910
)
1011

11-
func init() {
12-
InitNetworks(nil)
12+
func initBroadPredefinedNetworks() []*net.IPNet {
13+
pl := make([]*net.IPNet, 0, 31)
14+
mask := []byte{255, 255, 0, 0}
15+
for i := 17; i < 32; i++ {
16+
pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask})
17+
}
18+
mask20 := []byte{255, 255, 240, 0}
19+
for i := 0; i < 16; i++ {
20+
pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20})
21+
}
22+
return pl
1323
}
1424

15-
func TestGranularPredefined(t *testing.T) {
25+
func initGranularPredefinedNetworks() []*net.IPNet {
26+
pl := make([]*net.IPNet, 0, 256*256)
27+
mask := []byte{255, 255, 255, 0}
28+
for i := 0; i < 256; i++ {
29+
for j := 0; j < 256; j++ {
30+
pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask})
31+
}
32+
}
33+
return pl
34+
}
35+
36+
func TestDefaultNetwork(t *testing.T) {
37+
InitNetworks(nil)
1638
for _, nw := range PredefinedGranularNetworks {
1739
if ones, bits := nw.Mask.Size(); bits != 32 || ones != 24 {
1840
t.Fatalf("Unexpected size for network in granular list: %v", nw)
@@ -25,14 +47,37 @@ func TestGranularPredefined(t *testing.T) {
2547
}
2648
}
2749

50+
originalBroadNets := initBroadPredefinedNetworks()
51+
m := make(map[string]bool)
52+
for _, v := range originalBroadNets {
53+
m[v.String()] = true
54+
}
55+
for _, nw := range PredefinedBroadNetworks {
56+
_, ok := m[nw.String()]
57+
assert.True(t, ok)
58+
delete(m, nw.String())
59+
}
60+
61+
assert.Len(t, m, 0)
62+
63+
originalGranularNets := initGranularPredefinedNetworks()
64+
65+
m = make(map[string]bool)
66+
for _, v := range originalGranularNets {
67+
m[v.String()] = true
68+
}
69+
for _, nw := range PredefinedGranularNetworks {
70+
_, ok := m[nw.String()]
71+
assert.True(t, ok)
72+
delete(m, nw.String())
73+
}
74+
75+
assert.Len(t, m, 0)
2876
}
2977

3078
func TestInitAddressPools(t *testing.T) {
31-
prePool1 := &PredefinedPools{"172.80.0.0/16", 24}
32-
prePool2 := &PredefinedPools{"172.90.0.0/16", 24}
33-
DefaultAddressPools := []*PredefinedPools{prePool1, prePool2}
3479
initNetworksOnce = sync.Once{}
35-
InitNetworks(DefaultAddressPools)
80+
InitNetworks([]*NetworkToSplit{{"172.80.0.0/16", 24}, {"172.90.0.0/16", 24}})
3681

3782
// Check for Random IPAddresses in PredefinedBroadNetworks ex: first , last and middle
3883
assert.Len(t, PredefinedBroadNetworks, 512, "Failed to find PredefinedBroadNetworks")

0 commit comments

Comments
 (0)