Reviewed-by: Hegde, Nagaraj P <[email protected]>
Tested-by: Hegde, Nagaraj P <[email protected]>

-----Original Message-----
From: Zhang Lubo [mailto:[email protected]] 
Sent: Thursday, July 14, 2016 8:02 AM
To: [email protected]
Cc: Hegde, Nagaraj P <[email protected]>; Ye Ting <[email protected]>; Fu 
Siyuan <[email protected]>; Wu Jiaxin <[email protected]>
Subject: [patch] ShellPkg: Fix issue about Ifconfig6 -r command.

Follow the Shell Spec, when the interface name is Specified, we need to refresh 
the Ipv6 configuration.

Cc: Hegde Nagaraj P <[email protected]>
Cc: Ye Ting <[email protected]>
Cc: Fu Siyuan <[email protected]>
Cc: Wu Jiaxin <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <[email protected]>
---
 .../UefiShellNetwork2CommandsLib/Ifconfig6.c       | 30 +++++++++++++++++++---
 .../UefiShellNetwork2CommandsLib.uni               |  2 ++
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c 
b/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c
index 371b368..42c972e 100644
--- a/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c
+++ b/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c
@@ -1055,58 +1055,80 @@ IfConfig6ShowInterfaceInfo (
 
     Entry = Entry->ForwardLink;
   }
 
   ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_BREAK), 
gShellNetwork2HiiHandle);
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
+ (STR_IFCONFIG6_INFO_NEWLINE), gShellNetwork2HiiHandle);
 
   return SHELL_SUCCESS;
 }
 
 /**
   The clean process of the IfConfig6 application.
 
   @param[in]   IfList    The pointer of IfList(interface list).
+  @param[in]   IfName    The pointer of interface name.
 
   @retval SHELL_SUCCESS  The IfConfig6 clean processed successfully.
   @retval others         The IfConfig6 clean process failed.
 
 **/
 SHELL_STATUS
 IfConfig6ClearInterfaceInfo (
-  IN LIST_ENTRY    *IfList
+  IN LIST_ENTRY    *IfList,
+  IN CHAR16        *IfName
   )
 {
   EFI_STATUS                Status;
   SHELL_STATUS              ShellStatus;
   LIST_ENTRY                *Entry;
   IFCONFIG6_INTERFACE_CB    *IfCb;
   EFI_IP6_CONFIG_POLICY     Policy;
 
-  Policy = Ip6ConfigPolicyAutomatic;
   Entry  = IfList->ForwardLink;
   Status = EFI_SUCCESS;
   ShellStatus = SHELL_SUCCESS;
 
   if (IsListEmpty (IfList)) {
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_IFCONFIG6_ERR_INVALID_INTERFACE), gShellNetwork2HiiHandle);
   }
 
   //
-  // Go through the interface list.
+  // Go through the interface list.If the interface name is specified, 
+ then  // need to refresh the configuration.
   //
   while (Entry != IfList) {
 
     IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
 
+    if ((IfName != NULL) && (StrCmp (IfName, IfCb->IfInfo->Name) == 0)) {
+      Policy = Ip6ConfigPolicyManual;
+
+      Status = IfCb->IfCfg->SetData (
+                              IfCb->IfCfg,
+                              Ip6ConfigDataTypePolicy,
+                              sizeof (EFI_IP6_CONFIG_POLICY),
+                              &Policy
+                              );
+      if (EFI_ERROR (Status)) {
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), 
gShellNetwork2HiiHandle, L"ifconfig6");
+        ShellStatus = SHELL_ACCESS_DENIED;
+        break;
+      }
+    }
+
+    Policy = Ip6ConfigPolicyAutomatic;
+
     Status = IfCb->IfCfg->SetData (
                             IfCb->IfCfg,
                             Ip6ConfigDataTypePolicy,
                             sizeof (EFI_IP6_CONFIG_POLICY),
                             &Policy
                             );
 
     if (EFI_ERROR (Status)) {
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), 
+ gShellNetwork2HiiHandle, L"ifconfig6");
       ShellStatus = SHELL_ACCESS_DENIED;
       break;
     }
 
     Entry  = Entry->ForwardLink;
@@ -1614,11 +1636,11 @@ IfConfig6 (
   case IfConfig6OpList:
     ShellStatus = IfConfig6ShowInterfaceInfo (&Private->IfList);
     break;
 
   case IfConfig6OpClear:
-    ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList);
+    ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList, 
+ Private->IfName);
     break;
 
   case IfConfig6OpSet:
     ShellStatus = IfConfig6SetInterfaceInfo (&Private->IfList, 
Private->VarArg);
     break;
diff --git 
a/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni
 
b/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni
index 40e0284..ef441e1 100644
--- 
a/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2Com
+++ mandsLib.uni
@@ -21,10 +21,12 @@
    String definitions for UEFI Shell 2.0 network 2 commands  **/
 
 #langdef   en-US "english"
 
+#string STR_GEN_ERR_AD                     #language en-US  "%H%s%N: Access 
denied.\r\n"
+
 #string STR_PING6_INVALID_IP               #language en-US  "%Ping6: Invalid 
IP6 address, %s\r\n"
 #string STR_PING6_INVALID_INPUT            #language en-US  "%Ping6: Invalid 
input, please type 'Ping6 -?'for help\r\n"
 #string STR_PING6_INVALID_SEND_NUMBER      #language en-US  "%Ping6: Invalid 
send number, %s\r\n"
 #string STR_PING6_INVALID_BUFFER_SIZE      #language en-US  "%Ping6: Invalid 
buffer size, %s\r\n"
 #string STR_PING6_INVALID_SOURCE           #language en-US  "%Ping6: Require 
source interface option\r\n"
--
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to