Reviewed-by: Sriram Subramanian <[email protected]> -----Original Message----- From: edk2-devel [mailto:[email protected]] On Behalf Of Zhang Lubo Sent: Thursday, July 14, 2016 8:02 AM To: [email protected] Cc: Ye Ting <[email protected]>; Fu Siyuan <[email protected]>; Wu Jiaxin <[email protected]> Subject: [edk2] [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/UefiShellNetwork2CommandsLib.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 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

