diff --git a/nodes.go b/nodes.go index 7f094a2..6d252be 100644 --- a/nodes.go +++ b/nodes.go @@ -233,6 +233,10 @@ func (n *Nodes) mergeNodes(keepID, mergeID int) { keep := n.nodes[keepID] merge := n.nodes[mergeID] + if keep == nil || merge == nil { + return + } + if merge.Name != "" && keep.Name == "" { keep.Name = merge.Name } @@ -243,6 +247,7 @@ func (n *Nodes) mergeNodes(keepID, mergeID int) { ips = append(ips, ip) } n.updateNodeInterface(keep, keepID, iface.MAC, ips, iface.Name) + n.macIndex[iface.MAC.String()] = keepID } delete(n.nodes, mergeID) diff --git a/snmp.go b/snmp.go index aa01386..949ff42 100644 --- a/snmp.go +++ b/snmp.go @@ -207,6 +207,14 @@ func (t *Tendrils) queryInterfaceMACs(snmp *gosnmp.GoSNMP, deviceIP net.IP) { t.nodes.Update(iface.mac, nil, iface.name, "", "snmp-ifmac") macs = append(macs, iface.mac) } + + existingNode := t.nodes.GetByIP(deviceIP) + if existingNode != nil { + for _, iface := range existingNode.Interfaces { + macs = append(macs, iface.MAC) + } + } + if len(macs) > 1 { t.nodes.Merge(macs, "snmp-ifmac") }