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