proxy: map TCP ports at 0x10000-0x20000, and UDP at 0x20000-

The proxy process command-line arguments assume we're exposing TCP
or UDP ports on Moby's public IPs. Instead we're forwarding over vsock
where we must map the Moby ports onto vsock ports. Normally TCP and
UDP ports are different, but with vsock there is only one space of
port numbers so we have to map them into different ranges.

This patch maps Moby ports as follows:

- TCP port x onto vsock port 0x10000 + x
- UDP port x onto vsock port 0x20000 + x

Signed-off-by: David Scott <dave.scott@docker.com>
This commit is contained in:
David Scott 2016-04-21 14:45:55 +01:00
parent 85d42d5c03
commit 58ad1b7161

View File

@ -28,8 +28,11 @@ func sendOK() {
f.Close()
}
// Map dynamic ports onto vsock ports over this offset
var vSockPortOffset = 0x10000
// Map dynamic TCP ports onto vsock ports over this offset
var vSockTCPPortOffset = 0x10000
// Map dynamic UDP ports onto vsock ports over this offset
var vSockUDPPortOffset = 0x20000
// From docker/libnetwork/portmapper/proxy.go:
@ -49,11 +52,11 @@ func parseHostContainerAddrs() (host net.Addr, port int, container net.Addr) {
switch *proto {
case "tcp":
host = &net.TCPAddr{IP: net.ParseIP(*hostIP), Port: *hostPort}
port = vSockPortOffset + *hostPort
port = vSockTCPPortOffset + *hostPort
container = &net.TCPAddr{IP: net.ParseIP(*containerIP), Port: *containerPort}
case "udp":
host = &net.UDPAddr{IP: net.ParseIP(*hostIP), Port: *hostPort}
port = vSockPortOffset + *hostPort
port = vSockUDPPortOffset + *hostPort
container = &net.UDPAddr{IP: net.ParseIP(*containerIP), Port: *containerPort}
default:
log.Fatalf("unsupported protocol %s", *proto)