Add NetworkPkg (P.UDK2010.UP3.Network.P1)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10986 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
530
NetworkPkg/Application/IpsecConfig/Dump.c
Normal file
530
NetworkPkg/Application/IpsecConfig/Dump.c
Normal file
@@ -0,0 +1,530 @@
|
||||
/** @file
|
||||
The implementation of dump policy entry function in IpSecConfig application.
|
||||
|
||||
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#include "IpSecConfig.h"
|
||||
#include "Dump.h"
|
||||
#include "ForEach.h"
|
||||
#include "Helper.h"
|
||||
|
||||
/**
|
||||
Private function called to get the version infomation from an EFI_IP_ADDRESS_INFO structure.
|
||||
|
||||
@param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
|
||||
|
||||
@return the value of version.
|
||||
**/
|
||||
UINTN
|
||||
GetVerFromAddrInfo (
|
||||
IN EFI_IP_ADDRESS_INFO *AddressInfo
|
||||
)
|
||||
{
|
||||
if((AddressInfo->PrefixLength <= 32) && (AddressInfo->Address.Addr[1] == 0) &&
|
||||
(AddressInfo->Address.Addr[2] == 0) && (AddressInfo->Address.Addr[3] == 0)) {
|
||||
return IP_VERSION_4;
|
||||
} else {
|
||||
return IP_VERSION_6;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Private function called to get the version information from a EFI_IP_ADDRESS structure.
|
||||
|
||||
@param[in] Address The pointer to the EFI_IP_ADDRESS structure.
|
||||
|
||||
@return The value of the version.
|
||||
**/
|
||||
UINTN
|
||||
GetVerFromIpAddr (
|
||||
IN EFI_IP_ADDRESS *Address
|
||||
)
|
||||
{
|
||||
if ((Address->Addr[1] == 0) && (Address->Addr[2] == 0) && (Address->Addr[3] == 0)) {
|
||||
return IP_VERSION_4;
|
||||
} else {
|
||||
return IP_VERSION_6;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Private function called to print an ASCII string in unicode char format.
|
||||
|
||||
@param[in] Str The pointer to the ASCII string.
|
||||
@param[in] Length The value of the ASCII string length.
|
||||
**/
|
||||
VOID
|
||||
DumpAsciiString (
|
||||
IN CHAR8 *Str,
|
||||
IN UINTN Length
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
for (Index = 0; Index < Length; Index++) {
|
||||
Print (L"%c", (CHAR16) Str[Index]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Private function called to print EFI_IP_ADDRESS_INFO content.
|
||||
|
||||
@param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
|
||||
**/
|
||||
VOID
|
||||
DumpAddressInfo (
|
||||
IN EFI_IP_ADDRESS_INFO *AddressInfo
|
||||
)
|
||||
{
|
||||
if (IP_VERSION_4 == GetVerFromAddrInfo (AddressInfo)) {
|
||||
Print (
|
||||
L"%d.%d.%d.%d",
|
||||
(UINTN) AddressInfo->Address.v4.Addr[0],
|
||||
(UINTN) AddressInfo->Address.v4.Addr[1],
|
||||
(UINTN) AddressInfo->Address.v4.Addr[2],
|
||||
(UINTN) AddressInfo->Address.v4.Addr[3]
|
||||
);
|
||||
if (AddressInfo->PrefixLength != 32) {
|
||||
Print (L"/%d", (UINTN) AddressInfo->PrefixLength);
|
||||
}
|
||||
}
|
||||
|
||||
if (IP_VERSION_6 == GetVerFromAddrInfo (AddressInfo)) {
|
||||
Print (
|
||||
L"%x:%x:%x:%x:%x:%x:%x:%x",
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[0]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[1]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[2]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[3]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[4]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[5]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[6]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[7]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[8]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[9]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[10]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[11]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[12]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[13]),
|
||||
(((UINT16) AddressInfo->Address.v6.Addr[14]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[15])
|
||||
);
|
||||
if (AddressInfo->PrefixLength != 128) {
|
||||
Print (L"/%d", AddressInfo->PrefixLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Private function called to print EFI_IP_ADDRESS content.
|
||||
|
||||
@param[in] IpAddress The pointer to the EFI_IP_ADDRESS structure.
|
||||
**/
|
||||
VOID
|
||||
DumpIpAddress (
|
||||
IN EFI_IP_ADDRESS *IpAddress
|
||||
)
|
||||
{
|
||||
if (IP_VERSION_4 == GetVerFromIpAddr (IpAddress)) {
|
||||
Print (
|
||||
L"%d.%d.%d.%d",
|
||||
(UINTN) IpAddress->v4.Addr[0],
|
||||
(UINTN) IpAddress->v4.Addr[1],
|
||||
(UINTN) IpAddress->v4.Addr[2],
|
||||
(UINTN) IpAddress->v4.Addr[3]
|
||||
);
|
||||
}
|
||||
|
||||
if (IP_VERSION_6 == GetVerFromIpAddr (IpAddress)) {
|
||||
Print (
|
||||
L"%x:%x:%x:%x:%x:%x:%x:%x",
|
||||
(((UINT16) IpAddress->v6.Addr[0]) << 8) | ((UINT16) IpAddress->v6.Addr[1]),
|
||||
(((UINT16) IpAddress->v6.Addr[2]) << 8) | ((UINT16) IpAddress->v6.Addr[3]),
|
||||
(((UINT16) IpAddress->v6.Addr[4]) << 8) | ((UINT16) IpAddress->v6.Addr[5]),
|
||||
(((UINT16) IpAddress->v6.Addr[6]) << 8) | ((UINT16) IpAddress->v6.Addr[7]),
|
||||
(((UINT16) IpAddress->v6.Addr[8]) << 8) | ((UINT16) IpAddress->v6.Addr[9]),
|
||||
(((UINT16) IpAddress->v6.Addr[10]) << 8) | ((UINT16) IpAddress->v6.Addr[11]),
|
||||
(((UINT16) IpAddress->v6.Addr[12]) << 8) | ((UINT16) IpAddress->v6.Addr[13]),
|
||||
(((UINT16) IpAddress->v6.Addr[14]) << 8) | ((UINT16) IpAddress->v6.Addr[15])
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Private function called to print EFI_IPSEC_SPD_SELECTOR content.
|
||||
|
||||
@param[in] Selector The pointer to the EFI_IPSEC_SPD_SELECTOR structure.
|
||||
**/
|
||||
VOID
|
||||
DumpSpdSelector (
|
||||
IN EFI_IPSEC_SPD_SELECTOR *Selector
|
||||
)
|
||||
{
|
||||
UINT32 Index;
|
||||
CHAR16 *Str;
|
||||
|
||||
for (Index = 0; Index < Selector->LocalAddressCount; Index++) {
|
||||
if (Index > 0) {
|
||||
Print (L",");
|
||||
}
|
||||
|
||||
DumpAddressInfo (&Selector->LocalAddress[Index]);
|
||||
}
|
||||
|
||||
if (Index == 0) {
|
||||
Print (L"localhost");
|
||||
}
|
||||
|
||||
Print (L" -> ");
|
||||
|
||||
for (Index = 0; Index < Selector->RemoteAddressCount; Index++) {
|
||||
if (Index > 0) {
|
||||
Print (L",");
|
||||
}
|
||||
|
||||
DumpAddressInfo (&Selector->RemoteAddress[Index]);
|
||||
}
|
||||
|
||||
Str = MapIntegerToString (Selector->NextLayerProtocol, mMapIpProtocol);
|
||||
if (Str != NULL) {
|
||||
Print (L" %s", Str);
|
||||
} else {
|
||||
Print (L" proto:%d", (UINTN) Selector->NextLayerProtocol);
|
||||
}
|
||||
|
||||
if ((Selector->NextLayerProtocol == EFI_IP4_PROTO_TCP) || (Selector->NextLayerProtocol == EFI_IP4_PROTO_UDP)) {
|
||||
Print (L" port:");
|
||||
if (Selector->LocalPort != EFI_IPSEC_ANY_PORT) {
|
||||
Print (L"%d", Selector->LocalPort);
|
||||
if (Selector->LocalPortRange != 0) {
|
||||
Print (L"~%d", (UINTN) Selector->LocalPort + Selector->LocalPortRange);
|
||||
}
|
||||
} else {
|
||||
Print (L"any");
|
||||
}
|
||||
|
||||
Print (L" -> ");
|
||||
if (Selector->RemotePort != EFI_IPSEC_ANY_PORT) {
|
||||
Print (L"%d", Selector->RemotePort);
|
||||
if (Selector->RemotePortRange != 0) {
|
||||
Print (L"~%d", (UINTN) Selector->RemotePort + Selector->RemotePortRange);
|
||||
}
|
||||
} else {
|
||||
Print (L"any");
|
||||
}
|
||||
} else if (Selector->NextLayerProtocol == EFI_IP4_PROTO_ICMP) {
|
||||
Print (L" class/code:");
|
||||
if (Selector->LocalPort != 0) {
|
||||
Print (L"%d", (UINTN) (UINT8) Selector->LocalPort);
|
||||
} else {
|
||||
Print (L"any");
|
||||
}
|
||||
|
||||
Print (L"/");
|
||||
if (Selector->RemotePort != 0) {
|
||||
Print (L"%d", (UINTN) (UINT8) Selector->RemotePort);
|
||||
} else {
|
||||
Print (L"any");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Print EFI_IPSEC_SPD_SELECTOR and EFI_IPSEC_SPD_DATA content.
|
||||
|
||||
@param[in] Selector The pointer to the EFI_IPSEC_SPD_SELECTOR structure.
|
||||
@param[in] Data The pointer to the EFI_IPSEC_SPD_DATA structure.
|
||||
@param[in] EntryIndex The pointer to the Index in SPD Database.
|
||||
|
||||
@retval EFI_SUCCESS Dump SPD information successfully.
|
||||
**/
|
||||
EFI_STATUS
|
||||
DumpSpdEntry (
|
||||
IN EFI_IPSEC_SPD_SELECTOR *Selector,
|
||||
IN EFI_IPSEC_SPD_DATA *Data,
|
||||
IN UINTN *EntryIndex
|
||||
)
|
||||
{
|
||||
BOOLEAN HasPre;
|
||||
CHAR16 DataName[128];
|
||||
CHAR16 *String1;
|
||||
CHAR16 *String2;
|
||||
CHAR16 *String3;
|
||||
UINT8 Index;
|
||||
|
||||
Print (L"%d.", (*EntryIndex)++);
|
||||
|
||||
//
|
||||
// xxx.xxx.xxx.xxx/yy -> xxx.xxx.xxx.xx/yy proto:23 port:100~300 -> 300~400
|
||||
// Protect PF:0x34323423 Name:First Entry
|
||||
// ext-sequence sequence-overflow fragcheck life:[B0,S1024,H3600]
|
||||
// ESP algo1 algo2 Tunnel [xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx set]
|
||||
//
|
||||
|
||||
DumpSpdSelector (Selector);
|
||||
Print (L"\n ");
|
||||
|
||||
Print (L"%s ", MapIntegerToString (Data->Action, mMapIpSecAction));
|
||||
Print (L"PF:%08x ", Data->PackageFlag);
|
||||
|
||||
Index = 0;
|
||||
while (Data->Name[Index] != 0) {
|
||||
DataName[Index] = (CHAR16) Data->Name[Index];
|
||||
Index++;
|
||||
ASSERT (Index < 128);
|
||||
}
|
||||
DataName[Index] = L'\0';
|
||||
|
||||
Print (L"Name:%s", DataName);
|
||||
|
||||
if (Data->Action == EfiIPsecActionProtect) {
|
||||
Print (L"\n ");
|
||||
if (Data->ProcessingPolicy->ExtSeqNum) {
|
||||
Print (L"ext-sequence ");
|
||||
}
|
||||
|
||||
if (Data->ProcessingPolicy->SeqOverflow) {
|
||||
Print (L"sequence-overflow ");
|
||||
}
|
||||
|
||||
if (Data->ProcessingPolicy->FragCheck) {
|
||||
Print (L"fragment-check ");
|
||||
}
|
||||
|
||||
HasPre = FALSE;
|
||||
if (Data->ProcessingPolicy->SaLifetime.ByteCount != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxB", Data->ProcessingPolicy->SaLifetime.ByteCount);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (Data->ProcessingPolicy->SaLifetime.SoftLifetime != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxs", Data->ProcessingPolicy->SaLifetime.SoftLifetime);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (Data->ProcessingPolicy->SaLifetime.HardLifetime != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxS", Data->ProcessingPolicy->SaLifetime.HardLifetime);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (HasPre) {
|
||||
Print (L"]");
|
||||
}
|
||||
|
||||
if (HasPre || Data->ProcessingPolicy->ExtSeqNum ||
|
||||
Data->ProcessingPolicy->SeqOverflow || Data->ProcessingPolicy->FragCheck) {
|
||||
Print (L"\n ");
|
||||
}
|
||||
|
||||
String1 = MapIntegerToString (Data->ProcessingPolicy->Proto, mMapIpSecProtocol);
|
||||
String2 = MapIntegerToString (Data->ProcessingPolicy->AuthAlgoId, mMapAuthAlgo);
|
||||
String3 = MapIntegerToString (Data->ProcessingPolicy->EncAlgoId, mMapEncAlgo);
|
||||
Print (
|
||||
L"%s Auth:%s Encrypt:%s ",
|
||||
String1,
|
||||
String2,
|
||||
String3
|
||||
);
|
||||
|
||||
Print (L"%s ", MapIntegerToString (Data->ProcessingPolicy->Mode, mMapIpSecMode));
|
||||
if (Data->ProcessingPolicy->Mode == EfiIPsecTunnel) {
|
||||
Print (L"[");
|
||||
DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->LocalTunnelAddress);
|
||||
Print (L" -> ");
|
||||
DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->RemoteTunnelAddress);
|
||||
Print (L" %s]", MapIntegerToString (Data->ProcessingPolicy->TunnelOption->DF, mMapDfOption));
|
||||
}
|
||||
}
|
||||
|
||||
Print (L"\n");
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Print EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA content.
|
||||
|
||||
@param[in] SaId The pointer to the EFI_IPSEC_SA_ID structure.
|
||||
@param[in] Data The pointer to the EFI_IPSEC_SA_DATA structure.
|
||||
@param[in] EntryIndex The pointer to the Index in the SAD Database.
|
||||
|
||||
@retval EFI_SUCCESS Dump SAD information successfully.
|
||||
**/
|
||||
EFI_STATUS
|
||||
DumpSadEntry (
|
||||
IN EFI_IPSEC_SA_ID *SaId,
|
||||
IN EFI_IPSEC_SA_DATA *Data,
|
||||
IN UINTN *EntryIndex
|
||||
)
|
||||
{
|
||||
BOOLEAN HasPre;
|
||||
CHAR16 *String1;
|
||||
CHAR16 *String2;
|
||||
|
||||
//
|
||||
// SPI:1234 ESP Destination:xxx.xxx.xxx.xxx
|
||||
// Mode:Transport SeqNum:134 AntiReplayWin:64 life:[0B,1023s,3400S] PathMTU:34
|
||||
// Auth:xxxx/password Encrypt:yyyy/password
|
||||
// xxx.xxx.xxx.xxx/yy -> xxx.xxx.xxx.xx/yy proto:23 port:100~300 -> 300~400
|
||||
//
|
||||
|
||||
Print (L"%d.", (*EntryIndex)++);
|
||||
Print (L"0x%x %s ", (UINTN) SaId->Spi, MapIntegerToString (SaId->Proto, mMapIpSecProtocol));
|
||||
Print (L"Destination:");
|
||||
DumpIpAddress (&SaId->DestAddress);
|
||||
Print (L"\n");
|
||||
|
||||
Print (
|
||||
L" Mode:%s SeqNum:%lx AntiReplayWin:%d ",
|
||||
MapIntegerToString (Data->Mode, mMapIpSecMode),
|
||||
Data->SNCount,
|
||||
(UINTN) Data->AntiReplayWindows
|
||||
);
|
||||
|
||||
HasPre = FALSE;
|
||||
if (Data->SaLifetime.ByteCount != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxB", Data->SaLifetime.ByteCount);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (Data->SaLifetime.SoftLifetime != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxs", Data->SaLifetime.SoftLifetime);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (Data->SaLifetime.HardLifetime != 0) {
|
||||
Print (HasPre ? L"," : L"life:[");
|
||||
Print (L"%lxS", Data->SaLifetime.HardLifetime);
|
||||
HasPre = TRUE;
|
||||
}
|
||||
|
||||
if (HasPre) {
|
||||
Print (L"] ");
|
||||
}
|
||||
|
||||
Print (L"PathMTU:%d\n", (UINTN) Data->PathMTU);
|
||||
|
||||
if (SaId->Proto == EfiIPsecAH) {
|
||||
Print (
|
||||
L" Auth:%s/%s\n",
|
||||
MapIntegerToString (Data->AlgoInfo.AhAlgoInfo.AuthAlgoId, mMapAuthAlgo),
|
||||
Data->AlgoInfo.AhAlgoInfo.AuthKey
|
||||
);
|
||||
} else {
|
||||
String1 = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.AuthAlgoId, mMapAuthAlgo);
|
||||
String2 = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.EncAlgoId, mMapEncAlgo);
|
||||
Print (
|
||||
L" Auth:%s/%s Encrypt:%s/%s\n",
|
||||
String1,
|
||||
Data->AlgoInfo.EspAlgoInfo.AuthKey,
|
||||
String2,
|
||||
Data->AlgoInfo.EspAlgoInfo.EncKey
|
||||
);
|
||||
}
|
||||
|
||||
if (Data->SpdSelector != NULL) {
|
||||
Print (L" ");
|
||||
DumpSpdSelector (Data->SpdSelector);
|
||||
Print (L"\n");
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Print EFI_IPSEC_PAD_ID and EFI_IPSEC_PAD_DATA content.
|
||||
|
||||
@param[in] PadId The pointer to the EFI_IPSEC_PAD_ID structure.
|
||||
@param[in] Data The pointer to the EFI_IPSEC_PAD_DATA structure.
|
||||
@param[in] EntryIndex The pointer to the Index in the PAD Database.
|
||||
|
||||
@retval EFI_SUCCESS Dump PAD information successfully.
|
||||
**/
|
||||
EFI_STATUS
|
||||
DumpPadEntry (
|
||||
IN EFI_IPSEC_PAD_ID *PadId,
|
||||
IN EFI_IPSEC_PAD_DATA *Data,
|
||||
IN UINTN *EntryIndex
|
||||
)
|
||||
{
|
||||
CHAR16 *String1;
|
||||
CHAR16 *String2;
|
||||
|
||||
//
|
||||
// ADDR:10.23.17.34/15
|
||||
// IDEv1 PreSharedSecret IKE-ID
|
||||
// password
|
||||
//
|
||||
|
||||
Print (L"%d.", (*EntryIndex)++);
|
||||
|
||||
if (PadId->PeerIdValid) {
|
||||
Print (L"ID:%s", PadId->Id.PeerId);
|
||||
} else {
|
||||
Print (L"ADDR:");
|
||||
DumpAddressInfo (&PadId->Id.IpAddress);
|
||||
}
|
||||
|
||||
Print (L"\n");
|
||||
|
||||
String1 = MapIntegerToString (Data->AuthProtocol, mMapAuthProto);
|
||||
String2 = MapIntegerToString (Data->AuthMethod, mMapAuthMethod);
|
||||
Print (
|
||||
L" %s %s",
|
||||
String1,
|
||||
String2
|
||||
);
|
||||
|
||||
if (Data->IkeIdFlag) {
|
||||
Print (L"IKE-ID");
|
||||
}
|
||||
|
||||
Print (L"\n");
|
||||
|
||||
if (Data->AuthData != NULL) {
|
||||
DumpAsciiString (Data->AuthData, Data->AuthDataSize);
|
||||
Print (L"\n");
|
||||
}
|
||||
|
||||
if (Data->RevocationData != NULL) {
|
||||
Print (L" %s\n", Data->RevocationData);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
VISIT_POLICY_ENTRY mDumpPolicyEntry[] = {
|
||||
(VISIT_POLICY_ENTRY) DumpSpdEntry,
|
||||
(VISIT_POLICY_ENTRY) DumpSadEntry,
|
||||
(VISIT_POLICY_ENTRY) DumpPadEntry
|
||||
};
|
||||
|
||||
/**
|
||||
Print all entry information in the database according to datatype.
|
||||
|
||||
@param[in] DataType The value of EFI_IPSEC_CONFIG_DATA_TYPE.
|
||||
@param[in] ParamPackage The pointer to the ParamPackage list.
|
||||
|
||||
@retval EFI_SUCCESS Dump all information successfully.
|
||||
@retval Others Some mistaken case.
|
||||
**/
|
||||
EFI_STATUS
|
||||
ListPolicyEntry (
|
||||
IN EFI_IPSEC_CONFIG_DATA_TYPE DataType,
|
||||
IN LIST_ENTRY *ParamPackage
|
||||
)
|
||||
{
|
||||
UINTN EntryIndex;
|
||||
|
||||
EntryIndex = 0;
|
||||
return ForeachPolicyEntry (DataType, mDumpPolicyEntry[DataType], &EntryIndex);
|
||||
}
|
||||
|
Reference in New Issue
Block a user