]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Application/IpsecConfig/PolicyEntryOperation.c
Update Ipsecconfig application.
[mirror_edk2.git] / NetworkPkg / Application / IpsecConfig / PolicyEntryOperation.c
index f128bee1ec58100c5e571448bcd6bdebcf4e8281..cc9f0b3121e57be4b030849cef6da014c99e2e80 100644 (file)
@@ -579,22 +579,22 @@ CreateSpdEntry (
 }\r
 \r
 /**\r
-  Fill in EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA through ParamPackage list.\r
+  Fill in EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA2 through ParamPackage list.\r
 \r
   @param[out] SaId            The pointer to the EFI_IPSEC_SA_ID structure.\r
-  @param[out] Data            The pointer to the EFI_IPSEC_SA_DATA structure.\r
+  @param[out] Data            The pointer to the EFI_IPSEC_SA_DATA2 structure.\r
   @param[in]  ParamPackage    The pointer to the ParamPackage list.\r
   @param[out] Mask            The pointer to the Mask.\r
   @param[in]  CreateNew       The switch to create new.\r
 \r
-  @retval EFI_SUCCESS              Fill in EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA successfully.\r
+  @retval EFI_SUCCESS              Fill in EFI_IPSEC_SA_ID and EFI_IPSEC_SA_DATA2 successfully.\r
   @retval EFI_INVALID_PARAMETER    Invalid user input parameter.\r
 \r
 **/\r
 EFI_STATUS\r
 CreateSadEntry (\r
   OUT EFI_IPSEC_SA_ID      **SaId,\r
-  OUT EFI_IPSEC_SA_DATA    **Data,\r
+  OUT EFI_IPSEC_SA_DATA2   **Data,\r
   IN  LIST_ENTRY           *ParamPackage,\r
   OUT UINT32               *Mask,\r
   IN  BOOLEAN              CreateNew\r
@@ -605,6 +605,7 @@ CreateSadEntry (
   UINTN           AuthKeyLength;\r
   UINTN           EncKeyLength;\r
   CONST CHAR16    *ValueStr;\r
+  CHAR8           *AsciiStr;\r
   UINTN           DataSize;\r
 \r
   Status        = EFI_SUCCESS;\r
@@ -649,45 +650,22 @@ CreateSadEntry (
   }\r
 \r
   //\r
-  // Convert user imput from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
-  //\r
-  ValueStr = ShellCommandLineGetValue (ParamPackage, L"--dest");\r
-  if (ValueStr != NULL) {\r
-    Status = EfiInetAddr2 ((CHAR16 *) ValueStr, &(*SaId)->DestAddress);\r
-    if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx (\r
-        -1,\r
-        -1,\r
-        NULL,\r
-        STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),\r
-        mHiiHandle,\r
-        mAppName,\r
-        L"--dest",\r
-        ValueStr\r
-        );\r
-      ReturnStatus = EFI_INVALID_PARAMETER;\r
-    } else {\r
-      *Mask |= DEST;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Convert user imput from string to integer, and fill in EFI_IPSEC_SA_DATA.\r
+  // Convert user imput from string to integer, and fill in EFI_IPSEC_SA_DATA2.\r
   //\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--auth-key");\r
   if (ValueStr != NULL) {\r
-    AuthKeyLength = (StrLen (ValueStr) + 1) * sizeof (CHAR16);\r
+    AuthKeyLength = StrLen (ValueStr);\r
   }\r
 \r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--encrypt-key");\r
   if (ValueStr != NULL) {\r
-    EncKeyLength = (StrLen (ValueStr) + 1) * sizeof (CHAR16);\r
+    EncKeyLength = StrLen (ValueStr);\r
   }\r
 \r
   //\r
-  // EFI_IPSEC_SA_DATA:\r
+  // EFI_IPSEC_SA_DATA2:\r
   //   +------------\r
-  //   | EFI_IPSEC_SA_DATA\r
+  //   | EFI_IPSEC_SA_DATA2\r
   //   +-----------------------\r
   //   | AuthKey\r
   //   +-------------------------\r
@@ -697,7 +675,7 @@ CreateSadEntry (
   //\r
   // Notes: To make sure the address alignment add padding after each data if needed.\r
   //\r
-  DataSize  = ALIGN_VARIABLE (sizeof (EFI_IPSEC_SA_DATA));\r
+  DataSize  = ALIGN_VARIABLE (sizeof (EFI_IPSEC_SA_DATA2));\r
   DataSize  = ALIGN_VARIABLE (DataSize + AuthKeyLength);\r
   DataSize  = ALIGN_VARIABLE (DataSize + EncKeyLength);\r
   DataSize  = ALIGN_VARIABLE (DataSize + sizeof (EFI_IPSEC_SPD_SELECTOR));\r
@@ -805,7 +783,10 @@ CreateSadEntry (
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--encrypt-key");\r
   if (ValueStr != NULL ) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.EncKeyLength = EncKeyLength;\r
-    CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.EncKey, ValueStr, EncKeyLength);\r
+    AsciiStr = AllocateZeroPool (EncKeyLength + 1);\r
+    UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
+    CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.EncKey,  AsciiStr, EncKeyLength);\r
+    FreePool (AsciiStr);\r
     *Mask |= ENCRYPT_KEY;\r
   } else {\r
     (*Data)->AlgoInfo.EspAlgoInfo.EncKey = NULL;\r
@@ -831,7 +812,10 @@ CreateSadEntry (
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--auth-key");\r
   if (ValueStr != NULL) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.AuthKeyLength = AuthKeyLength;\r
-    CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, ValueStr, AuthKeyLength);\r
+    AsciiStr = AllocateZeroPool (AuthKeyLength + 1);\r
+    UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
+    CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, AsciiStr, AuthKeyLength);\r
+    FreePool (AsciiStr);\r
     *Mask |= AUTH_KEY;\r
   } else {\r
     (*Data)->AlgoInfo.EspAlgoInfo.AuthKey = NULL;\r
@@ -905,10 +889,55 @@ CreateSadEntry (
     ReturnStatus = EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  //\r
+  // Convert user imput from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
+  //\r
+  ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-dest");\r
+  if (ValueStr != NULL) {\r
+    Status = EfiInetAddr2 ((CHAR16 *) ValueStr, &(*Data)->TunnelDestinationAddress);\r
+    if (EFI_ERROR (Status)) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),\r
+        mHiiHandle,\r
+        mAppName,\r
+        L"--tunnel-dest",\r
+        ValueStr\r
+        );\r
+      ReturnStatus = EFI_INVALID_PARAMETER;\r
+    } else {\r
+      *Mask |= DEST;\r
+    }\r
+  }\r
+\r
+  //\r
+  // Convert user imput from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
+  //\r
+  ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-source");\r
+  if (ValueStr != NULL) {\r
+    Status = EfiInetAddr2 ((CHAR16 *) ValueStr, &(*Data)->TunnelSourceAddress);\r
+    if (EFI_ERROR (Status)) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),\r
+        mHiiHandle,\r
+        mAppName,\r
+        L"--tunnel-source",\r
+        ValueStr\r
+        );\r
+      ReturnStatus = EFI_INVALID_PARAMETER;\r
+    } else {\r
+      *Mask |= SOURCE;\r
+    }\r
+  }\r
   ReturnStatus = CreateSpdSelector ((*Data)->SpdSelector, ParamPackage, Mask);\r
 \r
   if (CreateNew) {\r
-    if ((*Mask & (SPI | IPSEC_PROTO | DEST)) != (SPI | IPSEC_PROTO | DEST)) {\r
+    if ((*Mask & (SPI | IPSEC_PROTO )) != (SPI | IPSEC_PROTO )) {\r
       ShellPrintHiiEx (\r
         -1,\r
         -1,\r
@@ -1178,7 +1207,7 @@ CreatePadEntry (
         (*Data)->AuthData = NULL;\r
       } else {\r
         DataLength = AuthDataLength;\r
-        Status = ShellReadFile (FileHandle, &DataLength, (*Data)->AuthData);\r
+        Status     = ShellReadFile (FileHandle, &DataLength, (*Data)->AuthData);\r
         ShellCloseFile (&FileHandle);\r
         if (EFI_ERROR (Status)) {\r
           ShellPrintHiiEx (\r
@@ -1475,9 +1504,9 @@ CombineSpdEntry (
   Combine old SAD entry with new SAD entry.\r
 \r
   @param[in, out] OldSaId      The pointer to the EFI_IPSEC_SA_ID structure.\r
-  @param[in, out] OldData      The pointer to the EFI_IPSEC_SA_DATA structure.\r
+  @param[in, out] OldData      The pointer to the EFI_IPSEC_SA_DATA2 structure.\r
   @param[in]      NewSaId      The pointer to the EFI_IPSEC_SA_ID structure.\r
-  @param[in]      NewData      The pointer to the EFI_IPSEC_SA_DATA structure.\r
+  @param[in]      NewData      The pointer to the EFI_IPSEC_SA_DATA2 structure.\r
   @param[in]      Mask         The pointer to the Mask.\r
   @param[out]     CreateNew    The switch to create new.\r
 \r
@@ -1488,9 +1517,9 @@ CombineSpdEntry (
 EFI_STATUS\r
 CombineSadEntry (\r
   IN OUT EFI_IPSEC_SA_ID      *OldSaId,\r
-  IN OUT EFI_IPSEC_SA_DATA    *OldData,\r
+  IN OUT EFI_IPSEC_SA_DATA2    *OldData,\r
   IN     EFI_IPSEC_SA_ID      *NewSaId,\r
-  IN     EFI_IPSEC_SA_DATA    *NewData,\r
+  IN     EFI_IPSEC_SA_DATA2    *NewData,\r
   IN     UINT32               Mask,\r
      OUT BOOLEAN              *CreateNew\r
   )\r
@@ -1511,11 +1540,16 @@ CombineSadEntry (
   }\r
 \r
   if ((Mask & DEST) == 0) {\r
-    CopyMem (&NewSaId->DestAddress, &OldSaId->DestAddress, sizeof (EFI_IP_ADDRESS));\r
-  } else if (CompareMem (&NewSaId->DestAddress, &OldSaId->DestAddress, sizeof (EFI_IP_ADDRESS)) != 0) {\r
+    CopyMem (&NewData->TunnelDestinationAddress, &OldData->TunnelDestinationAddress, sizeof (EFI_IP_ADDRESS));\r
+  } else if (CompareMem (&NewData->TunnelDestinationAddress, &OldData->TunnelDestinationAddress, sizeof (EFI_IP_ADDRESS)) != 0) {\r
     *CreateNew = TRUE;\r
   }\r
 \r
+  if ((Mask & SOURCE) == 0) {\r
+    CopyMem (&NewData->TunnelSourceAddress, &OldData->TunnelSourceAddress, sizeof (EFI_IP_ADDRESS));\r
+  } else if (CompareMem (&NewData->TunnelSourceAddress, &OldData->TunnelSourceAddress, sizeof (EFI_IP_ADDRESS)) != 0) {\r
+    *CreateNew = TRUE;\r
+  }\r
   //\r
   // Process SA_DATA.\r
   //\r