As suspected, I can catch those ARP frames in the dumb AP directly.
root@router2:/mnt/root# gcc -std=c89 -O2 -Wall -Wextra -Wpedantic -idirafter /mnt/usr/include -o warpmon warpmon.c
root@router2:/mnt/root# ./warpmon
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.168
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.1
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.118
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.1
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.226
[ARP] MAC: XX:XX:XX:XX:XX:XX, IP: 192.168.0.143
In this example, it's only catching ether frames in the phy0-ap0 interface. Currently, I've only implemented the capture (single interface), still need to implement CLI options and implement adding those entries to the local ARP table.