/**
* IpSecDxe.h - IP Security (IPspec) Protocol DXE Driver Header
*
* Module: IpSecDxe, Index: 0138
* Source: AMI NetworkPkg / UefiNetworkStack / Common / IpSecDxe
* HR650X BIOS Decompilation Project
*
* This driver implements IPsec (RFC 4301) and IKEv2 (RFC 7296) protocols
* for the UEFI network stack. It provides:
* - IPsec protocol interface for securing network traffic
* - IKEv2 key exchange for SA establishment
* - SPD (Security Policy Database) management
* - SAD (Security Association Database) management
* - Crypto operations for IPsec (AES-CBC, HMAC-SHA1, etc.)
*
* Source files (from debug strings):
* IpSecDriver.c, IpSecConfigImpl.c, IpSecMain.c
* IpSecImpl.c, IpSecCryptIo.c, IpSecDebug.c
* IkeService.c, IkeCommon.c, IkePacket.c
* Ikev2/Exchange.c, Ikev2/Payload.c, Ikev2/Utility.c
* Ikev2/Sa.c, Ikev2/Info.c
*
* Architecture: IKEv2-focused IPsec implementation using UDp (ports 500/4500)
* for IKE exchanges, with linked list SA management and DPC for async dispatch.
* Binary stats: 2724 functions (14 named), .text = 0xe7300 (946 KB),
* 3126 strings, installed protocols: IPsec, IPsecConfig, DriverBinding
*/
#ifndef __IPSEC_DXE_H__
#define __IPSEC_DXE_H__
#include "../uefi_headers/Uefi.h"
/* ========================================================================
* GUID Definitions
* ======================================================================== */
/* EFI_IPSEC_PROTOCOL_GUID
* A3979E64-ACE8-4DDC-BC07-4D66B8FD0977
* Main IPsec protocol installed on network handles */
#define EFI_IPSEC_PROTOCOL_GUID \
{ 0xA3979E64, 0xACE8, 0x4DDC, { 0xBC, 0x07, 0x4D, 0x66, 0xB8, 0xFD, 0x09, 0x77 } }
/* EFI_IPSEC_CONFIG_PROTOCOL_GUID
* CE5E5929-C7A3-4602-AD9E-C9DAF94EBFCF
* IPsec configuration protocol for SPD/SAD management */
#define EFI_IPSEC_CONFIG_PROTOCOL_GUID \
{ 0xCE5E5929, 0xC7A3, 0x4602, { 0xAD, 0x9E, 0xC9, 0xDA, 0xF9, 0x4E, 0xBF, 0xCF } }
/* EFI_IPSEC_V4_BINDING_GUID (private marker)
* 83F01464-99BD-45E5-B383-AF6305D8E9E6 */
#define EFI_IPSEC_V4_BINDING_GUID \
{ 0x83F01464, 0x99BD, 0x45E5, { 0xB3, 0x83, 0xAF, 0x63, 0x05, 0xD8, 0xE9, 0xE6 } }
/* EFI_IPSEC_V6_BINDING_GUID (IKE auth marker)
* 66ED4721-3C98-4D3E-81E3-D03DD39A7254 */
#define EFI_IPSEC_V6_BINDING_GUID \
{ 0x66ED4721, 0x3C98, 0x4D3E, { 0x81, 0xE3, 0xD0, 0x3D, 0xD3, 0x9A, 0x72, 0x54 } }
/* gEfiUdp4ProtocolGuid = {3ad9df29-4501-478d-b1f8-7f7fe70e50f3} */
#define EFI_UDP4_PROTOCOL_GUID \
{ 0x3AD9DF29, 0x4501, 0x478D, { 0xB1, 0xF8, 0x7F, 0x7F, 0xE7, 0x0E, 0x50, 0xF3 } }
/* gEfiUdp6ProtocolGuid = {4f948815-b4b9-43cb-8a33-90e060b34955} */
#define EFI_UDP6_PROTOCOL_GUID \
{ 0x4F948815, 0xB4B9, 0x43CB, { 0x8A, 0x33, 0x90, 0xE0, 0x60, 0xB3, 0x49, 0x55 } }
/* gEfiDpcProtocolGuid = {480f8ae9-0c46-4aa9-bc89-db9fba619806} */
#define EFI_DPC_PROTOCOL_GUID \
{ 0x480F8AE9, 0x0C46, 0x4AA9, { 0xBC, 0x89, 0xDB, 0x9F, 0xBA, 0x61, 0x98, 0x06 } }
/* gEfiDriverBindingProtocolGuid = {18a031ab-b443-4d1a-a5c0-0c09261e9f71} */
#define EFI_DRIVER_BINDING_PROTOCOL_GUID \
{ 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71 } }
/* gEfiComponentName2ProtocolGuid = {107a772c-d5e1-11d4-9a46-0090273fc14d} */
#define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
{ 0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } }
/* ========================================================================
* Signatures
* ======================================================================== */
#define IPSEC_PRIVATE_SIGNATURE 0x45493049 /* "IPSI" */
#define IKEV2_SA_SIGNATURE 0x43414E49 /* "INAC" = 1128614729 */
#define IKEV1_SA_SIGNATURE 0x43415043 /* "CPAC" = 1229278025 */
/* ========================================================================
* Constants
* ======================================================================== */
#define IPSecConfigDataTypeSpd 0 /* Security Policy Database */
#define IPSecConfigDataTypeSad 1 /* Security Association Database */
#define IPSecConfigDataTypePcd 2 /* Platform Config Database */
#define IPSecConfigDataTypeMaximum 3
#define IKEV2_STATE_INIT 0
#define IKEV2_STATE_AUTH 1
#define IKEV2_STATE_SA_ESTABLISH 2
#define IKEV2_STATE_CREATE_CHILD 3
#define IKEV2_STATE_SA_REKEYING 4
#define IKEV2_STATE_CHILD_SA_ESTABLISHED 5
#define IKEV2_STATE_SA_DELETING 6
#define IKE_EXCHANGE_UNKNOWN 0
#define IKEV1_MAIN_EXCHANGE 1
#define IKEV1_INFO_EXCHANGE 2
#define IKEV1_QUICK_EXCHANGE 3
#define IKEV2_INITIAL_EXCHANGE 4
#define IKEV2_AUTH_EXCHANGE 5
#define IKEV2_CREATE_CHILD_EXCHANGE 6
#define IKEV2_INFO_EXCHANGE 7
#define IPSEC_PROTOCOL_ESP 50
#define IPSEC_PROTOCOL_AH 51
#define IKE_UDP_PORT 500
#define IKE_UDP_PORT_NAT_T 4500
#define DEBUG_RING_MAX_ENTRIES 16
#define DEBUG_RING_BUFFER_SIZE 512 /* 16 entries x 32 bytes */
#define IPSEC_CONFIG_VAR_NAME L"IpSecConfig"
#define IPSEC_STATUS_VAR_NAME L"IpSecStatus"
/* ========================================================================
* Forward declarations
* ======================================================================== */
typedef struct _IPSEC_PRIVATE_DATA IPSEC_PRIVATE_DATA;
typedef struct _IKEV2_SA_SESSION IKEV2_SA_SESSION;
typedef struct _CHILD_SA_SESSION CHILD_SA_SESSION;
/* ========================================================================
* Protocol Structure Definitions
* ======================================================================== */
/** EFI_IPSEC_CONFIG_PROTOCOL (24 bytes, 3 function pointers)
* Installed at +0x18 in IPSEC_PRIVATE_DATA. */
typedef struct _EFI_IPSEC_CONFIG_PROTOCOL {
EFI_STATUS (EFIAPI *SetData)(
VOID *This,
UINTN DataType,
VOID *Data,
UINTN DataSize
);
EFI_STATUS (EFIAPI *GetData)(
VOID *This,
UINTN DataType,
VOID *Data,
UINTN *DataSize
);
EFI_STATUS (EFIAPI *RegisterNotify)(
VOID *This,
UINTN DataType,
EFI_EVENT Event
);
} EFI_IPSEC_CONFIG_PROTOCOL;
/** EFI_DRIVER_BINDING_PROTOCOL (24 bytes)
* Two instances: IPv4 (sub_620) and IPv6 (sub_620 selects based on n4 param). */
typedef struct _EFI_DRIVER_BINDING_PROTOCOL {
EFI_STATUS (EFIAPI *Supported)(
VOID *This,
EFI_HANDLE ControllerHandle,
EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS (EFIAPI *Start)(
VOID *This,
EFI_HANDLE ControllerHandle,
EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS (EFIAPI *Stop)(
VOID *This,
EFI_HANDLE ControllerHandle,
UINTN NumberOfChildren,
EFI_HANDLE *ChildHandleBuffer
);
} EFI_DRIVER_BINDING_PROTOCOL;
/** EFI_COMPONENT_NAME_PROTOCOL */
typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
EFI_STATUS (EFIAPI *GetDriverName)(
VOID *This,
CHAR8 *Language,
CHAR16 **DriverName
);
EFI_STATUS (EFIAPI *GetControllerName)(
VOID *This,
EFI_HANDLE ControllerHandle,
EFI_HANDLE ChildHandle,
CHAR8 *Language,
CHAR16 **ControllerName
);
} EFI_COMPONENT_NAME_PROTOCOL;
/** EFI_COMPONENT_NAME2_PROTOCOL */
typedef struct _EFI_COMPONENT_NAME2_PROTOCOL {
EFI_STATUS (EFIAPI *GetDriverName)(
VOID *This,
CHAR8 *Language,
CHAR16 **DriverName
);
EFI_STATUS (EFIAPI *GetControllerName)(
VOID *This,
EFI_HANDLE ControllerHandle,
EFI_HANDLE ChildHandle,
CHAR8 *Language,
CHAR16 **ControllerName
);
} EFI_COMPONENT_NAME2_PROTOCOL;
/** EFI_DPC_PROTOCOL - Deferred Procedure Call
* Used for async IKE packet dispatch. Queued via sub_31F8 during init. */
typedef struct _EFI_DPC_PROTOCOL {
EFI_STATUS (EFIAPI *QueueDpc)(
UINTN DpcTpl,
VOID *DpcFunction,
VOID *DpcContext
);
EFI_STATUS (EFIAPI *DispatchDpc)(
VOID
);
} EFI_DPC_PROTOCOL;
/* ========================================================================
* IPsec Internal Data Structures
* ======================================================================== */
/**
* IPSEC_CONFIG_DATA_ENTRY
* Packed header for NV variable storage entries.
* Config variables contain sequences of these entries.
*/
#pragma pack(1)
typedef struct {
UINT8 Type; /* Data type (bit 7 set = valid) */
UINT16 Length; /* Total entry length */
UINT8 Data[1]; /* Variable-length data */
} IPSEC_CONFIG_DATA_ENTRY;
#pragma pack()
/**
* DEBUG_RECORD (32 bytes per entry)
* 16-entry ring buffer at 0x12C520. Head at +0x200, tail at +0x204.
* Indexing: head = (head +1) % 16, wraparound at tail.
*/
typedef struct {
UINT32 TypeField; /* +0x00: event type */
UINT32 TypeData; /* +0x04: packed [a1[31:24]|a2[23:12]|a3[11:0]] */
UINT64 DataPtr; /* +0x08: data pointer */
UINT32 Extra; /* +0x10: extra data (a5) */
UINT32 Flags; /* +0x14: flags (bit 0 = string present) */
UINT64 DebugString; /* +0x18: debug string pointer */
} DEBUG_RECORD;
/* (uses DEBUG_RING_MAX_ENTRIES = 16) */
typedef struct {
DEBUG_RECORD Records[16]; /* +0x000: 16 x 32 = 512 bytes */
UINT32 HeadIndex; /* +0x200: next write index */
UINT32 TailIndex; /* +0x204: oldest index */
} DEBUG_RING_BUFFER;
/**
* IPSEC_PRIVATE_DATA (216 = 0xD8 bytes)
* Main driver instance. Accessd via CONTAINER_RECORD pattern from
* protocol handle. Signature checked at 0x12A610.
* Allocated with AllocatePool(216) at 0xBE8+0x80.
*
* Field layout:
* +0x00: Signature = "IPSI" (0x45493049)
* +0x08: ProtocolHandle (installed protocol handle)
* +0x10: ImageHandle (driver image handle)
* +0x18: EFI_IPSEC_CONFIG_PROTOCOL (24 bytes)
* +0x30: Config function table (5 x 8 = 40 bytes)
* +0x30: SetDataFunc
* +0x38: GetDataFunc
* +0x40: RegisterNotifyFunc
* +0x48: InternalFunc1
* +0x50: InternalFunc2
* +0x58: LIST_ENTRY SpdCacheList
* +0x68: LIST_ENTRY SadCacheList
* +0x78: LIST_ENTRY SaBySpiList
* +0x88: LIST_ENTRY IkeSaSessionList
* +0x98: LIST_ENTRY ChildSaList
* +0xA8: LIST_ENTRY EstablishList
* +0xB8: LIST_ENTRY PendingList
* +0xC8: LIST_ENTRY EventList
* +0xD0: UINT8 ConfigChanged
* +0xD1-D7: padding
*/
typedef struct _IPSEC_PRIVATE_DATA {
UINT32 Signature; /* +0x00: "IPSI" */
UINT32 Reserved1; /* +0x04: padding */
EFI_HANDLE ProtocolHandle; /* +0x08 */
EFI_HANDLE ImageHandle; /* +0x10 */
/* +0x18: EFI_IPSEC_CONFIG_PROTOCOL (24 bytes) */
EFI_IPSEC_CONFIG_PROTOCOL ConfigProtocol;
/* +0x30: Config function pointers (40 bytes) */
VOID *SetDataFunc; /* +0x30 */
VOID *GetDataFunc; /* +0x38 */
VOID *RegisterNotifyFunc; /* +0x40 */
VOID *InternalFunc1; /* +0x48 */
VOID *InternalFunc2; /* +0x50 */
/* +0x58: Linked list heads */
LIST_ENTRY SpdCacheList; /* +0x58 */
LIST_ENTRY SadCacheList; /* +0x68 */
LIST_ENTRY SaBySpiList; /* +0x78 */
LIST_ENTRY IkeSaSessionList; /* +0x88 */
LIST_ENTRY ChildSaList; /* +0x98 */
LIST_ENTRY EstablishList; /* +0xA8 */
LIST_ENTRY PendingList; /* +0xB8 */
LIST_ENTRY EventList; /* +0xC8 */
UINT8 ConfigChanged; /* +0xD0 */
UINT8 Reserved2[7]; /* +0xD1-D7 */
} IPSEC_PRIVATE_DATA;
/**
* IKEV2_SA_SESSION (IKE SA session)
* Stored in IkeSaSessionList (+0x88) of IPSEC_PRIVATE_DATA.
* Signature = "INAC" (0x43414E49 = IKE SA).
* CONTAINER_RECORD at -42 entries (--336 bytes) from list entry.
* Total ~744+ bytes (1288 byte allocation).
*
* Fields (from sub_439C (IkeSaFree) and sub_4928):
* +0x00: Signature ("INAC")
* +0x04: State (IKEV2_STATE_*)
* +0x08: IsInitiator (BOOLEAN)
* +0x10: InitiatorCookie (UINT64)
* +0x18: ResponderCookie (UINT64)
* +0x20: InitiatorSpi (UINT64)
* +0x28: ResponderSpi (UINT64)
* +0x30: EncryptKey (SK_ei)
* +0x38: IntegrityKey (SK_ai)
* +0x40: DecryptKey (SK_er)
* +0x48: VerifKey (SK_ar)
* +0x50: LIST_ENTRY SessionList
* +0x60: LIST_ENTRY ChildSaList
* +0x70: LifetimeBytes (UINT64)
* +0x78: LifetimeSeconds (UINT32)
* +0x7C: SoftLifetimeSeconds (UINT32)
* +0x80: ExchangeContext
* +0x88+: DHSession, Propossal, etc.)
*/
typedef struct _IKEV2_SA_SESSION {
UINT32 Signature; /* +0x00: "INAC" */
UINT32 State; /* +0x04: IKEV2_STATE_* */
UINT8 IsInitiator; /* +0x08 */
UINT8 Reserved1[7];
UINT64 InitiatorCookie; /* +0x10 */
UINT64 ResponderCookie; /* +0x18 */
UINT64 InitiatorSpi; /* +0x20 */
UINT64 ResponderSpi; /* +0x28 */
VOID *EncryptKey; /* +0x30: SK_ei */
VOID *IntegrityKey; /* +0x38: SK_ai */
VOID *DecryptKey; /* +0x40: SK_er */
VOID *VerifKey; /* +0x48: SK_ar */
LIST_ENTRY SessionList; /* +0x50 */
LIST_ENTRY ChildSaList; /* +0x60 */
UINT64 LifetimeBytes; /* +0x70 */
UINT32 LifetimeSeconds; /* +0x78 */
UINT32 SoftLifetimeSeconds; /* +0x7C */
VOID *ExchangeContext; /* +0x80 */
/* +0x88+: more fields */
} IKEV2_SA_SESSION;
/**
* CHILD_SA_SESSION (Child SA)
* Stored in ChildSaList (+0x98 of private or +0x60 of IKE SA).
* Signature = "CPAC" (0x43415043).
* Access from list: CONTAINER_RECORD subtracts -42 QWORD = -336 bytes.
*
* Fields (from sub_4928):
* +0x00: Signature ("CPAC")
* +0x04: State
* +0x08: Protocol (ESP=50, AH=51)
* +0x0C: Spi (Security Parameter Index)
* +0x10: PeerSpi
* +0x14: SeqNumber
* +0x18: Reserved
* +0x20: EncryptAlgo pointer
* +0x28: IntegrityAlgo pointer
* +0x30: EncryptKeyLen
* +0x34: IntegrityKeyLen
* +0x38: LIST_ENTRY Link
*/
typedef struct _CHILD_SA_SESSION {
UINT32 Signature; /* +0x00: "CPAC" */
UINT32 State; /* +0x04 */
UINT8 Protocol; /* +0x08: ESP=50, AH=51 */
UINT8 Reserved1[3];
UINT32 Spi; /* +0x0C */
UINT32 PeerSpi; /* +0x10 */
UINT32 SeqNumber; /* +0x14 */
UINT32 Reserved2;
VOID *EncryptAlgo; /* +0x20 */
VOID *IntegrityAlgo; /* +0x28 */
UINT32 EncryptKeyLen; /* +0x30 */
UINT32 IntegrityKeyLen; /* +0x34 */
LIST_ENTRY Link; /* +0x38 */
} CHILD_SA_SESSION;
/**
* SPD_ENTRY (Security Policy Database entry)
* Compare function sub_11E8 checks CIDR matching.
* Fields:
* +0x00: SourceAddr (UINT32)
* +0x04: DestAddr (UINT32) (a1[4])
* +0x08: SourceMask (prefix len, UINT16)
* +0x0A: DestMask (UINT16)
* +0x0C: SrcPort (UINT16)
* +0x0E: DstPort (UINT16)
* +0x10: Protocol (UINT8)
* +0x14: Action (UINT32)
* +0x18: SourceAddrPtr
* +0x20: DestAddrPtr
*/
typedef struct {
UINT32 SourceAddr; /* +0x00 */
UINT32 DestAddr; /* +0x04 */
UINT16 SourceMask; /* +0x08 */
UINT16 DestMask; /* +0x0A */
UINT16 SrcPort; /* +0x0C */
UINT16 DstPort; /* +0x0E */
UINT8 Protocol; /* +0x10 */
UINT8 Reserved[3];
UINT32 Action; /* +0x14 */
VOID *SourceAddrPtr; /* +0x18 */
VOID *DestAddrPtr; /* +0x20 */
} SPD_ENTRY;
/* ========================================================================
* Module Global Variables
* ======================================================================== */
extern EFI_HANDLE gImageHandle; /* 0x12C4F8 */
extern EFI_SYSTEM_TABLE *gSystemTable; /* 0x12C4E8 */
extern EFI_BOOT_SERVICES *gBootServices; /* 0x12C4F0 */
extern EFI_RUNTIME_SERVICES *gRuntimeServices; /* 0x12C500 */
extern VOID *gUdp4IpSec; /* 0x12D080 */
extern VOID *gUdp6IpSec; /* 0x12A6A0 */
extern VOID *gDpcProtocol; /* 0x12C518 */
extern DEBUG_RING_BUFFER *gDebugRing; /* 0x12C520 */
/* ========================================================================
* Function Prototypes
* ======================================================================== */
/* -- Entry Point (0x460) -- */
EFI_STATUS
EFIAPI
IpSecDriverEntryPoint(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/* -- Driver Init sub_47C (0x47C) -- */
EFI_STATUS
IpSecInitBootServices(
VOID
);
/* -- Main Init sub_BE8 (0xBE8) -- */
EFI_STATUS
IpSecModuleInit(
IN EFI_HANDLE ImageHandle
);
/* -- Timer/DPC callback sub_31F8 (0x31F8) -- */
EFI_STATUS
IpSecTimerHandler(
IN IPSEC_PRIVATE_DATA *Private
);
/* -- Driver Binding sub_620 (0x620) -- */
EFI_STATUS
EFIAPI
IpSecV4DriverBindingSupported(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS
EFIAPI
IpSecV4DriverBindingStart(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS
EFIAPI
IpSecV4DriverBindingStop(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
/* -- IKEv2 Driver Binding sub_724 (0x724) -- */
EFI_STATUS
EFIAPI
IkeV2DriverBindingSupported(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS
EFIAPI
IkeV2DriverBindingStart(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE *RemainingDevicePath
);
EFI_STATUS
EFIAPI
IkeV2DriverBindingStop(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
/* -- Create Child SAs -- */
/* sub_36F4 (0x36F4): Create IPv4 UDP child */
EFI_STATUS
IpSecUdp4CreateChild(
IN IPSEC_PRIVATE_DATA *Private,
IN EFI_HANDLE ControllerHandle,
IN VOID *UdpConfig
);
/* sub_37F8 (0x37F8): Create IPv6 UDP child */
EFI_STATUS
IpSecUdp6CreateChild(
IN IPSEC_PRIVATE_DATA *Private,
IN EFI_HANDLE ControllerHandle,
IN VOID *UdpConfig
);
/* -- Debug Log -- */
/* sub_38F90 (0x38F90): Log debug event */
VOID
IpSecDebugLogEvent(
IN UINT8 Type,
IN UINT16 ProtocolId,
IN UINT16 Extra,
IN UINT64 DataPtr,
IN UINT32 Data
);
/* sub_39A70 (0x39A70): Get debug ring */
DEBUG_RING_BUFFER *
IpSecGetDebugRing(
VOID
);
/* sub_210D0 (0x210D0): Copy string to debug entry */
VOID
IpSecDebugCopyString(
IN UINT64 EntryPtr,
IN CONST VOID *String,
IN UINT32 FlagMask
);
/* -- SPD Operations -- */
BOOLEAN
SpdEntriesExactMatch(
IN SPD_ENTRY *Entry1,
IN SPD_ENTRY *Entry2
); /* sub_FAC */
BOOLEAN
SpdEntriesSubnetMatch(
IN SPD_ENTRY *Entry1,
IN SPD_ENTRY *Entry2
); /* sub_11E8 */
BOOLEAN
SpdEntryIsEqual(
IN SPD_ENTRY *Entry1,
IN SPD_ENTRY *Entry2
); /* sub_1424 */
BOOLEAN
SpdEntryIsEmpty(
IN SPD_ENTRY *Entry
); /* sub_152C */
/* -- Utility -- */
VOID *
AllocateZeroPool(
IN UINTN Size
); /* sub_10ABC */
VOID
FreePool(
IN VOID *Buffer
); /* sub_10BE0 */
VOID *
CopyMem(
OUT VOID *Destination,
IN VOID *Source,
IN UINTN Length
); /* sub_EA94 */
VOID *
ZeroMem(
OUT VOID *Buffer,
IN UINTN Length
); /* sub_EB30 */
INTN
CompareMem(
IN VOID *Buffer1,
IN VOID *Buffer2,
IN UINTN Length
); /* sub_EB94 */
VOID
InitializeListHead(
IN LIST_ENTRY *ListHead
); /* sub_EDA4 */
BOOLEAN
IsListEmpty(
IN LIST_ENTRY *ListEntry
); /* sub_EEB4 */
VOID
RemoveEntryList(
IN LIST_ENTRY *Entry
); /* sub_EEEC */
VOID
InsertTailList(
IN LIST_ENTRY *ListHead,
IN LIST_ENTRY *Entry
); /* sub_EE2C */
UINTN
StrLen(
IN CONST CHAR16 *String
); /* sub_EF34 */
/* -- Debug -- */
VOID
EFIAPI
DebugAssert(
IN CHAR8 *FileName,
IN UINTN LineNumber,
IN CHAR8 *Description
); /* sub_EA50 */
VOID
EFIAPI
DebugPrint(
IN UINTN ErrorLevel,
IN CHAR8 *Format,
...
); /* sub_E9C8 */
/* -- PCD -- */
UINTN
PcdGetSize(
IN UINTN PcdToken
); /* sub_10F94 */
/* -- IKE Packet Processing -- */
/* sub_3A44 (0x3A44): Process incoming IKE packet */
EFI_STATUS
IkeProcessIncoming(
IN IKEV2_SA_SESSION *Session,
IN UINT8 *IkePacket,
IN UINTN IkePacketLen
);
#endif /* __IPSEC_DXE_H__ */