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