]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/ArpDxe/ArpMain.c
BaseTools:Change the path of the file that Binary Cache
[mirror_edk2.git] / MdeModulePkg / Universal / Network / ArpDxe / ArpMain.c
index 46aa19226b3914c1e8abb9099d7a21c3e88e5938..f06121fed452cf0b4bcb0763123a1d4a4cb6b290 100644 (file)
@@ -1,20 +1,8 @@
 /** @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
@@ -23,8 +11,15 @@ Abstract:
 \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
@@ -82,6 +77,17 @@ ArpConfigure (
 /**\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
@@ -270,6 +276,13 @@ UNLOCK_EXIT:
   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
@@ -495,7 +508,7 @@ ArpRequest (
   SnpMode    = &ArpService->SnpMode;\r
 \r
   if ((TargetSwAddress == NULL) ||\r
-    ((Instance->ConfigData.SwAddressType == IPv4_ETHER_PROTO_TYPE) &&\r
+    ((Instance->ConfigData.SwAddressType == IPV4_ETHER_PROTO_TYPE) &&\r
     IP4_IS_LOCAL_BROADCAST (*((UINT32 *)TargetSwAddress)))) {\r
     //\r
     // Return the hardware broadcast address.\r
@@ -505,7 +518,7 @@ ArpRequest (
     goto SIGNAL_USER;\r
   }\r
 \r
-  if ((Instance->ConfigData.SwAddressType == IPv4_ETHER_PROTO_TYPE) &&\r
+  if ((Instance->ConfigData.SwAddressType == IPV4_ETHER_PROTO_TYPE) &&\r
     IP4_IS_MULTICAST (NTOHL (*((UINT32 *)TargetSwAddress)))) {\r
     //\r
     // If the software address is an IPv4 multicast address, invoke Mnp to\r
@@ -609,7 +622,7 @@ ArpRequest (
     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
@@ -649,7 +662,7 @@ SIGNAL_USER:
     //\r
     // Dispatch the DPC queued by the NotifyFunction of ResolvedEvent.\r
     //\r
-    NetLibDispatchDpc ();\r
+    DispatchDpc ();\r
   }\r
 \r
   return Status;\r
@@ -660,6 +673,12 @@ SIGNAL_USER:
   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
@@ -712,7 +731,7 @@ ArpCancel (
   // 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