From fb5d195fc5b11ecd33a27ab1e628fa914833b890 Mon Sep 17 00:00:00 2001 From: Michael Cambria Date: Thu, 26 Jan 2023 22:18:05 -0500 Subject: [PATCH] Only check ipv6 when an IPv6 is configured Signed-off-by: Michael Cambria --- plugins/meta/portmap/portmap.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/meta/portmap/portmap.go b/plugins/meta/portmap/portmap.go index b89a9df5..f8ca92f1 100644 --- a/plugins/meta/portmap/portmap.go +++ b/plugins/meta/portmap/portmap.go @@ -117,11 +117,22 @@ func forwardPorts(config *PortMapConf, containerNet net.IPNet) error { } func checkPorts(config *PortMapConf, containerNet net.IPNet) error { + isV6 := (containerNet.IP.To4() == nil) dnatChain := genDnatChain(config.Name, config.ContainerID) fillDnatRules(&dnatChain, config, containerNet) - ip4t, err4 := maybeGetIptables(false) - ip6t, err6 := maybeGetIptables(true) + // check is called for each address, not once for all addresses + var ip4t *iptables.IPTables + var err4 error + var ip6t *iptables.IPTables + var err6 error + + if isV6 { + ip6t, err6 = maybeGetIptables(true) + } else { + ip4t, err4 = maybeGetIptables(false) + } + if ip4t == nil && ip6t == nil { err := fmt.Errorf("neither iptables nor ip6tables is usable") err = fmt.Errorf("%v, (iptables) %v", err, err4)