diff options
Diffstat (limited to 'MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h | 664 |
1 files changed, 332 insertions, 332 deletions
diff --git a/MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h b/MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h index 607443a99e..729cb5d68e 100644 --- a/MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h +++ b/MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h @@ -1,341 +1,341 @@ -/** @file - -Copyright (c) 2006 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - ArpImpl.h - -Abstract: - - -**/ - -#ifndef _ARP_IMPL_H_ -#define _ARP_IMPL_H_ - +/** @file
+
+Copyright (c) 2006 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ ArpImpl.h
+
+Abstract:
+
+
+**/
+
+#ifndef _ARP_IMPL_H_
+#define _ARP_IMPL_H_
+
#include <PiDxe.h>
#include <Protocol/Arp.h>
-#include <Protocol/ManagedNetwork.h> +#include <Protocol/ManagedNetwork.h>
#include <Protocol/ServiceBinding.h>
#include <Library/DebugLib.h>
#include <Library/UefiDriverEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h> -#include <Library/NetLib.h> -#include <Library/BaseLib.h> -#include <Library/BaseMemoryLib.h> -#include <Library/MemoryAllocationLib.h> - -#include "ArpDebug.h" - -#define ARP_ETHER_PROTO_TYPE 0x0806 -#define IPv4_ETHER_PROTO_TYPE 0x0800 -#define IPv6_ETHER_PROTO_TYPE 0x86DD - -#define ARP_OPCODE_REQUEST 0x0001 -#define ARP_OPCODE_REPLY 0x0002 - -#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND) -#define ARP_DEFAULT_RETRY_COUNT 2 -#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS) -#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS) - -#pragma pack(1) -typedef struct _ARP_HEAD { - UINT16 HwType; - UINT16 ProtoType; - UINT8 HwAddrLen; - UINT8 ProtoAddrLen; - UINT16 OpCode; -} ARP_HEAD; -#pragma pack() - -typedef struct _ARP_ADDRESS { - UINT8 *SenderHwAddr; - UINT8 *SenderProtoAddr; - UINT8 *TargetHwAddr; - UINT8 *TargetProtoAddr; -} ARP_ADDRESS; - -#define MATCH_SW_ADDRESS 0x1 -#define MATCH_HW_ADDRESS 0x2 - -typedef enum { - ByNone = 0, - ByProtoAddress = MATCH_SW_ADDRESS, - ByHwAddress = MATCH_HW_ADDRESS, - ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS -} FIND_OPTYPE; - -#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I') - -#define ARP_INSTANCE_DATA_FROM_THIS(a) \ - CR ( \ - (a), \ - ARP_INSTANCE_DATA, \ - ArpProto, \ - ARP_INSTANCE_DATA_SIGNATURE \ - ) - -typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA; - -typedef struct _ARP_INSTANCE_DATA { - UINT32 Signature; - ARP_SERVICE_DATA *ArpService; - EFI_HANDLE Handle; - EFI_ARP_PROTOCOL ArpProto; - NET_LIST_ENTRY List; - EFI_ARP_CONFIG_DATA ConfigData; - BOOLEAN Configured; - BOOLEAN Destroyed; -} ARP_INSTANCE_DATA; - -#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S') - -#define ARP_SERVICE_DATA_FROM_THIS(a) \ - CR ( \ - (a), \ - ARP_SERVICE_DATA, \ - ServiceBinding, \ - ARP_SERVICE_DATA_SIGNATURE \ - ) - -struct _ARP_SERVICE_DATA { - UINT32 Signature; - EFI_SERVICE_BINDING_PROTOCOL ServiceBinding; - - EFI_HANDLE MnpChildHandle; - EFI_HANDLE ImageHandle; - EFI_HANDLE ControllerHandle; - - EFI_MANAGED_NETWORK_PROTOCOL *Mnp; - EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData; - EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken; - - EFI_SIMPLE_NETWORK_MODE SnpMode; - - NET_LOCK Lock; - - UINTN ChildrenNumber; - NET_LIST_ENTRY ChildrenList; - - NET_LIST_ENTRY PendingRequestTable; - NET_LIST_ENTRY DeniedCacheTable; - NET_LIST_ENTRY ResolvedCacheTable; - - EFI_EVENT PeriodicTimer; -}; - -typedef struct _USER_REQUEST_CONTEXT { - NET_LIST_ENTRY List; - ARP_INSTANCE_DATA *Instance; - EFI_EVENT UserRequestEvent; - VOID *UserHwAddrBuffer; -} USER_REQUEST_CONTEXT; - -#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS) -#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS) - -typedef struct _NET_ARP_ADDRESS { - UINT16 Type; - UINT8 Length; - UINT8 *AddressPtr; - union { - UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN]; - UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN]; - } Buffer; -} NET_ARP_ADDRESS; - -typedef enum { - Hardware, - Protocol -} ARP_ADDRESS_TYPE; - -typedef struct _ARP_CACHE_ENTRY { - NET_LIST_ENTRY List; - - UINT32 RetryCount; - UINT32 DefaultDecayTime; - UINT32 DecayTime; - UINT32 NextRetryTime; - - NET_ARP_ADDRESS Addresses[2]; - - NET_LIST_ENTRY UserRequestList; -} ARP_CACHE_ENTRY; - -EFI_STATUS -EFIAPI -ArpConfigure ( - IN EFI_ARP_PROTOCOL *This, - IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL - ); - -EFI_STATUS -EFIAPI -ArpAdd ( - IN EFI_ARP_PROTOCOL *This, - IN BOOLEAN DenyFlag, - IN VOID *TargetSwAddress OPTIONAL, - IN VOID *TargetHwAddress OPTIONAL, - IN UINT32 TimeoutValue, - IN BOOLEAN Overwrite - ); - -EFI_STATUS -EFIAPI -ArpFind ( - IN EFI_ARP_PROTOCOL *This, - IN BOOLEAN BySwAddress, - IN VOID *AddressBuffer OPTIONAL, - OUT UINT32 *EntryLength OPTIONAL, - OUT UINT32 *EntryCount OPTIONAL, - OUT EFI_ARP_FIND_DATA **Entries OPTIONAL, - IN BOOLEAN Refresh - ); - -EFI_STATUS -EFIAPI -ArpDelete ( - IN EFI_ARP_PROTOCOL *This, - IN BOOLEAN BySwAddress, - IN VOID *AddressBuffer OPTIONAL - ); - -EFI_STATUS -EFIAPI -ArpFlush ( - IN EFI_ARP_PROTOCOL *This - ); - -EFI_STATUS -EFIAPI -ArpRequest ( - IN EFI_ARP_PROTOCOL *This, - IN VOID *TargetSwAddress OPTIONAL, - IN EFI_EVENT ResolvedEvent OPTIONAL, - OUT VOID *TargetHwAddress - ); - -EFI_STATUS -EFIAPI -ArpCancel ( - IN EFI_ARP_PROTOCOL *This, - IN VOID *TargetSwAddress OPTIONAL, - IN EFI_EVENT ResolvedEvent OPTIONAL - ); - -EFI_STATUS -ArpConfigureInstance ( - IN ARP_INSTANCE_DATA *Instance, - IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL - ); - -ARP_CACHE_ENTRY * -ArpFindDeniedCacheEntry ( - IN ARP_SERVICE_DATA *ArpService, - IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL, - IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL - ); - -ARP_CACHE_ENTRY * -ArpFindNextCacheEntryInTable ( - IN NET_LIST_ENTRY *CacheTable, - IN NET_LIST_ENTRY *StartEntry, - IN FIND_OPTYPE FindOpType, - IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL, - IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL - ); - -ARP_CACHE_ENTRY * -ArpAllocCacheEntry ( - IN ARP_INSTANCE_DATA *Instance - ); - -VOID -ArpFillAddressInCacheEntry ( - IN ARP_CACHE_ENTRY *CacheEntry, - IN NET_ARP_ADDRESS *HwAddr OPTIONAL, - IN NET_ARP_ADDRESS *SwAddr OPTIONAL - ); - -UINTN -ArpAddressResolved ( - IN ARP_CACHE_ENTRY *CacheEntry, - IN ARP_INSTANCE_DATA *Instance OPTIONAL, - IN EFI_EVENT UserEvent OPTIONAL - ); - -UINTN -ArpDeleteCacheEntry ( - IN ARP_INSTANCE_DATA *Instance, - IN BOOLEAN BySwAddress, - IN UINT8 *AddressBuffer OPTIONAL, - IN BOOLEAN Force - ); - -VOID -ArpSendFrame ( - IN ARP_INSTANCE_DATA *Instance, - IN ARP_CACHE_ENTRY *CacheEntry, - IN UINT16 ArpOpCode - ); - -VOID -ArpInitInstance ( - IN ARP_SERVICE_DATA *ArpService, - IN ARP_INSTANCE_DATA *Instance - ); - -VOID -EFIAPI -ArpOnFrameRcvd ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -VOID -EFIAPI -ArpOnFrameSent ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -VOID -EFIAPI -ArpTimerHandler ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -UINTN -ArpCancelRequest ( - IN ARP_INSTANCE_DATA *Instance, - IN VOID *TargetSwAddress OPTIONAL, - IN EFI_EVENT UserEvent OPTIONAL - ); - -EFI_STATUS -ArpFindCacheEntry ( - IN ARP_INSTANCE_DATA *Instance, - IN BOOLEAN BySwAddress, - IN VOID *AddressBuffer OPTIONAL, - OUT UINT32 *EntryLength OPTIONAL, - OUT UINT32 *EntryCount OPTIONAL, - OUT EFI_ARP_FIND_DATA **Entries OPTIONAL, - IN BOOLEAN Refresh - ); - -#endif - +#include <Library/UefiLib.h>
+#include <Library/NetLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include "ArpDebug.h"
+
+#define ARP_ETHER_PROTO_TYPE 0x0806
+#define IPv4_ETHER_PROTO_TYPE 0x0800
+#define IPv6_ETHER_PROTO_TYPE 0x86DD
+
+#define ARP_OPCODE_REQUEST 0x0001
+#define ARP_OPCODE_REPLY 0x0002
+
+#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND)
+#define ARP_DEFAULT_RETRY_COUNT 2
+#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS)
+#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS)
+
+#pragma pack(1)
+typedef struct _ARP_HEAD {
+ UINT16 HwType;
+ UINT16 ProtoType;
+ UINT8 HwAddrLen;
+ UINT8 ProtoAddrLen;
+ UINT16 OpCode;
+} ARP_HEAD;
+#pragma pack()
+
+typedef struct _ARP_ADDRESS {
+ UINT8 *SenderHwAddr;
+ UINT8 *SenderProtoAddr;
+ UINT8 *TargetHwAddr;
+ UINT8 *TargetProtoAddr;
+} ARP_ADDRESS;
+
+#define MATCH_SW_ADDRESS 0x1
+#define MATCH_HW_ADDRESS 0x2
+
+typedef enum {
+ ByNone = 0,
+ ByProtoAddress = MATCH_SW_ADDRESS,
+ ByHwAddress = MATCH_HW_ADDRESS,
+ ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS
+} FIND_OPTYPE;
+
+#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I')
+
+#define ARP_INSTANCE_DATA_FROM_THIS(a) \
+ CR ( \
+ (a), \
+ ARP_INSTANCE_DATA, \
+ ArpProto, \
+ ARP_INSTANCE_DATA_SIGNATURE \
+ )
+
+typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA;
+
+typedef struct _ARP_INSTANCE_DATA {
+ UINT32 Signature;
+ ARP_SERVICE_DATA *ArpService;
+ EFI_HANDLE Handle;
+ EFI_ARP_PROTOCOL ArpProto;
+ NET_LIST_ENTRY List;
+ EFI_ARP_CONFIG_DATA ConfigData;
+ BOOLEAN Configured;
+ BOOLEAN Destroyed;
+} ARP_INSTANCE_DATA;
+
+#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S')
+
+#define ARP_SERVICE_DATA_FROM_THIS(a) \
+ CR ( \
+ (a), \
+ ARP_SERVICE_DATA, \
+ ServiceBinding, \
+ ARP_SERVICE_DATA_SIGNATURE \
+ )
+
+struct _ARP_SERVICE_DATA {
+ UINT32 Signature;
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
+
+ EFI_HANDLE MnpChildHandle;
+ EFI_HANDLE ImageHandle;
+ EFI_HANDLE ControllerHandle;
+
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;
+ EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;
+ EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken;
+
+ EFI_SIMPLE_NETWORK_MODE SnpMode;
+
+ NET_LOCK Lock;
+
+ UINTN ChildrenNumber;
+ NET_LIST_ENTRY ChildrenList;
+
+ NET_LIST_ENTRY PendingRequestTable;
+ NET_LIST_ENTRY DeniedCacheTable;
+ NET_LIST_ENTRY ResolvedCacheTable;
+
+ EFI_EVENT PeriodicTimer;
+};
+
+typedef struct _USER_REQUEST_CONTEXT {
+ NET_LIST_ENTRY List;
+ ARP_INSTANCE_DATA *Instance;
+ EFI_EVENT UserRequestEvent;
+ VOID *UserHwAddrBuffer;
+} USER_REQUEST_CONTEXT;
+
+#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS)
+#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS)
+
+typedef struct _NET_ARP_ADDRESS {
+ UINT16 Type;
+ UINT8 Length;
+ UINT8 *AddressPtr;
+ union {
+ UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];
+ UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];
+ } Buffer;
+} NET_ARP_ADDRESS;
+
+typedef enum {
+ Hardware,
+ Protocol
+} ARP_ADDRESS_TYPE;
+
+typedef struct _ARP_CACHE_ENTRY {
+ NET_LIST_ENTRY List;
+
+ UINT32 RetryCount;
+ UINT32 DefaultDecayTime;
+ UINT32 DecayTime;
+ UINT32 NextRetryTime;
+
+ NET_ARP_ADDRESS Addresses[2];
+
+ NET_LIST_ENTRY UserRequestList;
+} ARP_CACHE_ENTRY;
+
+EFI_STATUS
+EFIAPI
+ArpConfigure (
+ IN EFI_ARP_PROTOCOL *This,
+ IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL
+ );
+
+EFI_STATUS
+EFIAPI
+ArpAdd (
+ IN EFI_ARP_PROTOCOL *This,
+ IN BOOLEAN DenyFlag,
+ IN VOID *TargetSwAddress OPTIONAL,
+ IN VOID *TargetHwAddress OPTIONAL,
+ IN UINT32 TimeoutValue,
+ IN BOOLEAN Overwrite
+ );
+
+EFI_STATUS
+EFIAPI
+ArpFind (
+ IN EFI_ARP_PROTOCOL *This,
+ IN BOOLEAN BySwAddress,
+ IN VOID *AddressBuffer OPTIONAL,
+ OUT UINT32 *EntryLength OPTIONAL,
+ OUT UINT32 *EntryCount OPTIONAL,
+ OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,
+ IN BOOLEAN Refresh
+ );
+
+EFI_STATUS
+EFIAPI
+ArpDelete (
+ IN EFI_ARP_PROTOCOL *This,
+ IN BOOLEAN BySwAddress,
+ IN VOID *AddressBuffer OPTIONAL
+ );
+
+EFI_STATUS
+EFIAPI
+ArpFlush (
+ IN EFI_ARP_PROTOCOL *This
+ );
+
+EFI_STATUS
+EFIAPI
+ArpRequest (
+ IN EFI_ARP_PROTOCOL *This,
+ IN VOID *TargetSwAddress OPTIONAL,
+ IN EFI_EVENT ResolvedEvent OPTIONAL,
+ OUT VOID *TargetHwAddress
+ );
+
+EFI_STATUS
+EFIAPI
+ArpCancel (
+ IN EFI_ARP_PROTOCOL *This,
+ IN VOID *TargetSwAddress OPTIONAL,
+ IN EFI_EVENT ResolvedEvent OPTIONAL
+ );
+
+EFI_STATUS
+ArpConfigureInstance (
+ IN ARP_INSTANCE_DATA *Instance,
+ IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL
+ );
+
+ARP_CACHE_ENTRY *
+ArpFindDeniedCacheEntry (
+ IN ARP_SERVICE_DATA *ArpService,
+ IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,
+ IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL
+ );
+
+ARP_CACHE_ENTRY *
+ArpFindNextCacheEntryInTable (
+ IN NET_LIST_ENTRY *CacheTable,
+ IN NET_LIST_ENTRY *StartEntry,
+ IN FIND_OPTYPE FindOpType,
+ IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,
+ IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL
+ );
+
+ARP_CACHE_ENTRY *
+ArpAllocCacheEntry (
+ IN ARP_INSTANCE_DATA *Instance
+ );
+
+VOID
+ArpFillAddressInCacheEntry (
+ IN ARP_CACHE_ENTRY *CacheEntry,
+ IN NET_ARP_ADDRESS *HwAddr OPTIONAL,
+ IN NET_ARP_ADDRESS *SwAddr OPTIONAL
+ );
+
+UINTN
+ArpAddressResolved (
+ IN ARP_CACHE_ENTRY *CacheEntry,
+ IN ARP_INSTANCE_DATA *Instance OPTIONAL,
+ IN EFI_EVENT UserEvent OPTIONAL
+ );
+
+UINTN
+ArpDeleteCacheEntry (
+ IN ARP_INSTANCE_DATA *Instance,
+ IN BOOLEAN BySwAddress,
+ IN UINT8 *AddressBuffer OPTIONAL,
+ IN BOOLEAN Force
+ );
+
+VOID
+ArpSendFrame (
+ IN ARP_INSTANCE_DATA *Instance,
+ IN ARP_CACHE_ENTRY *CacheEntry,
+ IN UINT16 ArpOpCode
+ );
+
+VOID
+ArpInitInstance (
+ IN ARP_SERVICE_DATA *ArpService,
+ IN ARP_INSTANCE_DATA *Instance
+ );
+
+VOID
+EFIAPI
+ArpOnFrameRcvd (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ );
+
+VOID
+EFIAPI
+ArpOnFrameSent (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ );
+
+VOID
+EFIAPI
+ArpTimerHandler (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ );
+
+UINTN
+ArpCancelRequest (
+ IN ARP_INSTANCE_DATA *Instance,
+ IN VOID *TargetSwAddress OPTIONAL,
+ IN EFI_EVENT UserEvent OPTIONAL
+ );
+
+EFI_STATUS
+ArpFindCacheEntry (
+ IN ARP_INSTANCE_DATA *Instance,
+ IN BOOLEAN BySwAddress,
+ IN VOID *AddressBuffer OPTIONAL,
+ OUT UINT32 *EntryLength OPTIONAL,
+ OUT UINT32 *EntryCount OPTIONAL,
+ OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,
+ IN BOOLEAN Refresh
+ );
+
+#endif
+
|