mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	Signed-off-by: qianouyang Reviewed-by: czhan46 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12829 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			580 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			580 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  The implementation of dump policy entry function in IpSecConfig application.
 | 
						|
 | 
						|
  Copyright (c) 2009 - 2011, 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;
 | 
						|
  Print (L"\"");
 | 
						|
  for (Index = 0; Index < Length; Index++) {
 | 
						|
    Print (L"%c", (CHAR16) Str[Index]);
 | 
						|
  }
 | 
						|
  Print (L"\"");
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Private function called to print a buffer in Hex format.
 | 
						|
 | 
						|
  @param[in] Data      The pointer to the buffer.
 | 
						|
  @param[in] Length    The size of the buffer.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
DumpBuf (
 | 
						|
  IN UINT8    *Data,
 | 
						|
  IN UINTN    Length
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINTN    Index;
 | 
						|
  for (Index = 0; Index < Length; Index++) {
 | 
						|
    Print (L"%02x ", Data[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_DATA2 content.
 | 
						|
 | 
						|
  @param[in] SaId          The pointer to the EFI_IPSEC_SA_ID structure.
 | 
						|
  @param[in] Data          The pointer to the EFI_IPSEC_SA_DATA2 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_DATA2   *Data,
 | 
						|
  IN UINTN                *EntryIndex
 | 
						|
  )
 | 
						|
{
 | 
						|
  BOOLEAN    HasPre;
 | 
						|
  CHAR16     *AuthAlgoStr;
 | 
						|
  CHAR16     *EncAlgoStr;
 | 
						|
 | 
						|
  AuthAlgoStr      = NULL;
 | 
						|
  EncAlgoStr       = NULL;
 | 
						|
 | 
						|
  //
 | 
						|
  // 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));
 | 
						|
  if (Data->Mode == EfiIPsecTunnel) {
 | 
						|
    Print (L"TunnelSourceAddress:");
 | 
						|
    DumpIpAddress (&Data->TunnelSourceAddress);
 | 
						|
    Print (L"\n");
 | 
						|
    Print (L"  TunnelDestination:");
 | 
						|
    DumpIpAddress (&Data->TunnelDestinationAddress);
 | 
						|
    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 {
 | 
						|
    AuthAlgoStr = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.AuthAlgoId, mMapAuthAlgo);
 | 
						|
    EncAlgoStr  = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.EncAlgoId, mMapEncAlgo);
 | 
						|
 | 
						|
    if (Data->ManualSet) {
 | 
						|
      //
 | 
						|
      // if the SAD is set manually the key is a Ascii string in most of time.
 | 
						|
      // Print the Key in Ascii string format.
 | 
						|
      //
 | 
						|
      Print (L"  Auth:%s/",AuthAlgoStr);
 | 
						|
      DumpAsciiString (
 | 
						|
        Data->AlgoInfo.EspAlgoInfo.AuthKey,
 | 
						|
        Data->AlgoInfo.EspAlgoInfo.AuthKeyLength
 | 
						|
        );
 | 
						|
      Print (L"\n  Encrypt:%s/",EncAlgoStr);
 | 
						|
      DumpAsciiString (
 | 
						|
        Data->AlgoInfo.EspAlgoInfo.EncKey,
 | 
						|
        Data->AlgoInfo.EspAlgoInfo.EncKeyLength
 | 
						|
        );
 | 
						|
    } else {
 | 
						|
      //
 | 
						|
      // if the SAD is created by IKE, the key is a set of hex value in buffer.
 | 
						|
      // Print the Key in Hex format.
 | 
						|
      //
 | 
						|
      Print (L"  Auth:%s/",AuthAlgoStr);
 | 
						|
      DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.AuthKey), Data->AlgoInfo.EspAlgoInfo.AuthKeyLength);
 | 
						|
 | 
						|
      Print (L"\n  Encrypt:%s/",EncAlgoStr);
 | 
						|
      DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.EncKey), Data->AlgoInfo.EspAlgoInfo.EncKeyLength);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  Print (L"\n");
 | 
						|
  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);
 | 
						|
}
 | 
						|
 |