]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c
ShellPkg: Fix issue about Ifconfig6 -r command.
[mirror_edk2.git] / ShellPkg / Library / UefiShellNetwork2CommandsLib / Ifconfig6.c
index 371b368d6dbbbf1e4a24918e12b1bd395dc43c65..42c972e1a557b614cd3ad1098bde0588e961e67f 100644 (file)
@@ -1057,6 +1057,7 @@ IfConfig6ShowInterfaceInfo (
   }\r
 \r
   ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_BREAK), gShellNetwork2HiiHandle);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_NEWLINE), gShellNetwork2HiiHandle);\r
 \r
   return SHELL_SUCCESS;\r
 }\r
@@ -1065,6 +1066,7 @@ IfConfig6ShowInterfaceInfo (
   The clean process of the IfConfig6 application.\r
 \r
   @param[in]   IfList    The pointer of IfList(interface list).\r
+  @param[in]   IfName    The pointer of interface name.\r
 \r
   @retval SHELL_SUCCESS  The IfConfig6 clean processed successfully.\r
   @retval others         The IfConfig6 clean process failed.\r
@@ -1072,7 +1074,8 @@ IfConfig6ShowInterfaceInfo (
 **/\r
 SHELL_STATUS\r
 IfConfig6ClearInterfaceInfo (\r
-  IN LIST_ENTRY    *IfList\r
+  IN LIST_ENTRY    *IfList,\r
+  IN CHAR16        *IfName\r
   )\r
 {\r
   EFI_STATUS                Status;\r
@@ -1081,7 +1084,6 @@ IfConfig6ClearInterfaceInfo (
   IFCONFIG6_INTERFACE_CB    *IfCb;\r
   EFI_IP6_CONFIG_POLICY     Policy;\r
 \r
-  Policy = Ip6ConfigPolicyAutomatic;\r
   Entry  = IfList->ForwardLink;\r
   Status = EFI_SUCCESS;\r
   ShellStatus = SHELL_SUCCESS;\r
@@ -1091,12 +1093,31 @@ IfConfig6ClearInterfaceInfo (
   }\r
 \r
   //\r
-  // Go through the interface list.\r
+  // Go through the interface list.If the interface name is specified, then\r
+  // need to refresh the configuration.\r
   //\r
   while (Entry != IfList) {\r
 \r
     IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);\r
 \r
+    if ((IfName != NULL) && (StrCmp (IfName, IfCb->IfInfo->Name) == 0)) {\r
+      Policy = Ip6ConfigPolicyManual;\r
+\r
+      Status = IfCb->IfCfg->SetData (\r
+                              IfCb->IfCfg,\r
+                              Ip6ConfigDataTypePolicy,\r
+                              sizeof (EFI_IP6_CONFIG_POLICY),\r
+                              &Policy\r
+                              );\r
+      if (EFI_ERROR (Status)) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork2HiiHandle, L"ifconfig6");\r
+        ShellStatus = SHELL_ACCESS_DENIED;\r
+        break;\r
+      }\r
+    }\r
+\r
+    Policy = Ip6ConfigPolicyAutomatic;\r
+\r
     Status = IfCb->IfCfg->SetData (\r
                             IfCb->IfCfg,\r
                             Ip6ConfigDataTypePolicy,\r
@@ -1105,6 +1126,7 @@ IfConfig6ClearInterfaceInfo (
                             );\r
 \r
     if (EFI_ERROR (Status)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork2HiiHandle, L"ifconfig6");\r
       ShellStatus = SHELL_ACCESS_DENIED;\r
       break;\r
     }\r
@@ -1616,7 +1638,7 @@ IfConfig6 (
     break;\r
 \r
   case IfConfig6OpClear:\r
-    ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList);\r
+    ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList, Private->IfName);\r
     break;\r
 \r
   case IfConfig6OpSet:\r