RedfishPlatformConfig.c 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. /** @file
  2. The implementation for Redfish Platform Configuration application.
  3. Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
  4. (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #include <Uefi.h>
  8. #include <Library/DebugLib.h>
  9. #include <Library/NetLib.h>
  10. #include <Library/UefiApplicationEntryPoint.h>
  11. #include <Library/UefiBootServicesTableLib.h>
  12. #include <Library/UefiRuntimeServicesTableLib.h>
  13. #include <Library/UefiLib.h>
  14. #include <Protocol/ShellParameters.h>
  15. UINTN Argc;
  16. CHAR16 **Argv;
  17. /**
  18. This function parse application ARG.
  19. @return Status
  20. **/
  21. EFI_STATUS
  22. GetArg (
  23. VOID
  24. )
  25. {
  26. EFI_STATUS Status;
  27. EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters;
  28. Status = gBS->HandleProtocol (
  29. gImageHandle,
  30. &gEfiShellParametersProtocolGuid,
  31. (VOID **)&ShellParameters
  32. );
  33. if (EFI_ERROR (Status)) {
  34. return Status;
  35. }
  36. Argc = ShellParameters->Argc;
  37. Argv = ShellParameters->Argv;
  38. return EFI_SUCCESS;
  39. }
  40. /**
  41. This function print the help message.
  42. **/
  43. VOID
  44. PrintHelp (
  45. VOID
  46. )
  47. {
  48. Print (L"\n");
  49. Print (L"Format (Only Ipv4 Address is supported):\n");
  50. Print (L"RedfishPlatformConfig.efi -s HostIpAddress HostIpMask RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort\n");
  51. Print (L"OR:\n");
  52. Print (L"RedfishPlatformConfig.efi -a RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort\n");
  53. Print (L"\n");
  54. }
  55. /**
  56. The user Entry Point for Application. The user code starts with this function
  57. as the real entry point for the application.
  58. @param[in] ImageHandle The firmware allocated handle for the EFI image.
  59. @param[in] SystemTable A pointer to the EFI System Table.
  60. @retval EFI_SUCCESS The entry point is executed successfully.
  61. @retval other Some error occurs when executing this entry point.
  62. **/
  63. EFI_STATUS
  64. EFIAPI
  65. UefiMain (
  66. IN EFI_HANDLE ImageHandle,
  67. IN EFI_SYSTEM_TABLE *SystemTable
  68. )
  69. {
  70. EFI_STATUS Status;
  71. RETURN_STATUS ReturnStatus;
  72. UINT8 HostIpAssignmentType;
  73. EFI_IPv4_ADDRESS HostIpAddress;
  74. EFI_IPv4_ADDRESS HostIpMask;
  75. EFI_IPv4_ADDRESS RedfishServiceIpAddress;
  76. EFI_IPv4_ADDRESS RedfishServiceIpMask;
  77. UINTN RedfishServiceIpPort;
  78. Status = GetArg ();
  79. if (EFI_ERROR (Status)) {
  80. return Status;
  81. }
  82. //
  83. // Format is like :
  84. // RedfishPlatformConfig.efi -s HostIpAddress HostIpMask RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort
  85. // RedfishPlatformConfig.efi -a RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort
  86. //
  87. if ((Argc != 7) && (Argc != 5)) {
  88. PrintHelp ();
  89. return EFI_UNSUPPORTED;
  90. }
  91. if (StrCmp (Argv[1], L"-s") == 0) {
  92. HostIpAssignmentType = 1;
  93. Status = NetLibStrToIp4 (Argv[2], &HostIpAddress);
  94. if (EFI_ERROR (Status)) {
  95. PrintHelp ();
  96. return Status;
  97. }
  98. Status = NetLibStrToIp4 (Argv[3], &HostIpMask);
  99. if (EFI_ERROR (Status)) {
  100. PrintHelp ();
  101. return Status;
  102. }
  103. Status = NetLibStrToIp4 (Argv[4], &RedfishServiceIpAddress);
  104. if (EFI_ERROR (Status)) {
  105. PrintHelp ();
  106. return Status;
  107. }
  108. Status = NetLibStrToIp4 (Argv[5], &RedfishServiceIpMask);
  109. if (EFI_ERROR (Status)) {
  110. PrintHelp ();
  111. return Status;
  112. }
  113. ReturnStatus = StrDecimalToUintnS (Argv[6], NULL, &RedfishServiceIpPort);
  114. if (RETURN_ERROR (ReturnStatus)) {
  115. PrintHelp ();
  116. return Status;
  117. }
  118. Status = gRT->SetVariable (
  119. L"HostIpAssignmentType",
  120. &gEmuRedfishServiceGuid,
  121. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  122. sizeof (UINT8),
  123. &HostIpAssignmentType
  124. );
  125. if (EFI_ERROR (Status)) {
  126. return Status;
  127. }
  128. Status = gRT->SetVariable (
  129. L"HostIpAddress",
  130. &gEmuRedfishServiceGuid,
  131. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  132. sizeof (EFI_IPv4_ADDRESS),
  133. &HostIpAddress
  134. );
  135. if (EFI_ERROR (Status)) {
  136. return Status;
  137. }
  138. Status = gRT->SetVariable (
  139. L"HostIpMask",
  140. &gEmuRedfishServiceGuid,
  141. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  142. sizeof (EFI_IPv4_ADDRESS),
  143. &HostIpMask
  144. );
  145. if (EFI_ERROR (Status)) {
  146. return Status;
  147. }
  148. Status = gRT->SetVariable (
  149. L"RedfishServiceIpAddress",
  150. &gEmuRedfishServiceGuid,
  151. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  152. sizeof (EFI_IPv4_ADDRESS),
  153. &RedfishServiceIpAddress
  154. );
  155. if (EFI_ERROR (Status)) {
  156. return Status;
  157. }
  158. Status = gRT->SetVariable (
  159. L"RedfishServiceIpMask",
  160. &gEmuRedfishServiceGuid,
  161. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  162. sizeof (EFI_IPv4_ADDRESS),
  163. &RedfishServiceIpMask
  164. );
  165. if (EFI_ERROR (Status)) {
  166. return Status;
  167. }
  168. Status = gRT->SetVariable (
  169. L"RedfishServiceIpPort",
  170. &gEmuRedfishServiceGuid,
  171. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  172. sizeof (UINT16),
  173. &RedfishServiceIpPort
  174. );
  175. if (EFI_ERROR (Status)) {
  176. return Status;
  177. }
  178. Print (L"\n");
  179. Print (L"HostIpAssignmentType is Static!\n");
  180. Print (L"HostIpAddress: %s has been set Successfully!\n", Argv[2]);
  181. Print (L"HostIpMask: %s has been set Successfully!\n", Argv[3]);
  182. Print (L"RedfishServiceIpAddress: %s has been set Successfully!\n", Argv[4]);
  183. Print (L"RedfishServiceIpMask: %s has been set Successfully!\n", Argv[5]);
  184. Print (L"RedfishServiceIpPort: %s has been set Successfully!\n", Argv[6]);
  185. Print (L"Please Restart!\n");
  186. } else if (StrCmp (Argv[1], L"-a") == 0) {
  187. HostIpAssignmentType = 3;
  188. Status = NetLibStrToIp4 (Argv[2], &RedfishServiceIpAddress);
  189. if (EFI_ERROR (Status)) {
  190. PrintHelp ();
  191. return Status;
  192. }
  193. Status = NetLibStrToIp4 (Argv[3], &RedfishServiceIpMask);
  194. if (EFI_ERROR (Status)) {
  195. PrintHelp ();
  196. return Status;
  197. }
  198. ReturnStatus = StrDecimalToUintnS (Argv[4], NULL, &RedfishServiceIpPort);
  199. if (RETURN_ERROR (ReturnStatus)) {
  200. PrintHelp ();
  201. return Status;
  202. }
  203. Status = gRT->SetVariable (
  204. L"HostIpAssignmentType",
  205. &gEmuRedfishServiceGuid,
  206. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  207. sizeof (UINT8),
  208. &HostIpAssignmentType
  209. );
  210. if (EFI_ERROR (Status)) {
  211. return Status;
  212. }
  213. Status = gRT->SetVariable (
  214. L"RedfishServiceIpAddress",
  215. &gEmuRedfishServiceGuid,
  216. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  217. sizeof (EFI_IPv4_ADDRESS),
  218. &RedfishServiceIpAddress
  219. );
  220. if (EFI_ERROR (Status)) {
  221. return Status;
  222. }
  223. Status = gRT->SetVariable (
  224. L"RedfishServiceIpMask",
  225. &gEmuRedfishServiceGuid,
  226. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  227. sizeof (EFI_IPv4_ADDRESS),
  228. &RedfishServiceIpMask
  229. );
  230. if (EFI_ERROR (Status)) {
  231. return Status;
  232. }
  233. Status = gRT->SetVariable (
  234. L"RedfishServiceIpPort",
  235. &gEmuRedfishServiceGuid,
  236. EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
  237. sizeof (UINT16),
  238. &RedfishServiceIpPort
  239. );
  240. if (EFI_ERROR (Status)) {
  241. return Status;
  242. }
  243. Print (L"\n");
  244. Print (L"HostIpAssignmentType is Auto!\n");
  245. Print (L"RedfishServiceIpAddress: %s has been set Successfully!\n", Argv[2]);
  246. Print (L"RedfishServiceIpMask: %s has been set Successfully!\n", Argv[3]);
  247. Print (L"RedfishServiceIpPort: %s has been set Successfully!\n", Argv[4]);
  248. Print (L"Please Restart!\n");
  249. } else if ((StrCmp (Argv[1], L"-h") == 0) || (StrCmp (Argv[1], L"-help") == 0)) {
  250. PrintHelp ();
  251. } else {
  252. PrintHelp ();
  253. return EFI_UNSUPPORTED;
  254. }
  255. return EFI_SUCCESS;
  256. }