1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Package ipamutils provides utility functions for ipam management
- package ipamutils
- import (
- "net"
- "sync"
- )
- 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
- )
- // InitNetworks initializes the pre-defined networks used by the built-in IP allocator
- func InitNetworks() {
- initNetworksOnce.Do(func() {
- PredefinedBroadNetworks = initBroadPredefinedNetworks()
- PredefinedGranularNetworks = initGranularPredefinedNetworks()
- })
- }
- func initBroadPredefinedNetworks() []*net.IPNet {
- pl := make([]*net.IPNet, 0, 31)
- mask := []byte{255, 255, 0, 0}
- for i := 17; i < 32; i++ {
- pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask})
- }
- mask20 := []byte{255, 255, 240, 0}
- for i := 0; i < 16; i++ {
- pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20})
- }
- return pl
- }
- func initGranularPredefinedNetworks() []*net.IPNet {
- pl := make([]*net.IPNet, 0, 256*256)
- mask := []byte{255, 255, 255, 0}
- for i := 0; i < 256; i++ {
- for j := 0; j < 256; j++ {
- pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask})
- }
- }
- return pl
- }
|