| ARP(9) | Kernel Developer's Manual | ARP(9) |
arp, arp_ifinit,
arpresolve, arpintr —
externally visible ARP functions
#include
<netinet/if_inarp.h>
void
arp_ifinit(struct
ifnet *ifp, struct ifaddr
*ifa);
int
arpresolve(struct
ifnet *ifp, const struct
rtentry *rt, struct mbuf
*m, const struct sockaddr
*dst, void *desten,
size_t destlen);
void
arpintr();
The arp functions provide the interface
between the arp module and the network drivers which
need arp functionality. Such drivers must request
the arp attribute in their "files"
declaration.
arp_ifinit()arp specific fields in
ifa. Additionally, it sends out a gratuitous
arp request on ifp, so that
other machines are warned that we have a (new) address and duplicate
addresses can be detected.
You must call this in your drivers' ioctl function when you get a SIOCSIFADDR request with an AF_INET address family.
arpresolve()arp request is sent
instead. When an arp reply is received, the last
held packet is send. Otherwise, the looked up address is returned and
written into the storage desten points to.
arpresolve() returns 1, if a valid address was
stored to desten, and the packet can be sent
immediately. Else a 0 is returned.arpintr()arp packet is received, the network driver
(class) input interrupt handler queues the packet on the arpintrq queue,
and requests an arpintr() soft interrupt callback.
arpintr() dequeues the packets, performs sanity
checks and calls (for IPv4 arp packets, which are
the only ones supported currently) the
in_arpinput()
function. in_arpinput() either generates a reply
to request packets, and adds the sender address translation to the routing
table, if a matching route entry is found. If the route entry contained a
pointer to a held packet, that packet is sent.The ARP code is implemented in sys/net/if_arp.h, sys/netinet/if_inarp.h and sys/netinet/if_arp.c.
Plummer, D., "RFC826", An Ethernet Address Resolution Protocol.
RFC 826
Rewritten to support other than Ethernet link level addresses in NetBSD 1.3.
UCB CSRG (original implementation)
Ignatios Souvatzis (support for non-Ethernet)
| September 1, 2019 | NetBSD 11.0 |