]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h
Update to support to produce Component Name and & Component Name 2 protocol based...
[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
40#include "ArpDebug.h"\r
41\r
42#define ARP_ETHER_PROTO_TYPE 0x0806\r
43#define IPv4_ETHER_PROTO_TYPE 0x0800\r
44#define IPv6_ETHER_PROTO_TYPE 0x86DD\r
45\r
46#define ARP_OPCODE_REQUEST 0x0001\r
47#define ARP_OPCODE_REPLY 0x0002\r
48\r
49#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND)\r
50#define ARP_DEFAULT_RETRY_COUNT 2\r
51#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS)\r
52#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS)\r
53\r
54#pragma pack(1)\r
55typedef struct _ARP_HEAD {\r
56 UINT16 HwType;\r
57 UINT16 ProtoType;\r
58 UINT8 HwAddrLen;\r
59 UINT8 ProtoAddrLen;\r
60 UINT16 OpCode;\r
61} ARP_HEAD;\r
62#pragma pack()\r
63\r
64typedef struct _ARP_ADDRESS {\r
65 UINT8 *SenderHwAddr;\r
66 UINT8 *SenderProtoAddr;\r
67 UINT8 *TargetHwAddr;\r
68 UINT8 *TargetProtoAddr;\r
69} ARP_ADDRESS;\r
70\r
71#define MATCH_SW_ADDRESS 0x1\r
72#define MATCH_HW_ADDRESS 0x2\r
73\r
74typedef enum {\r
75 ByNone = 0,\r
76 ByProtoAddress = MATCH_SW_ADDRESS,\r
77 ByHwAddress = MATCH_HW_ADDRESS,\r
78 ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS\r
79} FIND_OPTYPE;\r
80\r
81#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I')\r
82\r
83#define ARP_INSTANCE_DATA_FROM_THIS(a) \\r
84 CR ( \\r
85 (a), \\r
86 ARP_INSTANCE_DATA, \\r
87 ArpProto, \\r
88 ARP_INSTANCE_DATA_SIGNATURE \\r
89 )\r
90\r
91typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA;\r
92\r
93typedef struct _ARP_INSTANCE_DATA {\r
94 UINT32 Signature;\r
95 ARP_SERVICE_DATA *ArpService;\r
96 EFI_HANDLE Handle;\r
97 EFI_ARP_PROTOCOL ArpProto;\r
98 NET_LIST_ENTRY List;\r
99 EFI_ARP_CONFIG_DATA ConfigData;\r
100 BOOLEAN Configured;\r
101 BOOLEAN Destroyed;\r
102} ARP_INSTANCE_DATA;\r
103\r
104#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S')\r
105\r
106#define ARP_SERVICE_DATA_FROM_THIS(a) \\r
107 CR ( \\r
108 (a), \\r
109 ARP_SERVICE_DATA, \\r
110 ServiceBinding, \\r
111 ARP_SERVICE_DATA_SIGNATURE \\r
112 )\r
113\r
114struct _ARP_SERVICE_DATA {\r
115 UINT32 Signature;\r
116 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
117\r
118 EFI_HANDLE MnpChildHandle;\r
119 EFI_HANDLE ImageHandle;\r
120 EFI_HANDLE ControllerHandle;\r
121\r
122 EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
123 EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
124 EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken;\r
125\r
126 EFI_SIMPLE_NETWORK_MODE SnpMode;\r
127\r
128 NET_LOCK Lock;\r
129\r
130 UINTN ChildrenNumber;\r
131 NET_LIST_ENTRY ChildrenList;\r
132\r
133 NET_LIST_ENTRY PendingRequestTable;\r
134 NET_LIST_ENTRY DeniedCacheTable;\r
135 NET_LIST_ENTRY ResolvedCacheTable;\r
136\r
137 EFI_EVENT PeriodicTimer;\r
138};\r
139\r
140typedef struct _USER_REQUEST_CONTEXT {\r
141 NET_LIST_ENTRY List;\r
142 ARP_INSTANCE_DATA *Instance;\r
143 EFI_EVENT UserRequestEvent;\r
144 VOID *UserHwAddrBuffer;\r
145} USER_REQUEST_CONTEXT;\r
146\r
147#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS)\r
148#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS)\r
149\r
150typedef struct _NET_ARP_ADDRESS {\r
151 UINT16 Type;\r
152 UINT8 Length;\r
153 UINT8 *AddressPtr;\r
154 union {\r
155 UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
156 UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
157 } Buffer;\r
158} NET_ARP_ADDRESS;\r
159\r
160typedef enum {\r
161 Hardware,\r
162 Protocol\r
163} ARP_ADDRESS_TYPE;\r
164\r
165typedef struct _ARP_CACHE_ENTRY {\r
166 NET_LIST_ENTRY List;\r
167\r
168 UINT32 RetryCount;\r
169 UINT32 DefaultDecayTime;\r
170 UINT32 DecayTime;\r
171 UINT32 NextRetryTime;\r
172\r
173 NET_ARP_ADDRESS Addresses[2];\r
174\r
175 NET_LIST_ENTRY UserRequestList;\r
176} ARP_CACHE_ENTRY;\r
177\r
178EFI_STATUS\r
179EFIAPI\r
180ArpConfigure (\r
181 IN EFI_ARP_PROTOCOL *This,\r
182 IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
183 );\r
184\r
185EFI_STATUS\r
186EFIAPI\r
187ArpAdd (\r
188 IN EFI_ARP_PROTOCOL *This,\r
189 IN BOOLEAN DenyFlag,\r
190 IN VOID *TargetSwAddress OPTIONAL,\r
191 IN VOID *TargetHwAddress OPTIONAL,\r
192 IN UINT32 TimeoutValue,\r
193 IN BOOLEAN Overwrite\r
194 );\r
195\r
196EFI_STATUS\r
197EFIAPI\r
198ArpFind (\r
199 IN EFI_ARP_PROTOCOL *This,\r
200 IN BOOLEAN BySwAddress,\r
201 IN VOID *AddressBuffer OPTIONAL,\r
202 OUT UINT32 *EntryLength OPTIONAL,\r
203 OUT UINT32 *EntryCount OPTIONAL,\r
204 OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
205 IN BOOLEAN Refresh\r
206 );\r
207\r
208EFI_STATUS\r
209EFIAPI\r
210ArpDelete (\r
211 IN EFI_ARP_PROTOCOL *This,\r
212 IN BOOLEAN BySwAddress,\r
213 IN VOID *AddressBuffer OPTIONAL\r
214 );\r
215\r
216EFI_STATUS\r
217EFIAPI\r
218ArpFlush (\r
219 IN EFI_ARP_PROTOCOL *This\r
220 );\r
221\r
222EFI_STATUS\r
223EFIAPI\r
224ArpRequest (\r
225 IN EFI_ARP_PROTOCOL *This,\r
226 IN VOID *TargetSwAddress OPTIONAL,\r
227 IN EFI_EVENT ResolvedEvent OPTIONAL,\r
228 OUT VOID *TargetHwAddress\r
229 );\r
230\r
231EFI_STATUS\r
232EFIAPI\r
233ArpCancel (\r
234 IN EFI_ARP_PROTOCOL *This,\r
235 IN VOID *TargetSwAddress OPTIONAL,\r
236 IN EFI_EVENT ResolvedEvent OPTIONAL\r
237 );\r
238\r
239EFI_STATUS\r
240ArpConfigureInstance (\r
241 IN ARP_INSTANCE_DATA *Instance,\r
242 IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
243 );\r
244\r
245ARP_CACHE_ENTRY *\r
246ArpFindDeniedCacheEntry (\r
247 IN ARP_SERVICE_DATA *ArpService,\r
248 IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
249 IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
250 );\r
251\r
252ARP_CACHE_ENTRY *\r
253ArpFindNextCacheEntryInTable (\r
254 IN NET_LIST_ENTRY *CacheTable,\r
255 IN NET_LIST_ENTRY *StartEntry,\r
256 IN FIND_OPTYPE FindOpType,\r
257 IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
258 IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
259 );\r
260\r
261ARP_CACHE_ENTRY *\r
262ArpAllocCacheEntry (\r
263 IN ARP_INSTANCE_DATA *Instance\r
264 );\r
265\r
266VOID\r
267ArpFillAddressInCacheEntry (\r
268 IN ARP_CACHE_ENTRY *CacheEntry,\r
269 IN NET_ARP_ADDRESS *HwAddr OPTIONAL,\r
270 IN NET_ARP_ADDRESS *SwAddr OPTIONAL\r
271 );\r
272\r
273UINTN\r
274ArpAddressResolved (\r
275 IN ARP_CACHE_ENTRY *CacheEntry,\r
276 IN ARP_INSTANCE_DATA *Instance OPTIONAL,\r
277 IN EFI_EVENT UserEvent OPTIONAL\r
278 );\r
279\r
280UINTN\r
281ArpDeleteCacheEntry (\r
282 IN ARP_INSTANCE_DATA *Instance,\r
283 IN BOOLEAN BySwAddress,\r
284 IN UINT8 *AddressBuffer OPTIONAL,\r
285 IN BOOLEAN Force\r
286 );\r
287\r
288VOID\r
289ArpSendFrame (\r
290 IN ARP_INSTANCE_DATA *Instance,\r
291 IN ARP_CACHE_ENTRY *CacheEntry,\r
292 IN UINT16 ArpOpCode\r
293 );\r
294\r
295VOID\r
296ArpInitInstance (\r
297 IN ARP_SERVICE_DATA *ArpService,\r
298 IN ARP_INSTANCE_DATA *Instance\r
299 );\r
300\r
301VOID\r
302EFIAPI\r
303ArpOnFrameRcvd (\r
304 IN EFI_EVENT Event,\r
305 IN VOID *Context\r
306 );\r
307\r
308VOID\r
309EFIAPI\r
310ArpOnFrameSent (\r
311 IN EFI_EVENT Event,\r
312 IN VOID *Context\r
313 );\r
314\r
315VOID\r
316EFIAPI\r
317ArpTimerHandler (\r
318 IN EFI_EVENT Event,\r
319 IN VOID *Context\r
320 );\r
321\r
322UINTN\r
323ArpCancelRequest (\r
324 IN ARP_INSTANCE_DATA *Instance,\r
325 IN VOID *TargetSwAddress OPTIONAL,\r
326 IN EFI_EVENT UserEvent OPTIONAL\r
327 );\r
328\r
329EFI_STATUS\r
330ArpFindCacheEntry (\r
331 IN ARP_INSTANCE_DATA *Instance,\r
332 IN BOOLEAN BySwAddress,\r
333 IN VOID *AddressBuffer OPTIONAL,\r
334 OUT UINT32 *EntryLength OPTIONAL,\r
335 OUT UINT32 *EntryCount OPTIONAL,\r
336 OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
337 IN BOOLEAN Refresh\r
338 );\r
339\r
340#endif\r
341\r