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