github.com/rawahars/moby@v24.0.4+incompatible/libnetwork/ipams/builtin/builtin.go (about)

     1  package builtin
     2  
     3  import (
     4  	"net"
     5  
     6  	"github.com/docker/docker/libnetwork/ipam"
     7  	"github.com/docker/docker/libnetwork/ipamapi"
     8  	"github.com/docker/docker/libnetwork/ipamutils"
     9  )
    10  
    11  var (
    12  	// defaultAddressPool Stores user configured subnet list
    13  	defaultAddressPool []*net.IPNet
    14  )
    15  
    16  // registerBuiltin registers the built-in ipam driver with libnetwork.
    17  func registerBuiltin(ic ipamapi.Registerer) error {
    18  	var localAddressPool []*net.IPNet
    19  	if len(defaultAddressPool) > 0 {
    20  		localAddressPool = append([]*net.IPNet(nil), defaultAddressPool...)
    21  	} else {
    22  		localAddressPool = ipamutils.GetLocalScopeDefaultNetworks()
    23  	}
    24  
    25  	a, err := ipam.NewAllocator(localAddressPool, ipamutils.GetGlobalScopeDefaultNetworks())
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	cps := &ipamapi.Capability{RequiresRequestReplay: true}
    31  
    32  	return ic.RegisterIpamDriverWithCapabilities(ipamapi.DefaultIPAM, a, cps)
    33  }
    34  
    35  // SetDefaultIPAddressPool stores default address pool.
    36  func SetDefaultIPAddressPool(addressPool []*ipamutils.NetworkToSplit) error {
    37  	nets, err := ipamutils.SplitNetworks(addressPool)
    38  	if err != nil {
    39  		return err
    40  	}
    41  	defaultAddressPool = nets
    42  	return nil
    43  }