/** @file\r
+ Implementation of EFI Address Resolution Protocol (ARP) Protocol interface functions.\r
\r
-Copyright (c) 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
- ArpMain.c\r
-\r
-Abstract:\r
-\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
/**\r
This function is used to assign a station address to the ARP cache for this instance\r
- of the ARP driver. A call to this function with the ConfigData field set to NULL\r
- will reset this ARP instance.\r
+ of the ARP driver.\r
+\r
+ Each ARP instance has one station address. The EFI_ARP_PROTOCOL driver will\r
+ respond to ARP requests that match this registered station address. A call to\r
+ this function with the ConfigData field set to NULL will reset this ARP instance.\r
+\r
+ Once a protocol type and station address have been assigned to this ARP instance,\r
+ all the following ARP functions will use this information. Attempting to change\r
+ the protocol type or station address to a configured ARP instance will result in errors.\r
\r
@param This Pointer to the EFI_ARP_PROTOCOL instance.\r
@param ConfigData Pointer to the EFI_ARP_CONFIG_DATA structure.\r
/**\r
This function is used to insert entries into the ARP cache.\r
\r
+ ARP cache entries are typically inserted and updated by network protocol drivers\r
+ as network traffic is processed. Most ARP cache entries will time out and be\r
+ deleted if the network traffic stops. ARP cache entries that were inserted\r
+ by the Add() function may be static (will not time out) or dynamic (will time out).\r
+ Default ARP cache timeout values are not covered in most network protocol\r
+ specifications (although RFC 1122 comes pretty close) and will only be\r
+ discussed in general in this specification. The timeout values that are\r
+ used in the EFI Sample Implementation should be used only as a guideline.\r
+ Final product implementations of the EFI network stack should be tuned for\r
+ their expected network environments.\r
+\r
@param This Pointer to the EFI_ARP_PROTOCOL instance.\r
@param DenyFlag Set to TRUE if this entry is a deny entry. Set to\r
FALSE if this entry is a normal entry.\r
This function searches the ARP cache for matching entries and allocates a buffer into\r
which those entries are copied.\r
\r
+ The first part of the allocated buffer is EFI_ARP_FIND_DATA, following which\r
+ are protocol address pairs and hardware address pairs.\r
+ When finding a specific protocol address (BySwAddress is TRUE and AddressBuffer\r
+ is not NULL), the ARP cache timeout for the found entry is reset if Refresh is\r
+ set to TRUE. If the found ARP cache entry is a permanent entry, it is not\r
+ affected by Refresh.\r
+\r
@param This Pointer to the EFI_ARP_PROTOCOL instance.\r
@param BySwAddress Set to TRUE to look for matching software protocol\r
addresses. Set to FALSE to look for matching\r
CacheEntry = ArpAllocCacheEntry (Instance);\r
if (CacheEntry == NULL) {\r
DEBUG ((EFI_D_ERROR, "ArpRequest: Allocate memory for CacheEntry failed.\n"));\r
- gBS->FreePool (RequestContext);\r
+ FreePool (RequestContext);\r
\r
Status = EFI_OUT_OF_RESOURCES;\r
goto UNLOCK_EXIT;\r
//\r
// Dispatch the DPC queued by the NotifyFunction of ResolvedEvent.\r
//\r
- NetLibDispatchDpc ();\r
+ DispatchDpc ();\r
}\r
\r
return Status;\r
This function aborts the previous ARP request (identified by This, TargetSwAddress\r
and ResolvedEvent) that is issued by EFI_ARP_PROTOCOL.Request().\r
\r
+ If the request is in the internal ARP request queue, the request is aborted\r
+ immediately and its ResolvedEvent is signaled. Only an asynchronous address\r
+ request needs to be canceled. If TargeSwAddress and ResolveEvent are both\r
+ NULL, all the pending asynchronous requests that have been issued by This\r
+ instance will be cancelled and their corresponding events will be signaled.\r
+\r
@param This Pointer to the EFI_ARP_PROTOCOL instance.\r
@param TargetSwAddress Pointer to the protocol address in previous\r
request session.\r
// Dispatch the DPCs queued by the NotifyFunction of the events signaled\r
// by ArpCancleRequest.\r
//\r
- NetLibDispatchDpc ();\r
+ DispatchDpc ();\r
\r
gBS->RestoreTPL (OldTpl);\r
\r