From f04d2f9a4a6f564de89f083e9e688b57d8704624 Mon Sep 17 00:00:00 2001 From: Lorenzo Manacorda Date: Wed, 21 Sep 2016 15:30:51 +0200 Subject: [PATCH] handle socket close --- probe/endpoint/reporter.go | 20 +++++++++++++++++++- report/topology.go | 6 ++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/probe/endpoint/reporter.go b/probe/endpoint/reporter.go index d554626fe..562bedc41 100644 --- a/probe/endpoint/reporter.go +++ b/probe/endpoint/reporter.go @@ -171,8 +171,15 @@ func (r *Reporter) Report() (report.Report, error) { log.Infof("Accept! pid:(%v), src-addr: %v,src-port: %v, dst-addr: %v, dst-port: %v", e.Pid, e.SourceAddress, e.SourcePort, e.DestAddress, e.DestPort) } r.addConnection(&rpt, tuple, "", fromNodeInfo, toNodeInfo) + case Close: + // ignore fake closes + if e.SourceAddress.String() != "0.0.0.0" && e.DestAddress.String() != "0.0.0.0" { + if e.SourcePort == 9999 || e.DestPort == 9999 { + log.Infof("Close! pid:(%v), src-addr: %v,src-port: %v, dst-addr: %v, dst-port: %v", e.Pid, e.SourceAddress, e.SourcePort, e.DestAddress, e.DestPort) + } + r.removeConnection(&rpt, tuple, "", fromNodeInfo, toNodeInfo) + } } - }) } @@ -228,6 +235,17 @@ func (r *Reporter) addConnection(rpt *report.Report, t fourTuple, namespaceID st rpt.Endpoint = rpt.Endpoint.AddNode(toNode) } +func (r *Reporter) removeConnection(rpt *report.Report, t fourTuple, namespaceID string, extraFromNode, extraToNode map[string]string) { + // create node from tuple + var ( + fromNode = r.makeEndpointNode(namespaceID, t.fromAddr, t.fromPort, extraFromNode) + toNode = r.makeEndpointNode(namespaceID, t.toAddr, t.toPort, extraToNode) + ) + // check + rpt.Endpoint.RemoveNode(fromNode) + rpt.Endpoint.RemoveNode(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( diff --git a/report/topology.go b/report/topology.go index 1beba4f79..523635b87 100644 --- a/report/topology.go +++ b/report/topology.go @@ -114,6 +114,12 @@ func (t Topology) AddNode(node Node) Topology { return t } +func (t Topology) RemoveNode(node Node) Topology { + delete(t.Nodes, node.ID) + + return t +} + // GetShape returns the current topology shape, or the default if there isn't one. func (t Topology) GetShape() string { if t.Shape == "" {