github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/allocator/cnmallocator/drivers_ipam.go (about)

     1  package cnmallocator
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  
     7  	"github.com/docker/libnetwork/drvregistry"
     8  	"github.com/docker/libnetwork/ipamapi"
     9  	builtinIpam "github.com/docker/libnetwork/ipams/builtin"
    10  	nullIpam "github.com/docker/libnetwork/ipams/null"
    11  	remoteIpam "github.com/docker/libnetwork/ipams/remote"
    12  	"github.com/docker/libnetwork/ipamutils"
    13  	"github.com/sirupsen/logrus"
    14  )
    15  
    16  func initIPAMDrivers(r *drvregistry.DrvRegistry, netConfig *NetworkConfig) error {
    17  	var addressPool []*ipamutils.NetworkToSplit
    18  	var str strings.Builder
    19  	str.WriteString("Subnetlist - ")
    20  	// Extract defaultAddrPool param info and construct ipamutils.NetworkToSplit
    21  	// from the info. We will be using it to call Libnetwork API
    22  	// We also need to log new address pool info whenever swarm init
    23  	// happens with default address pool option
    24  	if netConfig != nil {
    25  		for _, p := range netConfig.DefaultAddrPool {
    26  			addressPool = append(addressPool, &ipamutils.NetworkToSplit{
    27  				Base: p,
    28  				Size: int(netConfig.SubnetSize),
    29  			})
    30  			str.WriteString(p + ",")
    31  		}
    32  		str.WriteString(": Size ")
    33  		str.WriteString(strconv.Itoa(int(netConfig.SubnetSize)))
    34  
    35  	}
    36  	if err := ipamutils.ConfigGlobalScopeDefaultNetworks(addressPool); err != nil {
    37  		return err
    38  	}
    39  	if addressPool != nil {
    40  		logrus.Infof("Swarm initialized global default address pool to: " + str.String())
    41  	}
    42  
    43  	for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){
    44  		builtinIpam.Init,
    45  		remoteIpam.Init,
    46  		nullIpam.Init,
    47  	} {
    48  		if err := fn(r, nil, nil); err != nil {
    49  			return err
    50  		}
    51  	}
    52  
    53  	return nil
    54  }