arp(7P)
NAME
arp, ARP - Address Resolution Protocol
SYNOPSIS
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <net/if_arp.h>
#include <netinet/in.h>
s = socket(AF_INET, SOCK_DGRAM, 0);
d = open ("/dev/arp", oflag);
DESCRIPTION
ARP is a protocol used to map dynamically between Internet
Protocol (IP) and 10Mb/s Ethernet addresses. It is used by
all the 10Mb/s Ethernet datalink providers (interface
drivers) and it can be used by other datalink providers
that support broadcast, such as FDDI and Token Ring. The
only network layer supported in this implementation is the
Internet Protocol, although ARP is not specific to that pro-
tocol.
ARP caches IP-to-Ethernet address mappings. When an inter-
face requests a mapping for an address not in the cache, ARP
queues the message that requires the mapping and broadcasts
a message on the associated network requesting the address
mapping. If a response is provided, ARP caches the new map-
ping and transmits any pending message. ARP will queue at
most four packets while waiting for a response to a mapping
request; it keeps only the four most recently transmitted
packets.
APPLICATION PROGRAMMING INTERFACE
The STREAMS device /dev/arp is not a Transport Level Inter-
face ("TLI)" transport provider and may not be used with the
TLI interface.
To facilitate communications with systems that do not use
ARP, ioctl() requests are provided to enter and delete
entries in the IP-to-Ethernet tables.
#include <sys/sockio.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/if_arp.h>
struct arpreq arpreq;
ioctl(s, SIOCSARP, (caddr_t)&arpreq);
ioctl(s, SIOCGARP, (caddr_t)&arpreq);
ioctl(s, SIOCDARP, (caddr_t)&arpreq);
Each ioctl() request takes the same structure as an argu-
ment. SIOCSARP sets an ARP entry, SIOCGARP gets an ARP
entry, and SIOCDARP deletes an ARP entry. These ioctl()
requests may be applied to any Internet family socket
descriptor s, or to a descriptor for the ARP device, but
only by the privileged user.
The arpreq structure contains:
/*
* ARP ioctl request
*/
struct arpreq {
struct sockaddr arp_pa; /* protocol address */
struct sockaddr arp_ha; /* hardware address */
int arp_flags; /* flags */
};
/* arp_flags field values */
#define ATF_COM 0x2 /* completed entry (arp_ha valid) */
#define ATF_PERM 0x4 /* permanent entry */
#define ATF_PUBL 0x8 /* publish (respond for other host) */
#define ATF_USETRAILERS 0x10 /* send trailer packets to host */
The address family for the arp_pa sockaddr must be AF_INET;
for the arp_ha sockaddr, it must be AF_UNSPEC. The only flag
bits that may be written are ATF_PUBL and ATF_USETRAILERS.
ATF_PERM makes the entry permanent if the ioctl() request
succeeds. The peculiar nature of the ARP tables may cause
the ioctl() request to fail if too many permanent IP
addresses hash to the same slot. ATF_PUBL specifies that the
ARP code should respond to ARP requests for the indicated
host coming from other machines. This allows a host to act
as an "ARP server", which may be useful in convincing an
ARP-only machine to talk to a non-ARP machine.
ARP is also used to negotiate the use of trailer IP encapsu-
lations. Trailers are an alternate encapsulation used to
allow efficient packet alignment for large packets despite
variable-sized headers. Hosts that wish to receive trailer
encapsulations so indicate by sending gratuitous ARP trans-
lation replies along with replies to IP requests; trailer
encapsulations are also sent in reply to IP translation
replies. The negotiation is thus fully symmetrical, in that
either host or both may request trailers. The
ATF_USETRAILERS flag records the receipt of such a reply and
enables the transmission of trailer packets to that host.
ARP watches passively for hosts impersonating the local host
(that is, a host which responds to an ARP mapping request
for the local host's address).
SEE ALSO
arp(1M), ifconfig(1M), if_tcp(7P), inet(7P)
Leffler, Sam, and Michael Karels, Trailer Encapsulations,
RFC 893, Network Information Center, SRI International,
Menlo Park, California, April 1984.
Plummer, Dave, An Ethernet Address Resolution Protocol -or-
Converting Network Protocol Addresses to 48.bit Ethernet
Addresses for Transmission on Ethernet Hardware, RFC 826,
Network Information Center, SRI International, Menlo Park,
California, November 1982.
DIAGNOSTICS
IP: Hardware address '%x:%x:%x:%x:%x:%x'
trying to be our address '%d.%d.%d.%d'!
Duplicate IP address. ARP has discovered another host
on the local network which responds to mapping
requests for the Internet address of this system.
IP: Proxy ARP problem? Hardware address '%x:%x:%x:%x:%x:%x'
thinks it is '%d.%d.%d.%d'
This message will appear if arp(1M) has been used to
create a published entry, and some other host on the
local network responds to mapping requests for the
published ARPentry.
Man(1) output converted with
man2html