mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
package cnmallocator
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/netip"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/containerd/log"
|
|
"github.com/docker/docker/daemon/libnetwork/ipamapi"
|
|
"github.com/docker/docker/daemon/libnetwork/ipams"
|
|
"github.com/docker/docker/daemon/libnetwork/ipamutils"
|
|
"github.com/moby/swarmkit/v2/manager/allocator/networkallocator"
|
|
)
|
|
|
|
func initIPAMDrivers(r ipamapi.Registerer, netConfig *networkallocator.Config) error {
|
|
var addressPool []*ipamutils.NetworkToSplit
|
|
var str strings.Builder
|
|
str.WriteString("Subnetlist - ")
|
|
// Extract defaultAddrPool param info and construct ipamutils.NetworkToSplit
|
|
// from the info. We will be using it to call Libnetwork API
|
|
// We also need to log new address pool info whenever swarm init
|
|
// happens with default address pool option
|
|
if netConfig != nil {
|
|
for _, p := range netConfig.DefaultAddrPool {
|
|
base, err := netip.ParsePrefix(p)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid prefix %q: %w", p, err)
|
|
}
|
|
addressPool = append(addressPool, &ipamutils.NetworkToSplit{
|
|
Base: base,
|
|
Size: int(netConfig.SubnetSize),
|
|
})
|
|
str.WriteString(p + ",")
|
|
}
|
|
str.WriteString(": Size ")
|
|
str.WriteString(strconv.Itoa(int(netConfig.SubnetSize)))
|
|
|
|
}
|
|
|
|
if len(addressPool) > 0 {
|
|
log.G(context.TODO()).Info("Swarm initialized global default address pool to: " + str.String())
|
|
}
|
|
|
|
if err := ipams.Register(r, nil, nil, addressPool); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|