From e2f5c491d8749c88cbf56168a3493d70ff19a382 Mon Sep 17 00:00:00 2001 From: Zhang Lubo Date: Thu, 14 Jul 2016 10:31:44 +0800 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 Cc: Ye Ting Cc: Fu Siyuan Cc: Wu Jiaxin Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo Reviewed-by: Hegde Nagaraj P Reviewed-by: Sriram Subramanian Reviewed-by: Jaben Carsey Reviewed-By: Wu Jiaxin --- .../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 371b368d6d..42c972e1a5 100644 --- a/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c +++ b/ShellPkg/Library/UefiShellNetwork2CommandsLib/Ifconfig6.c @@ -1057,6 +1057,7 @@ IfConfig6ShowInterfaceInfo ( } 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; } @@ -1065,6 +1066,7 @@ IfConfig6ShowInterfaceInfo ( 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. @@ -1072,7 +1074,8 @@ IfConfig6ShowInterfaceInfo ( **/ SHELL_STATUS IfConfig6ClearInterfaceInfo ( - IN LIST_ENTRY *IfList + IN LIST_ENTRY *IfList, + IN CHAR16 *IfName ) { EFI_STATUS Status; @@ -1081,7 +1084,6 @@ IfConfig6ClearInterfaceInfo ( IFCONFIG6_INTERFACE_CB *IfCb; EFI_IP6_CONFIG_POLICY Policy; - Policy = Ip6ConfigPolicyAutomatic; Entry = IfList->ForwardLink; Status = EFI_SUCCESS; ShellStatus = SHELL_SUCCESS; @@ -1091,12 +1093,31 @@ IfConfig6ClearInterfaceInfo ( } // - // 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, @@ -1105,6 +1126,7 @@ IfConfig6ClearInterfaceInfo ( ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork2HiiHandle, L"ifconfig6"); ShellStatus = SHELL_ACCESS_DENIED; break; } @@ -1616,7 +1638,7 @@ IfConfig6 ( break; case IfConfig6OpClear: - ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList); + ShellStatus = IfConfig6ClearInterfaceInfo (&Private->IfList, Private->IfName); break; case IfConfig6OpSet: diff --git a/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni b/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni index 40e0284bfa..ef441e1351 100644 --- a/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni +++ b/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.uni @@ -23,6 +23,8 @@ #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" -- 2.39.2