| // FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: | |
| //go:build go1.22 | |
| // Package ipamutils provides utility functions for ipam management | |
| package ipamutils | |
| import ( | |
| "net/netip" | |
| "slices" | |
| ) | |
| var ( | |
| localScopeDefaultNetworks = []*NetworkToSplit{ | |
| {netip.MustParsePrefix("172.17.0.0/16"), 16}, | |
| {netip.MustParsePrefix("172.18.0.0/16"), 16}, | |
| {netip.MustParsePrefix("172.19.0.0/16"), 16}, | |
| {netip.MustParsePrefix("172.20.0.0/14"), 16}, | |
| {netip.MustParsePrefix("172.24.0.0/14"), 16}, | |
| {netip.MustParsePrefix("172.28.0.0/14"), 16}, | |
| {netip.MustParsePrefix("192.168.0.0/16"), 20}, | |
| } | |
| globalScopeDefaultNetworks = []*NetworkToSplit{ | |
| {netip.MustParsePrefix("10.0.0.0/8"), 24}, | |
| } | |
| ) | |
| // NetworkToSplit represent a network that has to be split in chunks with mask length Size. | |
| // Each subnet in the set is derived from the Base pool. Base is to be passed | |
| // in CIDR format. | |
| // Example: a Base "10.10.0.0/16 with Size 24 will define the set of 256 | |
| // 10.10.[0-255].0/24 address pools | |
| type NetworkToSplit struct { | |
| Base netip.Prefix `json:"base"` | |
| Size int `json:"size"` | |
| } | |
| // FirstPrefix returns the first prefix available in NetworkToSplit. | |
| func (n NetworkToSplit) FirstPrefix() netip.Prefix { | |
| return netip.PrefixFrom(n.Base.Addr(), n.Size) | |
| } | |
| // Overlaps is a util function checking whether 'p' overlaps with 'n'. | |
| func (n NetworkToSplit) Overlaps(p netip.Prefix) bool { | |
| return n.Base.Overlaps(p) | |
| } | |
| // GetGlobalScopeDefaultNetworks returns a copy of the global-scope network list. | |
| func GetGlobalScopeDefaultNetworks() []*NetworkToSplit { | |
| return slices.Clone(globalScopeDefaultNetworks) | |
| } | |
| // GetLocalScopeDefaultNetworks returns a copy of the default local-scope network list. | |
| func GetLocalScopeDefaultNetworks() []*NetworkToSplit { | |
| return slices.Clone(localScopeDefaultNetworks) | |
| } |