1*53ee8cc1Swenshuai.xi /* Definitions for Address Resolution Protocol. 2*53ee8cc1Swenshuai.xi Copyright (C) 1997,1999,2001,2006 Free Software Foundation, Inc. 3*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 4*53ee8cc1Swenshuai.xi Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 7*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 8*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 9*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 12*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 13*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 17*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 18*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 19*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi /* Based on the 4.4BSD and Linux version of this file. */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi #ifndef _NET_IF_ARP_H 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi #define _NET_IF_ARP_H 1 26*53ee8cc1Swenshuai.xi #include <sys/cdefs.h> 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi #include <sys/types.h> 29*53ee8cc1Swenshuai.xi #include <sys/socket.h> 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi __BEGIN_DECLS 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xi /* Some internals from deep down in the kernel. */ 34*53ee8cc1Swenshuai.xi #define MAX_ADDR_LEN 7 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi /* This structure defines an ethernet arp header. */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi /* ARP protocol opcodes. */ 40*53ee8cc1Swenshuai.xi #define ARPOP_REQUEST 1 /* ARP request. */ 41*53ee8cc1Swenshuai.xi #define ARPOP_REPLY 2 /* ARP reply. */ 42*53ee8cc1Swenshuai.xi #define ARPOP_RREQUEST 3 /* RARP request. */ 43*53ee8cc1Swenshuai.xi #define ARPOP_RREPLY 4 /* RARP reply. */ 44*53ee8cc1Swenshuai.xi #define ARPOP_InREQUEST 8 /* InARP request. */ 45*53ee8cc1Swenshuai.xi #define ARPOP_InREPLY 9 /* InARP reply. */ 46*53ee8cc1Swenshuai.xi #define ARPOP_NAK 10 /* (ATM)ARP NAK. */ 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi /* See RFC 826 for protocol description. ARP packets are variable 49*53ee8cc1Swenshuai.xi in size; the arphdr structure defines the fixed-length portion. 50*53ee8cc1Swenshuai.xi Protocol type values are the same as those for 10 Mb/s Ethernet. 51*53ee8cc1Swenshuai.xi It is followed by the variable-sized fields ar_sha, arp_spa, 52*53ee8cc1Swenshuai.xi arp_tha and arp_tpa in that order, according to the lengths 53*53ee8cc1Swenshuai.xi specified. Field names used correspond to RFC 826. */ 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi struct arphdr 56*53ee8cc1Swenshuai.xi { 57*53ee8cc1Swenshuai.xi unsigned short int ar_hrd; /* Format of hardware address. */ 58*53ee8cc1Swenshuai.xi unsigned short int ar_pro; /* Format of protocol address. */ 59*53ee8cc1Swenshuai.xi unsigned char ar_hln; /* Length of hardware address. */ 60*53ee8cc1Swenshuai.xi unsigned char ar_pln; /* Length of protocol address. */ 61*53ee8cc1Swenshuai.xi unsigned short int ar_op; /* ARP opcode (command). */ 62*53ee8cc1Swenshuai.xi #if 0 63*53ee8cc1Swenshuai.xi /* Ethernet looks like this : This bit is variable sized 64*53ee8cc1Swenshuai.xi however... */ 65*53ee8cc1Swenshuai.xi unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */ 66*53ee8cc1Swenshuai.xi unsigned char __ar_sip[4]; /* Sender IP address. */ 67*53ee8cc1Swenshuai.xi unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */ 68*53ee8cc1Swenshuai.xi unsigned char __ar_tip[4]; /* Target IP address. */ 69*53ee8cc1Swenshuai.xi #endif 70*53ee8cc1Swenshuai.xi }; 71*53ee8cc1Swenshuai.xi 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi /* ARP protocol HARDWARE identifiers. */ 74*53ee8cc1Swenshuai.xi #define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */ 75*53ee8cc1Swenshuai.xi #define ARPHRD_ETHER 1 /* Ethernet 10/100Mbps. */ 76*53ee8cc1Swenshuai.xi #define ARPHRD_EETHER 2 /* Experimental Ethernet. */ 77*53ee8cc1Swenshuai.xi #define ARPHRD_AX25 3 /* AX.25 Level 2. */ 78*53ee8cc1Swenshuai.xi #define ARPHRD_PRONET 4 /* PROnet token ring. */ 79*53ee8cc1Swenshuai.xi #define ARPHRD_CHAOS 5 /* Chaosnet. */ 80*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB. */ 81*53ee8cc1Swenshuai.xi #define ARPHRD_ARCNET 7 /* ARCnet. */ 82*53ee8cc1Swenshuai.xi #define ARPHRD_APPLETLK 8 /* APPLEtalk. */ 83*53ee8cc1Swenshuai.xi #define ARPHRD_DLCI 15 /* Frame Relay DLCI. */ 84*53ee8cc1Swenshuai.xi #define ARPHRD_ATM 19 /* ATM. */ 85*53ee8cc1Swenshuai.xi #define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id). */ 86*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE1394 24 /* IEEE 1394 IPv4 - RFC 2734. */ 87*53ee8cc1Swenshuai.xi #define ARPHRD_EUI64 27 /* EUI-64. */ 88*53ee8cc1Swenshuai.xi #define ARPHRD_INFINIBAND 32 /* InfiniBand. */ 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi /* Dummy types for non ARP hardware */ 91*53ee8cc1Swenshuai.xi #define ARPHRD_SLIP 256 92*53ee8cc1Swenshuai.xi #define ARPHRD_CSLIP 257 93*53ee8cc1Swenshuai.xi #define ARPHRD_SLIP6 258 94*53ee8cc1Swenshuai.xi #define ARPHRD_CSLIP6 259 95*53ee8cc1Swenshuai.xi #define ARPHRD_RSRVD 260 /* Notional KISS type. */ 96*53ee8cc1Swenshuai.xi #define ARPHRD_ADAPT 264 97*53ee8cc1Swenshuai.xi #define ARPHRD_ROSE 270 98*53ee8cc1Swenshuai.xi #define ARPHRD_X25 271 /* CCITT X.25. */ 99*53ee8cc1Swenshuai.xi #define ARPHRD_HWX25 272 /* Boards with X.25 in firmware. */ 100*53ee8cc1Swenshuai.xi #define ARPHRD_PPP 512 101*53ee8cc1Swenshuai.xi #define ARPHRD_CISCO 513 /* Cisco HDLC. */ 102*53ee8cc1Swenshuai.xi #define ARPHRD_HDLC ARPHRD_CISCO 103*53ee8cc1Swenshuai.xi #define ARPHRD_LAPB 516 /* LAPB. */ 104*53ee8cc1Swenshuai.xi #define ARPHRD_DDCMP 517 /* Digital's DDCMP. */ 105*53ee8cc1Swenshuai.xi #define ARPHRD_RAWHDLC 518 /* Raw HDLC. */ 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi #define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ 108*53ee8cc1Swenshuai.xi #define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ 109*53ee8cc1Swenshuai.xi #define ARPHRD_FRAD 770 /* Frame Relay Access Device. */ 110*53ee8cc1Swenshuai.xi #define ARPHRD_SKIP 771 /* SKIP vif. */ 111*53ee8cc1Swenshuai.xi #define ARPHRD_LOOPBACK 772 /* Loopback device. */ 112*53ee8cc1Swenshuai.xi #define ARPHRD_LOCALTLK 773 /* Localtalk device. */ 113*53ee8cc1Swenshuai.xi #define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface. */ 114*53ee8cc1Swenshuai.xi #define ARPHRD_BIF 775 /* AP1000 BIF. */ 115*53ee8cc1Swenshuai.xi #define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4. */ 116*53ee8cc1Swenshuai.xi #define ARPHRD_IPDDP 777 /* IP-in-DDP tunnel. */ 117*53ee8cc1Swenshuai.xi #define ARPHRD_IPGRE 778 /* GRE over IP. */ 118*53ee8cc1Swenshuai.xi #define ARPHRD_PIMREG 779 /* PIMSM register interface. */ 119*53ee8cc1Swenshuai.xi #define ARPHRD_HIPPI 780 /* High Performance Parallel I'face. */ 120*53ee8cc1Swenshuai.xi #define ARPHRD_ASH 781 /* (Nexus Electronics) Ash. */ 121*53ee8cc1Swenshuai.xi #define ARPHRD_ECONET 782 /* Acorn Econet. */ 122*53ee8cc1Swenshuai.xi #define ARPHRD_IRDA 783 /* Linux-IrDA. */ 123*53ee8cc1Swenshuai.xi #define ARPHRD_FCPP 784 /* Point to point fibrechanel. */ 124*53ee8cc1Swenshuai.xi #define ARPHRD_FCAL 785 /* Fibrechanel arbitrated loop. */ 125*53ee8cc1Swenshuai.xi #define ARPHRD_FCPL 786 /* Fibrechanel public loop. */ 126*53ee8cc1Swenshuai.xi #define ARPHRD_FCFABRIC 787 /* Fibrechanel fabric. */ 127*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR. */ 128*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE80211 801 /* IEEE 802.11. */ 129*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header. */ 130*53ee8cc1Swenshuai.xi #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header. */ 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known. */ 133*53ee8cc1Swenshuai.xi #define ARPHRD_NONE 0xFFFE /* Zero header length. */ 134*53ee8cc1Swenshuai.xi 135*53ee8cc1Swenshuai.xi 136*53ee8cc1Swenshuai.xi /* ARP ioctl request. */ 137*53ee8cc1Swenshuai.xi struct arpreq 138*53ee8cc1Swenshuai.xi { 139*53ee8cc1Swenshuai.xi struct sockaddr arp_pa; /* Protocol address. */ 140*53ee8cc1Swenshuai.xi struct sockaddr arp_ha; /* Hardware address. */ 141*53ee8cc1Swenshuai.xi int arp_flags; /* Flags. */ 142*53ee8cc1Swenshuai.xi struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */ 143*53ee8cc1Swenshuai.xi char arp_dev[16]; 144*53ee8cc1Swenshuai.xi }; 145*53ee8cc1Swenshuai.xi 146*53ee8cc1Swenshuai.xi struct arpreq_old 147*53ee8cc1Swenshuai.xi { 148*53ee8cc1Swenshuai.xi struct sockaddr arp_pa; /* Protocol address. */ 149*53ee8cc1Swenshuai.xi struct sockaddr arp_ha; /* Hardware address. */ 150*53ee8cc1Swenshuai.xi int arp_flags; /* Flags. */ 151*53ee8cc1Swenshuai.xi struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */ 152*53ee8cc1Swenshuai.xi }; 153*53ee8cc1Swenshuai.xi 154*53ee8cc1Swenshuai.xi /* ARP Flag values. */ 155*53ee8cc1Swenshuai.xi #define ATF_COM 0x02 /* Completed entry (ha valid). */ 156*53ee8cc1Swenshuai.xi #define ATF_PERM 0x04 /* Permanent entry. */ 157*53ee8cc1Swenshuai.xi #define ATF_PUBL 0x08 /* Publish entry. */ 158*53ee8cc1Swenshuai.xi #define ATF_USETRAILERS 0x10 /* Has requested trailers. */ 159*53ee8cc1Swenshuai.xi #define ATF_NETMASK 0x20 /* Want to use a netmask (only 160*53ee8cc1Swenshuai.xi for proxy entries). */ 161*53ee8cc1Swenshuai.xi #define ATF_DONTPUB 0x40 /* Don't answer this addresses. */ 162*53ee8cc1Swenshuai.xi #define ATF_MAGIC 0x80 /* Automatically added entry. */ 163*53ee8cc1Swenshuai.xi 164*53ee8cc1Swenshuai.xi 165*53ee8cc1Swenshuai.xi /* Support for the user space arp daemon, arpd. */ 166*53ee8cc1Swenshuai.xi #define ARPD_UPDATE 0x01 167*53ee8cc1Swenshuai.xi #define ARPD_LOOKUP 0x02 168*53ee8cc1Swenshuai.xi #define ARPD_FLUSH 0x03 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi struct arpd_request 171*53ee8cc1Swenshuai.xi { 172*53ee8cc1Swenshuai.xi unsigned short int req; /* Request type. */ 173*53ee8cc1Swenshuai.xi u_int32_t ip; /* IP address of entry. */ 174*53ee8cc1Swenshuai.xi unsigned long int dev; /* Device entry is tied to. */ 175*53ee8cc1Swenshuai.xi unsigned long int stamp; 176*53ee8cc1Swenshuai.xi unsigned long int updated; 177*53ee8cc1Swenshuai.xi unsigned char ha[MAX_ADDR_LEN]; /* Hardware address. */ 178*53ee8cc1Swenshuai.xi }; 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi __END_DECLS 181*53ee8cc1Swenshuai.xi 182*53ee8cc1Swenshuai.xi #endif /* net/if_arp.h */ 183