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