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