| package builtin |
| |
| import ( |
| "net" |
| |
| "github.com/docker/docker/libnetwork/ipam" |
| "github.com/docker/docker/libnetwork/ipamapi" |
| "github.com/docker/docker/libnetwork/ipamutils" |
| ) |
| |
| var ( |
| // defaultAddressPool Stores user configured subnet list |
| defaultAddressPool []*net.IPNet |
| ) |
| |
| // registerBuiltin registers the built-in ipam driver with libnetwork. |
| func registerBuiltin(ic ipamapi.Registerer) error { |
| var localAddressPool []*net.IPNet |
| if len(defaultAddressPool) > 0 { |
| localAddressPool = append([]*net.IPNet(nil), defaultAddressPool...) |
| } else { |
| localAddressPool = ipamutils.GetLocalScopeDefaultNetworks() |
| } |
| |
| a, err := ipam.NewAllocator(localAddressPool, ipamutils.GetGlobalScopeDefaultNetworks()) |
| if err != nil { |
| return err |
| } |
| |
| cps := &ipamapi.Capability{RequiresRequestReplay: true} |
| |
| return ic.RegisterIpamDriverWithCapabilities(ipamapi.DefaultIPAM, a, cps) |
| } |
| |
| // SetDefaultIPAddressPool stores default address pool. |
| func SetDefaultIPAddressPool(addressPool []*ipamutils.NetworkToSplit) error { |
| nets, err := ipamutils.SplitNetworks(addressPool) |
| if err != nil { |
| return err |
| } |
| defaultAddressPool = nets |
| return nil |
| } |