From 3c5932086af51f57c497690ce3cf18a906b700cf Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Tue, 28 Feb 2017 10:51:40 +0100 Subject: [PATCH] Remove daemon.VXSubnets duplicate code Refactor daemon.V4Subnets and daemon.V6Subnets to limit duplication Signed-off-by: Vincent Demeester --- daemon/cluster/cluster.go | 3 +-- daemon/cluster/listen_addr.go | 3 +-- daemon/daemon.go | 40 ++++++++++++----------------------- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index 8d8aa0ac31..48e4003084 100644 --- a/daemon/cluster/cluster.go +++ b/daemon/cluster/cluster.go @@ -89,8 +89,7 @@ var errSwarmCertificatesExpired = errors.New("Swarm certificates have expired. T // NetworkSubnetsProvider exposes functions for retrieving the subnets // of networks managed by Docker, so they can be filtered. type NetworkSubnetsProvider interface { - V4Subnets() []net.IPNet - V6Subnets() []net.IPNet + Subnets() ([]net.IPNet, []net.IPNet) } // Config provides values for Cluster. diff --git a/daemon/cluster/listen_addr.go b/daemon/cluster/listen_addr.go index c24d4865b3..83e74ad464 100644 --- a/daemon/cluster/listen_addr.go +++ b/daemon/cluster/listen_addr.go @@ -162,8 +162,7 @@ func (c *Cluster) resolveSystemAddrViaSubnetCheck() (net.IP, error) { var systemInterface string // List Docker-managed subnets - v4Subnets := c.config.NetworkSubnetsProvider.V4Subnets() - v6Subnets := c.config.NetworkSubnetsProvider.V6Subnets() + v4Subnets, v6Subnets := c.config.NetworkSubnetsProvider.Subnets() ifaceLoop: for _, intf := range interfaces { diff --git a/daemon/daemon.go b/daemon/daemon.go index 74c342cd78..4ecd2fa50a 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -878,40 +878,28 @@ func (daemon *Daemon) Unmount(container *container.Container) error { return nil } -// V4Subnets returns the IPv4 subnets of networks that are managed by Docker. -func (daemon *Daemon) V4Subnets() []net.IPNet { - var subnets []net.IPNet +// Subnets return the IPv4 and IPv6 subnets of networks that are manager by Docker. +func (daemon *Daemon) Subnets() ([]net.IPNet, []net.IPNet) { + var v4Subnets []net.IPNet + var v6Subnets []net.IPNet managedNetworks := daemon.netController.Networks() for _, managedNetwork := range managedNetworks { - v4Infos, _ := managedNetwork.Info().IpamInfo() - for _, v4Info := range v4Infos { - if v4Info.IPAMData.Pool != nil { - subnets = append(subnets, *v4Info.IPAMData.Pool) + v4infos, v6infos := managedNetwork.Info().IpamInfo() + for _, info := range v4infos { + if info.IPAMData.Pool != nil { + v4Subnets = append(v4Subnets, *info.IPAMData.Pool) + } + } + for _, info := range v6infos { + if info.IPAMData.Pool != nil { + v6Subnets = append(v6Subnets, *info.IPAMData.Pool) } } } - return subnets -} - -// V6Subnets returns the IPv6 subnets of networks that are managed by Docker. -func (daemon *Daemon) V6Subnets() []net.IPNet { - var subnets []net.IPNet - - managedNetworks := daemon.netController.Networks() - - for _, managedNetwork := range managedNetworks { - _, v6Infos := managedNetwork.Info().IpamInfo() - for _, v6Info := range v6Infos { - if v6Info.IPAMData.Pool != nil { - subnets = append(subnets, *v6Info.IPAMData.Pool) - } - } - } - - return subnets + return v4Subnets, v6Subnets } // GraphDriverName returns the name of the graph driver used by the layer.Store