ARPD(8)
๐ ARPD(8) ๐
System Manager's Manual โจ
๐ NAME ๐
arpd - userspace arp daemon. ๐ฆ
๐ง SYNOPSIS ๐ง
Usage: arpd [ -lkh? ] [ -a N ] [ -b dbase ] [ -B number ] [ -f file ]
[-p interval ] [ -n time ] [ -R rate ] [ <INTERFACES> ]
๐ธ DESCRIPTION ๐ธ
okay so the arpd daemon is literally a collector bestie ๐
It gathers gratuitous ARP information and saves it to local disk, then feeds it back to the kernel whenever it's asked. Why? Because the kernel's ARP cache is pretty small, and this stops it from having to shout into the void with redundant broadcasts over and over. Lowkey genius. โจ
๐ OPTIONS ๐
-h,-?โ Print help. Your lifeline when you forget everything ๐-lโ Dump the arpd database to stdout and then exit. The output has three columns: the interface index, the IP address of the interface, and the MAC address of the interface. Negative entries for dead hosts show up too ๐ For those, the MAC address gets swapped out for the wordFAILED, then a colon, then the most recent time when the host was proven to be dead.-f <FILE>โ Read and load an arpd database from FILE, which is a text format similar to what-ldumps. It exits after loading, and if-lis also given it'll list the resulting database first. If FILE is-, stdin gets read instead to grab the ARP table ๐ซถ-b <DATABASE>โ The location of the database file. The default spot is/var/lib/arpd/arpd.db๐-a <NUMBER>โ With this option, arpd doesn't just passively listen for ARP packets on the interface, it also sends broadcast queries itself. NUMBER is how many of those queries to make before a destination is considered dead. Now the tea: if arpd is started as a kernel helper (like withapp_solicitenabled in sysctl or even with-k) and you skip this option, and it still hasn't learned enough info, you might see 1 second gaps in service. Not fatal, but not good ๐ญ-kโ Suppress sending broadcast queries by the kernel. This one only makes sense alongside-a. ๐ฅ-n <TIME>โ Sets the timeout of the negative cache. When resolution fails, arpd stops trying to resolve that same destination for this period. This only makes sense together with-k. The timeout shouldn't be way longer than the boot time of a typical host that doesn't support gratuitous ARP. The default is 60 seconds โฐ-p <TIME>โ How long to wait, in seconds, between polling attempts to the kernel ARP table. TIME can be a floating point number. The default is 30 โจ-R <RATE>โ The maximal steady rate of broadcasts arpd sends, in packets per second. The default is 1 ๐ฆ-B <NUMBER>โ The number of broadcasts arpd sends back to back. The default is 3. Together with-R, this keeps the number of broadcast ARP queries from going over B+R*T in any interval of time T. Strict but fair ๐
INTERFACES is a list of names of networking interfaces to watch. If you don't give any, arpd monitors all of them. In that case arpd does not adjust sysctl parameters, so it's assumed you'll do that yourself after arpd starts ๐ง
๐ SIGNALS ๐
โ ๏ธ OnlySIGINTandSIGTERM(graceful exit),SIGHUP(sync), andSIGUSR1(stats) have defined behavior here. Any other signal is undefined and may corrupt the database and leave the sysctl parameters in an unpredictable state. Not it. ๐
When arpd gets a SIGINT or SIGTERM, it exits gracefully, syncing the database and restoring the adjusted sysctl parameters. On a SIGHUP, it syncs the database to disk. With SIGUSR1, it sends some statistics to syslog. The effect of any other signals is undefined. In particular, they may corrupt the database and leave the sysctl parameters in an unpredictable state.
๐ NOTE ๐
So for arpd to work as an ARP resolver, the kernel has to be compiled with the option CONFIG_ARPD. Also, if the interface list isn't given on the command line, the variable app_solicit on the interfaces you care about should be in /proc/sys/net/ipv4/neigh/*. If that isn't set up, arpd still collects gratuitous ARP information in its database, so it's not a total loss ๐ซถ
๐ EXAMPLES ๐
arpd -b /var/tmp/arpd.db
Start arpd to collect gratuitous ARP, without messing with kernel functionality. Chill mode ๐ง
killall arpd ; arpd -l -b /var/tmp/arpd.db
Look at the result after some time. Patience, bestie โณ
arpd -b /var/tmp/arpd.db -a 1 eth0 eth1
Enable the kernel helper and leave the leading role to the kernel ๐
arpd -b /var/tmp/arpd.db -a 3 -k eth0 eth1
Completely replace kernel resolution on interfaces eth0 and eth1. In this case the kernel still does unicast probing to validate entries, but all the broadcast activity is suppressed and handled under the authority of arpd. Main character energy ๐
This is the mode in which arpd normally is supposed to work. It is not the default, to prevent occasional enabling of too aggressive a mode. Safety first, periodt ๐
okay that's the whole tea, bestie ๐ซถ ARPD(8) was last updated on 28 June, 2007, and it's giving System Manager's Manual vibes all the way through โจ๐ฆ๐
๐ฆ where this page comes from
- alpine 3.22: iproute2-doc 6.15.0-r0 ยท GPL-2.0-or-later
- alpine 3.23: iproute2-doc 6.17.0-r0 ยท GPL-2.0-or-later
- alpine 3.24: iproute2-doc 7.0.0-r0 ยท GPL-2.0-or-later
- arch rolling: iproute2 7.2.0-1
- arch rolling: iproute2 7.3.0-1 ยท GPL-2.0-or-later
- debian bookworm: iproute2 6.1.0-3 ยท GPL-2.0-only
- debian trixie: iproute2 6.15.0-1 ยท GPL-2.0-only
- nixos 26.05: iproute2 7.0.0
- nixpkgs unstable: iproute2 7.2.0
- opensuse-leap 16.0: iproute2-arpd 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2-arpd 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2-arpd 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2-arpd 6.12-160000.4.1 ยท GPL-2.0-only
- ubuntu jammy: iproute2 5.15.0-1ubuntu2 ยท GPL-2.0-only
- ubuntu jammy: iproute2 5.15.0-1ubuntu2.2 ยท GPL-2.0-only
- ubuntu noble: iproute2 6.1.0-1ubuntu6 ยท GPL-2.0-only
- ubuntu noble: iproute2 6.1.0-1ubuntu6.4 ยท GPL-2.0-only
- ubuntu questing: iproute2 6.16.0-1ubuntu2
- ubuntu questing: iproute2 6.16.0-1ubuntu2.1 ยท GPL-2.0-only
- ubuntu questing: iproute2 6.16.0-1ubuntu2.2
- ubuntu resolute: iproute2 6.19.0-1ubuntu1 ยท GPL-2.0-only
- ubuntu resolute: iproute2 6.19.0-1ubuntu1.1 ยท GPL-2.0-only
- ubuntu stonking: iproute2 7.2.0-1ubuntu1 ยท GPL-2.0-only
- ๐ girlified by anthropic/claude-haiku-5.5 on : a language model's rewrite of the original, under its terms