]>
Commit | Line | Data |
---|---|---|
d7837182 TL |
1 | /* dhcp.h |
2 | ||
3 | Protocol structures... */ | |
4 | ||
5 | /* | |
b047bd38 | 6 | * Copyright (c) 2011-2012 by Internet Systems Consortium, Inc. ("ISC") |
a47d6336 | 7 | * Copyright (c) 2004-2009 by Internet Systems Consortium, Inc. ("ISC") |
98311e4b | 8 | * Copyright (c) 1995-2003 by Internet Software Consortium |
d7837182 | 9 | * |
98311e4b DH |
10 | * Permission to use, copy, modify, and distribute this software for any |
11 | * purpose with or without fee is hereby granted, provided that the above | |
12 | * copyright notice and this permission notice appear in all copies. | |
d7837182 | 13 | * |
98311e4b DH |
14 | * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES |
15 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
16 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR | |
17 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
18 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
19 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | |
20 | * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
d7837182 | 21 | * |
98311e4b DH |
22 | * Internet Systems Consortium, Inc. |
23 | * 950 Charter Street | |
24 | * Redwood City, CA 94063 | |
25 | * <info@isc.org> | |
2c85ac9b | 26 | * https://www.isc.org/ |
d7837182 | 27 | * |
98311e4b DH |
28 | * This software has been written for Internet Systems Consortium |
29 | * by Ted Lemon in cooperation with Vixie Enterprises. To learn more | |
2c85ac9b | 30 | * about Internet Systems Consortium, see ``https://www.isc.org''. |
98311e4b | 31 | * To learn more about Vixie Enterprises, see ``http://www.vix.com''. |
d7837182 TL |
32 | */ |
33 | ||
98bd7ca0 DH |
34 | #ifndef DHCP_H |
35 | #define DHCP_H | |
36 | ||
88cd8aca | 37 | #define DHCP_UDP_OVERHEAD (20 + /* IP header */ \ |
e2624b82 | 38 | 8) /* UDP header */ |
d7837182 TL |
39 | #define DHCP_SNAME_LEN 64 |
40 | #define DHCP_FILE_LEN 128 | |
76d9aae0 TL |
41 | #define DHCP_FIXED_NON_UDP 236 |
42 | #define DHCP_FIXED_LEN (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD) | |
43 | /* Everything but options. */ | |
e2624b82 EH |
44 | #define BOOTP_MIN_LEN 300 |
45 | ||
d7837182 | 46 | #define DHCP_MTU_MAX 1500 |
e2624b82 | 47 | #define DHCP_MTU_MIN 576 |
d7837182 | 48 | |
e2624b82 EH |
49 | #define DHCP_MAX_OPTION_LEN (DHCP_MTU_MAX - DHCP_FIXED_LEN) |
50 | #define DHCP_MIN_OPTION_LEN (DHCP_MTU_MIN - DHCP_FIXED_LEN) | |
f4835c58 | 51 | |
d7837182 | 52 | struct dhcp_packet { |
6d103865 | 53 | u_int8_t op; /* 0: Message opcode/type */ |
33c28146 TL |
54 | u_int8_t htype; /* 1: Hardware addr type (net/if_types.h) */ |
55 | u_int8_t hlen; /* 2: Hardware addr length */ | |
56 | u_int8_t hops; /* 3: Number of relay agent hops from client */ | |
57 | u_int32_t xid; /* 4: Transaction ID */ | |
58 | u_int16_t secs; /* 8: Seconds since client started looking */ | |
59 | u_int16_t flags; /* 10: Flag bits */ | |
60 | struct in_addr ciaddr; /* 12: Client IP address (if already in use) */ | |
61 | struct in_addr yiaddr; /* 16: Client IP address */ | |
62 | struct in_addr siaddr; /* 18: IP address of next server to talk to */ | |
63 | struct in_addr giaddr; /* 20: DHCP relay agent IP address */ | |
64 | unsigned char chaddr [16]; /* 24: Client hardware address */ | |
65 | char sname [DHCP_SNAME_LEN]; /* 40: Server name */ | |
66 | char file [DHCP_FILE_LEN]; /* 104: Boot filename */ | |
e2624b82 | 67 | unsigned char options [DHCP_MAX_OPTION_LEN]; |
33c28146 | 68 | /* 212: Optional parameters |
6d103865 | 69 | (actual length dependent on MTU). */ |
d7837182 TL |
70 | }; |
71 | ||
72 | /* BOOTP (rfc951) message types */ | |
73 | #define BOOTREQUEST 1 | |
74 | #define BOOTREPLY 2 | |
75 | ||
76 | /* Possible values for flags field... */ | |
77 | #define BOOTP_BROADCAST 32768L | |
78 | ||
0b5d360d TL |
79 | /* Possible values for hardware type (htype) field... */ |
80 | #define HTYPE_ETHER 1 /* Ethernet 10Mbps */ | |
81 | #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */ | |
d2bc90bd | 82 | #define HTYPE_FDDI 8 /* FDDI... */ |
b047bd38 SR |
83 | #define HTYPE_INFINIBAND 32 /* IP over Infiniband */ |
84 | #define HTYPE_IPMP 255 /* IPMP - random hw address - there | |
85 | * is no standard for this so we | |
86 | * just steal a type */ | |
0b5d360d | 87 | |
d7837182 TL |
88 | /* Magic cookie validating dhcp options field (and bootp vendor |
89 | extensions field). */ | |
90 | #define DHCP_OPTIONS_COOKIE "\143\202\123\143" | |
91 | ||
92 | /* DHCP Option codes: */ | |
93 | ||
6d103865 SK |
94 | #define DHO_PAD 0 |
95 | #define DHO_SUBNET_MASK 1 | |
96 | #define DHO_TIME_OFFSET 2 | |
97 | #define DHO_ROUTERS 3 | |
98 | #define DHO_TIME_SERVERS 4 | |
99 | #define DHO_NAME_SERVERS 5 | |
100 | #define DHO_DOMAIN_NAME_SERVERS 6 | |
101 | #define DHO_LOG_SERVERS 7 | |
102 | #define DHO_COOKIE_SERVERS 8 | |
103 | #define DHO_LPR_SERVERS 9 | |
104 | #define DHO_IMPRESS_SERVERS 10 | |
105 | #define DHO_RESOURCE_LOCATION_SERVERS 11 | |
106 | #define DHO_HOST_NAME 12 | |
107 | #define DHO_BOOT_SIZE 13 | |
108 | #define DHO_MERIT_DUMP 14 | |
109 | #define DHO_DOMAIN_NAME 15 | |
110 | #define DHO_SWAP_SERVER 16 | |
111 | #define DHO_ROOT_PATH 17 | |
112 | #define DHO_EXTENSIONS_PATH 18 | |
113 | #define DHO_IP_FORWARDING 19 | |
114 | #define DHO_NON_LOCAL_SOURCE_ROUTING 20 | |
115 | #define DHO_POLICY_FILTER 21 | |
116 | #define DHO_MAX_DGRAM_REASSEMBLY 22 | |
117 | #define DHO_DEFAULT_IP_TTL 23 | |
118 | #define DHO_PATH_MTU_AGING_TIMEOUT 24 | |
119 | #define DHO_PATH_MTU_PLATEAU_TABLE 25 | |
120 | #define DHO_INTERFACE_MTU 26 | |
121 | #define DHO_ALL_SUBNETS_LOCAL 27 | |
122 | #define DHO_BROADCAST_ADDRESS 28 | |
123 | #define DHO_PERFORM_MASK_DISCOVERY 29 | |
124 | #define DHO_MASK_SUPPLIER 30 | |
125 | #define DHO_ROUTER_DISCOVERY 31 | |
126 | #define DHO_ROUTER_SOLICITATION_ADDRESS 32 | |
127 | #define DHO_STATIC_ROUTES 33 | |
128 | #define DHO_TRAILER_ENCAPSULATION 34 | |
129 | #define DHO_ARP_CACHE_TIMEOUT 35 | |
130 | #define DHO_IEEE802_3_ENCAPSULATION 36 | |
131 | #define DHO_DEFAULT_TCP_TTL 37 | |
132 | #define DHO_TCP_KEEPALIVE_INTERVAL 38 | |
133 | #define DHO_TCP_KEEPALIVE_GARBAGE 39 | |
134 | #define DHO_NIS_DOMAIN 40 | |
135 | #define DHO_NIS_SERVERS 41 | |
136 | #define DHO_NTP_SERVERS 42 | |
137 | #define DHO_VENDOR_ENCAPSULATED_OPTIONS 43 | |
138 | #define DHO_NETBIOS_NAME_SERVERS 44 | |
139 | #define DHO_NETBIOS_DD_SERVER 45 | |
140 | #define DHO_NETBIOS_NODE_TYPE 46 | |
141 | #define DHO_NETBIOS_SCOPE 47 | |
142 | #define DHO_FONT_SERVERS 48 | |
143 | #define DHO_X_DISPLAY_MANAGER 49 | |
144 | #define DHO_DHCP_REQUESTED_ADDRESS 50 | |
145 | #define DHO_DHCP_LEASE_TIME 51 | |
146 | #define DHO_DHCP_OPTION_OVERLOAD 52 | |
147 | #define DHO_DHCP_MESSAGE_TYPE 53 | |
148 | #define DHO_DHCP_SERVER_IDENTIFIER 54 | |
149 | #define DHO_DHCP_PARAMETER_REQUEST_LIST 55 | |
150 | #define DHO_DHCP_MESSAGE 56 | |
151 | #define DHO_DHCP_MAX_MESSAGE_SIZE 57 | |
152 | #define DHO_DHCP_RENEWAL_TIME 58 | |
153 | #define DHO_DHCP_REBINDING_TIME 59 | |
154 | #define DHO_VENDOR_CLASS_IDENTIFIER 60 | |
155 | #define DHO_DHCP_CLIENT_IDENTIFIER 61 | |
156 | #define DHO_NWIP_DOMAIN_NAME 62 | |
157 | #define DHO_NWIP_SUBOPTIONS 63 | |
158 | #define DHO_USER_CLASS 77 | |
159 | #define DHO_FQDN 81 | |
160 | #define DHO_DHCP_AGENT_OPTIONS 82 | |
aabfa4de | 161 | #define DHO_AUTHENTICATE 90 /* RFC3118, was 210 */ |
6d103865 SK |
162 | #define DHO_CLIENT_LAST_TRANSACTION_TIME 91 |
163 | #define DHO_ASSOCIATED_IP 92 | |
164 | #define DHO_SUBNET_SELECTION 118 /* RFC3011! */ | |
165 | #define DHO_DOMAIN_SEARCH 119 /* RFC3397 */ | |
166 | #define DHO_VIVCO_SUBOPTIONS 124 | |
167 | #define DHO_VIVSO_SUBOPTIONS 125 | |
1a634d56 | 168 | |
6d103865 | 169 | #define DHO_END 255 |
d7837182 TL |
170 | |
171 | /* DHCP message types. */ | |
6d103865 SK |
172 | #define DHCPDISCOVER 1 |
173 | #define DHCPOFFER 2 | |
174 | #define DHCPREQUEST 3 | |
175 | #define DHCPDECLINE 4 | |
176 | #define DHCPACK 5 | |
177 | #define DHCPNAK 6 | |
178 | #define DHCPRELEASE 7 | |
179 | #define DHCPINFORM 8 | |
180 | #define DHCPLEASEQUERY 10 | |
181 | #define DHCPLEASEUNASSIGNED 11 | |
182 | #define DHCPLEASEUNKNOWN 12 | |
183 | #define DHCPLEASEACTIVE 13 | |
184 | ||
126292b4 TL |
185 | |
186 | /* Relay Agent Information option subtypes: */ | |
187 | #define RAI_CIRCUIT_ID 1 | |
188 | #define RAI_REMOTE_ID 2 | |
189 | #define RAI_AGENT_ID 3 | |
334bf491 | 190 | #define RAI_LINK_SELECT 5 |
136d54bf TL |
191 | |
192 | /* FQDN suboptions: */ | |
193 | #define FQDN_NO_CLIENT_UPDATE 1 | |
194 | #define FQDN_SERVER_UPDATE 2 | |
195 | #define FQDN_ENCODED 3 | |
196 | #define FQDN_RCODE1 4 | |
197 | #define FQDN_RCODE2 5 | |
b992d7e2 DN |
198 | #define FQDN_HOSTNAME 6 |
199 | #define FQDN_DOMAINNAME 7 | |
998205ce TL |
200 | #define FQDN_FQDN 8 |
201 | #define FQDN_SUBOPTION_COUNT 8 | |
f7fdb216 DH |
202 | |
203 | /* Enterprise Suboptions: */ | |
204 | #define VENDOR_ISC_SUBOPTIONS 2495 | |
98bd7ca0 DH |
205 | |
206 | #endif /* DHCP_H */ | |
207 |