]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h
Fixed rebuild failure issue when un-recognized macro is used in "#include" directive.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / ArpDxe / ArpImpl.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 ArpImpl.h\r
15\r
16Abstract:\r
17\r
18\r
19**/\r
20\r
21#ifndef _ARP_IMPL_H_\r
22#define _ARP_IMPL_H_\r
23\r
772db4bb 24\r
25#include <PiDxe.h>\r
26\r
27#include <Protocol/Arp.h>\r
83cbd279 28#include <Protocol/ManagedNetwork.h>\r
772db4bb 29#include <Protocol/ServiceBinding.h>\r
30\r
31#include <Library/DebugLib.h>\r
32#include <Library/UefiDriverEntryPoint.h>\r
33#include <Library/UefiBootServicesTableLib.h>\r
83cbd279 34#include <Library/UefiLib.h>\r
35#include <Library/NetLib.h>\r
36#include <Library/BaseLib.h>\r
37#include <Library/BaseMemoryLib.h>\r
38#include <Library/MemoryAllocationLib.h>\r
39\r
83cbd279 40\r
41#define ARP_ETHER_PROTO_TYPE 0x0806\r
42#define IPv4_ETHER_PROTO_TYPE 0x0800\r
43#define IPv6_ETHER_PROTO_TYPE 0x86DD\r
44\r
45#define ARP_OPCODE_REQUEST 0x0001\r
46#define ARP_OPCODE_REPLY 0x0002\r
47\r
48#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND)\r
49#define ARP_DEFAULT_RETRY_COUNT 2\r
50#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS)\r
51#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS)\r
52\r
53#pragma pack(1)\r
54typedef struct _ARP_HEAD {\r
55 UINT16 HwType;\r
56 UINT16 ProtoType;\r
57 UINT8 HwAddrLen;\r
58 UINT8 ProtoAddrLen;\r
59 UINT16 OpCode;\r
60} ARP_HEAD;\r
61#pragma pack()\r
62\r
63typedef struct _ARP_ADDRESS {\r
64 UINT8 *SenderHwAddr;\r
65 UINT8 *SenderProtoAddr;\r
66 UINT8 *TargetHwAddr;\r
67 UINT8 *TargetProtoAddr;\r
68} ARP_ADDRESS;\r
69\r
70#define MATCH_SW_ADDRESS 0x1\r
71#define MATCH_HW_ADDRESS 0x2\r
72\r
73typedef enum {\r
74 ByNone = 0,\r
75 ByProtoAddress = MATCH_SW_ADDRESS,\r
76 ByHwAddress = MATCH_HW_ADDRESS,\r
77 ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS\r
78} FIND_OPTYPE;\r
79\r
80#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I')\r
81\r
82#define ARP_INSTANCE_DATA_FROM_THIS(a) \\r
83 CR ( \\r
84 (a), \\r
85 ARP_INSTANCE_DATA, \\r
86 ArpProto, \\r
87 ARP_INSTANCE_DATA_SIGNATURE \\r
88 )\r
89\r
90typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA;\r
91\r
92typedef struct _ARP_INSTANCE_DATA {\r
93 UINT32 Signature;\r
94 ARP_SERVICE_DATA *ArpService;\r
95 EFI_HANDLE Handle;\r
96 EFI_ARP_PROTOCOL ArpProto;\r
e48e37fc 97 LIST_ENTRY List;\r
83cbd279 98 EFI_ARP_CONFIG_DATA ConfigData;\r
99 BOOLEAN Configured;\r
100 BOOLEAN Destroyed;\r
101} ARP_INSTANCE_DATA;\r
102\r
103#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S')\r
104\r
105#define ARP_SERVICE_DATA_FROM_THIS(a) \\r
106 CR ( \\r
107 (a), \\r
108 ARP_SERVICE_DATA, \\r
109 ServiceBinding, \\r
110 ARP_SERVICE_DATA_SIGNATURE \\r
111 )\r
112\r
113struct _ARP_SERVICE_DATA {\r
114 UINT32 Signature;\r
115 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
116\r
117 EFI_HANDLE MnpChildHandle;\r
118 EFI_HANDLE ImageHandle;\r
119 EFI_HANDLE ControllerHandle;\r
120\r
121 EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
122 EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
123 EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken;\r
124\r
125 EFI_SIMPLE_NETWORK_MODE SnpMode;\r
126\r
83cbd279 127 UINTN ChildrenNumber;\r
e48e37fc 128 LIST_ENTRY ChildrenList;\r
83cbd279 129\r
e48e37fc 130 LIST_ENTRY PendingRequestTable;\r
131 LIST_ENTRY DeniedCacheTable;\r
132 LIST_ENTRY ResolvedCacheTable;\r
83cbd279 133\r
134 EFI_EVENT PeriodicTimer;\r
135};\r
136\r
137typedef struct _USER_REQUEST_CONTEXT {\r
e48e37fc 138 LIST_ENTRY List;\r
83cbd279 139 ARP_INSTANCE_DATA *Instance;\r
140 EFI_EVENT UserRequestEvent;\r
141 VOID *UserHwAddrBuffer;\r
142} USER_REQUEST_CONTEXT;\r
143\r
144#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS)\r
145#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS)\r
146\r
147typedef struct _NET_ARP_ADDRESS {\r
148 UINT16 Type;\r
149 UINT8 Length;\r
150 UINT8 *AddressPtr;\r
151 union {\r
152 UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
153 UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
154 } Buffer;\r
155} NET_ARP_ADDRESS;\r
156\r
157typedef enum {\r
158 Hardware,\r
159 Protocol\r
160} ARP_ADDRESS_TYPE;\r
161\r
162typedef struct _ARP_CACHE_ENTRY {\r
e48e37fc 163 LIST_ENTRY List;\r
83cbd279 164\r
165 UINT32 RetryCount;\r
166 UINT32 DefaultDecayTime;\r
167 UINT32 DecayTime;\r
168 UINT32 NextRetryTime;\r
169\r
170 NET_ARP_ADDRESS Addresses[2];\r
171\r
e48e37fc 172 LIST_ENTRY UserRequestList;\r
83cbd279 173} ARP_CACHE_ENTRY;\r
174\r
175EFI_STATUS\r
176EFIAPI\r
177ArpConfigure (\r
178 IN EFI_ARP_PROTOCOL *This,\r
179 IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
180 );\r
181\r
182EFI_STATUS\r
183EFIAPI\r
184ArpAdd (\r
185 IN EFI_ARP_PROTOCOL *This,\r
186 IN BOOLEAN DenyFlag,\r
187 IN VOID *TargetSwAddress OPTIONAL,\r
188 IN VOID *TargetHwAddress OPTIONAL,\r
189 IN UINT32 TimeoutValue,\r
190 IN BOOLEAN Overwrite\r
191 );\r
192\r
193EFI_STATUS\r
194EFIAPI\r
195ArpFind (\r
196 IN EFI_ARP_PROTOCOL *This,\r
197 IN BOOLEAN BySwAddress,\r
198 IN VOID *AddressBuffer OPTIONAL,\r
199 OUT UINT32 *EntryLength OPTIONAL,\r
200 OUT UINT32 *EntryCount OPTIONAL,\r
201 OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
202 IN BOOLEAN Refresh\r
203 );\r
204\r
205EFI_STATUS\r
206EFIAPI\r
207ArpDelete (\r
208 IN EFI_ARP_PROTOCOL *This,\r
209 IN BOOLEAN BySwAddress,\r
210 IN VOID *AddressBuffer OPTIONAL\r
211 );\r
212\r
213EFI_STATUS\r
214EFIAPI\r
215ArpFlush (\r
216 IN EFI_ARP_PROTOCOL *This\r
217 );\r
218\r
219EFI_STATUS\r
220EFIAPI\r
221ArpRequest (\r
222 IN EFI_ARP_PROTOCOL *This,\r
223 IN VOID *TargetSwAddress OPTIONAL,\r
224 IN EFI_EVENT ResolvedEvent OPTIONAL,\r
225 OUT VOID *TargetHwAddress\r
226 );\r
227\r
228EFI_STATUS\r
229EFIAPI\r
230ArpCancel (\r
231 IN EFI_ARP_PROTOCOL *This,\r
232 IN VOID *TargetSwAddress OPTIONAL,\r
233 IN EFI_EVENT ResolvedEvent OPTIONAL\r
234 );\r
235\r
236EFI_STATUS\r
237ArpConfigureInstance (\r
238 IN ARP_INSTANCE_DATA *Instance,\r
239 IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
240 );\r
241\r
242ARP_CACHE_ENTRY *\r
243ArpFindDeniedCacheEntry (\r
244 IN ARP_SERVICE_DATA *ArpService,\r
245 IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
246 IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
247 );\r
248\r
249ARP_CACHE_ENTRY *\r
250ArpFindNextCacheEntryInTable (\r
e48e37fc 251 IN LIST_ENTRY *CacheTable,\r
252 IN LIST_ENTRY *StartEntry,\r
83cbd279 253 IN FIND_OPTYPE FindOpType,\r
254 IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
255 IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
256 );\r
257\r
258ARP_CACHE_ENTRY *\r
259ArpAllocCacheEntry (\r
260 IN ARP_INSTANCE_DATA *Instance\r
261 );\r
262\r
263VOID\r
264ArpFillAddressInCacheEntry (\r
265 IN ARP_CACHE_ENTRY *CacheEntry,\r
266 IN NET_ARP_ADDRESS *HwAddr OPTIONAL,\r
267 IN NET_ARP_ADDRESS *SwAddr OPTIONAL\r
268 );\r
269\r
270UINTN\r
271ArpAddressResolved (\r
272 IN ARP_CACHE_ENTRY *CacheEntry,\r
273 IN ARP_INSTANCE_DATA *Instance OPTIONAL,\r
274 IN EFI_EVENT UserEvent OPTIONAL\r
275 );\r
276\r
277UINTN\r
278ArpDeleteCacheEntry (\r
279 IN ARP_INSTANCE_DATA *Instance,\r
280 IN BOOLEAN BySwAddress,\r
281 IN UINT8 *AddressBuffer OPTIONAL,\r
282 IN BOOLEAN Force\r
283 );\r
284\r
285VOID\r
286ArpSendFrame (\r
287 IN ARP_INSTANCE_DATA *Instance,\r
288 IN ARP_CACHE_ENTRY *CacheEntry,\r
289 IN UINT16 ArpOpCode\r
290 );\r
291\r
292VOID\r
293ArpInitInstance (\r
294 IN ARP_SERVICE_DATA *ArpService,\r
295 IN ARP_INSTANCE_DATA *Instance\r
296 );\r
297\r
36ee91ca 298VOID\r
299EFIAPI\r
300ArpOnFrameRcvdDpc (\r
301 IN VOID *Context\r
302 );\r
303\r
83cbd279 304VOID\r
305EFIAPI\r
306ArpOnFrameRcvd (\r
307 IN EFI_EVENT Event,\r
308 IN VOID *Context\r
309 );\r
310\r
36ee91ca 311VOID\r
312EFIAPI\r
313ArpOnFrameSentDpc (\r
314 IN VOID *Context\r
315 );\r
316\r
83cbd279 317VOID\r
318EFIAPI\r
319ArpOnFrameSent (\r
320 IN EFI_EVENT Event,\r
321 IN VOID *Context\r
322 );\r
323\r
324VOID\r
325EFIAPI\r
326ArpTimerHandler (\r
327 IN EFI_EVENT Event,\r
328 IN VOID *Context\r
329 );\r
330\r
331UINTN\r
332ArpCancelRequest (\r
333 IN ARP_INSTANCE_DATA *Instance,\r
334 IN VOID *TargetSwAddress OPTIONAL,\r
335 IN EFI_EVENT UserEvent OPTIONAL\r
336 );\r
337\r
338EFI_STATUS\r
339ArpFindCacheEntry (\r
340 IN ARP_INSTANCE_DATA *Instance,\r
341 IN BOOLEAN BySwAddress,\r
342 IN VOID *AddressBuffer OPTIONAL,\r
343 OUT UINT32 *EntryLength OPTIONAL,\r
344 OUT UINT32 *EntryCount OPTIONAL,\r
345 OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
346 IN BOOLEAN Refresh\r
347 );\r
348\r
349#endif\r
350\r