/usr/share/doc/iproute2-doc/arpd.html is in iproute2-doc 4.3.0-1ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.71">
<TITLE>ARPD Daemon</TITLE>
</HEAD>
<BODY>
<H1>ARPD Daemon</H1>
<H2>Alexey Kuznetsov, <CODE>kuznet@ms2.inr.ac.ru</CODE></H2>some_negative_number, 20 Sep 2001
<HR>
<EM><CODE>arpd</CODE> is daemon collecting gratuitous ARP information, saving
it on local disk and feeding it to kernel on demand to avoid
redundant broadcasting due to limited size of kernel ARP cache. </EM>
<HR>
<P><B>Description</B></P>
<P>The format of the command is:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
arpd OPTIONS [ INTERFACE [ INTERFACE ... ] ]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P> <CODE>OPTIONS</CODE> are:</P>
<P>
<UL>
<LI><CODE>-l</CODE> - dump <CODE>arpd</CODE> database to stdout and exit. Output consists
of three columns: interface index, IP address and MAC address.
Negative entries for dead hosts are also shown, in this case MAC address
is replaced by word <CODE>FAILED</CODE> followed by colon and time when the fact
that host is dead was proven the last time.
</LI>
<LI><CODE>-f FILE</CODE> - read and load <CODE>arpd</CODE> database from <CODE>FILE</CODE>
in text format similar dumped by option <CODE>-l</CODE>. Exit after load,
probably listing resulting database, if option <CODE>-l</CODE> is also given.
If <CODE>FILE</CODE> is <CODE>-</CODE>, <CODE>stdin</CODE> is read to get ARP table.
</LI>
<LI><CODE>-b DATABASE</CODE> - location of database file. Default location is
<CODE>/var/lib/arpd/arpd.db</CODE>.
</LI>
<LI><CODE>-a NUMBER</CODE> - <CODE>arpd</CODE> not only passively listens ARP on wire, but
also send brodcast queries itself. <CODE>NUMBER</CODE> is number of such queries
to make before destination is considered as dead. When <CODE>arpd</CODE> is started
as kernel helper (i.e. with <CODE>app_solicit</CODE> enabled in <CODE>sysctl</CODE>
or even with option <CODE>-k</CODE>) without this option and still did not learn enough
information, you can observe 1 second gaps in service. Not fatal, but
not good.
</LI>
<LI><CODE>-k</CODE> - suppress sending broadcast queries by kernel. It takes
sense together with option <CODE>-a</CODE>.
</LI>
<LI><CODE>-n TIME</CODE> - timeout of negative cache. When resolution fails <CODE>arpd</CODE>
suppresses further attempts to resolve for this period. It makes sense
only together with option <CODE>-k</CODE>. This timeout should not be too much
longer than boot time of a typical host not supporting gratuitous ARP.
Default value is 60 seconds.
</LI>
<LI><CODE>-R RATE</CODE> - maximal steady rate of broadcasts sent by <CODE>arpd</CODE>
in packets per second. Default value is 1.
</LI>
<LI><CODE>-B NUMBER</CODE> - number of broadcasts sent by <CODE>arpd</CODE> back to back.
Default value is 3. Together with option <CODE>-R</CODE> this option allows
to police broadcasting not to exceed <CODE>B+R*T</CODE> over any interval
of time <CODE>T</CODE>.
</LI>
</UL>
</P>
<P><CODE>INTERFACE</CODE> is name of networking inteface to watch.
If no interfaces given, <CODE>arpd</CODE> monitors all the interfaces.
In this case <CODE>arpd</CODE> does not adjust <CODE>sysctl</CODE> parameters,
it is supposed user does this himself after <CODE>arpd</CODE> is started.</P>
<P> Signals</P>
<P> <CODE>arpd</CODE> exits gracefully syncing database and restoring adjusted
<CODE>sysctl</CODE> parameters, when receives <CODE>SIGINT</CODE> or <CODE>SIGTERM</CODE>.
<CODE>SIGHUP</CODE> syncs database to disk. <CODE>SIGUSR1</CODE> sends some statistics
to <CODE>syslog</CODE>. Effect of another signals is undefined, they may corrupt
database and leave <CODE>sysctl</CODE> parameters in an unpredictable state.</P>
<P> Note</P>
<P> In order to <CODE>arpd</CODE> be able to serve as ARP resolver, kernel must be
compiled with the option <CODE>CONFIG_ARPD</CODE> and, in the case when interface list
is not given on command line, variable <CODE>app_solicit</CODE>
on interfaces of interest should be set in <CODE>/proc/sys/net/ipv4/neigh/*</CODE>.
If this is not made <CODE>arpd</CODE> still collects gratuitous ARP information
in its database.</P>
<P> Examples</P>
<P>
<OL>
<LI> Start <CODE>arpd</CODE> to collect gratuitous ARP, but not messing
with kernel functionality:
<BLOCKQUOTE><CODE>
<PRE>
arpd -b /var/tmp/arpd.db
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Look at result after some time:
<BLOCKQUOTE><CODE>
<PRE>
killall arpd
arpd -l -b /var/tmp/arpd.db
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> To enable kernel helper, leaving leading role to kernel:
<BLOCKQUOTE><CODE>
<PRE>
arpd -b /var/tmp/arpd.db -a 1 eth0 eth1
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Completely replace kernel resolution on interfaces <CODE>eth0</CODE>
and <CODE>eth1</CODE>. In this case kernel still does unicast probing to
validate entries, but all the broadcast activity is suppressed
and made under authority of <CODE>arpd</CODE>:
<BLOCKQUOTE><CODE>
<PRE>
arpd -b /var/tmp/arpd.db -a 3 -k eth0 eth1
</PRE>
</CODE></BLOCKQUOTE>
This is mode which <CODE>arpd</CODE> is supposed to work normally.
It is not default just to prevent occasional enabling of too aggressive
mode occasionally.
</LI>
</OL>
</P>
</BODY>
</HTML>
|