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