ARP(9) | Kernel Developer's Manual | ARP(9) |
arp
, arp_ifinit
,
arpresolve
, arpintr
—
#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
();
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.Plummer, D., "RFC826", An Ethernet Address Resolution Protocol.
September 1, 2019 | NetBSD 9.0 |