Tizen_4.0 base
[platform/upstream/docker-engine.git] / vendor / github.com / docker / libnetwork / ipamutils / utils.go
1 // Package ipamutils provides utility functions for ipam management
2 package ipamutils
3
4 import (
5         "net"
6         "sync"
7 )
8
9 var (
10         // PredefinedBroadNetworks contains a list of 31 IPv4 private networks with host size 16 and 12
11         // (172.17-31.x.x/16, 192.168.x.x/20) which do not overlap with the networks in `PredefinedGranularNetworks`
12         PredefinedBroadNetworks []*net.IPNet
13         // PredefinedGranularNetworks contains a list of 64K IPv4 private networks with host size 8
14         // (10.x.x.x/24) which do not overlap with the networks in `PredefinedBroadNetworks`
15         PredefinedGranularNetworks []*net.IPNet
16
17         initNetworksOnce sync.Once
18 )
19
20 // InitNetworks initializes the pre-defined networks used by the built-in IP allocator
21 func InitNetworks() {
22         initNetworksOnce.Do(func() {
23                 PredefinedBroadNetworks = initBroadPredefinedNetworks()
24                 PredefinedGranularNetworks = initGranularPredefinedNetworks()
25         })
26 }
27
28 func initBroadPredefinedNetworks() []*net.IPNet {
29         pl := make([]*net.IPNet, 0, 31)
30         mask := []byte{255, 255, 0, 0}
31         for i := 17; i < 32; i++ {
32                 pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask})
33         }
34         mask20 := []byte{255, 255, 240, 0}
35         for i := 0; i < 16; i++ {
36                 pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20})
37         }
38         return pl
39 }
40
41 func initGranularPredefinedNetworks() []*net.IPNet {
42         pl := make([]*net.IPNet, 0, 256*256)
43         mask := []byte{255, 255, 255, 0}
44         for i := 0; i < 256; i++ {
45                 for j := 0; j < 256; j++ {
46                         pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask})
47                 }
48         }
49         return pl
50 }