4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The implementation of dump policy entry function in IpSecConfig application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
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 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 Private function called to get the version infomation from an EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return the value of version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if((AddressInfo->PrefixLength <= 32) && (AddressInfo->Address.Addr[1] == 0) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (AddressInfo->Address.Addr[2] == 0) && (AddressInfo->Address.Addr[3] == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to get the version information from a EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Address The pointer to the EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The value of the version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Address->Addr[1] == 0) && (Address->Addr[2] == 0) && (Address->Addr[3] == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print an ASCII string in unicode char format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Str The pointer to the ASCII string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Length The value of the ASCII string length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print a buffer in Hex format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Data The pointer to the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Length The size of the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private function called to print EFI_IP_ADDRESS_INFO content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AddressInfo The pointer to the EFI_IP_ADDRESS_INFO structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_4 == GetVerFromAddrInfo (AddressInfo)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%d.%d.%d.%d",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_6 == GetVerFromAddrInfo (AddressInfo)) {
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 Private function called to print EFI_IP_ADDRESS content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpAddress The pointer to the EFI_IP_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_4 == GetVerFromIpAddr (IpAddress)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%d.%d.%d.%d",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IP_VERSION_6 == GetVerFromIpAddr (IpAddress)) {
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 Private function called to print EFI_IPSEC_SPD_SELECTOR content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Selector The pointer to the EFI_IPSEC_SPD_SELECTOR structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Selector->LocalAddressCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < Selector->RemoteAddressCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = MapIntegerToString (Selector->NextLayerProtocol, mMapIpProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" proto:%d", (UINTN) Selector->NextLayerProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Selector->NextLayerProtocol == EFI_IP4_PROTO_TCP) || (Selector->NextLayerProtocol == EFI_IP4_PROTO_UDP)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"~%d", (UINTN) Selector->LocalPort + Selector->LocalPortRange);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"~%d", (UINTN) Selector->RemotePort + Selector->RemotePortRange);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (Selector->NextLayerProtocol == EFI_IP4_PROTO_ICMP) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", (UINTN) (UINT8) Selector->LocalPort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%d", (UINTN) (UINT8) Selector->RemotePort);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_SPD_SELECTOR and EFI_IPSEC_SPD_DATA content.
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 @retval EFI_SUCCESS Dump SPD information successfully.
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 Print (L"%s ", MapIntegerToString (Data->Action, mMapIpSecAction));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.ByteCount != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxB", Data->ProcessingPolicy->SaLifetime.ByteCount);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.SoftLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxs", Data->ProcessingPolicy->SaLifetime.SoftLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->SaLifetime.HardLifetime != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%lxS", Data->ProcessingPolicy->SaLifetime.HardLifetime);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data->ProcessingPolicy->SeqOverflow || Data->ProcessingPolicy->FragCheck) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1 = MapIntegerToString (Data->ProcessingPolicy->Proto, mMapIpSecProtocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2 = MapIntegerToString (Data->ProcessingPolicy->AuthAlgoId, mMapAuthAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String3 = MapIntegerToString (Data->ProcessingPolicy->EncAlgoId, mMapEncAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"%s Auth:%s Encrypt:%s ",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"%s ", MapIntegerToString (Data->ProcessingPolicy->Mode, mMapIpSecMode));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Data->ProcessingPolicy->Mode == EfiIPsecTunnel) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->LocalTunnelAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpIpAddress (&Data->ProcessingPolicy->TunnelOption->RemoteTunnelAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" %s]", MapIntegerToString (Data->ProcessingPolicy->TunnelOption->DF, mMapDfOption));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA2 content.
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 @retval EFI_SUCCESS Dump SAD information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SPI:1234 ESP Destination:xxx.xxx.xxx.xxx
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Mode:Transport SeqNum:134 AntiReplayWin:64 life:[0B,1023s,3400S] PathMTU:34
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // xxx.xxx.xxx.xxx/yy -> xxx.xxx.xxx.xx/yy proto:23 port:100~300 -> 300~400
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"0x%x %s ", (UINTN) SaId->Spi, MapIntegerToString (SaId->Proto, mMapIpSecProtocol));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L" Mode:%s SeqNum:%lx AntiReplayWin:%d ",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L" Auth:%s/%s\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MapIntegerToString (Data->AlgoInfo.AhAlgoInfo.AuthAlgoId, mMapAuthAlgo),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AuthAlgoStr = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.AuthAlgoId, mMapAuthAlgo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EncAlgoStr = MapIntegerToString (Data->AlgoInfo.EspAlgoInfo.EncAlgoId, mMapEncAlgo);
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 // 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 DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.AuthKey), Data->AlgoInfo.EspAlgoInfo.AuthKeyLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpBuf ((UINT8 *)(Data->AlgoInfo.EspAlgoInfo.EncKey), Data->AlgoInfo.EspAlgoInfo.EncKeyLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print EFI_IPSEC_PAD_ID and EFI_IPSEC_PAD_DATA content.
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 @retval EFI_SUCCESS Dump PAD information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ADDR:10.23.17.34/15
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // IDEv1 PreSharedSecret IKE-ID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // password
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String1 = MapIntegerToString (Data->AuthProtocol, mMapAuthProto);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync String2 = MapIntegerToString (Data->AuthMethod, mMapAuthMethod);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpAsciiString (Data->AuthData, Data->AuthDataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print all entry information in the database according to datatype.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataType The value of EFI_IPSEC_CONFIG_DATA_TYPE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ParamPackage The pointer to the ParamPackage list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Dump all information successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Some mistaken case.