From cbe187d008c91f4be3167ca3c32c2febc82d5344 Mon Sep 17 00:00:00 2001 From: MichalK Date: Fri, 2 Jul 2021 10:05:26 +0200 Subject: [PATCH] [Fix] Use default gateway, when bridge network doesn't have it (#666, @kuritka) Signed-off-by: kuritka --- pkg/runtimes/docker/network.go | 35 +++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/pkg/runtimes/docker/network.go b/pkg/runtimes/docker/network.go index 7d0fc6a3..80f62f4c 100644 --- a/pkg/runtimes/docker/network.go +++ b/pkg/runtimes/docker/network.go @@ -80,23 +80,11 @@ func (d Docker) GetNetwork(ctx context.Context, searchNet *k3d.ClusterNetwork) ( // for networks that have an IPAM config, we inspect that as well (e.g. "host" network doesn't have it) if len(networkList[0].IPAM.Config) > 0 { - prefix, err := netaddr.ParseIPPrefix(networkList[0].IPAM.Config[0].Subnet) + network.IPAM, err = d.parseIPAM(networkList[0].IPAM.Config[0]) if err != nil { return nil, err } - gateway, err := netaddr.ParseIP(networkList[0].IPAM.Config[0].Gateway) - if err != nil { - return nil, err - } - - network.IPAM = k3d.IPAM{ - IPPrefix: prefix, - IPsUsed: []netaddr.IP{ - gateway, - }, - } - for _, container := range networkList[0].Containers { if container.IPv4Address != "" { ip, err := netaddr.ParseIP(container.IPv4Address) @@ -348,3 +336,24 @@ func (d Docker) getFreeSubnetPrefix(ctx context.Context) (netaddr.IPPrefix, erro return fakenet.IPAM.IPPrefix, nil } + +// parseIPAM Returns an IPAM structure with the subnet and gateway filled in. If some of the values +// cannot be parsed, an error is returned. If gateway is empty, the function calculates the default gateway. +func (d Docker) parseIPAM(config network.IPAMConfig) (ipam k3d.IPAM, err error){ + var gateway netaddr.IP + ipam = k3d.IPAM{ IPsUsed: []netaddr.IP{}} + + ipam.IPPrefix, err = netaddr.ParseIPPrefix(config.Subnet) + if err != nil { + return + } + + if config.Gateway == "" { + gateway = ipam.IPPrefix.IP.Next() + } else { + gateway, err = netaddr.ParseIP(config.Gateway) + } + ipam.IPsUsed = append(ipam.IPsUsed, gateway) + + return +}