]>
Commit | Line | Data |
---|---|---|
878ddf1f | 1 | /*++\r |
2 | \r | |
3 | Copyright (c) 2006, Intel Corporation \r | |
4 | All rights reserved. This program and the accompanying materials \r | |
5 | are licensed and made available under the terms and conditions of the BSD License \r | |
6 | which accompanies this distribution. The full text of the license may be found at \r | |
7 | http://opensource.org/licenses/bsd-license.php \r | |
8 | \r | |
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r | |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r | |
11 | \r | |
12 | --*/\r | |
13 | \r | |
14 | #ifndef _DHCP_H\r | |
15 | #define _DHCP_H\r | |
16 | \r | |
17 | //\r | |
18 | // Definitions for DHCP version 4 UDP packet.\r | |
19 | // The field names in this structure are defined and described in RFC 2131.\r | |
20 | //\r | |
21 | #pragma pack(1)\r | |
22 | \r | |
23 | typedef struct {\r | |
24 | UINT8 op;\r | |
25 | #define BOOTP_REQUEST 1\r | |
26 | #define BOOTP_REPLY 2\r | |
27 | \r | |
28 | UINT8 htype;\r | |
29 | UINT8 hlen;\r | |
30 | UINT8 hops;\r | |
31 | UINT32 xid;\r | |
32 | UINT16 secs;\r | |
33 | UINT16 flags;\r | |
34 | #define DHCP_BROADCAST_FLAG 0x8000\r | |
35 | \r | |
36 | UINT32 ciaddr;\r | |
37 | UINT32 yiaddr;\r | |
38 | UINT32 siaddr;\r | |
39 | UINT32 giaddr;\r | |
40 | UINT8 chaddr[16];\r | |
41 | UINT8 sname[64];\r | |
42 | UINT8 file[128];\r | |
43 | UINT8 options[312];\r | |
44 | #define OP_PAD 0\r | |
45 | #define OP_END 255\r | |
46 | #define OP_SUBNET_MASK 1\r | |
47 | #define OP_TIME_OFFSET 2\r | |
48 | #define OP_ROUTER_LIST 3\r | |
49 | #define OP_TIME_SERVERS 4\r | |
50 | #define OP_NAME_SERVERS 5\r | |
51 | #define OP_DNS_SERVERS 6\r | |
52 | #define OP_LOG_SERVERS 7\r | |
53 | #define OP_COOKIE_SERVERS 8\r | |
54 | #define OP_LPR_SREVERS 9\r | |
55 | #define OP_IMPRESS_SERVERS 10\r | |
56 | #define OP_RES_LOC_SERVERS 11\r | |
57 | #define OP_HOST_NAME 12\r | |
58 | #define OP_BOOT_FILE_SZ 13\r | |
59 | #define OP_DUMP_FILE 14\r | |
60 | #define OP_DOMAIN_NAME 15\r | |
61 | #define OP_SWAP_SERVER 16\r | |
62 | #define OP_ROOT_PATH 17\r | |
63 | #define OP_EXTENSION_PATH 18\r | |
64 | #define OP_IP_FORWARDING 19\r | |
65 | #define OP_NON_LOCAL_SRC_RTE 20\r | |
66 | #define OP_POLICY_FILTER 21\r | |
67 | #define OP_MAX_DATAGRAM_SZ 22\r | |
68 | #define OP_DEFAULT_TTL 23\r | |
69 | #define OP_MTU_AGING_TIMEOUT 24\r | |
70 | #define OP_MTU_SIZES 25\r | |
71 | #define OP_MTU_TO_USE 26\r | |
72 | #define OP_ALL_SUBNETS_LOCAL 27\r | |
73 | #define OP_BROADCAST_ADD 28\r | |
74 | #define OP_PERFORM_MASK_DISCOVERY 29\r | |
75 | #define OP_RESPOND_TO_MASK_REQ 30\r | |
76 | #define OP_PERFORM_ROUTER_DISCOVERY 31\r | |
77 | #define OP_ROUTER_SOLICIT_ADDRESS 32\r | |
78 | #define OP_STATIC_ROUTER_LIST 33\r | |
79 | #define OP_USE_ARP_TRAILERS 34\r | |
80 | #define OP_ARP_CACHE_TIMEOUT 35\r | |
81 | #define OP_ETHERNET_ENCAPSULATION 36\r | |
82 | #define OP_TCP_DEFAULT_TTL 37\r | |
83 | #define OP_TCP_KEEP_ALIVE_INT 38\r | |
84 | #define OP_KEEP_ALIVE_GARBAGE 39\r | |
85 | #define OP_NIS_DOMAIN_NAME 40\r | |
86 | #define OP_NIS_SERVERS 41\r | |
87 | #define OP_NTP_SERVERS 42\r | |
88 | #define OP_VENDOR_SPECIFIC 43\r | |
89 | #define VEND_PXE_MTFTP_IP 1\r | |
90 | #define VEND_PXE_MTFTP_CPORT 2\r | |
91 | #define VEND_PXE_MTFTP_SPORT 3\r | |
92 | #define VEND_PXE_MTFTP_TMOUT 4\r | |
93 | #define VEND_PXE_MTFTP_DELAY 5\r | |
94 | #define VEND_PXE_DISCOVERY_CONTROL 6\r | |
95 | #define VEND_PXE_DISCOVERY_MCAST_ADDR 7\r | |
96 | #define VEND_PXE_BOOT_SERVERS 8\r | |
97 | #define VEND_PXE_BOOT_MENU 9\r | |
98 | #define VEND_PXE_BOOT_PROMPT 10\r | |
99 | #define VEND_PXE_MCAST_ADDRS_ALLOC 11\r | |
100 | #define VEND_PXE_CREDENTIAL_TYPES 12\r | |
101 | #define VEND_PXE_BOOT_ITEM 71\r | |
102 | #define OP_NBNS_SERVERS 44\r | |
103 | #define OP_NBDD_SERVERS 45\r | |
104 | #define OP_NETBIOS_NODE_TYPE 46\r | |
105 | #define OP_NETBIOS_SCOPE 47\r | |
106 | #define OP_XWINDOW_SYSTEM_FONT_SERVERS 48\r | |
107 | #define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49\r | |
108 | #define OP_DHCP_REQ_IP_ADD 50\r | |
109 | #define OP_DHCP_LEASE_TIME 51\r | |
110 | #define OP_DHCP_OPTION_OVERLOAD 52\r | |
111 | #define OVLD_FILE 1\r | |
112 | #define OVLD_SRVR_NAME 2\r | |
113 | #define OP_DHCP_MESSAGE_TYPE 53\r | |
114 | #define DHCPDISCOVER 1\r | |
115 | #define DHCPOFFER 2\r | |
116 | #define DHCPREQUEST 3\r | |
117 | #define DHCPDECLINE 4\r | |
118 | #define DHCPACK 5\r | |
119 | #define DHCPNAK 6\r | |
120 | #define DHCPRELEASE 7\r | |
121 | #define DHCPINFORM 8\r | |
122 | #define OP_DHCP_SERVER_IP 54\r | |
123 | #define OP_DHCP_PARM_REQ_LIST 55\r | |
124 | #define OP_DHCP_ERROR_MESSAGE 56\r | |
125 | #define OP_DHCP_MAX_MESSAGE_SZ 57\r | |
126 | #define OP_DHCP_RENEWAL_TIME 58\r | |
127 | #define OP_DHCP_REBINDING_TIME 59\r | |
128 | #define OP_DHCP_CLASS_IDENTIFIER 60\r | |
129 | #define OP_DHCP_CLIENT_IDENTIFIER 61\r | |
130 | #define OP_NISPLUS_DOMAIN_NAME 64\r | |
131 | #define OP_NISPLUS_SERVERS 65\r | |
132 | #define OP_DHCP_TFTP_SERVER_NAME 66\r | |
133 | #define OP_DHCP_BOOTFILE 67\r | |
134 | #define OP_MOBILE_IP_HOME_AGENTS 68\r | |
135 | #define OP_SMPT_SERVERS 69\r | |
136 | #define OP_POP3_SERVERS 70\r | |
137 | #define OP_NNTP_SERVERS 71\r | |
138 | #define OP_WWW_SERVERS 72\r | |
139 | #define OP_FINGER_SERVERS 73\r | |
140 | #define OP_IRC_SERVERS 74\r | |
141 | #define OP_STREET_TALK_SERVERS 75\r | |
142 | #define OP_STREET_TALK_DIR_ASSIST_SERVERS 76\r | |
143 | #define OP_NDS_SERVERS 85\r | |
144 | #define OP_NDS_TREE_NAME 86\r | |
145 | #define OP_NDS_CONTEXT 87\r | |
146 | #define OP_DHCP_SYSTEM_ARCH 93\r | |
147 | #define OP_DHCP_NETWORK_ARCH 94\r | |
148 | #define OP_DHCP_PLATFORM_ID 97\r | |
149 | } DHCPV4_STRUCT;\r | |
150 | \r | |
151 | //\r | |
152 | // DHCPv4 option header\r | |
153 | //\r | |
154 | typedef struct {\r | |
155 | UINT8 OpCode;\r | |
156 | UINT8 Length;\r | |
157 | //\r | |
158 | // followed by Data[]\r | |
159 | //\r | |
160 | } DHCPV4_OP_HEADER;\r | |
161 | \r | |
162 | //\r | |
163 | // Generic DHCPv4 option (header followed by data)\r | |
164 | //\r | |
165 | typedef struct {\r | |
166 | DHCPV4_OP_HEADER Header;\r | |
167 | UINT8 Data[1];\r | |
168 | } DHCPV4_OP_STRUCT;\r | |
169 | \r | |
170 | //\r | |
171 | // Maximum DHCP packet size on ethernet\r | |
172 | //\r | |
173 | #define MAX_DHCP_MSG_SZ (MAX_ENET_DATA_SIZE - sizeof (IPV4_HEADER) - sizeof (UDPV4_HEADER))\r | |
174 | \r | |
175 | //\r | |
176 | // Macros used in pxe_bc_dhcp.c and pxe_loadfile.c\r | |
177 | //\r | |
178 | #define DHCPV4_TRANSMIT_BUFFER (*(DHCPV4_STRUCT *) (Private->TransmitBuffer))\r | |
179 | #define DHCPV4_OPTIONS_BUFFER (*(struct optionsstr *) DHCPV4_TRANSMIT_BUFFER.options)\r | |
180 | \r | |
181 | #define DHCPV4_ACK_INDEX 0\r | |
182 | #define PXE_BINL_INDEX 1\r | |
183 | #define PXE_OFFER_INDEX 1\r | |
184 | #define PXE_ACK_INDEX 2\r | |
185 | #define PXE_BIS_INDEX 3\r | |
186 | \r | |
187 | #define DHCPV4_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[DHCPV4_ACK_INDEX]\r | |
188 | #define PXE_BINL_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BINL_INDEX]\r | |
189 | #define PXE_OFFER_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_OFFER_INDEX]\r | |
190 | #define PXE_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_ACK_INDEX]\r | |
191 | #define PXE_BIS_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BIS_INDEX]\r | |
192 | \r | |
193 | #define DHCPV4_ACK_PACKET DHCPV4_ACK_BUFFER.u.Dhcpv4\r | |
194 | #define PXE_BINL_PACKET PXE_BINL_BUFFER.u.Dhcpv4\r | |
195 | #define PXE_OFFER_PACKET PXE_OFFER_BUFFER.u.Dhcpv4\r | |
196 | #define PXE_ACK_PACKET PXE_ACK_BUFFER.u.Dhcpv4\r | |
197 | #define PXE_BIS_PACKET PXE_BIS_BUFFER.u.Dhcpv4\r | |
198 | \r | |
199 | //\r | |
200 | // network structure definitions\r | |
201 | //\r | |
202 | //\r | |
203 | // some option definitions\r | |
204 | //\r | |
205 | #define DHCPV4_OPTION_LENGTH(type) (sizeof (type) - sizeof (DHCPV4_OP_HEADER))\r | |
206 | \r | |
207 | typedef struct {\r | |
208 | DHCPV4_OP_HEADER Header;\r | |
209 | UINT8 Type;\r | |
210 | } DHCPV4_OP_MESSAGE_TYPE;\r | |
211 | \r | |
212 | typedef struct {\r | |
213 | DHCPV4_OP_HEADER Header;\r | |
214 | UINT8 Overload;\r | |
215 | } DHCPV4_OP_OVERLOAD;\r | |
216 | \r | |
217 | //\r | |
218 | // boot server list structure\r | |
219 | // one or more contained in a pxe boot servers structure\r | |
220 | //\r | |
221 | typedef struct {\r | |
222 | UINT8 IpCount;\r | |
223 | EFI_IPv4_ADDRESS IpList[1]; // IP count of IPs\r | |
224 | } PXEV4_SERVER_LIST;\r | |
225 | \r | |
226 | typedef struct {\r | |
227 | UINT8 IpCount;\r | |
228 | EFI_IPv6_ADDRESS IpList[1]; // IP count of IPs\r | |
229 | } PXEV6_SERVER_LIST;\r | |
230 | \r | |
231 | typedef union {\r | |
232 | PXEV4_SERVER_LIST Ipv4List;\r | |
233 | PXEV6_SERVER_LIST Ipv6List;\r | |
234 | } PXE_SERVER_LISTS;\r | |
235 | \r | |
236 | typedef struct {\r | |
237 | UINT16 Type;\r | |
238 | PXE_SERVER_LISTS u;\r | |
239 | } PXE_SERVER_LIST;\r | |
240 | \r | |
241 | //\r | |
242 | // pxe boot servers structure\r | |
243 | //\r | |
244 | typedef struct {\r | |
245 | DHCPV4_OP_HEADER Header;\r | |
246 | PXE_SERVER_LIST ServerList[1]; // one or more\r | |
247 | } PXE_OP_SERVER_LIST;\r | |
248 | \r | |
249 | //\r | |
250 | // pxe boot item structure\r | |
251 | //\r | |
252 | typedef struct {\r | |
253 | DHCPV4_OP_HEADER Header;\r | |
254 | UINT16 Type;\r | |
255 | UINT16 Layer;\r | |
256 | } PXE_OP_BOOT_ITEM;\r | |
257 | \r | |
258 | //\r | |
259 | // pxe boot menu item structure\r | |
260 | //\r | |
261 | typedef struct {\r | |
262 | UINT16 Type;\r | |
263 | UINT8 DataLen;\r | |
264 | UINT8 Data[1];\r | |
265 | } PXE_BOOT_MENU_ENTRY;\r | |
266 | \r | |
267 | //\r | |
268 | // pxe boot menu structure\r | |
269 | //\r | |
270 | typedef struct {\r | |
271 | DHCPV4_OP_HEADER Header;\r | |
272 | PXE_BOOT_MENU_ENTRY MenuItem[1];\r | |
273 | } PXE_OP_BOOT_MENU;\r | |
274 | \r | |
275 | //\r | |
276 | // pxe boot prompt structure\r | |
277 | //\r | |
278 | typedef struct {\r | |
279 | DHCPV4_OP_HEADER Header;\r | |
280 | UINT8 Timeout;\r | |
281 | UINT8 Prompt[1];\r | |
282 | } PXE_OP_BOOT_PROMPT;\r | |
283 | \r | |
284 | #define PXE_BOOT_PROMPT_AUTO_SELECT 0\r | |
285 | #define PXE_BOOT_PROMPT_NO_TIMEOUT 255\r | |
286 | \r | |
287 | typedef struct {\r | |
288 | DHCPV4_OP_HEADER Header;\r | |
289 | UINT8 Class[1];\r | |
290 | } DHCPV4_OP_CLASS;\r | |
291 | \r | |
292 | typedef struct {\r | |
293 | DHCPV4_OP_HEADER Header;\r | |
294 | UINT8 File[1];\r | |
295 | } DHCPV4_OP_BOOTFILE;\r | |
296 | \r | |
297 | typedef struct {\r | |
298 | DHCPV4_OP_HEADER Header;\r | |
299 | UINT8 VendorOptions[1];\r | |
300 | } DHCPV4_OP_VENDOR_OPTIONS;\r | |
301 | \r | |
302 | typedef struct {\r | |
303 | DHCPV4_OP_HEADER Header;\r | |
304 | UINT8 MaxSize[2];\r | |
305 | } DHCPV4_OP_MAX_MESSAGE_SIZE;\r | |
306 | \r | |
307 | typedef struct {\r | |
308 | UINT8 _OP_SUBNET_MASK; /* 1 */\r | |
309 | UINT8 _OP_TIME_OFFSET; /* 2 */\r | |
310 | UINT8 _OP_ROUTER_LIST; /* 3 */\r | |
311 | UINT8 _OP_TIME_SERVERS; /* 4 */\r | |
312 | UINT8 _OP_NAME_SERVERS; /* 5 */\r | |
313 | UINT8 _OP_DNS_SERVERS; /* 6 */\r | |
314 | UINT8 _OP_HOST_NAME; /* 12 */\r | |
315 | UINT8 _OP_BOOT_FILE_SZ; /* 13 */\r | |
316 | UINT8 _OP_DOMAIN_NAME; /* 15 */\r | |
317 | UINT8 _OP_ROOT_PATH; /* 17 */\r | |
318 | UINT8 _OP_EXTENSION_PATH; /* 18 */\r | |
319 | UINT8 _OP_MAX_DATAGRAM_SZ; /* 22 */\r | |
320 | UINT8 _OP_DEFAULT_TTL; /* 23 */\r | |
321 | UINT8 _OP_BROADCAST_ADD; /* 28 */\r | |
322 | UINT8 _OP_NIS_DOMAIN_NAME; /* 40 */\r | |
323 | UINT8 _OP_NIS_SERVERS; /* 41 */\r | |
324 | UINT8 _OP_NTP_SERVERS; /* 42 */\r | |
325 | UINT8 _OP_VENDOR_SPECIFIC; /* 43 */\r | |
326 | UINT8 _OP_DHCP_REQ_IP_ADD; /* 50 */\r | |
327 | UINT8 _OP_DHCP_LEASE_TIME; /* 51 */\r | |
328 | UINT8 _OP_DHCP_SERVER_IP; /* 54 */\r | |
329 | UINT8 _OP_DHCP_RENEWAL_TIME; /* 58 */\r | |
330 | UINT8 _OP_DHCP_REBINDING_TIME; /* 59 */\r | |
331 | UINT8 _OP_DHCP_CLASS_IDENTIFIER; /* 60 */\r | |
332 | UINT8 _OP_DHCP_TFTP_SERVER_NAME; /* 66 */\r | |
333 | UINT8 _OP_DHCP_BOOTFILE; /* 67 */\r | |
334 | UINT8 _OP_DHCP_PLATFORM_ID; /* 97 */\r | |
335 | UINT8 VendorOption128; // vendor option 128\r | |
336 | UINT8 VendorOption129; // vendor option 129\r | |
337 | UINT8 VendorOption130; // vendor option 130\r | |
338 | UINT8 VendorOption131; // vendor option 131\r | |
339 | UINT8 VendorOption132; // vendor option 132\r | |
340 | UINT8 VendorOption133; // vendor option 133\r | |
341 | UINT8 VendorOption134; // vendor option 134\r | |
342 | UINT8 VendorOption135; // vendor option 135\r | |
343 | } DHCPV4_REQUESTED_OPTIONS_DATA;\r | |
344 | \r | |
345 | typedef struct {\r | |
346 | DHCPV4_OP_HEADER Header;\r | |
347 | DHCPV4_REQUESTED_OPTIONS_DATA Data;\r | |
348 | } DHCPV4_OP_REQUESTED_OPTIONS;\r | |
349 | \r | |
350 | typedef struct opipstr {\r | |
351 | DHCPV4_OP_HEADER Header;\r | |
352 | EFI_IPv4_ADDRESS Ip;\r | |
353 | } DHCPV4_OP_IP_ADDRESS;\r | |
354 | \r | |
355 | //\r | |
356 | // ip list structure - e.g. router list\r | |
357 | //\r | |
358 | typedef struct {\r | |
359 | DHCPV4_OP_HEADER Header;\r | |
360 | EFI_IPv4_ADDRESS IpList[1];\r | |
361 | } DHCPV4_OP_IP_LIST;\r | |
362 | \r | |
363 | typedef struct {\r | |
364 | DHCPV4_OP_HEADER Header;\r | |
365 | UINT8 Type;\r | |
366 | UINT8 Guid[sizeof (EFI_GUID)];\r | |
367 | } DHCPV4_OP_CLIENT_ID;\r | |
368 | \r | |
369 | //\r | |
370 | // special options start - someday obsolete ???\r | |
371 | //\r | |
372 | #define DHCPV4_OP_PLATFORM_ID DHCPV4_OP_CLIENT_ID\r | |
373 | \r | |
374 | typedef struct {\r | |
375 | DHCPV4_OP_HEADER Header;\r | |
376 | UINT8 Type; // SNP = 2\r | |
377 | UINT8 MajorVersion;\r | |
378 | UINT8 MinorVersion;\r | |
379 | } DHCPV4_OP_NETWORK_INTERFACE;\r | |
380 | \r | |
381 | #define UNDI_TYPE 1\r | |
382 | #define SNP_TYPE 2\r | |
383 | \r | |
384 | typedef struct {\r | |
385 | DHCPV4_OP_HEADER Header;\r | |
386 | UINT16 Type;\r | |
387 | } DHCPV4_OP_ARCHITECTURE_TYPE;\r | |
388 | //\r | |
389 | // special options end - someday obsolete ???\r | |
390 | //\r | |
391 | typedef struct {\r | |
392 | UINT8 ClassIdentifier[10]; // PXEClient:\r | |
393 | UINT8 Lit2[5]; // Arch:\r | |
394 | UINT8 ArchitectureType[5]; // 00000 - 65536\r | |
395 | UINT8 Lit3[1]; // :\r | |
396 | UINT8 InterfaceName[4]; // e.g. UNDI\r | |
397 | UINT8 Lit4[1]; // :\r | |
398 | UINT8 UndiMajor[3]; // 000 - 255\r | |
399 | UINT8 UndiMinor[3]; // 000 - 255\r | |
400 | } DHCPV4_CLASS_ID_DATA;\r | |
401 | \r | |
402 | typedef struct {\r | |
403 | DHCPV4_OP_HEADER Header;\r | |
404 | DHCPV4_CLASS_ID_DATA Data;\r | |
405 | } DHCPV4_OP_CLASS_ID;\r | |
406 | \r | |
407 | typedef struct {\r | |
408 | DHCPV4_OP_HEADER Header;\r | |
409 | EFI_IPv4_ADDRESS Ip;\r | |
410 | } DHCPV4_OP_REQUESTED_IP;\r | |
411 | \r | |
412 | typedef struct {\r | |
413 | DHCPV4_OP_HEADER Header;\r | |
414 | EFI_IPv4_ADDRESS Ip;\r | |
415 | } DHCPV4_OP_SERVER_IP;\r | |
416 | \r | |
417 | typedef struct {\r | |
418 | DHCPV4_OP_HEADER Header;\r | |
419 | EFI_IPv4_ADDRESS Ip;\r | |
420 | } DHCPV4_OP_SUBNET_MASK;\r | |
421 | \r | |
422 | typedef struct { // oppxedisctlstr {\r | |
423 | DHCPV4_OP_HEADER Header;\r | |
424 | UINT8 ControlBits;\r | |
425 | } PXE_OP_DISCOVERY_CONTROL;\r | |
426 | \r | |
427 | #define DISABLE_BCAST (1 << 0)\r | |
428 | #define DISABLE_MCAST (1 << 1)\r | |
429 | #define USE_ACCEPT_LIST (1 << 2)\r | |
430 | #define USE_BOOTFILE (1 << 3)\r | |
431 | \r | |
432 | #pragma pack()\r | |
433 | //\r | |
434 | // definitions of indices to populate option interest array\r | |
435 | //\r | |
436 | #define VEND_PXE_MTFTP_IP_IX 1 // multicast IP address of bootfile for MTFTP listen\r | |
437 | #define VEND_PXE_MTFTP_CPORT_IX 2 // UDP Port to monitor for MTFTP responses - Intel order\r | |
438 | #define VEND_PXE_MTFTP_SPORT_IX 3 // Server UDP Port for MTFTP open - Intel order\r | |
439 | #define VEND_PXE_MTFTP_TMOUT_IX 4 // Listen timeout - secs\r | |
440 | #define VEND_PXE_MTFTP_DELAY_IX 5 // Transmission timeout - secs\r | |
441 | #define VEND_PXE_DISCOVERY_CONTROL_IX 6 // bit field\r | |
442 | #define VEND_PXE_DISCOVERY_MCAST_ADDR_IX 7 // boot server discovery multicast address\r | |
443 | #define VEND_PXE_BOOT_SERVERS_IX 8 // list of boot servers of form tp(2) cnt(1) ips[cnt]\r | |
444 | #define VEND_PXE_BOOT_MENU_IX 9\r | |
445 | #define VEND_PXE_BOOT_PROMPT_IX 10\r | |
446 | #define VEND_PXE_MCAST_ADDRS_ALLOC_IX 0 // not used by PXE client\r | |
447 | #define VEND_PXE_CREDENTIAL_TYPES_IX 11\r | |
448 | #define VEND_13_IX 0 // not used by PXE client\r | |
449 | #define VEND_14_IX 0 // not used by PXE client\r | |
450 | #define VEND_15_IX 0 // not used by PXE client\r | |
451 | #define VEND_16_IX 0 // not used by PXE client\r | |
452 | #define VEND_17_IX 0 // not used by PXE client\r | |
453 | #define VEND_18_IX 0 // not used by PXE client\r | |
454 | #define VEND_19_IX 0 // not used by PXE client\r | |
455 | #define VEND_20_IX 0 // not used by PXE client\r | |
456 | #define VEND_21_IX 0 // not used by PXE client\r | |
457 | #define VEND_22_IX 0 // not used by PXE client\r | |
458 | #define VEND_23_IX 0 // not used by PXE client\r | |
459 | #define VEND_24_IX 0 // not used by PXE client\r | |
460 | #define VEND_25_IX 0 // not used by PXE client\r | |
461 | #define VEND_26_IX 0 // not used by PXE client\r | |
462 | #define VEND_27_IX 0 // not used by PXE client\r | |
463 | #define VEND_28_IX 0 // not used by PXE client\r | |
464 | #define VEND_29_IX 0 // not used by PXE client\r | |
465 | #define VEND_30_IX 0 // not used by PXE client\r | |
466 | #define VEND_31_IX 0 // not used by PXE client\r | |
467 | #define VEND_32_IX 0 // not used by PXE client\r | |
468 | #define VEND_33_IX 0 // not used by PXE client\r | |
469 | #define VEND_34_IX 0 // not used by PXE client\r | |
470 | #define VEND_35_IX 0 // not used by PXE client\r | |
471 | #define VEND_36_IX 0 // not used by PXE client\r | |
472 | #define VEND_37_IX 0 // not used by PXE client\r | |
473 | #define VEND_38_IX 0 // not used by PXE client\r | |
474 | #define VEND_39_IX 0 // not used by PXE client\r | |
475 | #define VEND_40_IX 0 // not used by PXE client\r | |
476 | #define VEND_41_IX 0 // not used by PXE client\r | |
477 | #define VEND_42_IX 0 // not used by PXE client\r | |
478 | #define VEND_43_IX 0 // not used by PXE client\r | |
479 | #define VEND_44_IX 0 // not used by PXE client\r | |
480 | #define VEND_45_IX 0 // not used by PXE client\r | |
481 | #define VEND_46_IX 0 // not used by PXE client\r | |
482 | #define VEND_47_IX 0 // not used by PXE client\r | |
483 | #define VEND_48_IX 0 // not used by PXE client\r | |
484 | #define VEND_49_IX 0 // not used by PXE client\r | |
485 | #define VEND_50_IX 0 // not used by PXE client\r | |
486 | #define VEND_51_IX 0 // not used by PXE client\r | |
487 | #define VEND_52_IX 0 // not used by PXE client\r | |
488 | #define VEND_53_IX 0 // not used by PXE client\r | |
489 | #define VEND_54_IX 0 // not used by PXE client\r | |
490 | #define VEND_55_IX 0 // not used by PXE client\r | |
491 | #define VEND_56_IX 0 // not used by PXE client\r | |
492 | #define VEND_57_IX 0 // not used by PXE client\r | |
493 | #define VEND_58_IX 0 // not used by PXE client\r | |
494 | #define VEND_59_IX 0 // not used by PXE client\r | |
495 | #define VEND_60_IX 0 // not used by PXE client\r | |
496 | #define VEND_61_IX 0 // not used by PXE client\r | |
497 | #define VEND_62_IX 0 // not used by PXE client\r | |
498 | #define VEND_63_IX 0 // not used by PXE client\r | |
499 | #define VEND_64_IX 0 // not used by PXE client\r | |
500 | #define VEND_65_IX 0 // not used by PXE client\r | |
501 | #define VEND_66_IX 0 // not used by PXE client\r | |
502 | #define VEND_67_IX 0 // not used by PXE client\r | |
503 | #define VEND_68_IX 0 // not used by PXE client\r | |
504 | #define VEND_69_IX 0 // not used by PXE client\r | |
505 | #define VEND_70_IX 0 // not used by PXE client\r | |
506 | #define VEND_PXE_BOOT_ITEM_IX 12\r | |
507 | \r | |
508 | #define MAX_OUR_PXE_OPT VEND_PXE_BOOT_ITEM // largest PXE option in which we are interested\r | |
509 | #define MAX_OUR_PXE_IX VEND_PXE_BOOT_ITEM_IX // largest PXE option index\r | |
510 | //\r | |
511 | // define various types by options that are sent\r | |
512 | //\r | |
513 | #define WfM11a_OPTS ((1<<VEND_PXE_MTFTP_IP_IX) | \\r | |
514 | (1<<VEND_PXE_MTFTP_CPORT_IX) | \\r | |
515 | (1<<VEND_PXE_MTFTP_SPORT_IX) | \\r | |
516 | (1<<VEND_PXE_MTFTP_TMOUT_IX) | \\r | |
517 | (1<<VEND_PXE_MTFTP_DELAY_IX))\r | |
518 | \r | |
519 | #define DISCOVER_OPTS ((1<<VEND_PXE_DISCOVERY_CONTROL_IX) | \\r | |
520 | (1<<VEND_PXE_DISCOVERY_MCAST_ADDR_IX) | \\r | |
521 | (1<<VEND_PXE_BOOT_SERVERS_IX) | \\r | |
522 | (1<<VEND_PXE_BOOT_MENU_IX) | \\r | |
523 | (1<<VEND_PXE_BOOT_PROMPT_IX) | \\r | |
524 | (1<<VEND_PXE_BOOT_ITEM_IX))\r | |
525 | \r | |
526 | #define CREDENTIALS_OPT (1 << VEND_PXE_CREDENTIAL_TYPES_IX)\r | |
527 | \r | |
528 | //\r | |
529 | // definitions of indices to populate option interest array\r | |
530 | //\r | |
531 | #define OP_SUBNET_MASK_IX 1\r | |
532 | #define OP_TIME_OFFSET_IX 0 // not used by PXE client\r | |
533 | #define OP_ROUTER_LIST_IX 2\r | |
534 | #define OP_TIME_SERVERS_IX 0 // not used by PXE client\r | |
535 | #define OP_NAME_SERVERS_IX 0 // not used by PXE client\r | |
536 | #define OP_DNS_SERVERS_IX 0 // not used by PXE client\r | |
537 | #define OP_LOG_SERVERS_IX 0 // not used by PXE client\r | |
538 | #define OP_COOKIE_SERVERS_IX 0 // not used by PXE client\r | |
539 | #define OP_LPR_SREVERS_IX 0 // not used by PXE client\r | |
540 | #define OP_IMPRESS_SERVERS_IX 0 // not used by PXE client\r | |
541 | #define OP_RES_LOC_SERVERS_IX 0 // not used by PXE client\r | |
542 | #define OP_HOST_NAME_IX 0 // not used by PXE client\r | |
543 | #define OP_BOOT_FILE_SZ_IX 9\r | |
544 | #define OP_DUMP_FILE_IX 0 // not used by PXE client\r | |
545 | #define OP_DOMAIN_NAME_IX 0 // not used by PXE client\r | |
546 | #define OP_SWAP_SERVER_IX 0 // not used by PXE client\r | |
547 | #define OP_ROOT_PATH_IX 0 // not used by PXE client\r | |
548 | #define OP_EXTENSION_PATH_IX 0 // not used by PXE client\r | |
549 | #define OP_IP_FORWARDING_IX 0 // not used by PXE client\r | |
550 | #define OP_NON_LOCAL_SRC_RTE_IX 0 // not used by PXE client\r | |
551 | #define OP_POLICY_FILTER_IX 0 // not used by PXE client\r | |
552 | #define OP_MAX_DATAGRAM_SZ_IX 0 // not used by PXE client\r | |
553 | #define OP_DEFAULT_TTL_IX 0 // not used by PXE client\r | |
554 | #define OP_MTU_AGING_TIMEOUT_IX 0 // not used by PXE client\r | |
555 | #define OP_MTU_SIZES_IX 0 // not used by PXE client\r | |
556 | #define OP_MTU_TO_USE_IX 0 // not used by PXE client\r | |
557 | #define OP_ALL_SUBNETS_LOCAL_IX 0 // not used by PXE client\r | |
558 | #define OP_BROADCAST_ADD_IX 0 // not used by PXE client\r | |
559 | #define OP_PERFORM_MASK_DISCOVERY_IX 0 // not used by PXE client\r | |
560 | #define OP_RESPOND_TO_MASK_REQ_IX 0 // not used by PXE client\r | |
561 | #define OP_PERFORM_ROUTER_DISCOVERY_IX 0 // not used by PXE client\r | |
562 | #define OP_ROUTER_SOLICIT_ADDRESS_IX 0 // not used by PXE client\r | |
563 | #define OP_STATIC_ROUTER_LIST_IX 0 // not used by PXE client\r | |
564 | #define OP_USE_ARP_TRAILERS_IX 0 // not used by PXE client\r | |
565 | #define OP_ARP_CACHE_TIMEOUT_IX 0 // not used by PXE client\r | |
566 | #define OP_ETHERNET_ENCAPSULATION_IX 0 // not used by PXE client\r | |
567 | #define OP_TCP_DEFAULT_TTL_IX 0 // not used by PXE client\r | |
568 | #define OP_TCP_KEEP_ALIVE_INT_IX 0 // not used by PXE client\r | |
569 | #define OP_KEEP_ALIVE_GARBAGE_IX 0 // not used by PXE client\r | |
570 | #define OP_NIS_DOMAIN_NAME_IX 0 // not used by PXE client\r | |
571 | #define OP_NIS_SERVERS_IX 0 // not used by PXE client\r | |
572 | #define OP_NTP_SERVERS_IX 0 // not used by PXE client\r | |
573 | #define OP_VENDOR_SPECIFIC_IX 3\r | |
574 | #define OP_NBNS_SERVERS_IX 0 // not used by PXE client\r | |
575 | #define OP_NBDD_SERVERS_IX 0 // not used by PXE client\r | |
576 | #define OP_NETBIOS_NODE_TYPE_IX 0 // not used by PXE client\r | |
577 | #define OP_NETBIOS_SCOPE_IX 0 // not used by PXE client\r | |
578 | #define OP_XWINDOW_SYSTEM_FONT_SERVERS_IX 0 // not used by PXE client\r | |
579 | #define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS_IX 0 // not used by PXE client\r | |
580 | // DHCP option indices\r | |
581 | //\r | |
582 | #define OP_DHCP_REQ_IP_ADD_IX 0 // not used by PXE client\r | |
583 | #define OP_DHCP_LEASE_TIME_IX 0 // not used by PXE client\r | |
584 | #define OP_DHCP_OPTION_OVERLOAD_IX 4\r | |
585 | #define OP_DHCP_MESSAGE_TYPE_IX 5\r | |
586 | #define OP_DHCP_SERVER_IP_IX 6\r | |
587 | #define OP_DHCP_PARM_REQ_LIST_IX 0 // not used by PXE client\r | |
588 | #define OP_DHCP_ERROR_MESSAGE_IX 0 // not used by PXE client\r | |
589 | #define OP_DHCP_MAX_MESSAGE_SZ_IX 0 // not used by PXE client\r | |
590 | #define OP_DHCP_RENEWAL_TIME_IX 0 // not used by PXE client\r | |
591 | #define OP_DHCP_REBINDING_TIME_IX 0 // not used by PXE client\r | |
592 | #define OP_DHCP_CLASS_IDENTIFIER_IX 7\r | |
593 | #define OP_DHCP_CLIENT_IDENTIFIER_IX 0 // not used by PXE client\r | |
594 | #define OP_RESERVED62_IX 0 // not used by PXE client\r | |
595 | #define OP_RESERVED63_IX 0 // not used by PXE client\r | |
596 | #define OP_NISPLUS_DOMAIN_NAME_IX 0 // not used by PXE client\r | |
597 | #define OP_NISPLUS_SERVERS_IX 0 // not used by PXE client\r | |
598 | #define OP_DHCP_TFTP_SERVER_NAME_IX 0 // not used by PXE client\r | |
599 | #define OP_DHCP_BOOTFILE_IX 8\r | |
600 | \r | |
601 | #define MAX_OUR_OPT OP_DHCP_BOOTFILE // largest option in which we are interested\r | |
602 | #define MAX_OUR_IX OP_BOOT_FILE_SZ_IX\r | |
603 | \r | |
604 | typedef struct {\r | |
605 | DHCPV4_OP_STRUCT *PktOptAdds[MAX_OUR_IX];\r | |
606 | DHCPV4_OP_STRUCT *PxeOptAdds[MAX_OUR_PXE_IX];\r | |
607 | UINT8 Status;\r | |
608 | } OPTION_POINTERS;\r | |
609 | \r | |
610 | typedef struct DhcpReceiveBufferStruct {\r | |
611 | union {\r | |
612 | UINT8 ReceiveBuffer[MAX_DHCP_MSG_SZ];\r | |
613 | DHCPV4_STRUCT Dhcpv4;\r | |
614 | } u;\r | |
615 | \r | |
616 | OPTION_POINTERS OpAdds;\r | |
617 | } DHCP_RECEIVE_BUFFER;\r | |
618 | \r | |
619 | #define PXE_TYPE (1 << 0)\r | |
620 | #define WfM11a_TYPE (1 << 1)\r | |
621 | #define DISCOVER_TYPE (1 << 2)\r | |
622 | #define CREDENTIALS_TYPE (1 << 3)\r | |
623 | #define USE_THREE_BYTE (1 << 4)\r | |
624 | \r | |
625 | #endif // _DHCP_H\r | |
626 | \r | |
627 | /* EOF - dhcp.h */\r |