From 5bc3a9d5acd3de680f4093ede2e4844b4fcd1a24 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Fri, 2 Sep 2016 20:31:03 +0100 Subject: [PATCH 1/2] correctly reverse-resolve source of inbound connections There were two problems: - the renderer was looking for reverse names on the destination - the probe was not annotating source nodes with reverse-resolved names Fixes #1847 --- probe/endpoint/reporter.go | 3 +++ render/detailed/connections.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/probe/endpoint/reporter.go b/probe/endpoint/reporter.go index b765657fa..fb32ede8d 100644 --- a/probe/endpoint/reporter.go +++ b/probe/endpoint/reporter.go @@ -196,6 +196,9 @@ func (r *Reporter) addConnection(rpt *report.Report, t fourTuple, namespaceID st // In case we have a reverse resolution for the IP, we can use it for // the name... + if fromNames, err := r.reverseResolver.get(t.fromAddr); err == nil { + fromNode = fromNode.WithSet(ReverseDNSNames, report.MakeStringSet(fromNames...)) + } if toNames, err := r.reverseResolver.get(t.toAddr); err == nil { toNode = toNode.WithSet(ReverseDNSNames, report.MakeStringSet(toNames...)) } diff --git a/render/detailed/connections.go b/render/detailed/connections.go index b8c7b9ec6..d4ce34f4a 100644 --- a/render/detailed/connections.go +++ b/render/detailed/connections.go @@ -145,7 +145,7 @@ func outgoingConnectionsSummary(topologyID string, r report.Report, n report.Nod if !ok { continue } - key := newConnection(n, node, port, remoteEndpointID, localAddr) + key := newConnection(n, node, port, localEndpoint.ID, localAddr) counts[key] = counts[key] + 1 } } From 9d010fabc8af293af8a6b477af487fac4d3bdcd9 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Fri, 2 Sep 2016 21:12:23 +0100 Subject: [PATCH 2/2] refactor: extract makeEndpointNode helper --- probe/endpoint/reporter.go | 39 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/probe/endpoint/reporter.go b/probe/endpoint/reporter.go index fb32ede8d..a9d61a6b9 100644 --- a/probe/endpoint/reporter.go +++ b/probe/endpoint/reporter.go @@ -181,36 +181,27 @@ func (r *Reporter) Report() (report.Report, error) { func (r *Reporter) addConnection(rpt *report.Report, t fourTuple, namespaceID string, extraFromNode, extraToNode map[string]string) { var ( - fromEndpointNodeID = report.MakeEndpointNodeID(r.hostID, namespaceID, t.fromAddr, strconv.Itoa(int(t.fromPort))) - toEndpointNodeID = report.MakeEndpointNodeID(r.hostID, namespaceID, t.toAddr, strconv.Itoa(int(t.toPort))) - - fromNode = report.MakeNodeWith(fromEndpointNodeID, map[string]string{ - Addr: t.fromAddr, - Port: strconv.Itoa(int(t.fromPort)), - }).WithEdge(toEndpointNodeID, report.EdgeMetadata{}) - toNode = report.MakeNodeWith(toEndpointNodeID, map[string]string{ - Addr: t.toAddr, - Port: strconv.Itoa(int(t.toPort)), - }) + fromNode = r.makeEndpointNode(namespaceID, t.fromAddr, t.fromPort, extraFromNode) + toNode = r.makeEndpointNode(namespaceID, t.toAddr, t.toPort, extraToNode) ) + rpt.Endpoint = rpt.Endpoint.AddNode(fromNode.WithEdge(toNode.ID, report.EdgeMetadata{})) + rpt.Endpoint = rpt.Endpoint.AddNode(toNode) +} +func (r *Reporter) makeEndpointNode(namespaceID string, addr string, port uint16, extra map[string]string) report.Node { + portStr := strconv.Itoa(int(port)) + node := report.MakeNodeWith( + report.MakeEndpointNodeID(r.hostID, namespaceID, addr, portStr), + map[string]string{Addr: addr, Port: portStr}) // In case we have a reverse resolution for the IP, we can use it for // the name... - if fromNames, err := r.reverseResolver.get(t.fromAddr); err == nil { - fromNode = fromNode.WithSet(ReverseDNSNames, report.MakeStringSet(fromNames...)) + if names, err := r.reverseResolver.get(addr); err == nil { + node = node.WithSet(ReverseDNSNames, report.MakeStringSet(names...)) } - if toNames, err := r.reverseResolver.get(t.toAddr); err == nil { - toNode = toNode.WithSet(ReverseDNSNames, report.MakeStringSet(toNames...)) + if extra != nil { + node = node.WithLatests(extra) } - - if extraFromNode != nil { - fromNode = fromNode.WithLatests(extraFromNode) - } - if extraToNode != nil { - toNode = toNode.WithLatests(extraToNode) - } - rpt.Endpoint = rpt.Endpoint.AddNode(fromNode) - rpt.Endpoint = rpt.Endpoint.AddNode(toNode) + return node } func newu64(i uint64) *uint64 {