diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index c8cb226291..3e8a509e9b 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -1373,9 +1373,7 @@ func (d *driver) link(network *bridgeNetwork, endpoint *bridgeEndpoint, enable b return err } - l := newLink(parentEndpoint.addr.IP.String(), - endpoint.addr.IP.String(), - ec.ExposedPorts, network.config.BridgeName) + l := newLink(parentEndpoint.addr.IP, endpoint.addr.IP, ec.ExposedPorts, network.config.BridgeName) if enable { err = l.Enable() if err != nil { @@ -1406,9 +1404,7 @@ func (d *driver) link(network *bridgeNetwork, endpoint *bridgeEndpoint, enable b continue } - l := newLink(endpoint.addr.IP.String(), - childEndpoint.addr.IP.String(), - childEndpoint.extConnConfig.ExposedPorts, network.config.BridgeName) + l := newLink(endpoint.addr.IP, childEndpoint.addr.IP, childEndpoint.extConnConfig.ExposedPorts, network.config.BridgeName) if enable { err = l.Enable() if err != nil { diff --git a/libnetwork/drivers/bridge/link.go b/libnetwork/drivers/bridge/link.go index 658039fe25..b31207e290 100644 --- a/libnetwork/drivers/bridge/link.go +++ b/libnetwork/drivers/bridge/link.go @@ -13,8 +13,8 @@ import ( ) type link struct { - parentIP string - childIP string + parentIP net.IP + childIP net.IP ports []types.TransportPort bridge string } @@ -23,7 +23,7 @@ func (l *link) String() string { return fmt.Sprintf("%s <-> %s [%v] on %s", l.parentIP, l.childIP, l.ports, l.bridge) } -func newLink(parentIP, childIP string, ports []types.TransportPort, bridge string) *link { +func newLink(parentIP, childIP net.IP, ports []types.TransportPort, bridge string) *link { return &link{ childIP: childIP, parentIP: parentIP, @@ -51,19 +51,17 @@ func (l *link) Disable() { } } -func linkContainers(action iptables.Action, parentIP, childIP string, ports []types.TransportPort, bridge string, ignoreErrors bool) error { - ip1 := net.ParseIP(parentIP) - if ip1 == nil { - return fmt.Errorf("cannot link to a container with an invalid parent IP address %q", parentIP) +func linkContainers(action iptables.Action, parentIP, childIP net.IP, ports []types.TransportPort, bridge string, ignoreErrors bool) error { + if parentIP == nil { + return fmt.Errorf("cannot link to a container with an empty parent IP address") } - ip2 := net.ParseIP(childIP) - if ip2 == nil { - return fmt.Errorf("cannot link to a container with an invalid child IP address %q", childIP) + if childIP == nil { + return fmt.Errorf("cannot link to a container with an empty child IP address") } chain := iptables.ChainInfo{Name: DockerChain} for _, port := range ports { - err := chain.Link(action, ip1, ip2, int(port.Port), port.Proto.String(), bridge) + err := chain.Link(action, parentIP, childIP, int(port.Port), port.Proto.String(), bridge) if !ignoreErrors && err != nil { return err } diff --git a/libnetwork/drivers/bridge/link_test.go b/libnetwork/drivers/bridge/link_test.go index 3a1cbf14bd..fc8fbd5336 100644 --- a/libnetwork/drivers/bridge/link_test.go +++ b/libnetwork/drivers/bridge/link_test.go @@ -3,6 +3,7 @@ package bridge import ( + "net" "testing" "github.com/docker/docker/libnetwork/types" @@ -19,23 +20,31 @@ func getPorts() []types.TransportPort { func TestLinkNew(t *testing.T) { ports := getPorts() - link := newLink("172.0.17.3", "172.0.17.2", ports, "docker0") + const ( + pIP = "172.0.17.3" + cIP = "172.0.17.2" + bridgeName = "docker0" + ) - if link == nil { + parentIP := net.ParseIP(pIP) + childIP := net.ParseIP(cIP) + + l := newLink(parentIP, childIP, ports, bridgeName) + if l == nil { t.FailNow() } - if link.parentIP != "172.0.17.3" { + if l.parentIP.String() != pIP { t.Fail() } - if link.childIP != "172.0.17.2" { + if l.childIP.String() != cIP { t.Fail() } - for i, p := range link.ports { + for i, p := range l.ports { if p != ports[i] { t.Fail() } } - if link.bridge != "docker0" { + if l.bridge != bridgeName { t.Fail() } }