137 lines
4.4 KiB
Groff
137 lines
4.4 KiB
Groff
.\" $NetBSD: arp.9,v 1.12 1998/09/03 08:12:56 msaitoh Exp $
|
|
.\"
|
|
.\" Copyright (c) 1997 Ignatios Souvatzis.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed for the NetBSD Project
|
|
.\" by Ignatios Souvatzis
|
|
.\" 4. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.Dd March 3, 1997
|
|
.Dt ARP 9
|
|
.Os NetBSD
|
|
.Sh NAME
|
|
.Nm arp ,
|
|
.Nm arp_ifinit ,
|
|
.Nm arpresolve ,
|
|
.Nm arpintr
|
|
.Nd externally visible ARP functions
|
|
.Sh SYNOPSIS
|
|
.Fd #include <netinet/if_inarp.h>
|
|
.Ft void
|
|
.Fn arp_ifinit "struct ifnet *ifp" "struct ifaddr *ifa"
|
|
.Ft int
|
|
.Fn arpresolve "struct ifnet *ifp" "struct rtentry *rt" "struct mbuf *m" "struct sockaddr *dst" "u_char *desten"
|
|
.Ft void
|
|
.Fn arpintr
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
functions provide the interface between the
|
|
.Nm
|
|
module and the network drivers which need
|
|
.Nm
|
|
functionality. Such drivers must request the
|
|
arp
|
|
attribute in their "files" declaration.
|
|
.Bl -tag -width "arp_ifinit()"
|
|
.It Fn arp_ifinit
|
|
Sets up the
|
|
.Nm
|
|
specific fields in
|
|
.Fa ifa .
|
|
Additionally, it sends out a gratitious
|
|
.Nm
|
|
request on
|
|
.Fa ifp ,
|
|
so that other machines are warned that we have a (new) address and
|
|
duplicate addresses can be detected.
|
|
.Pp
|
|
You must call this in your drivers' ioctl function when you get a
|
|
SIOCSIFADDR request with an AF_INET address family.
|
|
.It Fn arpresolve
|
|
is called by network output functions to resolve an IPv4 address.
|
|
If no
|
|
.Fa rt
|
|
is given, a new one is looked up or created. If the passed or found
|
|
.Fa rt
|
|
does not contain a valid gateway link level address, a pointer to the packet
|
|
in
|
|
.Fa m
|
|
is stored in the route entry, possibly replacing older stored packets, and an
|
|
.Nm
|
|
request is sent instead. When an
|
|
.Nm
|
|
reply is received, the last held packet is send.
|
|
Otherwise, the looked up address is returned and written into the storage
|
|
.Fa desten
|
|
points to.
|
|
.Fn arpresolve
|
|
returns 1, if a valid address was stored to
|
|
.Fa desten ,
|
|
and the packet can be sent immediately. Else a 0 is returned.
|
|
.It Fn arpintr
|
|
When an
|
|
.Nm
|
|
packet is received, the network driver (class) input interupt handler queues
|
|
the packet on the arpintrq queue, and requests an
|
|
.Fn arpintr
|
|
soft interupt callback.
|
|
.Fn arpintr
|
|
dequeues the packets, performs sanity checks and calls (for IPv4
|
|
.Nm
|
|
packes, which are the only ones supported currently) the
|
|
.Fn in_arpinput
|
|
function.
|
|
.Fn in_arpinput
|
|
either generates a reply to request packets, and adds the sender address
|
|
translation to 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.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr ifattach 9 ,
|
|
.Xr ether_ifattach 9 ,
|
|
.Xr fddi_ifattach 9 ,
|
|
.Xr arc_ifattach 9
|
|
.br
|
|
Plummer, D., "RFC826", An Ethernet Address Resolution Protocol.
|
|
.Sh AUTHORS
|
|
UCB CSRG (original implementation)
|
|
.br
|
|
Ignatios Souvatzis (support for non-Ethernet)
|
|
.Sh CODE REFERENCES
|
|
The ARP code is implemented in
|
|
.Pa sys/net/if_arp.h ,
|
|
.Pa sys/netinet/if_inarp.h
|
|
and
|
|
.Pa sys/netinet/if_arp.c .
|
|
.Sh STANDARDS
|
|
RFC 826
|
|
.Sh HISTORY
|
|
Rewritten to support other than Ethernet link level addresses in
|
|
.Nx 1.3 .
|