diff --git a/probe/endpoint/reporter.go b/probe/endpoint/reporter.go index 8912319f9..79c946ca0 100644 --- a/probe/endpoint/reporter.go +++ b/probe/endpoint/reporter.go @@ -77,13 +77,24 @@ func (r *Reporter) Report() (report.Report, error) { func (r *Reporter) addConnection(rpt *report.Report, c *procspy.Connection) { var ( + localIsClient = int(c.LocalPort) > int(c.RemotePort) localAddressNodeID = report.MakeAddressNodeID(r.hostID, c.LocalAddress.String()) remoteAddressNodeID = report.MakeAddressNodeID(r.hostID, c.RemoteAddress.String()) - adjecencyID = report.MakeAdjacencyID(localAddressNodeID) - edgeID = report.MakeEdgeID(localAddressNodeID, remoteAddressNodeID) + adjecencyID = "" + edgeID = "" ) - rpt.Address.Adjacency[adjecencyID] = rpt.Address.Adjacency[adjecencyID].Add(remoteAddressNodeID) + if localIsClient { + adjecencyID = report.MakeAdjacencyID(localAddressNodeID) + rpt.Address.Adjacency[adjecencyID] = rpt.Address.Adjacency[adjecencyID].Add(remoteAddressNodeID) + + edgeID = report.MakeEdgeID(localAddressNodeID, remoteAddressNodeID) + } else { + adjecencyID = report.MakeAdjacencyID(remoteAddressNodeID) + rpt.Address.Adjacency[adjecencyID] = rpt.Address.Adjacency[adjecencyID].Add(localAddressNodeID) + + edgeID = report.MakeEdgeID(remoteAddressNodeID, localAddressNodeID) + } if _, ok := rpt.Address.NodeMetadatas[localAddressNodeID]; !ok { rpt.Address.NodeMetadatas[localAddressNodeID] = report.MakeNodeMetadataWith(map[string]string{ @@ -98,11 +109,21 @@ func (r *Reporter) addConnection(rpt *report.Report, c *procspy.Connection) { var ( localEndpointNodeID = report.MakeEndpointNodeID(r.hostID, c.LocalAddress.String(), strconv.Itoa(int(c.LocalPort))) remoteEndpointNodeID = report.MakeEndpointNodeID(r.hostID, c.RemoteAddress.String(), strconv.Itoa(int(c.RemotePort))) - adjecencyID = report.MakeAdjacencyID(localEndpointNodeID) - edgeID = report.MakeEdgeID(localEndpointNodeID, remoteEndpointNodeID) + adjecencyID = "" + edgeID = "" ) - rpt.Endpoint.Adjacency[adjecencyID] = rpt.Endpoint.Adjacency[adjecencyID].Add(remoteEndpointNodeID) + if localIsClient { + adjecencyID = report.MakeAdjacencyID(localEndpointNodeID) + rpt.Endpoint.Adjacency[adjecencyID] = rpt.Endpoint.Adjacency[adjecencyID].Add(remoteEndpointNodeID) + + edgeID = report.MakeEdgeID(localEndpointNodeID, remoteEndpointNodeID) + } else { + adjecencyID = report.MakeAdjacencyID(remoteEndpointNodeID) + rpt.Endpoint.Adjacency[adjecencyID] = rpt.Endpoint.Adjacency[adjecencyID].Add(localEndpointNodeID) + + edgeID = report.MakeEdgeID(remoteEndpointNodeID, localEndpointNodeID) + } if _, ok := rpt.Endpoint.NodeMetadatas[localEndpointNodeID]; !ok { // First hit establishes NodeMetadata for scoped local address + port diff --git a/probe/endpoint/reporter_test.go b/probe/endpoint/reporter_test.go index 33a788ae5..455d18ada 100644 --- a/probe/endpoint/reporter_test.go +++ b/probe/endpoint/reporter_test.go @@ -85,14 +85,14 @@ func TestSpyNoProcesses(t *testing.T) { var ( scopedLocal = report.MakeAddressNodeID(nodeID, fixLocalAddress.String()) scopedRemote = report.MakeAddressNodeID(nodeID, fixRemoteAddress.String()) - localKey = report.MakeAdjacencyID(scopedLocal) + remoteKey = report.MakeAdjacencyID(scopedRemote) ) - if want, have := 1, len(r.Address.Adjacency[localKey]); want != have { + if want, have := 1, len(r.Address.Adjacency[remoteKey]); want != have { t.Fatalf("want %d, have %d", want, have) } - if want, have := scopedRemote, r.Address.Adjacency[localKey][0]; want != have { + if want, have := scopedLocal, r.Address.Adjacency[remoteKey][0]; want != have { t.Fatalf("want %q, have %q", want, have) } @@ -116,14 +116,14 @@ func TestSpyWithProcesses(t *testing.T) { var ( scopedLocal = report.MakeEndpointNodeID(nodeID, fixLocalAddress.String(), strconv.Itoa(int(fixLocalPort))) scopedRemote = report.MakeEndpointNodeID(nodeID, fixRemoteAddress.String(), strconv.Itoa(int(fixRemotePort))) - localKey = report.MakeAdjacencyID(scopedLocal) + remoteKey = report.MakeAdjacencyID(scopedRemote) ) - if want, have := 1, len(r.Endpoint.Adjacency[localKey]); want != have { + if want, have := 1, len(r.Endpoint.Adjacency[remoteKey]); want != have { t.Fatalf("want %d, have %d", want, have) } - if want, have := scopedRemote, r.Endpoint.Adjacency[localKey][0]; want != have { + if want, have := scopedLocal, r.Endpoint.Adjacency[remoteKey][0]; want != have { t.Fatalf("want %q, have %q", want, have) }