+To enable communications with systems which do not use ARP, ioctls
+are provided to enter and delete entries in the Internet-to-Ethernet tables.
+Usage:
+.LP
+.nf
+.ft B
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+ #include <net/if.h>
+ struct arpreq arpreq;
+
+ ioctl(s, SIOCSARP, (caddr_t)&arpreq);
+ ioctl(s, SIOCGARP, (caddr_t)&arpreq);
+ ioctl(s, SIOCDARP, (caddr_t)&arpreq);
+.fi
+.ft R
+Each ioctl takes the same structure as an argument.
+SIOCSARP sets an ARP entry, SIOCGARP gets an ARP entry, and SIOCDARP
+deletes an ARP entry. These ioctls may be applied to any socket descriptor
+.I s,
+but only by the super-user.
+The
+.I arpreq
+structure contains:
+.LP
+.nf
+ /*
+ * 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 2 /* completed entry (arp_ha valid) */
+ #define ATF_PERM 4 /* permanent entry */
+ #define ATF_PUBL 8 /* publish (respond for other host) */
+.fi
+.LP
+The address family for the
+.I arp_pa
+sockaddr must be AF_INET; for the
+.I arp_ha
+sockaddr it must be AF_UNSPEC.
+The only flag bits which may be written are ATF_PERM and ATF_PUBL.
+ATF_PERM causes the entry to be permanent if the ioctl call succeeds.
+The peculiar nature of the ARP tables may cause the ioctl to fail if more
+than 4 (permanent) Internet host 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.
+.PP