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:
163
NetworkPkg/Application/IpsecConfig/Match.c
Normal file
163
NetworkPkg/Application/IpsecConfig/Match.c
Normal file
@@ -0,0 +1,163 @@
|
||||
/** @file
|
||||
The implementation of match 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 "Indexer.h"
|
||||
#include "Match.h"
|
||||
|
||||
/**
|
||||
Private function to validate a buffer that should be filled with zero.
|
||||
|
||||
@param[in] Memory The pointer to the buffer.
|
||||
@param[in] Size The size of the buffer.
|
||||
|
||||
@retval TRUE The memory is filled with zero.
|
||||
@retval FALSE The memory isn't filled with zero.
|
||||
**/
|
||||
BOOLEAN
|
||||
IsMemoryZero (
|
||||
IN VOID *Memory,
|
||||
IN UINTN Size
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
for (Index = 0; Index < Size; Index++) {
|
||||
if (*((UINT8 *) Memory + Index) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
Find the matching SPD with Indexer.
|
||||
|
||||
@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] Indexer The pointer to the SPD_ENTRY_INDEXER structure.
|
||||
|
||||
@retval TRUE The matched SPD is found.
|
||||
@retval FALSE The matched SPD is not found.
|
||||
**/
|
||||
BOOLEAN
|
||||
MatchSpdEntry (
|
||||
IN EFI_IPSEC_SPD_SELECTOR *Selector,
|
||||
IN EFI_IPSEC_SPD_DATA *Data,
|
||||
IN SPD_ENTRY_INDEXER *Indexer
|
||||
)
|
||||
{
|
||||
BOOLEAN Match;
|
||||
|
||||
Match = FALSE;
|
||||
if (Indexer->Name != NULL) {
|
||||
if ((Data->Name != NULL) && (AsciiStrCmp ((CHAR8 *) Indexer->Name, (CHAR8 *) Data->Name) == 0)) {
|
||||
Match = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (Indexer->Index == 0) {
|
||||
Match = TRUE;
|
||||
}
|
||||
|
||||
Indexer->Index--;
|
||||
}
|
||||
|
||||
return Match;
|
||||
}
|
||||
|
||||
/**
|
||||
Find the matching SAD with Indexer.
|
||||
|
||||
@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] Indexer The pointer to the SPD_ENTRY_INDEXER structure.
|
||||
|
||||
@retval TRUE The matched SAD is found.
|
||||
@retval FALSE The matched SAD is not found.
|
||||
**/
|
||||
BOOLEAN
|
||||
MatchSadEntry (
|
||||
IN EFI_IPSEC_SA_ID *SaId,
|
||||
IN EFI_IPSEC_SA_DATA *Data,
|
||||
IN SAD_ENTRY_INDEXER *Indexer
|
||||
)
|
||||
{
|
||||
BOOLEAN Match;
|
||||
|
||||
Match = FALSE;
|
||||
if (!IsMemoryZero (&Indexer->SaId, sizeof (EFI_IPSEC_SA_ID))) {
|
||||
Match = (BOOLEAN) (CompareMem (&Indexer->SaId, SaId, sizeof (EFI_IPSEC_SA_ID)) == 0);
|
||||
} else {
|
||||
if (Indexer->Index == 0) {
|
||||
Match = TRUE;
|
||||
}
|
||||
Indexer->Index--;
|
||||
}
|
||||
|
||||
return Match;
|
||||
}
|
||||
|
||||
/**
|
||||
Find the matching PAD with Indexer.
|
||||
|
||||
@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] Indexer The pointer to the SPD_ENTRY_INDEXER structure.
|
||||
|
||||
@retval TRUE The matched PAD is found.
|
||||
@retval FALSE The matched PAD is not found.
|
||||
**/
|
||||
BOOLEAN
|
||||
MatchPadEntry (
|
||||
IN EFI_IPSEC_PAD_ID *PadId,
|
||||
IN EFI_IPSEC_PAD_DATA *Data,
|
||||
IN PAD_ENTRY_INDEXER *Indexer
|
||||
)
|
||||
{
|
||||
BOOLEAN Match;
|
||||
|
||||
Match = FALSE;
|
||||
if (!IsMemoryZero (&Indexer->PadId, sizeof (EFI_IPSEC_PAD_ID))) {
|
||||
Match = (BOOLEAN) ((Indexer->PadId.PeerIdValid == PadId->PeerIdValid) &&
|
||||
((PadId->PeerIdValid &&
|
||||
(StrCmp (
|
||||
(CONST CHAR16 *) Indexer->PadId.Id.PeerId,
|
||||
(CONST CHAR16 *) PadId->Id.PeerId
|
||||
) == 0)) ||
|
||||
((!PadId->PeerIdValid) &&
|
||||
(Indexer->PadId.Id.IpAddress.PrefixLength == PadId->Id.IpAddress.PrefixLength) &&
|
||||
(CompareMem (
|
||||
&Indexer->PadId.Id.IpAddress.Address,
|
||||
&PadId->Id.IpAddress.Address,
|
||||
sizeof (EFI_IP_ADDRESS)
|
||||
) == 0))));
|
||||
} else {
|
||||
if (Indexer->Index == 0) {
|
||||
Match = TRUE;
|
||||
}
|
||||
|
||||
Indexer->Index--;
|
||||
}
|
||||
|
||||
return Match;
|
||||
}
|
||||
|
||||
MATCH_POLICY_ENTRY mMatchPolicyEntry[] = {
|
||||
(MATCH_POLICY_ENTRY) MatchSpdEntry,
|
||||
(MATCH_POLICY_ENTRY) MatchSadEntry,
|
||||
(MATCH_POLICY_ENTRY) MatchPadEntry
|
||||
};
|
||||
|
Reference in New Issue
Block a user