| // Package null implements the null ipam driver. Null ipam driver satisfies ipamapi contract, | |
| // but does not effectively reserve/allocate any address pool or address | |
| package null | |
| import ( | |
| "net" | |
| "net/netip" | |
| "github.com/docker/docker/libnetwork/ipamapi" | |
| "github.com/docker/docker/libnetwork/types" | |
| ) | |
| const ( | |
| // DriverName is the name of the built-in null ipam driver | |
| DriverName = "null" | |
| defaultAddressSpace = "null" | |
| defaultPoolCIDR = "0.0.0.0/0" | |
| defaultPoolID = defaultAddressSpace + "/" + defaultPoolCIDR | |
| ) | |
| var defaultPool = netip.MustParsePrefix(defaultPoolCIDR) | |
| type allocator struct{} | |
| func (a *allocator) GetDefaultAddressSpaces() (string, string, error) { | |
| return defaultAddressSpace, defaultAddressSpace, nil | |
| } | |
| func (a *allocator) RequestPool(req ipamapi.PoolRequest) (ipamapi.AllocatedPool, error) { | |
| if req.AddressSpace != defaultAddressSpace { | |
| return ipamapi.AllocatedPool{}, types.InvalidParameterErrorf("unknown address space: %s", req.AddressSpace) | |
| } | |
| if req.Pool != "" { | |
| return ipamapi.AllocatedPool{}, types.InvalidParameterErrorf("null ipam driver does not handle specific address pool requests") | |
| } | |
| if req.SubPool != "" { | |
| return ipamapi.AllocatedPool{}, types.InvalidParameterErrorf("null ipam driver does not handle specific address subpool requests") | |
| } | |
| if req.V6 { | |
| return ipamapi.AllocatedPool{}, types.InvalidParameterErrorf("null ipam driver does not handle IPv6 address pool requests") | |
| } | |
| return ipamapi.AllocatedPool{ | |
| PoolID: defaultPoolID, | |
| Pool: defaultPool, | |
| }, nil | |
| } | |
| func (a *allocator) ReleasePool(poolID string) error { | |
| return nil | |
| } | |
| func (a *allocator) RequestAddress(poolID string, ip net.IP, opts map[string]string) (*net.IPNet, map[string]string, error) { | |
| if poolID != defaultPoolID { | |
| return nil, nil, types.InvalidParameterErrorf("unknown pool id: %s", poolID) | |
| } | |
| return nil, nil, nil | |
| } | |
| func (a *allocator) ReleaseAddress(poolID string, ip net.IP) error { | |
| if poolID != defaultPoolID { | |
| return types.InvalidParameterErrorf("unknown pool id: %s", poolID) | |
| } | |
| return nil | |
| } | |
| func (a *allocator) IsBuiltIn() bool { | |
| return true | |
| } | |
| // Register registers the null ipam driver with r. | |
| func Register(r ipamapi.Registerer) error { | |
| return r.RegisterIpamDriver(DriverName, &allocator{}) | |
| } |