1 arp.h |
1 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ |
|
2 /* All Rights Reserved */ |
|
3 |
|
4 /** @file |
|
5 @publishedAll |
|
6 @released |
|
7 */ |
|
8 |
|
9 /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ |
|
10 /* The copyright notice above does not evidence any */ |
|
11 /* actual or intended publication of such source code. */ |
|
12 |
|
13 /* |
|
14 * PROPRIETARY NOTICE (Combined) |
|
15 * |
|
16 * This source code is unpublished proprietary information |
|
17 * constituting, or derived under license from AT&T's Unix(r) System V. |
|
18 * In addition, portions of such source code were derived from Berkeley |
|
19 * 4.3 BSD under license from the Regents of the University of |
|
20 * California. |
|
21 * |
|
22 * |
|
23 * |
|
24 * Copyright Notice |
|
25 * |
|
26 * Notice of copyright on this source code product does not indicate |
|
27 * publication. |
|
28 * |
|
29 * (c) 1986,1987,1988,1989 Sun Microsystems, Inc. |
|
30 * (c) 1983,1984,1985,1986,1987,1988,1989 AT&T. |
|
31 * All rights reserved. |
|
32 */ |
|
33 |
|
34 #ifndef _NETINET_ARP_H |
|
35 #define _NETINET_ARP_H |
|
36 |
|
37 |
|
38 #include <libc\sys\socket.h> |
|
39 |
|
40 #ifdef __cplusplus |
|
41 extern "C" { |
|
42 #endif |
|
43 |
|
44 /** |
|
45 Address Resolution Protocol. |
|
46 |
|
47 See RFC 826 for protocol description. ARP packets are variable |
|
48 in size; the arphdr structure defines the fixed-length portion. |
|
49 Protocol type values are the same as those for 10 Mb/s Ethernet. |
|
50 It is followed by the variable-sized fields ar_sha, arp_spa, |
|
51 arp_tha and arp_tpa in that order, according to the lengths |
|
52 specified. Field names used correspond to RFC 826. |
|
53 */ |
|
54 struct arphdr { |
|
55 u_short ar_hrd; /* format of hardware address */ |
|
56 #define ARPHRD_ETHER 1 /* ethernet hardware address */ |
|
57 u_short ar_pro; /* format of protocol address */ |
|
58 u_char ar_hln; /* length of hardware address */ |
|
59 u_char ar_pln; /* length of protocol address */ |
|
60 u_short ar_op; /* one of: */ |
|
61 #define ARPOP_REQUEST 1 /* request to resolve address */ |
|
62 #define ARPOP_REPLY 2 /* response to previous request */ |
|
63 #define REVARP_REQUEST 3 /* Reverse ARP request */ |
|
64 #define REVARP_REPLY 4 /* Reverse ARP reply */ |
|
65 /* |
|
66 * The remaining fields are variable in size, |
|
67 * according to the sizes above, and are defined |
|
68 * as appropriate for specific hardware/protocol |
|
69 * combinations. (E.g., see <netinet/if_ether.h>.) |
|
70 */ |
|
71 #ifdef notdef |
|
72 u_char ar_sha[]; /* sender hardware address */ |
|
73 u_char ar_spa[]; /* sender protocol address */ |
|
74 u_char ar_tha[]; /* target hardware address */ |
|
75 u_char ar_tpa[]; /* target protocol address */ |
|
76 #endif /* notdef */ |
|
77 }; |
|
78 |
|
79 /** |
|
80 Ethernet Address Resolution Protocol. |
|
81 |
|
82 See RFC 826 for protocol description. Structure below is adapted |
|
83 to resolving internet addresses. Field names used correspond to |
|
84 RFC 826. |
|
85 */ |
|
86 struct ether_arp { |
|
87 struct arphdr ea_hdr; /* fixed-size header */ |
|
88 struct ether_addr arp_sha; /* sender hardware address */ |
|
89 u_char arp_spa[4]; /* sender protocol address */ |
|
90 struct ether_addr arp_tha; /* target hardware address */ |
|
91 u_char arp_tpa[4]; /* target protocol address */ |
|
92 }; |
|
93 /** |
|
94 @internalComponent |
|
95 */ |
|
96 #define arp_hrd ea_hdr.ar_hrd |
|
97 /** |
|
98 @internalComponent |
|
99 */ |
|
100 #define arp_pro ea_hdr.ar_pro |
|
101 /** |
|
102 @internalComponent |
|
103 */ |
|
104 #define arp_hln ea_hdr.ar_hln |
|
105 /** |
|
106 @internalComponent |
|
107 */ |
|
108 #define arp_pln ea_hdr.ar_pln |
|
109 /** |
|
110 @internalComponent |
|
111 */ |
|
112 #define arp_op ea_hdr.ar_op |
|
113 |
|
114 /** |
|
115 ARP ioctl request |
|
116 */ |
|
117 struct arpreq { |
|
118 struct sockaddr arp_pa; /* protocol address */ |
|
119 struct sockaddr arp_ha; /* hardware address */ |
|
120 int arp_flags; /* flags */ |
|
121 }; |
|
122 /** |
|
123 arp_flags and at_flags field values |
|
124 @internalComponent |
|
125 */ |
|
126 #define ATF_INUSE 0x01 /* entry in use */ |
|
127 /** |
|
128 @internalComponent |
|
129 */ |
|
130 #define ATF_COM 0x02 /* completed entry (enaddr valid) */ |
|
131 /** |
|
132 @internalComponent |
|
133 */ |
|
134 #define ATF_PERM 0x04 /* permanent entry */ |
|
135 /** |
|
136 @internalComponent |
|
137 */ |
|
138 #define ATF_PUBL 0x08 /* publish entry (respond for other host) */ |
|
139 /** |
|
140 @internalComponent |
|
141 */ |
|
142 #define ATF_USETRAILERS 0x10 /* has requested trailers */ |
|
143 |
|
144 #ifdef __cplusplus |
|
145 } |
|
146 #endif |
|
147 |
|
148 #endif /* _NETINET_ARP_H */ |