]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IpSecDxe/IpSecConfigImpl.c
NetworkPkg: Fix connection issue after correct SPD and re-enable IPsec
[mirror_edk2.git] / NetworkPkg / IpSecDxe / IpSecConfigImpl.c
index 6eabfe45dee804f98511a7bb4985c5d9025945dc..8c7724c7da80f9f9633fc4349d74ffbcca7a2b35 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of IPSEC_CONFIG_PROTOCOL.\r
 \r
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1167,9 +1167,10 @@ SetSpdEntry (
     SpdData->Name,\r
     sizeof (SpdData->Name)\r
     );\r
-  SpdEntry->Data->PackageFlag = SpdData->PackageFlag;\r
-  SpdEntry->Data->Action      = SpdData->Action;\r
-\r
+  SpdEntry->Data->PackageFlag      = SpdData->PackageFlag;\r
+  SpdEntry->Data->TrafficDirection = SpdData->TrafficDirection;\r
+  SpdEntry->Data->Action           = SpdData->Action;\r
+  \r
   //\r
   // Fix the address of ProcessingPolicy and copy it if need, which is continous\r
   // memory and close to the base structure of SAD data.\r
@@ -1199,13 +1200,11 @@ SetSpdEntry (
             (EFI_IPSEC_CONFIG_SELECTOR *) &SpdData->SaId[Index],\r
             (EFI_IPSEC_CONFIG_SELECTOR *) SadEntry->Id\r
             )) {\r
+        if (SadEntry->Data->SpdEntry != NULL) {  \r
+          RemoveEntryList (&SadEntry->BySpd);\r
+        }\r
         InsertTailList (&SpdEntry->Data->Sas, &SadEntry->BySpd);\r
-        SadEntry->Data->SpdEntry = SpdEntry;\r
-        DuplicateSpdSelector (\r
-          (EFI_IPSEC_CONFIG_SELECTOR *)SadEntry->Data->SpdSelector,\r
-          (EFI_IPSEC_CONFIG_SELECTOR *)SpdEntry->Selector,\r
-          NULL\r
-          );             \r
+        SadEntry->Data->SpdEntry = SpdEntry;             \r
       }\r
     }\r
   }\r
@@ -1687,9 +1686,10 @@ GetSpdEntry (
       //\r
       CopyMem (SpdData->Name, SpdEntry->Data->Name, sizeof (SpdData->Name));\r
 \r
-      SpdData->PackageFlag  = SpdEntry->Data->PackageFlag;\r
-      SpdData->Action       = SpdEntry->Data->Action;\r
-\r
+      SpdData->PackageFlag      = SpdEntry->Data->PackageFlag;\r
+      SpdData->TrafficDirection = SpdEntry->Data->TrafficDirection;\r
+      SpdData->Action           = SpdEntry->Data->Action;\r
+      \r
       if (SpdData->Action != EfiIPsecActionProtect) {\r
         SpdData->ProcessingPolicy = NULL;\r
       } else {\r