summaryrefslogtreecommitdiff
path: root/libnetwork/cmd
diff options
context:
space:
mode:
authorArko Dasgupta <arko.dasgupta@docker.com>2020-12-13 15:56:30 -0800
committerArko Dasgupta <arko.dasgupta@docker.com>2020-12-14 18:46:22 -0800
commit33a82a26a8ee4d049e9d7ba61e1aef34d44be4ce (patch)
treeacbc9a78d95ca4cfe812b7308d6ea49173e3e66d /libnetwork/cmd
parent09be71b90059ce381a0e1362b793443d0409d3ee (diff)
downloaddocker-33a82a26a8ee4d049e9d7ba61e1aef34d44be4ce.tar.gz
Fix IPv6 Port Forwarding for the Bridge Driver
1. Allocate either a IPv4 and/or IPv6 Port Binding (HostIP, HostPort, ContainerIP, ContainerPort) based on the input and system parameters 2. Update the userland proxy as well as dummy proxy (inside port mapper) to specifically listen on either the IPv4 or IPv6 network Signed-off-by: Arko Dasgupta <arko.dasgupta@docker.com>
Diffstat (limited to 'libnetwork/cmd')
-rw-r--r--libnetwork/cmd/proxy/proxy.go10
-rw-r--r--libnetwork/cmd/proxy/sctp_proxy.go7
-rw-r--r--libnetwork/cmd/proxy/tcp_proxy.go7
-rw-r--r--libnetwork/cmd/proxy/udp_proxy.go7
4 files changed, 28 insertions, 3 deletions
diff --git a/libnetwork/cmd/proxy/proxy.go b/libnetwork/cmd/proxy/proxy.go
index b04bd88da0..1bd8f9d8e1 100644
--- a/libnetwork/cmd/proxy/proxy.go
+++ b/libnetwork/cmd/proxy/proxy.go
@@ -8,6 +8,16 @@ import (
"github.com/ishidawataru/sctp"
)
+// ipVersion refers to IP version - v4 or v6
+type ipVersion string
+
+const (
+ // IPv4 is version 4
+ ipv4 ipVersion = "4"
+ // IPv4 is version 6
+ ipv6 ipVersion = "6"
+)
+
// Proxy defines the behavior of a proxy. It forwards traffic back and forth
// between two endpoints : the frontend and the backend.
// It can be used to do software port-mapping between two addresses.
diff --git a/libnetwork/cmd/proxy/sctp_proxy.go b/libnetwork/cmd/proxy/sctp_proxy.go
index ce00fdb05d..9b18686341 100644
--- a/libnetwork/cmd/proxy/sctp_proxy.go
+++ b/libnetwork/cmd/proxy/sctp_proxy.go
@@ -19,7 +19,12 @@ type SCTPProxy struct {
// NewSCTPProxy creates a new SCTPProxy.
func NewSCTPProxy(frontendAddr, backendAddr *sctp.SCTPAddr) (*SCTPProxy, error) {
- listener, err := sctp.ListenSCTP("sctp", frontendAddr)
+ // detect version of hostIP to bind only to correct version
+ ipVersion := ipv4
+ if frontendAddr.IPAddrs[0].IP.To4() == nil {
+ ipVersion = ipv6
+ }
+ listener, err := sctp.ListenSCTP("sctp"+string(ipVersion), frontendAddr)
if err != nil {
return nil, err
}
diff --git a/libnetwork/cmd/proxy/tcp_proxy.go b/libnetwork/cmd/proxy/tcp_proxy.go
index 4ac643a788..fe8c8fac9d 100644
--- a/libnetwork/cmd/proxy/tcp_proxy.go
+++ b/libnetwork/cmd/proxy/tcp_proxy.go
@@ -17,7 +17,12 @@ type TCPProxy struct {
// NewTCPProxy creates a new TCPProxy.
func NewTCPProxy(frontendAddr, backendAddr *net.TCPAddr) (*TCPProxy, error) {
- listener, err := net.ListenTCP("tcp", frontendAddr)
+ // detect version of hostIP to bind only to correct version
+ ipVersion := ipv4
+ if frontendAddr.IP.To4() == nil {
+ ipVersion = ipv6
+ }
+ listener, err := net.ListenTCP("tcp"+string(ipVersion), frontendAddr)
if err != nil {
return nil, err
}
diff --git a/libnetwork/cmd/proxy/udp_proxy.go b/libnetwork/cmd/proxy/udp_proxy.go
index 12b96db646..66bacafa4f 100644
--- a/libnetwork/cmd/proxy/udp_proxy.go
+++ b/libnetwork/cmd/proxy/udp_proxy.go
@@ -55,7 +55,12 @@ type UDPProxy struct {
// NewUDPProxy creates a new UDPProxy.
func NewUDPProxy(frontendAddr, backendAddr *net.UDPAddr) (*UDPProxy, error) {
- listener, err := net.ListenUDP("udp", frontendAddr)
+ // detect version of hostIP to bind only to correct version
+ ipVersion := ipv4
+ if frontendAddr.IP.To4() == nil {
+ ipVersion = ipv6
+ }
+ listener, err := net.ListenUDP("udp"+string(ipVersion), frontendAddr)
if err != nil {
return nil, err
}