In both $dayjob and my personal networks, I use iproute2 extensively as it’s the main tool to interface with Linux’s Netlink socket API from the command line. In a pinch, to see live route & IP neighbor (ARP) or IPv6 neighbor (NDP) changes, I instinctively run ip mon
and sit back expecting to see a bunch of messages scroll on the screen.
Prior to the latest update, it’d result in something like this for a lightly busy first hop router with constant ARP and NDP updates:
(trill:20:47:EDT)% ip -ts mon
[2025-04-27T20:47:30.873841] 10.3.6.224 dev br0 lladdr c2:b7:a7:94:d8:19 PROBE
[2025-04-27T20:47:30.876208] 10.3.6.224 dev br0 lladdr c2:b7:a7:94:d8:19 REACHABLE
[2025-04-27T20:47:31.113926] 10.3.6.108 dev br0 lladdr 70:61:be:36:58:ed REACHABLE
[2025-04-27T20:47:31.129783] 10.3.6.116 dev br0 lladdr 80:6a:10:18:05:cd PROBE
[2025-04-27T20:47:31.129850] 2620:6:2003:106:2ecf:67ff:fe19:16b4 dev br0 lladdr 2c:cf:67:19:16:b4 PROBE
[2025-04-27T20:47:31.130962] 2620:6:2003:106:2ecf:67ff:fe19:16b4 dev br0 lladdr 2c:cf:67:19:16:b4 REACHABLE
[2025-04-27T20:47:31.135276] 10.3.6.116 dev br0 lladdr 80:6a:10:18:05:cd REACHABLE
[2025-04-27T20:47:31.229838] 10.3.6.115 dev br0 FAILED
[2025-04-27T20:47:31.545864] 10.3.6.138 dev br0 FAILED
[2025-04-27T20:47:31.870086] 2620:6:2003:106:ba27:ebff:fe7c:788b dev br0 FAILED
[2025-04-27T20:47:31.870442] 2620:6:2003:106:eee:99ff:fe22:4b21 dev br0 FAILED
[2025-04-27T20:47:31.870839] 2620:6:2003:106:d272:dcff:febf:261c dev br0 FAILED
[2025-04-27T20:47:31.871257] 2620:6:2003:106:dea9:4ff:fe8b:dd95 dev br0 FAILED
[2025-04-27T20:47:31.871685] 2620:6:2003:106:662:73ff:fe66:9b4 dev br0 FAILED
[2025-04-27T20:47:31.901816] 2620:6:2003:106:52a6:d8ff:feb6:17f7 dev br0 lladdr 50:a6:d8:b6:17:f7 STALE
[2025-04-27T20:47:31.902021] 10.3.6.150 dev br0 lladdr 96:be:a5:e3:4e:c4 STALE
[2025-04-27T20:47:31.902171] 10.3.6.145 dev br0 lladdr c8:ff:77:63:bf:dd STALE
[2025-04-27T20:47:31.902342] 10.3.6.136 dev br0 lladdr 14:91:38:79:c9:c8 STALE
[2025-04-27T20:47:32.121889] 10.3.6.149 dev br0 FAILED
[2025-04-27T20:47:32.157843] 10.3.6.4 dev br0 lladdr b8:27:eb:d8:5f:69 PROBE
[2025-04-27T20:47:32.158468] 10.3.6.4 dev br0 lladdr b8:27:eb:d8:5f:69 REACHABLE
[2025-04-27T20:47:32.925806] 10.3.6.153 dev br0 lladdr 00:24:b1:0b:73:20 PROBE
[2025-04-27T20:47:32.927484] 10.3.6.153 dev br0 lladdr 00:24:b1:0b:73:20 REACHABLE
[2025-04-27T20:47:33.597925] 10.3.6.119 dev br0 FAILED
[2025-04-27T20:47:33.694007] 10.3.6.104 dev br0 lladdr 08:84:9d:d2:58:7c PROBE
[2025-04-27T20:47:33.694199] fe80::a84:9dff:fed2:587c dev br0 lladdr 08:84:9d:d2:58:7c router PROBE
[2025-04-27T20:47:33.696668] 10.3.6.104 dev br0 lladdr 08:84:9d:d2:58:7c REACHABLE
[2025-04-27T20:47:33.697061] fe80::a84:9dff:fed2:587c dev br0 lladdr 08:84:9d:d2:58:7c router REACHABLE
[2025-04-27T20:47:33.949761] fe80::14df:53d6:630:4d33 dev br0 lladdr c2:b7:a7:94:d8:19 STALE
[2025-04-27T20:47:33.949915] 2620:6:2003:106:96ee:f793:c700:7632 dev br0 lladdr 24:11:53:ce:04:2b STALE
[2025-04-27T20:47:33.950042] 10.3.6.113 dev br0 lladdr c8:ff:77:b6:a9:d9 PROBE
[2025-04-27T20:47:33.950142] 10.3.7.197 dev lxcbr0 lladdr 00:50:56:1a:ad:cf PROBE proto zebra
[2025-04-27T20:47:33.950222] 10.3.7.197 dev lxcbr0 lladdr 00:50:56:1a:ad:cf REACHABLE proto zebra
[2025-04-27T20:47:33.950445] 10.3.6.113 dev br0 lladdr c8:ff:77:b6:a9:d9 REACHABLE
[2025-04-27T20:47:34.397842] 2620:6:2003:106:6aff:77ff:feb6:a9d9 dev br0 FAILED
[2025-04-27T20:47:34.397982] 2620:6:2003:106:daa9:4ff:fe8b:dd95 dev br0 FAILED
[2025-04-27T20:47:34.398075] 2620:6:2003:106:f281:73ff:feeb:946e dev br0 FAILED
[2025-04-27T20:47:34.398156] 2620:6:2003:106:f218:98ff:feec:e96a dev br0 FAILED
And this for a router with a view of the IPv6 DFZ:
(daedalus:20:50:EDT)% ip -ts -6 mon
[2025-04-27T20:50:13.332562] 2402:e580:745a::/48 nhid 655447 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
nexthop via fe80::a03:444 dev sit2 weight 1
[2025-04-27T20:50:13.565449] 2a03:eec0:3212::/48 nhid 125 via fe80::a03:444 dev sit2 proto bgp metric 20 pref medium
[2025-04-27T20:50:14.052933] 2a12:a580::/29 nhid 627585 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
[2025-04-27T20:50:14.052991] 2a06:de01:861::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:14.053030] 2605:9cc0:c05::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:14.053162] 2a06:de05:63d6::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:15.155490] fe80::2a7:42ff:fe45:bc73 dev eth0 lladdr 00:a7:42:45:bc:73 router PROBE
[2025-04-27T20:50:15.156345] fe80::2a7:42ff:fe45:bc73 dev eth0 lladdr 00:a7:42:45:bc:73 router REACHABLE
[2025-04-27T20:50:15.683859] 2a06:de05:61c4::/48 nhid 81 via fe80::a03:7ee dev sit4 proto bgp metric 20 pref medium
[2025-04-27T20:50:15.861581] 2a03:eec0:3212::/48 nhid 125 via fe80::a03:444 dev sit2 proto bgp metric 20 pref medium
[2025-04-27T20:50:16.890712] Deleted 2605:9cc0:c05::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:16.890771] Deleted 2a06:de01:861::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:17.004830] 2a03:eec0:3212::/48 nhid 627631 proto bgp metric 20 pref medium
nexthop via fe80::a03:7ee dev sit4 weight 1
[2025-04-27T20:50:17.129794] 2a06:de05:61c4::/48 nhid 387 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
nexthop via fe80::a03:7ee dev sit4 weight 1
[2025-04-27T20:50:17.193829] 2a03:eec0:3212::/48 nhid 81 via fe80::a03:7ee dev sit4 proto bgp metric 20 pref medium
[2025-04-27T20:50:17.247879] 2a03:eec0:3212::/48 nhid 125 via fe80::a03:444 dev sit2 proto bgp metric 20 pref medium
[2025-04-27T20:50:17.489729] 2a12:a580::/29 nhid 88 via fe80::a03:443 dev sit5 proto bgp metric 20 pref medium
[2025-04-27T20:50:17.681168] 2a03:eec0:3212::/48 nhid 125 via fe80::a03:444 dev sit2 proto bgp metric 20 pref medium
[2025-04-27T20:50:17.961734] Deleted 2a06:de05:63d6::/48 nhid 80 via fe80::a03:449 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T20:50:18.357769] 2a03:eec0:3212::/48 nhid 125 via fe80::a03:444 dev sit2 proto bgp metric 20 pref medium
[2025-04-27T20:50:18.357974] 2a0c:b641:302::/47 nhid 441 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
nexthop via fe80::a03:444 dev sit2 weight 1
[2025-04-27T20:50:18.585064] 2a0c:b641:302::/47 nhid 441 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
nexthop via fe80::a03:444 dev sit2 weight 1
[2025-04-27T20:50:18.656761] 2a0c:b641:302::/47 nhid 441 proto bgp metric 20 pref medium
nexthop via fe80::a03:449 dev sit1 weight 1
nexthop via fe80::a03:444 dev sit2 weight 1
So, after the latest Debian package update of iproute2 (6.14.0-3), I was surprised to find that ip mon
appeared to not work anymore:
(concorde:19:49:CDT)% ip mon
Failed to add ipv4 mcaddr group to list
(concorde:19:51:CDT)% ip -4 mon
Failed to add ipv4 mcaddr group to list
(concorde:19:51:CDT)% ip -6 mon
Failed to add ipv6 mcaddr group to list
(concorde:19:51:CDT)% ip mon all
Failed to add ipv4 mcaddr group to list
(concorde:19:51:CDT)% ???
It turns out that one now has to specify the type (nei
, route
, etc.) due to a patch that enabled multicast functionality for iproute2’s monitor command. I couldn’t get the multicast functionality working but I can replicate the old behavior with the additional arguments:
(concorde:19:57:CDT)% ip -ts -6 mon r
[2025-04-27T19:57:22.103476] 2a0f:7803:faf7::/48 nhid 135 via fe80::ae88:6002 dev sit1 proto bgp metric 20 pref medium
[2025-04-27T19:57:22.156228] 2001:661:4000::/35 nhid 36 via fe80::fc00:1ff:fe95:fbf8 dev eth0 proto bgp metric 20 pref medium
[2025-04-27T19:57:22.157505] 2a0f:9400:6110::/48 nhid 36 via fe80::fc00:1ff:fe95:fbf8 dev eth0 proto bgp metric 20 pref medium
[2025-04-27T19:57:22.274238] 2a06:de00:de03::/48 nhid 36 via fe80::fc00:1ff:fe95:fbf8 dev eth0 proto bgp metric 20 pref medium
[2025-04-27T19:57:22.385085] 2a0f:7803:faf7::/48 nhid 36 via fe80::fc00:1ff:fe95:fbf8 dev eth0 proto bgp metric 20 pref medium
[2025-04-27T19:57:22.578524] 2804:40:4000::/34 nhid 36 via fe80::fc00:1ff:fe95:fbf8 dev eth0 proto bgp metric 20 pref medium
[2025-04-27T19:57:23.095034] 2a06:de05:6151::/48 nhid 138 via fe80::a03:449 dev sit4 proto bgp metric 20 pref medium
[2025-04-27T19:57:23.095687] 2001:67c:20fc::/48 nhid 138 via fe80::a03:449 dev sit4 proto bgp metric 20 pref medium
[2025-04-27T19:57:23.095991] 2400:fc00:87e0::/44 nhid 138 via fe80::a03:449 dev sit4 proto bgp metric 20 pref medium
[2025-04-27T19:57:23.096256] 2a06:de01:97e::/48 nhid 138 via fe80::a03:449 dev sit4 proto bgp metric 20 pref medium
The fact that even ip mon all
doesn’t work with this patch and still spits out the mcaddr error seems like a bug, to me, and I might submit a bug report if nobody has done so already.
Or, has everyone been always specifying route
or nei
and I’ve been the only idiot expecting results when omitting those objects?