1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Package ipamapi specifies the contract the IPAM service (built-in or remote) needs to satisfy.
- package ipamapi
- import (
- "net"
- "github.com/docker/docker/libnetwork/types"
- )
- // IPAM plugin types
- const (
- // DefaultIPAM is the name of the built-in default ipam driver
- DefaultIPAM = "default"
- // NullIPAM is the name of the built-in null ipam driver
- NullIPAM = "null"
- // PluginEndpointType represents the Endpoint Type used by Plugin system
- PluginEndpointType = "IpamDriver"
- // RequestAddressType represents the Address Type used when requesting an address
- RequestAddressType = "RequestAddressType"
- )
- // Registerer provides a callback interface for registering IPAM instances into libnetwork.
- type Registerer interface {
- // RegisterIpamDriver provides a way for drivers to dynamically register with libnetwork
- RegisterIpamDriver(name string, driver Ipam) error
- // RegisterIpamDriverWithCapabilities provides a way for drivers to dynamically register with libnetwork and specify capabilities
- RegisterIpamDriverWithCapabilities(name string, driver Ipam, capability *Capability) error
- }
- // Well-known errors returned by IPAM
- var (
- ErrInvalidAddressSpace = types.InvalidParameterErrorf("invalid address space")
- ErrInvalidPool = types.InvalidParameterErrorf("invalid address pool")
- ErrInvalidSubPool = types.InvalidParameterErrorf("invalid address subpool")
- ErrNoAvailableIPs = types.UnavailableErrorf("no available addresses on this pool")
- ErrNoIPReturned = types.UnavailableErrorf("no address returned")
- ErrIPAlreadyAllocated = types.ForbiddenErrorf("Address already in use")
- ErrIPOutOfRange = types.InvalidParameterErrorf("requested address is out of range")
- ErrPoolOverlap = types.ForbiddenErrorf("Pool overlaps with other one on this address space")
- ErrBadPool = types.InvalidParameterErrorf("address space does not contain specified address pool")
- )
- // Ipam represents the interface the IPAM service plugins must implement
- // in order to allow injection/modification of IPAM database.
- type Ipam interface {
- // GetDefaultAddressSpaces returns the default local and global address spaces for this ipam
- GetDefaultAddressSpaces() (string, string, error)
- // RequestPool returns an address pool along with its unique id. Address space is a mandatory field
- // which denotes a set of non-overlapping pools. requestedPool describes the pool of addresses in CIDR notation.
- // requestedSubPool indicates a smaller range of addresses from the pool, for now it is specified in CIDR notation.
- // Both requestedPool and requestedSubPool are non-mandatory fields. When they are not specified, Ipam driver may choose to
- // return a self chosen pool for this request. In such case the v6 flag needs to be set appropriately so
- // that the driver would return the expected ip version pool.
- RequestPool(addressSpace, requestedPool, requestedSubPool string, options map[string]string, v6 bool) (poolID string, pool *net.IPNet, meta map[string]string, err error)
- // ReleasePool releases the address pool identified by the passed id
- ReleasePool(poolID string) error
- // RequestAddress request an address from the specified pool ID. Input options or required IP can be passed.
- RequestAddress(string, net.IP, map[string]string) (*net.IPNet, map[string]string, error)
- // ReleaseAddress releases the address from the specified pool ID.
- ReleaseAddress(string, net.IP) error
- // IsBuiltIn returns true if it is a built-in driver.
- IsBuiltIn() bool
- }
- // Capability represents the requirements and capabilities of the IPAM driver
- type Capability struct {
- // Whether on address request, libnetwork must
- // specify the endpoint MAC address
- RequiresMACAddress bool
- // Whether of daemon start, libnetwork must replay the pool
- // request and the address request for current local networks
- RequiresRequestReplay bool
- }
|