From 5c4266f89cf1d10865c0fdb21402c595a47591bd Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sat, 31 Jan 2026 07:35:49 -0800 Subject: [PATCH] Include multicast and broadcast packets in interface pps stats Co-Authored-By: Claude Opus 4.5 --- .claude/settings.local.json | 3 ++- snmp.go | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 5cb3cec..680c775 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -90,7 +90,8 @@ "Bash(git -C /home/flamingcow/multicast diff --name-only)", "Bash(du:*)", "Bash(tree:*)", - "Bash(go get:*)" + "Bash(go get:*)", + "Bash(go test:*)" ], "ask": [ "Bash(rm *)" diff --git a/snmp.go b/snmp.go index 996ada1..0851da8 100644 --- a/snmp.go +++ b/snmp.go @@ -204,7 +204,11 @@ func (t *Tendrils) queryInterfaceStats(snmp *gosnmp.GoSNMP, node *Node, ifNames ifHCInOctets := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.6") ifHCOutOctets := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.10") ifHCInUcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.7") + ifHCInMcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.8") + ifHCInBcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.9") ifHCOutUcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.11") + ifHCOutMcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.12") + ifHCOutBcastPkts := t.getInterfaceTable64(snmp, "1.3.6.1.2.1.31.1.1.1.13") poeStats := t.getPoEStats(snmp, ifNames) now := time.Now() @@ -240,12 +244,13 @@ func (t *Tendrils) queryInterfaceStats(snmp *gosnmp.GoSNMP, node *Node, ifNames stats.OutErrors = uint64(outErr) } - inPkts, hasInPkts := ifHCInUcastPkts[ifIndex] - outPkts, hasOutPkts := ifHCOutUcastPkts[ifIndex] inBytes, hasInBytes := ifHCInOctets[ifIndex] outBytes, hasOutBytes := ifHCOutOctets[ifIndex] - if hasInPkts && hasOutPkts && hasInBytes && hasOutBytes { + inPkts := ifHCInUcastPkts[ifIndex] + ifHCInMcastPkts[ifIndex] + ifHCInBcastPkts[ifIndex] + outPkts := ifHCOutUcastPkts[ifIndex] + ifHCOutMcastPkts[ifIndex] + ifHCOutBcastPkts[ifIndex] + + if hasInBytes && hasOutBytes { key := node.ID + ":" + name ifaceTracker.mu.Lock() prev, hasPrev := ifaceTracker.counters[key]