From b005c7d6ebf7c980b1247532188dfe741659b175 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Fri, 3 Mar 2017 12:56:49 -0800 Subject: [PATCH 1/2] Vendoring libnetwork @1a01921 Signed-off-by: Alessandro Boch --- vendor.conf | 2 +- vendor/github.com/docker/libnetwork/agent.go | 92 +++++++++++-------- .../docker/libnetwork/osl/neigh_linux.go | 2 + 3 files changed, 55 insertions(+), 41 deletions(-) diff --git a/vendor.conf b/vendor.conf index b5493c434a..5c7ec78214 100644 --- a/vendor.conf +++ b/vendor.conf @@ -23,7 +23,7 @@ github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5 github.com/imdario/mergo 0.2.1 #get libnetwork packages -github.com/docker/libnetwork bdc9dcea1a74443c61d4d156dfcece1df8105f13 +github.com/docker/libnetwork 1a019214c9cb80bd56219e5d6994a22caf302895 github.com/docker/go-events 18b43f1bc85d9cdd42c05a6cd2d444c7a200a894 github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80 github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec diff --git a/vendor/github.com/docker/libnetwork/agent.go b/vendor/github.com/docker/libnetwork/agent.go index 6a03fa8f58..b0c65cba98 100644 --- a/vendor/github.com/docker/libnetwork/agent.go +++ b/vendor/github.com/docker/libnetwork/agent.go @@ -463,6 +463,10 @@ func (ep *endpoint) deleteDriverInfoFromCluster() error { } func (ep *endpoint) addServiceInfoToCluster() error { + if ep.isAnonymous() && len(ep.myAliases) == 0 || ep.Iface().Address() == nil { + return nil + } + n := ep.getNetwork() if !n.isClusterEligible() { return nil @@ -470,38 +474,42 @@ func (ep *endpoint) addServiceInfoToCluster() error { c := n.getController() agent := c.getAgent() - if !ep.isAnonymous() && ep.Iface().Address() != nil { - var ingressPorts []*PortConfig - if ep.svcID != "" { - // Gossip ingress ports only in ingress network. - if n.ingress { - ingressPorts = ep.ingressPorts - } - if err := c.addServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil { - return err - } + var ingressPorts []*PortConfig + if ep.svcID != "" { + // Gossip ingress ports only in ingress network. + if n.ingress { + ingressPorts = ep.ingressPorts } - buf, err := proto.Marshal(&EndpointRecord{ - Name: ep.Name(), - ServiceName: ep.svcName, - ServiceID: ep.svcID, - VirtualIP: ep.virtualIP.String(), - IngressPorts: ingressPorts, - Aliases: ep.svcAliases, - TaskAliases: ep.myAliases, - EndpointIP: ep.Iface().Address().IP.String(), - }) - - if err != nil { + if err := c.addServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil { return err } + } - if agent != nil { - if err := agent.networkDB.CreateEntry("endpoint_table", n.ID(), ep.ID(), buf); err != nil { - return err - } + name := ep.Name() + if ep.isAnonymous() { + name = ep.MyAliases()[0] + } + + buf, err := proto.Marshal(&EndpointRecord{ + Name: name, + ServiceName: ep.svcName, + ServiceID: ep.svcID, + VirtualIP: ep.virtualIP.String(), + IngressPorts: ingressPorts, + Aliases: ep.svcAliases, + TaskAliases: ep.myAliases, + EndpointIP: ep.Iface().Address().IP.String(), + }) + + if err != nil { + return err + } + + if agent != nil { + if err := agent.networkDB.CreateEntry("endpoint_table", n.ID(), ep.ID(), buf); err != nil { + return err } } @@ -509,6 +517,10 @@ func (ep *endpoint) addServiceInfoToCluster() error { } func (ep *endpoint) deleteServiceInfoFromCluster() error { + if ep.isAnonymous() && len(ep.myAliases) == 0 { + return nil + } + n := ep.getNetwork() if !n.isClusterEligible() { return nil @@ -517,23 +529,23 @@ func (ep *endpoint) deleteServiceInfoFromCluster() error { c := n.getController() agent := c.getAgent() - if !ep.isAnonymous() { - if ep.svcID != "" && ep.Iface().Address() != nil { - var ingressPorts []*PortConfig - if n.ingress { - ingressPorts = ep.ingressPorts - } - - if err := c.rmServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil { - return err - } + if ep.svcID != "" && ep.Iface().Address() != nil { + var ingressPorts []*PortConfig + if n.ingress { + ingressPorts = ep.ingressPorts } - if agent != nil { - if err := agent.networkDB.DeleteEntry("endpoint_table", n.ID(), ep.ID()); err != nil { - return err - } + + if err := c.rmServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil { + return err } } + + if agent != nil { + if err := agent.networkDB.DeleteEntry("endpoint_table", n.ID(), ep.ID()); err != nil { + return err + } + } + return nil } diff --git a/vendor/github.com/docker/libnetwork/osl/neigh_linux.go b/vendor/github.com/docker/libnetwork/osl/neigh_linux.go index e875f6ab64..c881f5df48 100644 --- a/vendor/github.com/docker/libnetwork/osl/neigh_linux.go +++ b/vendor/github.com/docker/libnetwork/osl/neigh_linux.go @@ -147,7 +147,9 @@ func (n *networkNamespace) AddNeighbor(dstIP net.IP, dstMac net.HardwareAddr, op return fmt.Errorf("could not add neighbor entry: %v", err) } + n.Lock() n.neighbors = append(n.neighbors, nh) + n.Unlock() return nil } From ef794c3649c3a2085289aacbcb7f37fb02cb6523 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Fri, 3 Mar 2017 13:04:04 -0800 Subject: [PATCH 2/2] Add test for anonymous container w/ net-alias on swarm network Signed-off-by: Alessandro Boch --- integration-cli/docker_cli_swarm_test.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go index 909698594d..026891e3ef 100644 --- a/integration-cli/docker_cli_swarm_test.go +++ b/integration-cli/docker_cli_swarm_test.go @@ -303,11 +303,16 @@ func (s *DockerSwarmSuite) TestSwarmContainerEndpointOptions(c *check.C) { _, err = d.Cmd("run", "-d", "--net=foo", "--name=second", "busybox", "top") c.Assert(err, checker.IsNil, check.Commentf(out)) - // ping first container and its alias + _, err = d.Cmd("run", "-d", "--net=foo", "--net-alias=third-alias", "busybox", "top") + c.Assert(err, checker.IsNil, check.Commentf(out)) + + // ping first container and its alias, also ping third and anonymous container by its alias _, err = d.Cmd("exec", "second", "ping", "-c", "1", "first") c.Assert(err, check.IsNil, check.Commentf(out)) _, err = d.Cmd("exec", "second", "ping", "-c", "1", "first-alias") c.Assert(err, check.IsNil, check.Commentf(out)) + _, err = d.Cmd("exec", "second", "ping", "-c", "1", "third-alias") + c.Assert(err, check.IsNil, check.Commentf(out)) } func (s *DockerSwarmSuite) TestSwarmContainerAttachByNetworkId(c *check.C) {