From 94eb7454ff95b0dbf01dc5a233c6284747535a10 Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Wed, 10 Aug 2016 10:56:37 +0000 Subject: [PATCH] Do not attribute connections to containers based on loopback addresses --- render/container.go | 5 +++++ report/id.go | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/render/container.go b/render/container.go index 6b48a758e..412957559 100644 --- a/render/container.go +++ b/render/container.go @@ -264,6 +264,11 @@ func MapContainer2IP(m report.Node) []string { if !ok { continue } + // loopback addresses are shared among all namespaces + // so we can't use them to attribute connections to a container + if report.IsLoopback(addr) { + continue + } id := report.MakeScopedEndpointNodeID(scope, addr, "") result = append(result, id) } diff --git a/report/id.go b/report/id.go index 918377176..dd1c3720f 100644 --- a/report/id.go +++ b/report/id.go @@ -44,7 +44,7 @@ func makeAddressID(hostID, namespaceID, address string) string { addressIP := net.ParseIP(address) if addressIP != nil && LocalNetworks.Contains(addressIP) { scope = hostID - } else if isLoopback(address) { + } else if IsLoopback(address) { scope = hostID if namespaceID != "" { scope += "-" + namespaceID @@ -176,7 +176,8 @@ func ExtractHostID(m Node) string { return hostID } -func isLoopback(address string) bool { +// IsLoopback ascertains if an address comes from a loopback interface. +func IsLoopback(address string) bool { ip := net.ParseIP(address) return ip != nil && ip.IsLoopback() }