Home | History | Annotate | Download | only in IpsecConfig
      1 /** @file
      2   The implementation of construct ENTRY_INDEXER in IpSecConfig application.
      3 
      4   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php.
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #include "IpSecConfig.h"
     17 #include "Indexer.h"
     18 #include "Helper.h"
     19 
     20 /**
     21   Fill in SPD_ENTRY_INDEXER through ParamPackage list.
     22 
     23   @param[in, out] Indexer         The pointer to the SPD_ENTRY_INDEXER structure.
     24   @param[in]      ParamPackage    The pointer to the ParamPackage list.
     25 
     26   @retval EFI_SUCCESS    Filled in SPD_ENTRY_INDEXER successfully.
     27 **/
     28 EFI_STATUS
     29 ConstructSpdIndexer (
     30   IN OUT SPD_ENTRY_INDEXER    *Indexer,
     31   IN     LIST_ENTRY           *ParamPackage
     32   )
     33 {
     34   EFI_STATUS      Status;
     35   UINT64          Value64;
     36   CONST CHAR16    *ValueStr;
     37 
     38   ValueStr = NULL;
     39 
     40   if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
     41     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
     42   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
     43     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
     44   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
     45     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
     46   } else {
     47     return EFI_INVALID_PARAMETER;
     48   }
     49 
     50   if (ValueStr == NULL) {
     51     return EFI_INVALID_PARAMETER;
     52   }
     53 
     54   Value64 = StrToUInteger (ValueStr, &Status);
     55   if (!EFI_ERROR (Status)) {
     56     Indexer->Index = (UINTN) Value64;
     57     ZeroMem (Indexer->Name, MAX_PEERID_LEN);
     58   } else {
     59     UnicodeStrToAsciiStrS (ValueStr, (CHAR8 *) Indexer->Name, MAX_PEERID_LEN);
     60   }
     61 
     62   return EFI_SUCCESS;
     63 }
     64 
     65 /**
     66   Fill in SAD_ENTRY_INDEXER through ParamPackage list.
     67 
     68   @param[in, out] Indexer         The pointer to the SAD_ENTRY_INDEXER structure.
     69   @param[in]      ParamPackage    The pointer to the ParamPackage list.
     70 
     71   @retval EFI_SUCCESS              Filled in SPD_ENTRY_INDEXER successfully.
     72   @retval EFI_INVALID_PARAMETER    The mistaken user input in ParamPackage list.
     73 **/
     74 EFI_STATUS
     75 ConstructSadIndexer (
     76   IN OUT SAD_ENTRY_INDEXER    *Indexer,
     77   IN     LIST_ENTRY           *ParamPackage
     78   )
     79 {
     80   EFI_STATUS      Status;
     81   EFI_STATUS      Status1;
     82   UINT64          Value64;
     83   CONST CHAR16    *ValueStr;
     84 
     85   ValueStr = NULL;
     86 
     87   if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
     88     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
     89   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
     90     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
     91   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
     92     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
     93   } else {
     94     return EFI_INVALID_PARAMETER;
     95   }
     96 
     97   if (ValueStr == NULL) {
     98     return EFI_INVALID_PARAMETER;
     99   }
    100 
    101   Value64 = StrToUInteger (ValueStr, &Status);
    102   if (!EFI_ERROR (Status)) {
    103     Indexer->Index = (UINTN) Value64;
    104     ZeroMem (&Indexer->SaId, sizeof (EFI_IPSEC_SA_ID));
    105   } else {
    106     if ((!ShellCommandLineGetFlag (ParamPackage, L"--lookup-spi")) ||
    107         (!ShellCommandLineGetFlag (ParamPackage, L"--lookup-ipsec-proto")) ||
    108         (!ShellCommandLineGetFlag (ParamPackage, L"--lookup-dest"))) {
    109       ShellPrintHiiEx (
    110         -1,
    111         -1,
    112         NULL,
    113         STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),
    114         mHiiHandle,
    115         mAppName,
    116         L"--lookup-spi --lookup-ipsec-proto --lookup-dest"
    117         );
    118       return EFI_INVALID_PARAMETER;
    119     }
    120 
    121     Status = GetNumber (
    122               L"--lookup-spi",
    123               (UINT32) -1,
    124               &Indexer->SaId.Spi,
    125               sizeof (UINT32),
    126               NULL,
    127               ParamPackage,
    128               FORMAT_NUMBER
    129               );
    130     Status1 = GetNumber (
    131                 L"--lookup-ipsec-proto",
    132                 0,
    133                 &Indexer->SaId.Proto,
    134                 sizeof (EFI_IPSEC_PROTOCOL_TYPE),
    135                 mMapIpSecProtocol,
    136                 ParamPackage,
    137                 FORMAT_STRING
    138                 );
    139 
    140     if (EFI_ERROR (Status) || EFI_ERROR (Status1)) {
    141       return EFI_INVALID_PARAMETER;
    142     }
    143 
    144     ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-dest");
    145     ASSERT (ValueStr != NULL);
    146 
    147     Status = EfiInetAddr2 ((CHAR16 *) ValueStr, &Indexer->SaId.DestAddress);
    148     if (EFI_ERROR (Status)) {
    149       ShellPrintHiiEx (
    150         -1,
    151         -1,
    152         NULL,
    153         STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),
    154         mHiiHandle,
    155         mAppName,
    156         L"--lookup-dest",
    157         ValueStr
    158         );
    159       return EFI_INVALID_PARAMETER;
    160     }
    161   }
    162 
    163   return EFI_SUCCESS;
    164 }
    165 
    166 /**
    167   Fill in PAD_ENTRY_INDEXER through ParamPackage list.
    168 
    169   @param[in, out] Indexer         The pointer to the PAD_ENTRY_INDEXER structure.
    170   @param[in]      ParamPackage    The pointer to the ParamPackage list.
    171 
    172   @retval EFI_SUCCESS              Filled in PAD_ENTRY_INDEXER successfully.
    173   @retval EFI_INVALID_PARAMETER    The mistaken user input in ParamPackage list.
    174 **/
    175 EFI_STATUS
    176 ConstructPadIndexer (
    177   IN OUT PAD_ENTRY_INDEXER    *Indexer,
    178   IN     LIST_ENTRY           *ParamPackage
    179   )
    180 {
    181   EFI_STATUS      Status;
    182   UINT64          Value64;
    183   CONST CHAR16    *ValueStr;
    184 
    185   ValueStr = NULL;
    186 
    187   if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
    188     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
    189   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
    190     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
    191   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
    192     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
    193   } else {
    194     return EFI_INVALID_PARAMETER;
    195   }
    196 
    197   if (ValueStr == NULL) {
    198     return EFI_INVALID_PARAMETER;
    199   }
    200 
    201   Value64 = StrToUInteger (ValueStr, &Status);
    202 
    203   if (!EFI_ERROR (Status)) {
    204     Indexer->Index = (UINTN) Value64;
    205     ZeroMem (&Indexer->PadId, sizeof (EFI_IPSEC_PAD_ID));
    206   } else {
    207 
    208     if (ShellCommandLineGetFlag (ParamPackage, L"--lookup-peer-address")) {
    209       ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-peer-address");
    210       ASSERT (ValueStr != NULL);
    211 
    212       Indexer->PadId.PeerIdValid = FALSE;
    213       Status = EfiInetAddrRange ((CHAR16 *) ValueStr, &Indexer->PadId.Id.IpAddress);
    214       if (EFI_ERROR (Status)) {
    215         ShellPrintHiiEx (
    216           -1,
    217           -1,
    218           NULL,
    219           STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),
    220           mHiiHandle,
    221           mAppName,
    222           L"--lookup-peer-address",
    223           ValueStr
    224           );
    225         return EFI_INVALID_PARAMETER;
    226       }
    227     } else {
    228       ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-peer-id");
    229       if (ValueStr == NULL) {
    230         ShellPrintHiiEx (
    231           -1,
    232           -1,
    233           NULL,
    234           STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),
    235           mHiiHandle,
    236           mAppName,
    237           L"--lookup-peer-address --lookup-peer-id"
    238           );
    239         return EFI_INVALID_PARAMETER;
    240       }
    241 
    242       Indexer->PadId.PeerIdValid = TRUE;
    243       ZeroMem (Indexer->PadId.Id.PeerId, MAX_PEERID_LEN);
    244       StrnCpyS ((CHAR16 *) Indexer->PadId.Id.PeerId, MAX_PEERID_LEN / sizeof (CHAR16), ValueStr, MAX_PEERID_LEN / sizeof (CHAR16) - 1);
    245     }
    246   }
    247 
    248   return EFI_SUCCESS;
    249 }
    250 
    251 CONSTRUCT_POLICY_ENTRY_INDEXER mConstructPolicyEntryIndexer[] = {
    252   (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructSpdIndexer,
    253   (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructSadIndexer,
    254   (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructPadIndexer
    255 };
    256