]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/PxeDhcp4Dxe/PxeDhcp4.h
1. Sync the latest network stack. Add NetLibCreateIPv4DPathNode () in netlib library.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeDhcp4Dxe / PxeDhcp4.h
1 /** @file
2
3 Copyright (c) 2004 - 2007, 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 Common header for PxeDhcp4 protocol driver
17
18
19 **/
20 #ifndef _PXEDHCP4_H
21 #define _PXEDHCP4_H
22
23
24 #include <PiDxe.h>
25
26 #include <Protocol/PxeBaseCode.h>
27 #include <Protocol/SimpleNetwork.h>
28 #include <Protocol/PxeDhcp4.h>
29 #include <Protocol/PxeDhcp4Callback.h>
30
31 #include <Library/DebugLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/MemoryAllocationLib.h>
34 #include <Library/UefiDriverEntryPoint.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/UefiLib.h>
37
38 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
39
40 //
41 // PxeDhcp4 protocol instance data
42 //
43 typedef struct {
44 //
45 // Signature field used to locate beginning of containment record.
46 //
47 UINTN Signature;
48
49 #define PXE_DHCP4_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'D', '4')
50 //
51 // Device handle the protocol is bound to.
52 //
53 EFI_HANDLE Handle;
54
55 //
56 // Public PxeDhcp4 protocol interface.
57 //
58 EFI_PXE_DHCP4_PROTOCOL PxeDhcp4;
59
60 //
61 // Consumed PxeBc, Snp and PxeDhcp4Callback protocol interfaces.
62 //
63 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;
64 EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
65 EFI_PXE_DHCP4_CALLBACK_PROTOCOL *callback;
66
67 //
68 // PxeDhcp4 called function for PxeDhcp4Callback.
69 //
70 EFI_PXE_DHCP4_FUNCTION function;
71
72 //
73 // Timeout event and flag for PxeDhcp4Callback.
74 //
75 EFI_EVENT TimeoutEvent;
76 BOOLEAN TimeoutOccurred;
77
78 //
79 // Periodic event and flag for PxeDhcp4Callback.
80 //
81 EFI_EVENT PeriodicEvent;
82 BOOLEAN PeriodicOccurred;
83
84 //
85 // DHCP server IP address.
86 //
87 UINT32 ServerIp;
88
89 //
90 // DHCP renewal and rebinding times, in seconds.
91 //
92 UINT32 RenewTime;
93 UINT32 RebindTime;
94 UINT32 LeaseTime;
95
96 //
97 // Number of offers received & allocated offer list.
98 //
99 UINTN offers;
100 DHCP4_PACKET *offer_list;
101
102 //
103 //
104 //
105 BOOLEAN StopPxeBc;
106
107 } PXE_DHCP4_PRIVATE_DATA;
108
109 #define PXE_DHCP4_PRIVATE_DATA_FROM_THIS(a) CR (a, PXE_DHCP4_PRIVATE_DATA, PxeDhcp4, PXE_DHCP4_PRIVATE_DATA_SIGNATURE)
110
111 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
112
113 //
114 // Protocol function prototypes.
115 //
116 extern
117 EFI_STATUS
118 EFIAPI
119 PxeDhcp4Run (
120 IN EFI_PXE_DHCP4_PROTOCOL *This,
121 IN OPTIONAL UINTN OpLen,
122 IN OPTIONAL VOID *OpList
123 )
124 ;
125
126 extern
127 EFI_STATUS
128 EFIAPI
129 PxeDhcp4Setup (
130 IN EFI_PXE_DHCP4_PROTOCOL *This,
131 IN EFI_PXE_DHCP4_DATA *Data
132 )
133 ;
134
135 extern
136 EFI_STATUS
137 EFIAPI
138 PxeDhcp4Init (
139 IN EFI_PXE_DHCP4_PROTOCOL *This,
140 IN UINTN seconds_timeout,
141 OUT UINTN *offer_list_entries,
142 OUT DHCP4_PACKET **offer_list
143 )
144 ;
145
146 extern
147 EFI_STATUS
148 EFIAPI
149 PxeDhcp4Select (
150 IN EFI_PXE_DHCP4_PROTOCOL *This,
151 IN UINTN seconds_timeout,
152 IN DHCP4_PACKET *offer_list
153 )
154 ;
155
156 extern
157 EFI_STATUS
158 EFIAPI
159 PxeDhcp4Renew (
160 IN EFI_PXE_DHCP4_PROTOCOL *This,
161 UINTN seconds_timeout
162 )
163 ;
164
165 extern
166 EFI_STATUS
167 EFIAPI
168 PxeDhcp4Rebind (
169 IN EFI_PXE_DHCP4_PROTOCOL *This,
170 UINTN seconds_timeout
171 )
172 ;
173
174 extern
175 EFI_STATUS
176 EFIAPI
177 PxeDhcp4Release (
178 IN EFI_PXE_DHCP4_PROTOCOL *This
179 )
180 ;
181
182 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
183
184 //
185 // Support function prototypes.
186 //
187 extern
188 UINT16
189 htons (
190 UINTN n
191 )
192 ;
193
194 extern
195 UINT32
196 htonl (
197 UINTN n
198 )
199 ;
200
201 extern
202 VOID
203 EFIAPI
204 timeout_notify (
205 IN EFI_EVENT Event,
206 IN VOID *Context
207 )
208 ;
209
210 extern
211 VOID
212 EFIAPI
213 periodic_notify (
214 IN EFI_EVENT Event,
215 IN VOID *Context
216 )
217 ;
218
219 extern
220 EFI_STATUS
221 find_opt (
222 IN DHCP4_PACKET *Packet,
223 IN UINT8 OpCode,
224 IN UINTN Skip,
225 OUT DHCP4_OP **OpPtr
226 )
227 ;
228
229 extern
230 EFI_STATUS
231 add_opt (
232 IN DHCP4_PACKET *Packet,
233 IN DHCP4_OP *OpPtr
234 )
235 ;
236
237 extern
238 EFI_STATUS
239 start_udp (
240 IN PXE_DHCP4_PRIVATE_DATA *Private,
241 IN OPTIONAL EFI_IP_ADDRESS *station_ip,
242 IN OPTIONAL EFI_IP_ADDRESS *subnet_mask
243 )
244 ;
245
246 extern
247 VOID
248 stop_udp (
249 IN PXE_DHCP4_PRIVATE_DATA *Private
250 )
251 ;
252
253 extern
254 EFI_STATUS
255 start_receive_events (
256 IN PXE_DHCP4_PRIVATE_DATA *Private,
257 IN UINTN seconds_timeout
258 )
259 ;
260
261 extern
262 VOID
263 stop_receive_events (
264 IN PXE_DHCP4_PRIVATE_DATA *Private
265 )
266 ;
267
268 extern
269 EFI_STATUS
270 tx_udp (
271 IN PXE_DHCP4_PRIVATE_DATA *Private,
272 IN EFI_IP_ADDRESS *dest_ip,
273 IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,
274 IN EFI_IP_ADDRESS *src_ip,
275 IN VOID *buffer,
276 IN UINTN BufferSize
277 )
278 ;
279
280 extern
281 EFI_STATUS
282 rx_udp (
283 IN PXE_DHCP4_PRIVATE_DATA *Private,
284 OUT VOID *buffer,
285 OUT UINTN *BufferSize,
286 IN OUT EFI_IP_ADDRESS *dest_ip,
287 IN OUT EFI_IP_ADDRESS *src_ip,
288 IN UINT16 op_flags
289 )
290 ;
291
292 extern
293 EFI_STATUS
294 tx_rx_udp (
295 IN PXE_DHCP4_PRIVATE_DATA *Private,
296 IN OUT EFI_IP_ADDRESS *ServerIp,
297 IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,
298 IN OPTIONAL EFI_IP_ADDRESS *client_ip,
299 IN OPTIONAL EFI_IP_ADDRESS *subnet_mask,
300 IN DHCP4_PACKET *tx_pkt,
301 OUT DHCP4_PACKET *rx_pkt,
302 IN INTN
303 (
304 *rx_vfy)
305 (
306 IN PXE_DHCP4_PRIVATE_DATA *Private,
307 IN DHCP4_PACKET *tx_pkt,
308 IN DHCP4_PACKET *rx_pkt,
309 IN UINTN rx_pkt_size
310 ),
311 IN UINTN seconds_timeout
312 )
313 ;
314
315 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
316
317 //
318 // Global variable definitions.
319 //
320 extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName;
321
322 EFI_STATUS
323 EFIAPI
324 PxeDhcp4DriverEntryPoint (
325 IN EFI_HANDLE ImageHandle,
326 IN EFI_SYSTEM_TABLE *SystemTable
327 )
328 /*++
329
330 Routine Description:
331 Register Driver Binding protocol for this driver.
332
333 Arguments:
334 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
335
336 Returns:
337 EFI_SUCCESS - Driver loaded.
338 other - Driver not loaded.
339
340 --*/
341 ;
342
343 #ifdef EFI_SIZE_REDUCTION_APPLIED
344 #define COMPONENT_NAME_CODE(code)
345 #define COMPONENT_NAME NULL
346 #else
347 #define COMPONENT_NAME_CODE(code) code
348 #define COMPONENT_NAME &gPxeDhcp4ComponentName
349 #endif
350
351 #endif /* _PXEDHCP4_H */
352
353 /* EOF - PxeDhcp4.h */