+++ /dev/null
-From 7b9c2905883df5171fda10a364a81b8c6176c8e2 Mon Sep 17 00:00:00 2001
-From: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
-Date: Mon, 26 Apr 2021 15:28:40 +0900
-Subject: [PATCH] fix port forwarding with ipv6.disable=1
-
-Make `docker run -p 80:80` functional again on environments with kernel boot parameter `ipv6.disable=1`.
-
-Fix moby/moby issue 42288
-
-Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
-[Upstream: https://github.com/moby/libnetwork/pull/2635,
- https://github.com/moby/moby/pull/42322]
-[Rework path/drop test for docker-engine]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- vendor/github.com/docker/libnetwork/drivers/bridge/port_mapping.go | 31 +++++++++++++++++++++++++++++++
- 1 file changed, 35 insertions(+), 0 deletion(-)
-
-diff --git a/vendor/github.com/docker/libnetwork/drivers/bridge/port_mapping.go b/vendor/github.com/docker/libnetwork/drivers/bridge/port_mapping.go
-index 946130ec..17bf36f9 100644
---- a/vendor/github.com/docker/libnetwork/drivers/bridge/port_mapping.go
-+++ b/vendor/github.com/docker/libnetwork/drivers/bridge/port_mapping.go
-@@ -5,6 +5,7 @@ import (
- "errors"
- "fmt"
- "net"
-+ "sync"
-
- "github.com/docker/libnetwork/types"
- "github.com/ishidawataru/sctp"
-@@ -50,6 +51,13 @@ func (n *bridgeNetwork) allocatePortsInternal(bindings []types.PortBinding, cont
- bs = append(bs, bIPv4)
- }
-
-+ // skip adding implicit v6 addr, when the kernel was booted with `ipv6.disable=1`
-+ // https://github.com/moby/moby/issues/42288
-+ isV6Binding := c.HostIP != nil && c.HostIP.To4() == nil
-+ if !isV6Binding && !IsV6Listenable() {
-+ continue
-+ }
-+
- // Allocate IPv6 Port mappings
- // If the container has no IPv6 address, allow proxying host IPv6 traffic to it
- // by setting up the binding with the IPv4 interface if the userland proxy is enabled
-@@ -211,3 +219,26 @@ func (n *bridgeNetwork) releasePort(bnd types.PortBinding) error {
-
- return portmapper.Unmap(host)
- }
-+
-+var (
-+ v6ListenableCached bool
-+ v6ListenableOnce sync.Once
-+)
-+
-+// IsV6Listenable returns true when `[::1]:0` is listenable.
-+// IsV6Listenable returns false mostly when the kernel was booted with `ipv6.disable=1` option.
-+func IsV6Listenable() bool {
-+ v6ListenableOnce.Do(func() {
-+ ln, err := net.Listen("tcp6", "[::1]:0")
-+ if err != nil {
-+ // When the kernel was booted with `ipv6.disable=1`,
-+ // we get err "listen tcp6 [::1]:0: socket: address family not supported by protocol"
-+ // https://github.com/moby/moby/issues/42288
-+ logrus.Debugf("port_mapping: v6Listenable=false (%v)", err)
-+ } else {
-+ v6ListenableCached = true
-+ ln.Close()
-+ }
-+ })
-+ return v6ListenableCached
-+}
---
-2.20.1
-