1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
|
/*++
Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
PxeDhcp4.h
Abstract:
EFI PXE DHCPv4 protocol definition
--*/
#ifndef _PXEDHCP4_H_
#define _PXEDHCP4_H_
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// PXE DHCPv4 GUID definition
//
#define EFI_PXE_DHCP4_PROTOCOL_GUID \
{ 0x03c4e624, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x29, 0x3f, 0xc1, 0x4d} }
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// Interface definition
//
EFI_FORWARD_DECLARATION (EFI_PXE_DHCP4_PROTOCOL);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// Descriptions of the DHCP version 4 header and options can be found
// in RFC-2131 and RFC-2132 at www.ietf.org
//
#pragma pack(1)
typedef struct {
UINT8 op;
#define BOOTP_REQUEST 1
#define BOOTP_REPLY 2
UINT8 htype;
UINT8 hlen;
UINT8 hops;
UINT32 xid;
UINT16 secs;
#define DHCP4_INITIAL_SECONDS 4
UINT16 flags;
#define DHCP4_BROADCAST_FLAG 0x8000
UINT32 ciaddr;
UINT32 yiaddr;
UINT32 siaddr;
UINT32 giaddr;
UINT8 chaddr[16];
UINT8 sname[64];
UINT8 fname[128];
//
// This is the minimum option length as specified in RFC-2131.
// The packet must be padded out this far with DHCP4_PAD.
// DHCPv4 packets are usually 576 bytes in length. This length
// includes the IPv4 and UDPv4 headers but not the media header.
// Note: Not all DHCP relay agents will forward DHCPv4 packets
// if they are less than 384 bytes or exceed 576 bytes. Even if
// the underlying hardware can handle smaller and larger packets,
// many older relay agents will not accept them.
//
UINT32 magik;
#define DHCP4_MAGIK_NUMBER 0x63825363
UINT8 options[308];
} DHCP4_HEADER;
#pragma pack()
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// DHCPv4 packet definition. Room for 576 bytes including IP and
// UDP header.
//
#define DHCP4_MAX_PACKET_SIZE 576
#define DHCP4_UDP_HEADER_SIZE 8
#define DHCP4_IP_HEADER_SIZE 20
#pragma pack(1)
typedef union _DHCP4_PACKET {
UINT32 _force_data_alignment;
UINT8 raw[1500];
DHCP4_HEADER dhcp4;
} DHCP4_PACKET;
#pragma pack()
#define DHCP4_SERVER_PORT 67
#define DHCP4_CLIENT_PORT 68
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// DHCPv4 and PXE option numbers.
//
#define DHCP4_PAD 0
#define DHCP4_END 255
#define DHCP4_SUBNET_MASK 1
#define DHCP4_TIME_OFFSET 2
#define DHCP4_ROUTER_LIST 3
#define DHCP4_TIME_SERVERS 4
#define DHCP4_NAME_SERVERS 5
#define DHCP4_DNS_SERVERS 6
#define DHCP4_LOG_SERVERS 7
#define DHCP4_COOKIE_SERVERS 8
#define DHCP4_LPR_SREVERS 9
#define DHCP4_IMPRESS_SERVERS 10
#define DHCP4_RESOURCE_LOCATION_SERVERS 11
#define DHCP4_HOST_NAME 12
#define DHCP4_BOOT_FILE_SIZE 13
#define DHCP4_DUMP_FILE 14
#define DHCP4_DOMAIN_NAME 15
#define DHCP4_SWAP_SERVER 16
#define DHCP4_ROOT_PATH 17
#define DHCP4_EXTENSION_PATH 18
#define DHCP4_IP_FORWARDING 19
#define DHCP4_NON_LOCAL_SOURCE_ROUTE 20
#define DHCP4_POLICY_FILTER 21
#define DHCP4_MAX_DATAGRAM_SIZE 22
#define DHCP4_DEFAULT_TTL 23
#define DHCP4_MTU_AGING_TIMEOUT 24
#define DHCP4_MTU_SIZES 25
#define DHCP4_MTU_TO_USE 26
#define DHCP4_ALL_SUBNETS_LOCAL 27
#define DHCP4_BROADCAST_ADDRESS 28
#define DHCP4_PERFORM_MASK_DISCOVERY 29
#define DHCP4_RESPOND_TO_MASK_REQ 30
#define DHCP4_PERFORM_ROUTER_DISCOVERY 31
#define DHCP4_ROUTER_SOLICIT_ADDRESS 32
#define DHCP4_STATIC_ROUTER_LIST 33
#define DHCP4_USE_ARP_TRAILERS 34
#define DHCP4_ARP_CACHE_TIMEOUT 35
#define DHCP4_ETHERNET_ENCAPSULATION 36
#define DHCP4_TCP_DEFAULT_TTL 37
#define DHCP4_TCP_KEEP_ALIVE_INT 38
#define DHCP4_KEEP_ALIVE_GARBAGE 39
#define DHCP4_NIS_DOMAIN_NAME 40
#define DHCP4_NIS_SERVERS 41
#define DHCP4_NTP_SERVERS 42
#define DHCP4_VENDOR_SPECIFIC 43
# define PXE_MTFTP_IP 1
# define PXE_MTFTP_CPORT 2
# define PXE_MTFTP_SPORT 3
# define PXE_MTFTP_TMOUT 4
# define PXE_MTFTP_DELAY 5
# define PXE_DISCOVERY_CONTROL 6
# define PXE_DISABLE_BROADCAST_DISCOVERY 0x01
# define PXE_DISABLE_MULTICAST_DISCOVERY 0x02
# define PXE_ACCEPT_ONLY_PXE_BOOT_SERVERS 0x04
# define PXE_DO_NOT_PROMPT 0x08
# define PXE_DISCOVERY_MCAST_ADDR 7
# define PXE_BOOT_SERVERS 8
# define PXE_BOOT_MENU 9
# define PXE_BOOT_PROMPT 10
# define PXE_MCAST_ADDRS_ALLOC 11
# define PXE_CREDENTIAL_TYPES 12
# define PXE_BOOT_ITEM 71
#define DHCP4_NBNS_SERVERS 44
#define DHCP4_NBDD_SERVERS 45
#define DHCP4_NETBIOS_NODE_TYPE 46
#define DHCP4_NETBIOS_SCOPE 47
#define DHCP4_XWINDOW_SYSTEM_FONT_SERVERS 48
#define DHCP4_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49
#define DHCP4_REQUESTED_IP_ADDRESS 50
#define DHCP4_LEASE_TIME 51
#define DHCP4_OPTION_OVERLOAD 52
# define DHCP4_OVERLOAD_FNAME 1
# define DHCP4_OVERLOAD_SNAME 2
# define DHCP4_OVERLOAD_FNAME_AND_SNAME 3
#define DHCP4_MESSAGE_TYPE 53
# define DHCP4_MESSAGE_TYPE_DISCOVER 1
# define DHCP4_MESSAGE_TYPE_OFFER 2
# define DHCP4_MESSAGE_TYPE_REQUEST 3
# define DHCP4_MESSAGE_TYPE_DECLINE 4
# define DHCP4_MESSAGE_TYPE_ACK 5
# define DHCP4_MESSAGE_TYPE_NAK 6
# define DHCP4_MESSAGE_TYPE_RELEASE 7
# define DHCP4_MESSAGE_TYPE_INFORM 8
#define DHCP4_SERVER_IDENTIFIER 54
#define DHCP4_PARAMETER_REQUEST_LIST 55
#define DHCP4_ERROR_MESSAGE 56
#define DHCP4_MAX_MESSAGE_SIZE 57
# define DHCP4_DEFAULT_MAX_MESSAGE_SIZE 576
#define DHCP4_RENEWAL_TIME 58
#define DHCP4_REBINDING_TIME 59
#define DHCP4_CLASS_IDENTIFIER 60
#define DHCP4_CLIENT_IDENTIFIER 61
#define DHCP4_NISPLUS_DOMAIN_NAME 64
#define DHCP4_NISPLUS_SERVERS 65
#define DHCP4_TFTP_SERVER_NAME 66
#define DHCP4_BOOTFILE 67
#define DHCP4_MOBILE_IP_HOME_AGENTS 68
#define DHCP4_SMPT_SERVERS 69
#define DHCP4_POP3_SERVERS 70
#define DHCP4_NNTP_SERVERS 71
#define DHCP4_WWW_SERVERS 72
#define DHCP4_FINGER_SERVERS 73
#define DHCP4_IRC_SERVERS 74
#define DHCP4_STREET_TALK_SERVERS 75
#define DHCP4_STREET_TALK_DIR_ASSIST_SERVERS 76
#define DHCP4_NDS_SERVERS 85
#define DHCP4_NDS_TREE_NAME 86
#define DHCP4_NDS_CONTEXT 87
#define DHCP4_SYSTEM_ARCHITECTURE 93
#define DHCP4_NETWORK_ARCHITECTURE 94
#define DHCP4_PLATFORM_ID 97
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//
// DHCP4 option format.
//
#pragma pack(1)
typedef struct {
UINT8 op;
UINT8 len;
UINT8 data[1];
} DHCP4_OP;
#pragma pack()
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef struct {
DHCP4_PACKET Discover;
DHCP4_PACKET Offer;
DHCP4_PACKET Request;
DHCP4_PACKET AckNak;
BOOLEAN SetupCompleted;
BOOLEAN InitCompleted;
BOOLEAN SelectCompleted;
BOOLEAN IsBootp;
BOOLEAN IsAck;
} EFI_PXE_DHCP4_DATA;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_RUN) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
IN OPTIONAL UINTN OpLen,
IN OPTIONAL VOID *OpList
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_SETUP) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
IN OPTIONAL EFI_PXE_DHCP4_DATA * NewData
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_INIT) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
IN UINTN SecondsTimeout,
OUT UINTN *Offers,
OUT DHCP4_PACKET **OfferList
);
#define DHCP4_MIN_SECONDS 1
#define DHCP4_MAX_SECONDS 60
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_SELECT) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
IN UINTN SecondsTimeout,
IN DHCP4_PACKET * offer
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_RENEW) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
UINTN seconds_timeout
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_REBIND) (
IN EFI_PXE_DHCP4_PROTOCOL *This,
UINTN seconds_timeout
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_DHCP4_RELEASE) (
IN EFI_PXE_DHCP4_PROTOCOL * This
);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#define EFI_PXE_DHCP4_PROTOCOL_REVISION 0x00010000
struct _EFI_PXE_DHCP4_PROTOCOL {
UINT64 Revision;
EFI_PXE_DHCP4_RUN Run;
EFI_PXE_DHCP4_SETUP Setup;
EFI_PXE_DHCP4_INIT Init;
EFI_PXE_DHCP4_SELECT Select;
EFI_PXE_DHCP4_RENEW Renew;
EFI_PXE_DHCP4_REBIND Rebind;
EFI_PXE_DHCP4_RELEASE Release;
EFI_PXE_DHCP4_DATA *Data;
};
//
//
//
extern EFI_GUID gEfiPxeDhcp4ProtocolGuid;
#endif /* _PXEDHCP4_H_ */
/* EOF - PxeDhcp4.h */
|