]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Network/PxeBc/Dxe/dhcp.h
Initial import.
[mirror_edk2.git] / EdkModulePkg / Universal / Network / PxeBc / Dxe / dhcp.h
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT 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
23typedef 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
154typedef 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
165typedef 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
207typedef struct {\r
208 DHCPV4_OP_HEADER Header;\r
209 UINT8 Type;\r
210} DHCPV4_OP_MESSAGE_TYPE;\r
211\r
212typedef 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
221typedef struct {\r
222 UINT8 IpCount;\r
223 EFI_IPv4_ADDRESS IpList[1]; // IP count of IPs\r
224} PXEV4_SERVER_LIST;\r
225\r
226typedef struct {\r
227 UINT8 IpCount;\r
228 EFI_IPv6_ADDRESS IpList[1]; // IP count of IPs\r
229} PXEV6_SERVER_LIST;\r
230\r
231typedef union {\r
232 PXEV4_SERVER_LIST Ipv4List;\r
233 PXEV6_SERVER_LIST Ipv6List;\r
234} PXE_SERVER_LISTS;\r
235\r
236typedef 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
244typedef 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
252typedef 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
261typedef 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
270typedef 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
278typedef 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
287typedef struct {\r
288 DHCPV4_OP_HEADER Header;\r
289 UINT8 Class[1];\r
290} DHCPV4_OP_CLASS;\r
291\r
292typedef struct {\r
293 DHCPV4_OP_HEADER Header;\r
294 UINT8 File[1];\r
295} DHCPV4_OP_BOOTFILE;\r
296\r
297typedef struct {\r
298 DHCPV4_OP_HEADER Header;\r
299 UINT8 VendorOptions[1];\r
300} DHCPV4_OP_VENDOR_OPTIONS;\r
301\r
302typedef struct {\r
303 DHCPV4_OP_HEADER Header;\r
304 UINT8 MaxSize[2];\r
305} DHCPV4_OP_MAX_MESSAGE_SIZE;\r
306\r
307typedef 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
345typedef struct {\r
346 DHCPV4_OP_HEADER Header;\r
347 DHCPV4_REQUESTED_OPTIONS_DATA Data;\r
348} DHCPV4_OP_REQUESTED_OPTIONS;\r
349\r
350typedef 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
358typedef struct {\r
359 DHCPV4_OP_HEADER Header;\r
360 EFI_IPv4_ADDRESS IpList[1];\r
361} DHCPV4_OP_IP_LIST;\r
362\r
363typedef 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
374typedef 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
384typedef 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
391typedef 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
402typedef struct {\r
403 DHCPV4_OP_HEADER Header;\r
404 DHCPV4_CLASS_ID_DATA Data;\r
405} DHCPV4_OP_CLASS_ID;\r
406\r
407typedef struct {\r
408 DHCPV4_OP_HEADER Header;\r
409 EFI_IPv4_ADDRESS Ip;\r
410} DHCPV4_OP_REQUESTED_IP;\r
411\r
412typedef struct {\r
413 DHCPV4_OP_HEADER Header;\r
414 EFI_IPv4_ADDRESS Ip;\r
415} DHCPV4_OP_SERVER_IP;\r
416\r
417typedef struct {\r
418 DHCPV4_OP_HEADER Header;\r
419 EFI_IPv4_ADDRESS Ip;\r
420} DHCPV4_OP_SUBNET_MASK;\r
421\r
422typedef 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
604typedef 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
610typedef 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