Indexer.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /** @file
  2. The implementation of construct ENTRY_INDEXER in IpSecConfig application.
  3. Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "IpSecConfig.h"
  7. #include "Indexer.h"
  8. #include "Helper.h"
  9. /**
  10. Fill in SPD_ENTRY_INDEXER through ParamPackage list.
  11. @param[in, out] Indexer The pointer to the SPD_ENTRY_INDEXER structure.
  12. @param[in] ParamPackage The pointer to the ParamPackage list.
  13. @retval EFI_SUCCESS Filled in SPD_ENTRY_INDEXER successfully.
  14. **/
  15. EFI_STATUS
  16. ConstructSpdIndexer (
  17. IN OUT SPD_ENTRY_INDEXER *Indexer,
  18. IN LIST_ENTRY *ParamPackage
  19. )
  20. {
  21. EFI_STATUS Status;
  22. UINT64 Value64;
  23. CONST CHAR16 *ValueStr;
  24. ValueStr = NULL;
  25. if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
  26. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
  27. } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
  28. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
  29. } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
  30. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
  31. } else {
  32. return EFI_INVALID_PARAMETER;
  33. }
  34. if (ValueStr == NULL) {
  35. return EFI_INVALID_PARAMETER;
  36. }
  37. Value64 = StrToUInteger (ValueStr, &Status);
  38. if (!EFI_ERROR (Status)) {
  39. Indexer->Index = (UINTN) Value64;
  40. ZeroMem (Indexer->Name, MAX_PEERID_LEN);
  41. } else {
  42. UnicodeStrToAsciiStrS (ValueStr, (CHAR8 *) Indexer->Name, MAX_PEERID_LEN);
  43. }
  44. return EFI_SUCCESS;
  45. }
  46. /**
  47. Fill in SAD_ENTRY_INDEXER through ParamPackage list.
  48. @param[in, out] Indexer The pointer to the SAD_ENTRY_INDEXER structure.
  49. @param[in] ParamPackage The pointer to the ParamPackage list.
  50. @retval EFI_SUCCESS Filled in SPD_ENTRY_INDEXER successfully.
  51. @retval EFI_INVALID_PARAMETER The mistaken user input in ParamPackage list.
  52. **/
  53. EFI_STATUS
  54. ConstructSadIndexer (
  55. IN OUT SAD_ENTRY_INDEXER *Indexer,
  56. IN LIST_ENTRY *ParamPackage
  57. )
  58. {
  59. EFI_STATUS Status;
  60. EFI_STATUS Status1;
  61. UINT64 Value64;
  62. CONST CHAR16 *ValueStr;
  63. ValueStr = NULL;
  64. if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
  65. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
  66. } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
  67. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
  68. } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
  69. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
  70. } else {
  71. return EFI_INVALID_PARAMETER;
  72. }
  73. if (ValueStr == NULL) {
  74. return EFI_INVALID_PARAMETER;
  75. }
  76. Value64 = StrToUInteger (ValueStr, &Status);
  77. if (!EFI_ERROR (Status)) {
  78. Indexer->Index = (UINTN) Value64;
  79. ZeroMem (&Indexer->SaId, sizeof (EFI_IPSEC_SA_ID));
  80. } else {
  81. if ((!ShellCommandLineGetFlag (ParamPackage, L"--lookup-spi")) ||
  82. (!ShellCommandLineGetFlag (ParamPackage, L"--lookup-ipsec-proto")) ||
  83. (!ShellCommandLineGetFlag (ParamPackage, L"--lookup-dest"))) {
  84. ShellPrintHiiEx (
  85. -1,
  86. -1,
  87. NULL,
  88. STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),
  89. mHiiHandle,
  90. mAppName,
  91. L"--lookup-spi --lookup-ipsec-proto --lookup-dest"
  92. );
  93. return EFI_INVALID_PARAMETER;
  94. }
  95. Status = GetNumber (
  96. L"--lookup-spi",
  97. (UINT32) -1,
  98. &Indexer->SaId.Spi,
  99. sizeof (UINT32),
  100. NULL,
  101. ParamPackage,
  102. FORMAT_NUMBER
  103. );
  104. Status1 = GetNumber (
  105. L"--lookup-ipsec-proto",
  106. 0,
  107. &Indexer->SaId.Proto,
  108. sizeof (EFI_IPSEC_PROTOCOL_TYPE),
  109. mMapIpSecProtocol,
  110. ParamPackage,
  111. FORMAT_STRING
  112. );
  113. if (EFI_ERROR (Status) || EFI_ERROR (Status1)) {
  114. return EFI_INVALID_PARAMETER;
  115. }
  116. ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-dest");
  117. ASSERT (ValueStr != NULL);
  118. Status = EfiInetAddr2 ((CHAR16 *) ValueStr, &Indexer->SaId.DestAddress);
  119. if (EFI_ERROR (Status)) {
  120. ShellPrintHiiEx (
  121. -1,
  122. -1,
  123. NULL,
  124. STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),
  125. mHiiHandle,
  126. mAppName,
  127. L"--lookup-dest",
  128. ValueStr
  129. );
  130. return EFI_INVALID_PARAMETER;
  131. }
  132. }
  133. return EFI_SUCCESS;
  134. }
  135. /**
  136. Fill in PAD_ENTRY_INDEXER through ParamPackage list.
  137. @param[in, out] Indexer The pointer to the PAD_ENTRY_INDEXER structure.
  138. @param[in] ParamPackage The pointer to the ParamPackage list.
  139. @retval EFI_SUCCESS Filled in PAD_ENTRY_INDEXER successfully.
  140. @retval EFI_INVALID_PARAMETER The mistaken user input in ParamPackage list.
  141. **/
  142. EFI_STATUS
  143. ConstructPadIndexer (
  144. IN OUT PAD_ENTRY_INDEXER *Indexer,
  145. IN LIST_ENTRY *ParamPackage
  146. )
  147. {
  148. EFI_STATUS Status;
  149. UINT64 Value64;
  150. CONST CHAR16 *ValueStr;
  151. ValueStr = NULL;
  152. if (ShellCommandLineGetFlag (ParamPackage, L"-i")) {
  153. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-i");
  154. } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
  155. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
  156. } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
  157. ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
  158. } else {
  159. return EFI_INVALID_PARAMETER;
  160. }
  161. if (ValueStr == NULL) {
  162. return EFI_INVALID_PARAMETER;
  163. }
  164. Value64 = StrToUInteger (ValueStr, &Status);
  165. if (!EFI_ERROR (Status)) {
  166. Indexer->Index = (UINTN) Value64;
  167. ZeroMem (&Indexer->PadId, sizeof (EFI_IPSEC_PAD_ID));
  168. } else {
  169. if (ShellCommandLineGetFlag (ParamPackage, L"--lookup-peer-address")) {
  170. ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-peer-address");
  171. ASSERT (ValueStr != NULL);
  172. Indexer->PadId.PeerIdValid = FALSE;
  173. Status = EfiInetAddrRange ((CHAR16 *) ValueStr, &Indexer->PadId.Id.IpAddress);
  174. if (EFI_ERROR (Status)) {
  175. ShellPrintHiiEx (
  176. -1,
  177. -1,
  178. NULL,
  179. STRING_TOKEN (STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE),
  180. mHiiHandle,
  181. mAppName,
  182. L"--lookup-peer-address",
  183. ValueStr
  184. );
  185. return EFI_INVALID_PARAMETER;
  186. }
  187. } else {
  188. ValueStr = ShellCommandLineGetValue (ParamPackage, L"--lookup-peer-id");
  189. if (ValueStr == NULL) {
  190. ShellPrintHiiEx (
  191. -1,
  192. -1,
  193. NULL,
  194. STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),
  195. mHiiHandle,
  196. mAppName,
  197. L"--lookup-peer-address --lookup-peer-id"
  198. );
  199. return EFI_INVALID_PARAMETER;
  200. }
  201. Indexer->PadId.PeerIdValid = TRUE;
  202. ZeroMem (Indexer->PadId.Id.PeerId, MAX_PEERID_LEN);
  203. StrnCpyS ((CHAR16 *) Indexer->PadId.Id.PeerId, MAX_PEERID_LEN / sizeof (CHAR16), ValueStr, MAX_PEERID_LEN / sizeof (CHAR16) - 1);
  204. }
  205. }
  206. return EFI_SUCCESS;
  207. }
  208. CONSTRUCT_POLICY_ENTRY_INDEXER mConstructPolicyEntryIndexer[] = {
  209. (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructSpdIndexer,
  210. (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructSadIndexer,
  211. (CONSTRUCT_POLICY_ENTRY_INDEXER) ConstructPadIndexer
  212. };