mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
33a82a26a8
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>
50 lines
1.5 KiB
Go
50 lines
1.5 KiB
Go
// docker-proxy provides a network Proxy interface and implementations for TCP
|
|
// and UDP.
|
|
package main
|
|
|
|
import (
|
|
"net"
|
|
|
|
"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.
|
|
// e.g. forward all traffic between the frontend (host) 127.0.0.1:3000
|
|
// to the backend (container) at 172.17.42.108:4000.
|
|
type Proxy interface {
|
|
// Run starts forwarding traffic back and forth between the front
|
|
// and back-end addresses.
|
|
Run()
|
|
// Close stops forwarding traffic and close both ends of the Proxy.
|
|
Close()
|
|
// FrontendAddr returns the address on which the proxy is listening.
|
|
FrontendAddr() net.Addr
|
|
// BackendAddr returns the proxied address.
|
|
BackendAddr() net.Addr
|
|
}
|
|
|
|
// NewProxy creates a Proxy according to the specified frontendAddr and backendAddr.
|
|
func NewProxy(frontendAddr, backendAddr net.Addr) (Proxy, error) {
|
|
switch frontendAddr.(type) {
|
|
case *net.UDPAddr:
|
|
return NewUDPProxy(frontendAddr.(*net.UDPAddr), backendAddr.(*net.UDPAddr))
|
|
case *net.TCPAddr:
|
|
return NewTCPProxy(frontendAddr.(*net.TCPAddr), backendAddr.(*net.TCPAddr))
|
|
case *sctp.SCTPAddr:
|
|
return NewSCTPProxy(frontendAddr.(*sctp.SCTPAddr), backendAddr.(*sctp.SCTPAddr))
|
|
default:
|
|
panic("Unsupported protocol")
|
|
}
|
|
}
|