4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The implementation of dump policy entry function in IpSecConfig application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IpSecConfig.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Dump.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "ForEach.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Helper.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to get the version infomation from an EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return the value of version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetVerFromAddrInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IP_ADDRESS_INFO *AddressInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if((AddressInfo->PrefixLength <= 32) && (AddressInfo->Address.Addr[1] == 0) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (AddressInfo->Address.Addr[2] == 0) && (AddressInfo->Address.Addr[3] == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return IP_VERSION_4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return IP_VERSION_6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to get the version information from a EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Address The pointer to the EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The value of the version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetVerFromIpAddr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IP_ADDRESS *Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Address->Addr[1] == 0) && (Address->Addr[2] == 0) && (Address->Addr[3] == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return IP_VERSION_4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return IP_VERSION_6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print an ASCII string in unicode char format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Str The pointer to the ASCII string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Length The value of the ASCII string length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpAsciiString (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\"");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Length; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%c", (CHAR16) Str[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\"");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print a buffer in Hex format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The pointer to the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Length The size of the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpBuf (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Length; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%02x ", Data[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print EFI_IP_ADDRESS_INFO content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpAddressInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IP_ADDRESS_INFO *AddressInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_4 == GetVerFromAddrInfo (AddressInfo)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%d.%d.%d.%d",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) AddressInfo->Address.v4.Addr[0],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) AddressInfo->Address.v4.Addr[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) AddressInfo->Address.v4.Addr[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) AddressInfo->Address.v4.Addr[3]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (AddressInfo->PrefixLength != 32) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"/%d", (UINTN) AddressInfo->PrefixLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_6 == GetVerFromAddrInfo (AddressInfo)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%x:%x:%x:%x:%x:%x:%x:%x",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[0]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[1]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[2]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[3]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[4]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[5]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[6]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[7]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[8]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[9]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[10]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[11]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[12]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[13]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) AddressInfo->Address.v6.Addr[14]) << 8) | ((UINT16) AddressInfo->Address.v6.Addr[15])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (AddressInfo->PrefixLength != 128) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"/%d", AddressInfo->PrefixLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print EFI_IP_ADDRESS content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpAddress The pointer to the EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpIpAddress (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IP_ADDRESS *IpAddress
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_4 == GetVerFromIpAddr (IpAddress)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%d.%d.%d.%d",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) IpAddress->v4.Addr[0],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) IpAddress->v4.Addr[1],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) IpAddress->v4.Addr[2],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) IpAddress->v4.Addr[3]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_6 == GetVerFromIpAddr (IpAddress)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%x:%x:%x:%x:%x:%x:%x:%x",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[0]) << 8) | ((UINT16) IpAddress->v6.Addr[1]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[2]) << 8) | ((UINT16) IpAddress->v6.Addr[3]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[4]) << 8) | ((UINT16) IpAddress->v6.Addr[5]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[6]) << 8) | ((UINT16) IpAddress->v6.Addr[7]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[8]) << 8) | ((UINT16) IpAddress->v6.Addr[9]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[10]) << 8) | ((UINT16) IpAddress->v6.Addr[11]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[12]) << 8) | ((UINT16) IpAddress->v6.Addr[13]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((UINT16) IpAddress->v6.Addr[14]) << 8) | ((UINT16) IpAddress->v6.Addr[15])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print EFI_IPSEC_SPD_SELECTOR content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Selector The pointer to the EFI_IPSEC_SPD_SELECTOR structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpSpdSelector (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_SPD_SELECTOR *Selector
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Selector->LocalAddressCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Index > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L",");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAddressInfo (&Selector->LocalAddress[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Index == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"localhost");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" -> ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Selector->RemoteAddressCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Index > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L",");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAddressInfo (&Selector->RemoteAddress[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = MapIntegerToString (Selector->NextLayerProtocol, mMapIpProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Str != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" %s", Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" proto:%d", (UINTN) Selector->NextLayerProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Selector->NextLayerProtocol == EFI_IP4_PROTO_TCP) || (Selector->NextLayerProtocol == EFI_IP4_PROTO_UDP)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" port:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->LocalPort != EFI_IPSEC_ANY_PORT) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", Selector->LocalPort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->LocalPortRange != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"~%d", (UINTN) Selector->LocalPort + Selector->LocalPortRange);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"any");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" -> ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->RemotePort != EFI_IPSEC_ANY_PORT) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", Selector->RemotePort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->RemotePortRange != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"~%d", (UINTN) Selector->RemotePort + Selector->RemotePortRange);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"any");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (Selector->NextLayerProtocol == EFI_IP4_PROTO_ICMP) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" class/code:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->LocalPort != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", (UINTN) (UINT8) Selector->LocalPort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"any");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"/");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Selector->RemotePort != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", (UINTN) (UINT8) Selector->RemotePort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"any");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_SPD_SELECTOR and EFI_IPSEC_SPD_DATA content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Selector The pointer to the EFI_IPSEC_SPD_SELECTOR structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The pointer to the EFI_IPSEC_SPD_DATA structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] EntryIndex The pointer to the Index in SPD Database.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Dump SPD information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpSpdEntry (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_SPD_SELECTOR *Selector,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_SPD_DATA *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN *EntryIndex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN HasPre;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 DataName[128];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *String1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *String2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *String3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d.", (*EntryIndex)++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // xxx.xxx.xxx.xxx/yy -> xxx.xxx.xxx.xx/yy proto:23 port:100~300 -> 300~400
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Protect PF:0x34323423 Name:First Entry
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ext-sequence sequence-overflow fragcheck life:[B0,S1024,H3600]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ESP algo1 algo2 Tunnel [xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx set]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpSpdSelector (Selector);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%s ", MapIntegerToString (Data->Action, mMapIpSecAction));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"PF:%08x ", Data->PackageFlag);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (Data->Name[Index] != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataName[Index] = (CHAR16) Data->Name[Index];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Index < 128);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataName[Index] = L'\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Name:%s", DataName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->Action == EfiIPsecActionProtect) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->ExtSeqNum) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"ext-sequence ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SeqOverflow) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"sequence-overflow ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->FragCheck) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"fragment-check ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.ByteCount != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxB", Data->ProcessingPolicy->SaLifetime.ByteCount);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.SoftLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxs", Data->ProcessingPolicy->SaLifetime.SoftLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.HardLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxS", Data->ProcessingPolicy->SaLifetime.HardLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HasPre) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HasPre || Data->ProcessingPolicy->ExtSeqNum ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->ProcessingPolicy->SeqOverflow || Data->ProcessingPolicy->FragCheck) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1 = MapIntegerToString (Data->ProcessingPolicy->Proto, mMapIpSecProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2 = MapIntegerToString (Data->ProcessingPolicy->AuthAlgoId, mMapAuthAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String3 = MapIntegerToString (Data->ProcessingPolicy->EncAlgoId, mMapEncAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%s Auth:%s Encrypt:%s ",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%s ", MapIntegerToString (Data->ProcessingPolicy->Mode, mMapIpSecMode));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->Mode == EfiIPsecTunnel) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->LocalTunnelAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" -> ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->RemoteTunnelAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" %s]", MapIntegerToString (Data->ProcessingPolicy->TunnelOption->DF, mMapDfOption));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA2 content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SaId The pointer to the EFI_IPSEC_SA_ID structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The pointer to the EFI_IPSEC_SA_DATA2 structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] EntryIndex The pointer to the Index in the SAD Database.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Dump SAD information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpSadEntry (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_SA_ID *SaId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_SA_DATA2 *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN *EntryIndex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN HasPre;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *AuthAlgoStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *EncAlgoStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AuthAlgoStr = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EncAlgoStr = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SPI:1234 ESP Destination:xxx.xxx.xxx.xxx
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Mode:Transport SeqNum:134 AntiReplayWin:64 life:[0B,1023s,3400S] PathMTU:34
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Auth:xxxx/password Encrypt:yyyy/password
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // xxx.xxx.xxx.xxx/yy -> xxx.xxx.xxx.xx/yy proto:23 port:100~300 -> 300~400
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d.", (*EntryIndex)++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"0x%x %s ", (UINTN) SaId->Spi, MapIntegerToString (SaId->Proto, mMapIpSecProtocol));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->Mode == EfiIPsecTunnel) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"TunnelSourceAddress:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->TunnelSourceAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" TunnelDestination:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->TunnelDestinationAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L" Mode:%s SeqNum:%lx AntiReplayWin:%d ",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MapIntegerToString (Data->Mode, mMapIpSecMode),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->SNCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINTN) Data->AntiReplayWindows
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->SaLifetime.ByteCount != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxB", Data->SaLifetime.ByteCount);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->SaLifetime.SoftLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxs", Data->SaLifetime.SoftLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->SaLifetime.HardLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (HasPre ? L"," : L"life:[");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxS", Data->SaLifetime.HardLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HasPre = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HasPre) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"] ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"PathMTU:%d\n", (UINTN) Data->PathMTU);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (SaId->Proto == EfiIPsecAH) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L" Auth:%s/%s\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MapIntegerToString (Data->AlgoInfo.AhAlgoInfo.AuthAlgoId, mMapAuthAlgo),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->AlgoInfo.AhAlgoInfo.AuthKey
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AuthAlgoStr = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.AuthAlgoId, mMapAuthAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EncAlgoStr = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.EncAlgoId, mMapEncAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ManualSet) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // if the SAD is set manually the key is a Ascii string in most of time.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print the Key in Ascii string format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" Auth:%s/",AuthAlgoStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAsciiString (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->AlgoInfo.EspAlgoInfo.AuthKey,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->AlgoInfo.EspAlgoInfo.AuthKeyLength
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n Encrypt:%s/",EncAlgoStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAsciiString (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->AlgoInfo.EspAlgoInfo.EncKey,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->AlgoInfo.EspAlgoInfo.EncKeyLength
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // if the SAD is created by IKE, the key is a set of hex value in buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print the Key in Hex format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" Auth:%s/",AuthAlgoStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.AuthKey), Data->AlgoInfo.EspAlgoInfo.AuthKeyLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n Encrypt:%s/",EncAlgoStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.EncKey), Data->AlgoInfo.EspAlgoInfo.EncKeyLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->SpdSelector != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpSpdSelector (Data->SpdSelector);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_PAD_ID and EFI_IPSEC_PAD_DATA content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PadId The pointer to the EFI_IPSEC_PAD_ID structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The pointer to the EFI_IPSEC_PAD_DATA structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] EntryIndex The pointer to the Index in the PAD Database.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Dump PAD information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpPadEntry (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_PAD_ID *PadId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_PAD_DATA *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN *EntryIndex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *String1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *String2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ADDR:10.23.17.34/15
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // IDEv1 PreSharedSecret IKE-ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // password
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d.", (*EntryIndex)++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (PadId->PeerIdValid) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"ID:%s", PadId->Id.PeerId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"ADDR:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAddressInfo (&PadId->Id.IpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1 = MapIntegerToString (Data->AuthProtocol, mMapAuthProto);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2 = MapIntegerToString (Data->AuthMethod, mMapAuthMethod);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L" %s %s",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->IkeIdFlag) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"IKE-ID");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->AuthData != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAsciiString (Data->AuthData, Data->AuthDataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->RevocationData != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" %s\n", Data->RevocationData);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVISIT_POLICY_ENTRY mDumpPolicyEntry[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VISIT_POLICY_ENTRY) DumpSpdEntry,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VISIT_POLICY_ENTRY) DumpSadEntry,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VISIT_POLICY_ENTRY) DumpPadEntry
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print all entry information in the database according to datatype.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataType The value of EFI_IPSEC_CONFIG_DATA_TYPE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ParamPackage The pointer to the ParamPackage list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Dump all information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Some mistaken case.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncListPolicyEntry (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPSEC_CONFIG_DATA_TYPE DataType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN LIST_ENTRY *ParamPackage
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN EntryIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EntryIndex = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ForeachPolicyEntry (DataType, mDumpPolicyEntry[DataType], &EntryIndex);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync