Add neighbor tracking system with LLDP integration

This commit is contained in:
Ian Gulliver
2025-11-29 20:36:45 -08:00
parent b85925f644
commit 5dbdc0a408
4 changed files with 200 additions and 1 deletions

27
lldp.go
View File

@@ -53,4 +53,31 @@ func (t *Tendrils) handleLLDPPacket(ifaceName string, packet gopacket.Packet) {
log.Printf("[%s] lldp packet received: ChassisID=%x PortID=%s TTL=%d",
ifaceName, lldp.ChassisID.ID, lldp.PortID.ID, lldp.TTL)
if len(lldp.ChassisID.ID) == 6 {
mac := net.HardwareAddr(lldp.ChassisID.ID)
if !isBroadcastOrZero(mac) {
t.neighbors.Update(nil, []net.HardwareAddr{mac}, "lldp:"+ifaceName)
}
}
}
func isBroadcastOrZero(mac net.HardwareAddr) bool {
if len(mac) != 6 {
return true
}
allZero := true
allFF := true
for _, b := range mac {
if b != 0x00 {
allZero = false
}
if b != 0xff {
allFF = false
}
}
return allZero || allFF
}