123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Package ipamapi specifies the contract the IPAM service (built-in or remote) needs to satisfy.
- package ipamapi
- import (
- "errors"
- "net"
- )
- /********************
- * IPAM plugin types
- ********************/
- const (
- // DefaultIPAM is the name of the built-in default ipam driver
- DefaultIPAM = "default"
- // PluginEndpointType represents the Endpoint Type used by Plugin system
- PluginEndpointType = "IPAM"
- )
- // Callback provides a Callback interface for registering an IPAM instance into LibNetwork
- type Callback interface {
- // RegisterDriver provides a way for Remote drivers to dynamically register new NetworkType and associate with a ipam instance
- RegisterIpamDriver(name string, driver Ipam) error
- }
- /**************
- * IPAM Errors
- **************/
- // Weel-known errors returned by IPAM
- var (
- ErrInvalidIpamService = errors.New("Invalid IPAM Service")
- ErrInvalidIpamConfigService = errors.New("Invalid IPAM Config Service")
- ErrIpamNotAvailable = errors.New("IPAM Service not available")
- ErrIpamInternalError = errors.New("IPAM Internal Error")
- ErrInvalidAddressSpace = errors.New("Invalid Address Space")
- ErrInvalidPool = errors.New("Invalid Address Pool")
- ErrInvalidSubPool = errors.New("Invalid Address SubPool")
- ErrInvalidRequest = errors.New("Invalid Request")
- ErrPoolNotFound = errors.New("Address Pool not found")
- ErrOverlapPool = errors.New("Address pool overlaps with existing pool on this address space")
- ErrNoAvailablePool = errors.New("No available pool")
- ErrNoAvailableIPs = errors.New("No available addresses on this pool")
- ErrIPAlreadyAllocated = errors.New("Address already in use")
- ErrIPOutOfRange = errors.New("Requested address is out of range")
- ErrPoolOverlap = errors.New("Pool overlaps with other one on this address space")
- ErrBadPool = errors.New("Address space does not contain specified address pool")
- )
- /*******************************
- * IPAM Service Interface
- *******************************/
- // 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. pool describes the pool of addrresses in CIDR notation.
- // subpool indicates a smaller range of addresses from the pool, for now it is specified in CIDR notation.
- // Both pool and subpool 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, pool, subPool string, options map[string]string, v6 bool) (string, *net.IPNet, map[string]string, error)
- // ReleasePool releases the address pool identified by the passed id
- ReleasePool(poolID string) error
- // Request address from the specified pool ID. Input options or preferred IP can be passed.
- RequestAddress(string, net.IP, map[string]string) (*net.IPNet, map[string]string, error)
- // Release the address from the specified pool ID
- ReleaseAddress(string, net.IP) error
- }
|