Reviewed-By: Wu Jiaxin <[email protected]>

Best Regards!
Jiaxin

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Zhang Lubo
> Sent: Thursday, July 14, 2016 10:32 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/UefiShellNetwork2Com
> mandsLib.uni
> b/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2Com
> mandsLib.uni
> index 40e0284..ef441e1 100644
> ---
> a/ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2Com
> mandsLib.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
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to