summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/if_arp.h
blob: cf8bcd05075fd3faaaaca62a975de73827c6872d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
/*
 * INET		An implementation of the TCP/IP protocol suite for the LINUX
 *		operating system.  INET is implemented using the  BSD Socket
 *		interface as the means of communication with the user level.
 *
 *		Global definitions for the ARP (RFC 826) protocol.
 *
 * Version:	@(#)if_arp.h	1.0.1	04/16/93
 *
 * Authors:	Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
 *		Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source.
 *		Ross Biro
 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 *		Florian La Roche,
 *		Jonathan Layes <layes@loran.com>
 *		Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25
 *
 *		This program is free software; you can redistribute it and/or
 *		modify it under the terms of the GNU General Public License
 *		as published by the Free Software Foundation; either version
 *		2 of the License, or (at your option) any later version.
 */
#ifndef _LINUX_IF_ARP_H
#define _LINUX_IF_ARP_H

#include <linux/netdevice.h>

/* ARP protocol HARDWARE identifiers. */
#define ARPHRD_NETROM	  0  /* from KA9Q: NET/ROM pseudo	*/
#define ARPHRD_ETHER	  1  /* Ethernet 10Mbps		*/
#define ARPHRD_EETHER	  2  /* Experimental Ethernet	*/
#define ARPHRD_AX25	  3  /* AX.25 Level 2		*/
#define ARPHRD_PRONET	  4  /* PROnet token ring		*/
#define ARPHRD_CHAOS	  5  /* Chaosnet			*/
#define ARPHRD_IEEE802	  6  /* IEEE 802.2 Ethernet/TR/TB	*/
#define ARPHRD_ARCNET	  7  /* ARCnet			*/
#define ARPHRD_APPLETLK	  8  /* APPLEtalk			*/
#define ARPHRD_DLCI	  15 /* Frame Relay DLCI		*/
#define ARPHRD_ATM	  19 /* ATM 				*/
#define ARPHRD_METRICOM	  23 /* Metricom STRIP (new IANA id)	*/
#define ARPHRD_IEEE1394	  24 /* IEEE 1394 IPv4 - RFC 2734	*/
#define ARPHRD_EUI64	  27 /* EUI-64                       */
#define ARPHRD_INFINIBAND 32 /* InfiniBand			*/

/* Dummy types for non ARP hardware */
#define ARPHRD_SLIP    256
#define ARPHRD_CSLIP   257
#define ARPHRD_SLIP6   258
#define ARPHRD_CSLIP6  259
#define ARPHRD_RSRVD   260 /* Notional KISS type 		*/
#define ARPHRD_ADAPT   264
#define ARPHRD_ROSE    270
#define ARPHRD_X25     271 /* CCITT X.25			*/
#define ARPHRD_HWX25   272 /* Boards with X.25 in firmware	*/
#define ARPHRD_CAN     280 /* Controller Area Network      */
#define ARPHRD_MCTP    290
#define ARPHRD_PPP     512
#define ARPHRD_CISCO   513 /* Cisco HDLC	 		*/
#define ARPHRD_HDLC    ARPHRD_CISCO
#define ARPHRD_LAPB    516 /* LAPB				*/
#define ARPHRD_DDCMP   517 /* Digital's DDCMP protocol     */
#define ARPHRD_RAWHDLC 518 /* Raw HDLC			*/
#define ARPHRD_RAWIP   519 /* Raw IP                       */

#define ARPHRD_TUNNEL	768 /* IPIP tunnel			*/
#define ARPHRD_TUNNEL6	769 /* IP6IP6 tunnel       		*/
#define ARPHRD_FRAD	770 /* Frame Relay Access Device    */
#define ARPHRD_SKIP	771 /* SKIP vif			*/
#define ARPHRD_LOOPBACK 772 /* Loopback device		*/
#define ARPHRD_LOCALTLK 773 /* Localtalk device		*/
#define ARPHRD_FDDI	774 /* Fiber Distributed Data Interface */
#define ARPHRD_BIF	775 /* AP1000 BIF                   */
#define ARPHRD_SIT	776 /* sit0 device - IPv6-in-IPv4	*/
#define ARPHRD_IPDDP	777 /* IP over DDP tunneller	*/
#define ARPHRD_IPGRE	778 /* GRE over IP			*/
#define ARPHRD_PIMREG	779 /* PIMSM register interface	*/
#define ARPHRD_HIPPI	780 /* High Performance Parallel Interface */
#define ARPHRD_ASH	781 /* Nexus 64Mbps Ash		*/
#define ARPHRD_ECONET	782 /* Acorn Econet			*/
#define ARPHRD_IRDA	783 /* Linux-IrDA			*/
/* ARP works differently on different FC media .. so  */
#define ARPHRD_FCPP	784	      /* Point to point fibrechannel	*/
#define ARPHRD_FCAL	785	      /* Fibrechannel arbitrated loop */
#define ARPHRD_FCPL	786	      /* Fibrechannel public loop	*/
#define ARPHRD_FCFABRIC 787	      /* Fibrechannel fabric		*/
				      /* 787->799 reserved for fibrechannel media types */
#define ARPHRD_IEEE802_TR	  800 /* Magic type ident for TR	*/
#define ARPHRD_IEEE80211	  801 /* IEEE 802.11			*/
#define ARPHRD_IEEE80211_PRISM	  802 /* IEEE 802.11 + Prism2 header  */
#define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */
#define ARPHRD_IEEE802154	  804
#define ARPHRD_IEEE802154_MONITOR 805 /* IEEE 802.15.4 network monitor */

#define ARPHRD_PHONET	   820 /* PhoNet media type		*/
#define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header		*/
#define ARPHRD_CAIF	   822 /* CAIF media type		*/
#define ARPHRD_IP6GRE	   823 /* GRE over IPv6		*/
#define ARPHRD_NETLINK	   824 /* Netlink header		*/
#define ARPHRD_6LOWPAN	   825 /* IPv6 over LoWPAN             */
#define ARPHRD_VSOCKMON	   826 /* Vsock monitor header		*/

#define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */
#define ARPHRD_NONE 0xFFFE /* zero header length */

/* ARP protocol opcodes. */
#define ARPOP_REQUEST	1  /* ARP request			*/
#define ARPOP_REPLY	2  /* ARP reply			*/
#define ARPOP_RREQUEST	3  /* RARP request			*/
#define ARPOP_RREPLY	4  /* RARP reply			*/
#define ARPOP_InREQUEST 8  /* InARP request		*/
#define ARPOP_InREPLY	9  /* InARP reply			*/
#define ARPOP_NAK	10 /* (ATM)ARP NAK			*/

/* ARP ioctl request. */
struct arpreq {
	struct sockaddr arp_pa;	     /* protocol address		 */
	struct sockaddr arp_ha;	     /* hardware address		 */
	int arp_flags;		     /* flags			 */
	struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
	char arp_dev[IFNAMSIZ];
};

struct arpreq_old {
	struct sockaddr arp_pa;	     /* protocol address		 */
	struct sockaddr arp_ha;	     /* hardware address		 */
	int arp_flags;		     /* flags			 */
	struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
};

/* ARP Flag values. */
#define ATF_COM		0x02 /* completed entry (ha valid)	*/
#define ATF_PERM	0x04 /* permanent entry		*/
#define ATF_PUBL	0x08 /* publish entry		*/
#define ATF_USETRAILERS 0x10 /* has requested trailers	*/
#define ATF_NETMASK                                     \
	0x20		 /* want to use a netmask (only \
			    for proxy entries) */
#define ATF_DONTPUB 0x40 /* don't answer this addresses	*/

/*
 *	This structure defines an ethernet arp header.
 */

struct arphdr {
	__be16 ar_hrd;	      /* format of hardware address	*/
	__be16 ar_pro;	      /* format of protocol address	*/
	unsigned char ar_hln; /* length of hardware address	*/
	unsigned char ar_pln; /* length of protocol address	*/
	__be16 ar_op;	      /* ARP opcode (command)		*/

#if 0
	 /*
	  *	 Ethernet looks like this : This bit is variable sized however...
	  */
	unsigned char		ar_sha[ETH_ALEN];	/* sender hardware address	*/
	unsigned char		ar_sip[4];		/* sender IP address		*/
	unsigned char		ar_tha[ETH_ALEN];	/* target hardware address	*/
	unsigned char		ar_tip[4];		/* target IP address		*/
#endif
};

#endif /* _LINUX_IF_ARP_H */