a0a473125b
After moving libnetwork to this repo, we need to update all the import paths for libnetwork to point to docker/docker/libnetwork instead of docker/libnetwork. This change implements that. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package portmapper
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/docker/docker/libnetwork/iptables"
|
|
"github.com/docker/docker/libnetwork/portallocator"
|
|
)
|
|
|
|
// PortMapper manages the network address translation
|
|
type PortMapper struct {
|
|
bridgeName string
|
|
|
|
// udp:ip:port
|
|
currentMappings map[string]*mapping
|
|
lock sync.Mutex
|
|
|
|
proxyPath string
|
|
|
|
Allocator *portallocator.PortAllocator
|
|
chain *iptables.ChainInfo
|
|
}
|
|
|
|
// SetIptablesChain sets the specified chain into portmapper
|
|
func (pm *PortMapper) SetIptablesChain(c *iptables.ChainInfo, bridgeName string) {
|
|
pm.chain = c
|
|
pm.bridgeName = bridgeName
|
|
}
|
|
|
|
// AppendForwardingTableEntry adds a port mapping to the forwarding table
|
|
func (pm *PortMapper) AppendForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error {
|
|
return pm.forward(iptables.Append, proto, sourceIP, sourcePort, containerIP, containerPort)
|
|
}
|
|
|
|
// DeleteForwardingTableEntry removes a port mapping from the forwarding table
|
|
func (pm *PortMapper) DeleteForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error {
|
|
return pm.forward(iptables.Delete, proto, sourceIP, sourcePort, containerIP, containerPort)
|
|
}
|
|
|
|
func (pm *PortMapper) forward(action iptables.Action, proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error {
|
|
if pm.chain == nil {
|
|
return nil
|
|
}
|
|
return pm.chain.Forward(action, sourceIP, sourcePort, proto, containerIP, containerPort, pm.bridgeName)
|
|
}
|