xref: /freebsd/sys/contrib/edk2/Include/Protocol/Arp.h (revision f439973d6726c3be929c8fb3b1545b8b1744abc3)
1*f439973dSWarner Losh /** @file
2*f439973dSWarner Losh   EFI ARP Protocol Definition
3*f439973dSWarner Losh 
4*f439973dSWarner Losh   The EFI ARP Service Binding Protocol is used to locate EFI
5*f439973dSWarner Losh   ARP Protocol drivers to create and destroy child of the
6*f439973dSWarner Losh   driver to communicate with other host using ARP protocol.
7*f439973dSWarner Losh   The EFI ARP Protocol provides services to map IP network
8*f439973dSWarner Losh   address to hardware address used by a data link protocol.
9*f439973dSWarner Losh 
10*f439973dSWarner Losh Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
11*f439973dSWarner Losh SPDX-License-Identifier: BSD-2-Clause-Patent
12*f439973dSWarner Losh 
13*f439973dSWarner Losh   @par Revision Reference:
14*f439973dSWarner Losh   This Protocol was introduced in UEFI Specification 2.0.
15*f439973dSWarner Losh 
16*f439973dSWarner Losh **/
17*f439973dSWarner Losh 
18*f439973dSWarner Losh #ifndef __EFI_ARP_PROTOCOL_H__
19*f439973dSWarner Losh #define __EFI_ARP_PROTOCOL_H__
20*f439973dSWarner Losh 
21*f439973dSWarner Losh #define EFI_ARP_SERVICE_BINDING_PROTOCOL_GUID \
22*f439973dSWarner Losh   { \
23*f439973dSWarner Losh     0xf44c00ee, 0x1f2c, 0x4a00, {0xaa, 0x9, 0x1c, 0x9f, 0x3e, 0x8, 0x0, 0xa3 } \
24*f439973dSWarner Losh   }
25*f439973dSWarner Losh 
26*f439973dSWarner Losh #define EFI_ARP_PROTOCOL_GUID \
27*f439973dSWarner Losh   { \
28*f439973dSWarner Losh     0xf4b427bb, 0xba21, 0x4f16, {0xbc, 0x4e, 0x43, 0xe4, 0x16, 0xab, 0x61, 0x9c } \
29*f439973dSWarner Losh   }
30*f439973dSWarner Losh 
31*f439973dSWarner Losh typedef struct _EFI_ARP_PROTOCOL EFI_ARP_PROTOCOL;
32*f439973dSWarner Losh 
33*f439973dSWarner Losh typedef struct {
34*f439973dSWarner Losh   ///
35*f439973dSWarner Losh   /// Length in bytes of this entry.
36*f439973dSWarner Losh   ///
37*f439973dSWarner Losh   UINT32     Size;
38*f439973dSWarner Losh 
39*f439973dSWarner Losh   ///
40*f439973dSWarner Losh   /// Set to TRUE if this entry is a "deny" entry.
41*f439973dSWarner Losh   /// Set to FALSE if this entry is a "normal" entry.
42*f439973dSWarner Losh   ///
43*f439973dSWarner Losh   BOOLEAN    DenyFlag;
44*f439973dSWarner Losh 
45*f439973dSWarner Losh   ///
46*f439973dSWarner Losh   /// Set to TRUE if this entry will not time out.
47*f439973dSWarner Losh   /// Set to FALSE if this entry will time out.
48*f439973dSWarner Losh   ///
49*f439973dSWarner Losh   BOOLEAN    StaticFlag;
50*f439973dSWarner Losh 
51*f439973dSWarner Losh   ///
52*f439973dSWarner Losh   /// 16-bit ARP hardware identifier number.
53*f439973dSWarner Losh   ///
54*f439973dSWarner Losh   UINT16     HwAddressType;
55*f439973dSWarner Losh 
56*f439973dSWarner Losh   ///
57*f439973dSWarner Losh   /// 16-bit protocol type number.
58*f439973dSWarner Losh   ///
59*f439973dSWarner Losh   UINT16     SwAddressType;
60*f439973dSWarner Losh 
61*f439973dSWarner Losh   ///
62*f439973dSWarner Losh   /// The length of the hardware address.
63*f439973dSWarner Losh   ///
64*f439973dSWarner Losh   UINT8      HwAddressLength;
65*f439973dSWarner Losh 
66*f439973dSWarner Losh   ///
67*f439973dSWarner Losh   /// The length of the protocol address.
68*f439973dSWarner Losh   ///
69*f439973dSWarner Losh   UINT8      SwAddressLength;
70*f439973dSWarner Losh } EFI_ARP_FIND_DATA;
71*f439973dSWarner Losh 
72*f439973dSWarner Losh typedef struct {
73*f439973dSWarner Losh   ///
74*f439973dSWarner Losh   /// 16-bit protocol type number in host byte order.
75*f439973dSWarner Losh   ///
76*f439973dSWarner Losh   UINT16    SwAddressType;
77*f439973dSWarner Losh 
78*f439973dSWarner Losh   ///
79*f439973dSWarner Losh   /// The length in bytes of the station's protocol address to register.
80*f439973dSWarner Losh   ///
81*f439973dSWarner Losh   UINT8     SwAddressLength;
82*f439973dSWarner Losh 
83*f439973dSWarner Losh   ///
84*f439973dSWarner Losh   /// The pointer to the first byte of the protocol address to register. For
85*f439973dSWarner Losh   /// example, if SwAddressType is 0x0800 (IP), then
86*f439973dSWarner Losh   /// StationAddress points to the first byte of this station's IP
87*f439973dSWarner Losh   /// address stored in network byte order.
88*f439973dSWarner Losh   ///
89*f439973dSWarner Losh   VOID      *StationAddress;
90*f439973dSWarner Losh 
91*f439973dSWarner Losh   ///
92*f439973dSWarner Losh   /// The timeout value in 100-ns units that is associated with each
93*f439973dSWarner Losh   /// new dynamic ARP cache entry. If it is set to zero, the value is
94*f439973dSWarner Losh   /// implementation-specific.
95*f439973dSWarner Losh   ///
96*f439973dSWarner Losh   UINT32    EntryTimeOut;
97*f439973dSWarner Losh 
98*f439973dSWarner Losh   ///
99*f439973dSWarner Losh   /// The number of retries before a MAC address is resolved. If it is
100*f439973dSWarner Losh   /// set to zero, the value is implementation-specific.
101*f439973dSWarner Losh   ///
102*f439973dSWarner Losh   UINT32    RetryCount;
103*f439973dSWarner Losh 
104*f439973dSWarner Losh   ///
105*f439973dSWarner Losh   /// The timeout value in 100-ns units that is used to wait for the ARP
106*f439973dSWarner Losh   /// reply packet or the timeout value between two retries. Set to zero
107*f439973dSWarner Losh   /// to use implementation-specific value.
108*f439973dSWarner Losh   ///
109*f439973dSWarner Losh   UINT32    RetryTimeOut;
110*f439973dSWarner Losh } EFI_ARP_CONFIG_DATA;
111*f439973dSWarner Losh 
112*f439973dSWarner Losh /**
113*f439973dSWarner Losh   This function is used to assign a station address to the ARP cache for this instance
114*f439973dSWarner Losh   of the ARP driver.
115*f439973dSWarner Losh 
116*f439973dSWarner Losh   Each ARP instance has one station address. The EFI_ARP_PROTOCOL driver will
117*f439973dSWarner Losh   respond to ARP requests that match this registered station address. A call to
118*f439973dSWarner Losh   this function with the ConfigData field set to NULL will reset this ARP instance.
119*f439973dSWarner Losh 
120*f439973dSWarner Losh   Once a protocol type and station address have been assigned to this ARP instance,
121*f439973dSWarner Losh   all the following ARP functions will use this information. Attempting to change
122*f439973dSWarner Losh   the protocol type or station address to a configured ARP instance will result in errors.
123*f439973dSWarner Losh 
124*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
125*f439973dSWarner Losh   @param  ConfigData             The pointer to the EFI_ARP_CONFIG_DATA structure.
126*f439973dSWarner Losh 
127*f439973dSWarner Losh   @retval EFI_SUCCESS            The new station address was successfully
128*f439973dSWarner Losh                                  registered.
129*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:
130*f439973dSWarner Losh                                  * This is NULL.
131*f439973dSWarner Losh                                  * SwAddressLength is zero when ConfigData is not NULL.
132*f439973dSWarner Losh                                  * StationAddress is NULL when ConfigData is not NULL.
133*f439973dSWarner Losh   @retval EFI_ACCESS_DENIED      The SwAddressType, SwAddressLength, or
134*f439973dSWarner Losh                                  StationAddress is different from the one that is
135*f439973dSWarner Losh                                  already registered.
136*f439973dSWarner Losh   @retval EFI_OUT_OF_RESOURCES   Storage for the new StationAddress could not be
137*f439973dSWarner Losh                                  allocated.
138*f439973dSWarner Losh 
139*f439973dSWarner Losh **/
140*f439973dSWarner Losh typedef
141*f439973dSWarner Losh EFI_STATUS
142*f439973dSWarner Losh (EFIAPI *EFI_ARP_CONFIGURE)(
143*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
144*f439973dSWarner Losh   IN EFI_ARP_CONFIG_DATA    *ConfigData   OPTIONAL
145*f439973dSWarner Losh   );
146*f439973dSWarner Losh 
147*f439973dSWarner Losh /**
148*f439973dSWarner Losh   This function is used to insert entries into the ARP cache.
149*f439973dSWarner Losh 
150*f439973dSWarner Losh   ARP cache entries are typically inserted and updated by network protocol drivers
151*f439973dSWarner Losh   as network traffic is processed. Most ARP cache entries will time out and be
152*f439973dSWarner Losh   deleted if the network traffic stops. ARP cache entries that were inserted
153*f439973dSWarner Losh   by the Add() function may be static (will not time out) or dynamic (will time out).
154*f439973dSWarner Losh   Default ARP cache timeout values are not covered in most network protocol
155*f439973dSWarner Losh   specifications (although RFC 1122 comes pretty close) and will only be
156*f439973dSWarner Losh   discussed in general terms in this specification. The timeout values that are
157*f439973dSWarner Losh   used in the EFI Sample Implementation should be used only as a guideline.
158*f439973dSWarner Losh   Final product implementations of the EFI network stack should be tuned for
159*f439973dSWarner Losh   their expected network environments.
160*f439973dSWarner Losh 
161*f439973dSWarner Losh   @param  This                   Pointer to the EFI_ARP_PROTOCOL instance.
162*f439973dSWarner Losh   @param  DenyFlag               Set to TRUE if this entry is a deny entry. Set to
163*f439973dSWarner Losh                                  FALSE if this  entry is a normal entry.
164*f439973dSWarner Losh   @param  TargetSwAddress        Pointer to a protocol address to add (or deny).
165*f439973dSWarner Losh                                  May be set to NULL if DenyFlag is TRUE.
166*f439973dSWarner Losh   @param  TargetHwAddress        Pointer to a hardware address to add (or deny).
167*f439973dSWarner Losh                                  May be set to NULL if DenyFlag is TRUE.
168*f439973dSWarner Losh   @param  TimeoutValue           Time in 100-ns units that this entry will remain
169*f439973dSWarner Losh                                  in the ARP cache. A value of zero means that the
170*f439973dSWarner Losh                                  entry is permanent. A nonzero value will override
171*f439973dSWarner Losh                                  the one given by Configure() if the entry to be
172*f439973dSWarner Losh                                  added is a dynamic entry.
173*f439973dSWarner Losh   @param  Overwrite              If TRUE, the matching cache entry will be
174*f439973dSWarner Losh                                  overwritten with the supplied parameters. If
175*f439973dSWarner Losh                                  FALSE, EFI_ACCESS_DENIED is returned if the
176*f439973dSWarner Losh                                  corresponding cache entry already exists.
177*f439973dSWarner Losh 
178*f439973dSWarner Losh   @retval EFI_SUCCESS            The entry has been added or updated.
179*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:
180*f439973dSWarner Losh                                  * This is NULL.
181*f439973dSWarner Losh                                  * DenyFlag is FALSE and TargetHwAddress is NULL.
182*f439973dSWarner Losh                                  * DenyFlag is FALSE and TargetSwAddress is NULL.
183*f439973dSWarner Losh                                  * TargetHwAddress is NULL and TargetSwAddress is NULL.
184*f439973dSWarner Losh                                  * Neither TargetSwAddress nor TargetHwAddress are NULL when DenyFlag is
185*f439973dSWarner Losh                                  TRUE.
186*f439973dSWarner Losh   @retval EFI_OUT_OF_RESOURCES   The new ARP cache entry could not be allocated.
187*f439973dSWarner Losh   @retval EFI_ACCESS_DENIED      The ARP cache entry already exists and Overwrite
188*f439973dSWarner Losh                                  is not true.
189*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
190*f439973dSWarner Losh 
191*f439973dSWarner Losh **/
192*f439973dSWarner Losh typedef
193*f439973dSWarner Losh EFI_STATUS
194*f439973dSWarner Losh (EFIAPI *EFI_ARP_ADD)(
195*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
196*f439973dSWarner Losh   IN BOOLEAN                DenyFlag,
197*f439973dSWarner Losh   IN VOID                   *TargetSwAddress  OPTIONAL,
198*f439973dSWarner Losh   IN VOID                   *TargetHwAddress  OPTIONAL,
199*f439973dSWarner Losh   IN UINT32                 TimeoutValue,
200*f439973dSWarner Losh   IN BOOLEAN                Overwrite
201*f439973dSWarner Losh   );
202*f439973dSWarner Losh 
203*f439973dSWarner Losh /**
204*f439973dSWarner Losh   This function searches the ARP cache for matching entries and allocates a buffer into
205*f439973dSWarner Losh   which those entries are copied.
206*f439973dSWarner Losh 
207*f439973dSWarner Losh   The first part of the allocated buffer is EFI_ARP_FIND_DATA, following which
208*f439973dSWarner Losh   are protocol address pairs and hardware address pairs.
209*f439973dSWarner Losh   When finding a specific protocol address (BySwAddress is TRUE and AddressBuffer
210*f439973dSWarner Losh   is not NULL), the ARP cache timeout for the found entry is reset if Refresh is
211*f439973dSWarner Losh   set to TRUE. If the found ARP cache entry is a permanent entry, it is not
212*f439973dSWarner Losh   affected by Refresh.
213*f439973dSWarner Losh 
214*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
215*f439973dSWarner Losh   @param  BySwAddress            Set to TRUE to look for matching software protocol
216*f439973dSWarner Losh                                  addresses. Set to FALSE to look for matching
217*f439973dSWarner Losh                                  hardware protocol addresses.
218*f439973dSWarner Losh   @param  AddressBuffer          The pointer to the address buffer. Set to NULL
219*f439973dSWarner Losh                                  to match all addresses.
220*f439973dSWarner Losh   @param  EntryLength            The size of an entry in the entries buffer.
221*f439973dSWarner Losh   @param  EntryCount             The number of ARP cache entries that are found by
222*f439973dSWarner Losh                                  the specified criteria.
223*f439973dSWarner Losh   @param  Entries                The pointer to the buffer that will receive the ARP
224*f439973dSWarner Losh                                  cache entries.
225*f439973dSWarner Losh   @param  Refresh                Set to TRUE to refresh the timeout value of the
226*f439973dSWarner Losh                                  matching ARP cache entry.
227*f439973dSWarner Losh 
228*f439973dSWarner Losh   @retval EFI_SUCCESS            The requested ARP cache entries were copied into
229*f439973dSWarner Losh                                  the buffer.
230*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:
231*f439973dSWarner Losh                                  This is NULL. Both EntryCount and EntryLength are
232*f439973dSWarner Losh                                  NULL, when Refresh is FALSE.
233*f439973dSWarner Losh   @retval EFI_NOT_FOUND          No matching entries were found.
234*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
235*f439973dSWarner Losh 
236*f439973dSWarner Losh **/
237*f439973dSWarner Losh typedef
238*f439973dSWarner Losh EFI_STATUS
239*f439973dSWarner Losh (EFIAPI *EFI_ARP_FIND)(
240*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
241*f439973dSWarner Losh   IN BOOLEAN                BySwAddress,
242*f439973dSWarner Losh   IN VOID                   *AddressBuffer    OPTIONAL,
243*f439973dSWarner Losh   OUT UINT32                *EntryLength      OPTIONAL,
244*f439973dSWarner Losh   OUT UINT32                *EntryCount       OPTIONAL,
245*f439973dSWarner Losh   OUT EFI_ARP_FIND_DATA     **Entries         OPTIONAL,
246*f439973dSWarner Losh   IN BOOLEAN                Refresh
247*f439973dSWarner Losh   );
248*f439973dSWarner Losh 
249*f439973dSWarner Losh /**
250*f439973dSWarner Losh   This function removes specified ARP cache entries.
251*f439973dSWarner Losh 
252*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
253*f439973dSWarner Losh   @param  BySwAddress            Set to TRUE to delete matching protocol addresses.
254*f439973dSWarner Losh                                  Set to FALSE to delete matching hardware
255*f439973dSWarner Losh                                  addresses.
256*f439973dSWarner Losh   @param  AddressBuffer          The pointer to the address buffer that is used as a
257*f439973dSWarner Losh                                  key to look for the cache entry. Set to NULL to
258*f439973dSWarner Losh                                  delete all entries.
259*f439973dSWarner Losh 
260*f439973dSWarner Losh   @retval EFI_SUCCESS            The entry was removed from the ARP cache.
261*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  This is NULL.
262*f439973dSWarner Losh   @retval EFI_NOT_FOUND          The specified deletion key was not found.
263*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
264*f439973dSWarner Losh 
265*f439973dSWarner Losh **/
266*f439973dSWarner Losh typedef
267*f439973dSWarner Losh EFI_STATUS
268*f439973dSWarner Losh (EFIAPI *EFI_ARP_DELETE)(
269*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
270*f439973dSWarner Losh   IN BOOLEAN                BySwAddress,
271*f439973dSWarner Losh   IN VOID                   *AddressBuffer   OPTIONAL
272*f439973dSWarner Losh   );
273*f439973dSWarner Losh 
274*f439973dSWarner Losh /**
275*f439973dSWarner Losh   This function delete all dynamic entries from the ARP cache that match the specified
276*f439973dSWarner Losh   software protocol type.
277*f439973dSWarner Losh 
278*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
279*f439973dSWarner Losh 
280*f439973dSWarner Losh   @retval EFI_SUCCESS            The cache has been flushed.
281*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  This is NULL.
282*f439973dSWarner Losh   @retval EFI_NOT_FOUND          There are no matching dynamic cache entries.
283*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
284*f439973dSWarner Losh 
285*f439973dSWarner Losh **/
286*f439973dSWarner Losh typedef
287*f439973dSWarner Losh EFI_STATUS
288*f439973dSWarner Losh (EFIAPI *EFI_ARP_FLUSH)(
289*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This
290*f439973dSWarner Losh   );
291*f439973dSWarner Losh 
292*f439973dSWarner Losh /**
293*f439973dSWarner Losh   This function tries to resolve the TargetSwAddress and optionally returns a
294*f439973dSWarner Losh   TargetHwAddress if it already exists in the ARP cache.
295*f439973dSWarner Losh 
296*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
297*f439973dSWarner Losh   @param  TargetSwAddress        The pointer to the protocol address to resolve.
298*f439973dSWarner Losh   @param  ResolvedEvent          The pointer to the event that will be signaled when
299*f439973dSWarner Losh                                  the address is resolved or some error occurs.
300*f439973dSWarner Losh   @param  TargetHwAddress        The pointer to the buffer for the resolved hardware
301*f439973dSWarner Losh                                  address in network byte order.
302*f439973dSWarner Losh 
303*f439973dSWarner Losh   @retval EFI_SUCCESS            The data is copied from the ARP cache into the
304*f439973dSWarner Losh                                  TargetHwAddress buffer.
305*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:
306*f439973dSWarner Losh                                  This is NULL. TargetHwAddress is NULL.
307*f439973dSWarner Losh   @retval EFI_ACCESS_DENIED      The requested address is not present in the normal
308*f439973dSWarner Losh                                  ARP cache but is present in the deny address list.
309*f439973dSWarner Losh                                  Outgoing traffic to that address is forbidden.
310*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
311*f439973dSWarner Losh   @retval EFI_NOT_READY          The request has been started and is not finished.
312*f439973dSWarner Losh 
313*f439973dSWarner Losh **/
314*f439973dSWarner Losh typedef
315*f439973dSWarner Losh EFI_STATUS
316*f439973dSWarner Losh (EFIAPI *EFI_ARP_REQUEST)(
317*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
318*f439973dSWarner Losh   IN VOID                   *TargetSwAddress  OPTIONAL,
319*f439973dSWarner Losh   IN EFI_EVENT              ResolvedEvent     OPTIONAL,
320*f439973dSWarner Losh   OUT VOID                  *TargetHwAddress
321*f439973dSWarner Losh   );
322*f439973dSWarner Losh 
323*f439973dSWarner Losh /**
324*f439973dSWarner Losh   This function aborts the previous ARP request (identified by This, TargetSwAddress
325*f439973dSWarner Losh   and ResolvedEvent) that is issued by EFI_ARP_PROTOCOL.Request().
326*f439973dSWarner Losh 
327*f439973dSWarner Losh   If the request is in the internal ARP request queue, the request is aborted
328*f439973dSWarner Losh   immediately and its ResolvedEvent is signaled. Only an asynchronous address
329*f439973dSWarner Losh   request needs to be canceled. If TargeSwAddress and ResolveEvent are both
330*f439973dSWarner Losh   NULL, all the pending asynchronous requests that have been issued by This
331*f439973dSWarner Losh   instance will be cancelled and their corresponding events will be signaled.
332*f439973dSWarner Losh 
333*f439973dSWarner Losh   @param  This                   The pointer to the EFI_ARP_PROTOCOL instance.
334*f439973dSWarner Losh   @param  TargetSwAddress        The pointer to the protocol address in previous
335*f439973dSWarner Losh                                  request session.
336*f439973dSWarner Losh   @param  ResolvedEvent          Pointer to the event that is used as the
337*f439973dSWarner Losh                                  notification event in previous request session.
338*f439973dSWarner Losh 
339*f439973dSWarner Losh   @retval EFI_SUCCESS            The pending request session(s) is/are aborted and
340*f439973dSWarner Losh                                  corresponding event(s) is/are signaled.
341*f439973dSWarner Losh   @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:
342*f439973dSWarner Losh                                  This is NULL. TargetSwAddress is not NULL and
343*f439973dSWarner Losh                                  ResolvedEvent is NULL. TargetSwAddress is NULL and
344*f439973dSWarner Losh                                  ResolvedEvent is not NULL.
345*f439973dSWarner Losh   @retval EFI_NOT_STARTED        The ARP driver instance has not been configured.
346*f439973dSWarner Losh   @retval EFI_NOT_FOUND          The request is not issued by
347*f439973dSWarner Losh                                  EFI_ARP_PROTOCOL.Request().
348*f439973dSWarner Losh 
349*f439973dSWarner Losh 
350*f439973dSWarner Losh **/
351*f439973dSWarner Losh typedef
352*f439973dSWarner Losh EFI_STATUS
353*f439973dSWarner Losh (EFIAPI *EFI_ARP_CANCEL)(
354*f439973dSWarner Losh   IN EFI_ARP_PROTOCOL       *This,
355*f439973dSWarner Losh   IN VOID                   *TargetSwAddress  OPTIONAL,
356*f439973dSWarner Losh   IN EFI_EVENT              ResolvedEvent     OPTIONAL
357*f439973dSWarner Losh   );
358*f439973dSWarner Losh 
359*f439973dSWarner Losh ///
360*f439973dSWarner Losh /// ARP is used to resolve local network protocol addresses into
361*f439973dSWarner Losh /// network hardware addresses.
362*f439973dSWarner Losh ///
363*f439973dSWarner Losh struct _EFI_ARP_PROTOCOL {
364*f439973dSWarner Losh   EFI_ARP_CONFIGURE    Configure;
365*f439973dSWarner Losh   EFI_ARP_ADD          Add;
366*f439973dSWarner Losh   EFI_ARP_FIND         Find;
367*f439973dSWarner Losh   EFI_ARP_DELETE       Delete;
368*f439973dSWarner Losh   EFI_ARP_FLUSH        Flush;
369*f439973dSWarner Losh   EFI_ARP_REQUEST      Request;
370*f439973dSWarner Losh   EFI_ARP_CANCEL       Cancel;
371*f439973dSWarner Losh };
372*f439973dSWarner Losh 
373*f439973dSWarner Losh extern EFI_GUID  gEfiArpServiceBindingProtocolGuid;
374*f439973dSWarner Losh extern EFI_GUID  gEfiArpProtocolGuid;
375*f439973dSWarner Losh 
376*f439973dSWarner Losh #endif
377