From: "Wu, Jiaxin" <jiaxin.wu@intel.com>
To: "Fu, Siyuan" <siyuan.fu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Ye, Ting" <ting.ye@intel.com>
Subject: Re: [Patch] NetworkPkg: Remove ping6 and ifconfig shell application.
Date: Wed, 18 Oct 2017 07:15:25 +0000 [thread overview]
Message-ID: <895558F6EA4E3B41AC93A00D163B72741633ED29@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20171017130751.30192-1-siyuan.fu@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
> -----Original Message-----
> From: Fu, Siyuan
> Sent: Tuesday, October 17, 2017 9:08 PM
> To: edk2-devel@lists.01.org
> Cc: Wu, Jiaxin <jiaxin.wu@intel.com>; Ye, Ting <ting.ye@intel.com>
> Subject: [Patch] NetworkPkg: Remove ping6 and ifconfig shell application.
>
> Edk2 has duplicated ping6/ifconfig6 implementation in NetworkPkg and
> ShellPkg.
> The usage and parameter format of these 2 versions are exactly same. These
> two
> commands have been added to Shell specification so the copy under
> ShellPkg\Library\UefiShellNetwork2CommandsLib\
> will be actively maintained in future.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Fu Siyuan <siyuan.fu@intel.com>
> Cc: Wu Jiaxin <jiaxin.wu@intel.com>
> Cc: Ye Ting <ting.ye@intel.com>
> ---
> NetworkPkg/Application/IfConfig6/IfConfig6.c | 1793 --------------------
> NetworkPkg/Application/IfConfig6/IfConfig6.h | 79 -
> NetworkPkg/Application/IfConfig6/IfConfig6.inf | 67 -
> NetworkPkg/Application/IfConfig6/IfConfig6.uni | 23 -
> .../Application/IfConfig6/IfConfig6Extra.uni | 20 -
> .../Application/IfConfig6/IfConfig6Strings.uni | 92 -
> NetworkPkg/Application/Ping6/Ia32/Tsc.c | 28 -
> NetworkPkg/Application/Ping6/Ipf/Itc.c | 28 -
> NetworkPkg/Application/Ping6/Ping6.c | 1200 -------------
> NetworkPkg/Application/Ping6/Ping6.h | 87 -
> NetworkPkg/Application/Ping6/Ping6.inf | 78 -
> NetworkPkg/Application/Ping6/Ping6.uni | 22 -
> NetworkPkg/Application/Ping6/Ping6Extra.uni | 20 -
> NetworkPkg/Application/Ping6/Ping6Strings.uni | 53 -
> NetworkPkg/Application/Ping6/X64/Tsc.c | 28 -
> NetworkPkg/NetworkPkg.dsc | 3 -
> 16 files changed, 3621 deletions(-)
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6.c
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6.h
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6.inf
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6.uni
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6Extra.uni
> delete mode 100644 NetworkPkg/Application/IfConfig6/IfConfig6Strings.uni
> delete mode 100644 NetworkPkg/Application/Ping6/Ia32/Tsc.c
> delete mode 100644 NetworkPkg/Application/Ping6/Ipf/Itc.c
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6.c
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6.h
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6.inf
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6.uni
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6Extra.uni
> delete mode 100644 NetworkPkg/Application/Ping6/Ping6Strings.uni
> delete mode 100644 NetworkPkg/Application/Ping6/X64/Tsc.c
>
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6.c
> b/NetworkPkg/Application/IfConfig6/IfConfig6.c
> deleted file mode 100644
> index 48c3be3552..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6.c
> +++ /dev/null
> @@ -1,1793 +0,0 @@
> -/** @file
> - The implementation for Shell application IfConfig6.
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/ShellLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/BaseLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/UefiHiiServicesLib.h>
> -#include <Library/HiiLib.h>
> -#include <Library/NetLib.h>
> -
> -#include <Protocol/Ip6.h>
> -#include <Protocol/Ip6Config.h>
> -
> -#include "IfConfig6.h"
> -
> -//
> -// String token ID of ifconfig6 command help message text.
> -//
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID
> mStringIfconfig6HelpTokenId = STRING_TOKEN (STR_IFCONFIG6_HELP);
> -
> -EFI_HII_HANDLE mHiiHandle;
> -
> -SHELL_PARAM_ITEM mIfConfig6CheckList[] = {
> - {
> - L"-b",
> - TypeFlag
> - },
> - {
> - L"-s",
> - TypeMaxValue
> - },
> - {
> - L"-l",
> - TypeValue
> - },
> - {
> - L"-r",
> - TypeValue
> - },
> - {
> - NULL,
> - TypeMax
> - },
> -};
> -
> -VAR_CHECK_ITEM mSetCheckList[] = {
> - {
> - L"auto",
> - 0x00000001,
> - 0x00000001,
> - FlagTypeSingle
> - },
> - {
> - L"man",
> - 0x00000002,
> - 0x00000001,
> - FlagTypeSingle
> - },
> - {
> - L"host",
> - 0x00000004,
> - 0x00000002,
> - FlagTypeSingle
> - },
> - {
> - L"dad",
> - 0x00000008,
> - 0x00000004,
> - FlagTypeSingle
> - },
> - {
> - L"gw",
> - 0x00000010,
> - 0x00000008,
> - FlagTypeSingle
> - },
> - {
> - L"dns",
> - 0x00000020,
> - 0x00000010,
> - FlagTypeSingle
> - },
> - {
> - L"id",
> - 0x00000040,
> - 0x00000020,
> - FlagTypeSingle
> - },
> - {
> - NULL,
> - 0x0,
> - 0x0,
> - FlagTypeSkipUnknown
> - },
> -};
> -
> -/**
> - Split a string with specified separator and save the substring to a list.
> -
> - @param[in] String The pointer of the input string.
> - @param[in] Separator The specified separator.
> -
> - @return The pointer of headnode of ARG_LIST.
> -
> -**/
> -ARG_LIST *
> -SplitStrToList (
> - IN CONST CHAR16 *String,
> - IN CHAR16 Separator
> - )
> -{
> - CHAR16 *Str;
> - CHAR16 *ArgStr;
> - ARG_LIST *ArgList;
> - ARG_LIST *ArgNode;
> -
> - if (String == NULL || *String == L'\0') {
> - return NULL;
> - }
> -
> - //
> - // Copy the CONST string to a local copy.
> - //
> - Str = AllocateCopyPool (StrSize (String), String);
> - ASSERT (Str != NULL);
> - ArgStr = Str;
> -
> - //
> - // init a node for the list head.
> - //
> - ArgNode = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));
> - ASSERT (ArgNode != NULL);
> - ArgList = ArgNode;
> -
> - //
> - // Split the local copy and save in the list node.
> - //
> - while (*Str != L'\0') {
> - if (*Str == Separator) {
> - *Str = L'\0';
> - ArgNode->Arg = ArgStr;
> - ArgStr = Str + 1;
> - ArgNode->Next = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));
> - ASSERT (ArgNode->Next != NULL);
> - ArgNode = ArgNode->Next;
> - }
> -
> - Str++;
> - }
> -
> - ArgNode->Arg = ArgStr;
> - ArgNode->Next = NULL;
> -
> - return ArgList;
> -}
> -
> -/**
> - Check the correctness of input Args with '-s' option.
> -
> - @param[in] CheckList The pointer of VAR_CHECK_ITEM array.
> - @param[in] Name The pointer of input arg.
> - @param[in] Init The switch to execute the check.
> -
> - @return The value of VAR_CHECK_CODE.
> -
> -**/
> -VAR_CHECK_CODE
> -IfConfig6RetriveCheckListByName(
> - IN VAR_CHECK_ITEM *CheckList,
> - IN CHAR16 *Name,
> - IN BOOLEAN Init
> -)
> -{
> - STATIC UINT32 CheckDuplicate;
> - STATIC UINT32 CheckConflict;
> - VAR_CHECK_CODE RtCode;
> - UINT32 Index;
> - VAR_CHECK_ITEM Arg;
> -
> - if (Init) {
> - CheckDuplicate = 0;
> - CheckConflict = 0;
> - return VarCheckOk;
> - }
> -
> - RtCode = VarCheckOk;
> - Index = 0;
> - Arg = CheckList[Index];
> -
> - //
> - // Check the Duplicated/Conflicted/Unknown input Args.
> - //
> - while (Arg.FlagStr != NULL) {
> - if (StrCmp (Arg.FlagStr, Name) == 0) {
> -
> - if (CheckDuplicate & Arg.FlagID) {
> - RtCode = VarCheckDuplicate;
> - break;
> - }
> -
> - if (CheckConflict & Arg.ConflictMask) {
> - RtCode = VarCheckConflict;
> - break;
> - }
> -
> - CheckDuplicate |= Arg.FlagID;
> - CheckConflict |= Arg.ConflictMask;
> - break;
> - }
> -
> - Arg = CheckList[++Index];
> - }
> -
> - if (Arg.FlagStr == NULL) {
> - RtCode = VarCheckUnknown;
> - }
> -
> - return RtCode;
> -}
> -
> -/**
> - The notify function of create event when performing a manual config.
> -
> - @param[in] Event The event this notify function registered to.
> - @param[in] Context Pointer to the context data registered to the
> event.
> -
> -**/
> -VOID
> -EFIAPI
> -IfConfig6ManualAddressNotify (
> - IN EFI_EVENT Event,
> - IN VOID *Context
> - )
> -{
> - *((BOOLEAN *) Context) = TRUE;
> -}
> -
> -/**
> - Print MAC address.
> -
> - @param[in] Node The pointer of MAC address buffer.
> - @param[in] Size The size of MAC address buffer.
> -
> -**/
> -VOID
> -IfConfig6PrintMacAddr (
> - IN UINT8 *Node,
> - IN UINT32 Size
> - )
> -{
> - UINTN Index;
> -
> - ASSERT (Size <= MACADDRMAXSIZE);
> -
> - for (Index = 0; Index < Size; Index++) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_MAC_ADDR_BODY), mHiiHandle, Node[Index]);
> - if (Index + 1 < Size) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
> - }
> - }
> -
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
> -}
> -
> -/**
> - Print IPv6 address.
> -
> - @param[in] Ip The pointer of Ip bufffer in EFI_IPv6_ADDRESS format.
> - @param[in] PrefixLen The pointer of PrefixLen that describes the size
> Prefix.
> -
> -**/
> -VOID
> -IfConfig6PrintIpAddr (
> - IN EFI_IPv6_ADDRESS *Ip,
> - IN UINT8 *PrefixLen
> - )
> -{
> - UINTN Index;
> - BOOLEAN Short;
> -
> - Short = FALSE;
> -
> - for (Index = 0; Index < PREFIXMAXLEN; Index = Index + 2) {
> -
> - if (!Short && (Index + 1 < PREFIXMAXLEN) && (Index % 2 == 0) && (Ip-
> >Addr[Index] == 0) && (Ip->Addr[Index + 1] == 0)) {
> - //
> - // Deal with the case of ::.
> - //
> - if (Index == 0) {
> - //
> - // :: is at the beginning of the address.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
> - }
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
> -
> - while ((Ip->Addr[Index] == 0) && (Ip->Addr[Index + 1] == 0) && (Index <
> PREFIXMAXLEN)) {
> - Index = Index + 2;
> - if (Index > PREFIXMAXLEN - 2) {
> - break;
> - }
> - }
> -
> - Short = TRUE;
> -
> - if (Index == PREFIXMAXLEN) {
> - //
> - // :: is at the end of the address.
> - //
> - break;
> - }
> - }
> -
> - if (Index < PREFIXMAXLEN - 1) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_IP_ADDR_BODY), mHiiHandle, Ip->Addr[Index]);
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_IP_ADDR_BODY), mHiiHandle, Ip->Addr[Index + 1]);
> - }
> -
> - if (Index + 2 < PREFIXMAXLEN) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
> - }
> - }
> -
> - if (PrefixLen != NULL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_PREFIX_LEN), mHiiHandle, *PrefixLen);
> - }
> -}
> -
> -/**
> - Pick up host IPv6 address in string format from Args with "-s" option and
> convert it to EFI_IP6_CONFIG_MANUAL_ADDRESS format.
> -
> - @param[in, out] Arg The pointer of the address of ARG_LIST which
> save Args with the "-s" option.
> - @param[out] Buf The pointer of the address of
> EFI_IP6_CONFIG_MANUAL_ADDRESS.
> - @param[out] BufSize The pointer of BufSize that describes the size of
> Buf in bytes.
> -
> - @retval EFI_SUCCESS The convertion is successful.
> - @retval Others Does't find the host address, or it is an invalid IPv6
> address in string format.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ParseManualAddressList (
> - IN OUT ARG_LIST **Arg,
> - OUT EFI_IP6_CONFIG_MANUAL_ADDRESS **Buf,
> - OUT UINTN *BufSize
> - )
> -{
> - EFI_STATUS Status;
> - EFI_IP6_CONFIG_MANUAL_ADDRESS *AddrBuf;
> - ARG_LIST *VarArg;
> - EFI_IPv6_ADDRESS Address;
> - UINT8 Prefix;
> - UINT8 AddrCnt;
> -
> - Prefix = 0;
> - AddrCnt = 0;
> - *BufSize = 0;
> - *Buf = NULL;
> - VarArg = *Arg;
> - Status = EFI_SUCCESS;
> -
> - //
> - // Go through the list to check the correctness of input host ip6 address.
> - //
> - while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
> -
> - Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
> -
> - if (EFI_ERROR (Status)) {
> - //
> - // host ip ip ... gw
> - //
> - break;
> - }
> -
> - VarArg = VarArg->Next;
> - AddrCnt++;
> - }
> -
> - if (AddrCnt == 0) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AddrBuf = AllocateZeroPool (AddrCnt * sizeof
> (EFI_IP6_CONFIG_MANUAL_ADDRESS));
> - ASSERT (AddrBuf != NULL);
> -
> - AddrCnt = 0;
> - VarArg = *Arg;
> - Status = EFI_SUCCESS;
> -
> - //
> - // Go through the list to fill in the EFI_IP6_CONFIG_MANUAL_ADDRESS
> structure.
> - //
> - while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
> -
> - Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
> -
> - if (EFI_ERROR (Status)) {
> - break;
> - }
> -
> - //
> - // If prefix length is not set, set it as Zero here. In the
> IfConfigSetInterfaceInfo()
> - // Zero prefix, length will be transfered to default prefix length.
> - //
> - if (Prefix == 0xFF) {
> - Prefix = 0;
> - }
> - AddrBuf[AddrCnt].IsAnycast = FALSE;
> - AddrBuf[AddrCnt].PrefixLength = Prefix;
> - IP6_COPY_ADDRESS (&AddrBuf[AddrCnt].Address, &Address);
> - VarArg = VarArg->Next;
> - AddrCnt++;
> - }
> -
> - *Arg = VarArg;
> -
> - if (EFI_ERROR (Status) && (Status != EFI_INVALID_PARAMETER)) {
> - goto ON_ERROR;
> - }
> -
> - *Buf = AddrBuf;
> - *BufSize = AddrCnt * sizeof (EFI_IP6_CONFIG_MANUAL_ADDRESS);
> -
> - return EFI_SUCCESS;
> -
> -ON_ERROR:
> -
> - FreePool (AddrBuf);
> - return Status;
> -}
> -
> -/**
> - Pick up gw/dns IPv6 address in string format from Args with "-s" option and
> convert it to EFI_IPv6_ADDRESS format.
> -
> - @param[in, out] Arg The pointer of the address of ARG_LIST that save
> Args with the "-s" option.
> - @param[out] Buf The pointer of the address of EFI_IPv6_ADDRESS.
> - @param[out] BufSize The pointer of BufSize that describes the size of
> Buf in bytes.
> -
> - @retval EFI_SUCCESS The conversion is successful.
> - @retval Others Doesn't find the host address, or it is an invalid IPv6
> address in string format.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ParseGwDnsAddressList (
> - IN OUT ARG_LIST **Arg,
> - OUT EFI_IPv6_ADDRESS **Buf,
> - OUT UINTN *BufSize
> - )
> -{
> - EFI_STATUS Status;
> - EFI_IPv6_ADDRESS *AddrBuf;
> - ARG_LIST *VarArg;
> - EFI_IPv6_ADDRESS Address;
> - UINT8 Prefix;
> - UINT8 AddrCnt;
> -
> - AddrCnt = 0;
> - *BufSize = 0;
> - *Buf = NULL;
> - VarArg = *Arg;
> - Status = EFI_SUCCESS;
> -
> - //
> - // Go through the list to check the correctness of input gw/dns address.
> - //
> - while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
> -
> - Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
> -
> - if (EFI_ERROR (Status)) {
> - //
> - // gw ip ip ... host
> - //
> - break;
> - }
> -
> - VarArg = VarArg->Next;
> - AddrCnt++;
> - }
> -
> - if (AddrCnt == 0) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AddrBuf = AllocateZeroPool (AddrCnt * sizeof (EFI_IPv6_ADDRESS));
> - ASSERT (AddrBuf != NULL);
> -
> - AddrCnt = 0;
> - VarArg = *Arg;
> - Status = EFI_SUCCESS;
> -
> - //
> - // Go through the list to fill in the EFI_IPv6_ADDRESS structure.
> - //
> - while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
> -
> - Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
> -
> - if (EFI_ERROR (Status)) {
> - break;
> - }
> -
> - IP6_COPY_ADDRESS (&AddrBuf[AddrCnt], &Address);
> -
> - VarArg = VarArg->Next;
> - AddrCnt++;
> - }
> -
> - *Arg = VarArg;
> -
> - if (EFI_ERROR (Status) && (Status != EFI_INVALID_PARAMETER)) {
> - goto ON_ERROR;
> - }
> -
> - *Buf = AddrBuf;
> - *BufSize = AddrCnt * sizeof (EFI_IPv6_ADDRESS);
> -
> - return EFI_SUCCESS;
> -
> -ON_ERROR:
> -
> - FreePool (AddrBuf);
> - return Status;
> -}
> -
> -/**
> - Parse InterfaceId in string format from Args with the "-s" option and
> convert it to EFI_IP6_CONFIG_INTERFACE_ID format.
> -
> - @param[in, out] Arg The pointer of the address of ARG_LIST that saves
> Args with the "-s" option.
> - @param[out] IfId The pointer of EFI_IP6_CONFIG_INTERFACE_ID.
> -
> - @retval EFI_SUCCESS The get status processed successfullly.
> - @retval EFI_INVALID_PARAMETER The get status process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ParseInterfaceId (
> - IN OUT ARG_LIST **Arg,
> - OUT EFI_IP6_CONFIG_INTERFACE_ID **IfId
> - )
> -{
> - UINT8 Index;
> - UINT8 NodeVal;
> - CHAR16 *IdStr;
> -
> - if (*Arg == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Index = 0;
> - IdStr = (*Arg)->Arg;
> - ASSERT (IfId != NULL);
> - *IfId = AllocateZeroPool (sizeof (EFI_IP6_CONFIG_INTERFACE_ID));
> - ASSERT (*IfId != NULL);
> -
> - while ((*IdStr != L'\0') && (Index < 8)) {
> -
> - NodeVal = 0;
> - while ((*IdStr != L':') && (*IdStr != L'\0')) {
> -
> - if ((*IdStr <= L'F') && (*IdStr >= L'A')) {
> - NodeVal = (UINT8)((NodeVal << 4) + *IdStr - L'A' + 10);
> - } else if ((*IdStr <= L'f') && (*IdStr >= L'a')) {
> - NodeVal = (UINT8)((NodeVal << 4) + *IdStr - L'a' + 10);
> - } else if ((*IdStr <= L'9') && (*IdStr >= L'0')) {
> - NodeVal = (UINT8)((NodeVal << 4) + *IdStr - L'0');
> - } else {
> - FreePool (*IfId);
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - IdStr++;
> - }
> -
> - (*IfId)->Id[Index++] = NodeVal;
> -
> - if (*IdStr == L':') {
> - IdStr++;
> - }
> - }
> -
> - *Arg = (*Arg)->Next;
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Parse dad in string format from Args with the "-s" option and convert it to
> UINT32 format.
> -
> - @param[in, out] Arg The pointer of the address of ARG_LIST that saves
> Args with the "-s" option.
> - @param[out] Xmits The pointer of Xmits.
> -
> - @retval EFI_SUCCESS The get status processed successfully.
> - @retval others The get status process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ParseDadXmits (
> - IN OUT ARG_LIST **Arg,
> - OUT UINT32 *Xmits
> - )
> -{
> - CHAR16 *ValStr;
> -
> - if (*Arg == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - ValStr = (*Arg)->Arg;
> - *Xmits = 0;
> -
> - while (*ValStr != L'\0') {
> -
> - if ((*ValStr <= L'9') && (*ValStr >= L'0')) {
> -
> - *Xmits = (*Xmits * 10) + (*ValStr - L'0');
> -
> - } else {
> -
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - ValStr++;
> - }
> -
> - *Arg = (*Arg)->Next;
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - The get current status of all handles.
> -
> - @param[in] ImageHandle The handle of ImageHandle.
> - @param[in] IfName The pointer of IfName(interface name).
> - @param[in] IfList The pointer of IfList(interface list).
> -
> - @retval EFI_SUCCESS The get status processed successfully.
> - @retval others The get status process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6GetInterfaceInfo (
> - IN EFI_HANDLE ImageHandle,
> - IN CHAR16 *IfName,
> - IN LIST_ENTRY *IfList
> - )
> -{
> - EFI_STATUS Status;
> - UINTN HandleIndex;
> - UINTN HandleNum;
> - EFI_HANDLE *HandleBuffer;
> - EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;
> - EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;
> - IFCONFIG6_INTERFACE_CB *IfCb;
> - UINTN DataSize;
> -
> - HandleBuffer = NULL;
> - HandleNum = 0;
> -
> - IfInfo = NULL;
> - IfCb = NULL;
> -
> - //
> - // Locate all the handles with ip6 service binding protocol.
> - //
> - Status = gBS->LocateHandleBuffer (
> - ByProtocol,
> - &gEfiIp6ServiceBindingProtocolGuid,
> - NULL,
> - &HandleNum,
> - &HandleBuffer
> - );
> - if (EFI_ERROR (Status) || (HandleNum == 0)) {
> - return EFI_ABORTED;
> - }
> -
> - //
> - // Enumerate all handles that installed with ip6 service binding protocol.
> - //
> - for (HandleIndex = 0; HandleIndex < HandleNum; HandleIndex++) {
> - IfCb = NULL;
> - IfInfo = NULL;
> - DataSize = 0;
> -
> - //
> - // Ip6config protocol and ip6 service binding protocol are installed
> - // on the same handle.
> - //
> - ASSERT (HandleBuffer != NULL);
> - Status = gBS->HandleProtocol (
> - HandleBuffer[HandleIndex],
> - &gEfiIp6ConfigProtocolGuid,
> - (VOID **) &Ip6Cfg
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_ERROR;
> - }
> - //
> - // Get the interface information size.
> - //
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &DataSize,
> - NULL
> - );
> -
> - if (Status != EFI_BUFFER_TOO_SMALL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - IfInfo = AllocateZeroPool (DataSize);
> -
> - if (IfInfo == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ON_ERROR;
> - }
> - //
> - // Get the interface info.
> - //
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &DataSize,
> - IfInfo
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> - //
> - // Check the interface name if required.
> - //
> - if ((IfName != NULL) && (StrCmp (IfName, IfInfo->Name) != 0)) {
> - FreePool (IfInfo);
> - continue;
> - }
> -
> - DataSize = 0;
> - //
> - // Get the size of dns server list.
> - //
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeDnsServer,
> - &DataSize,
> - NULL
> - );
> -
> - if ((Status != EFI_BUFFER_TOO_SMALL) && (Status != EFI_NOT_FOUND)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - IfCb = AllocateZeroPool (sizeof (IFCONFIG6_INTERFACE_CB) + DataSize);
> -
> - if (IfCb == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ON_ERROR;
> - }
> -
> - IfCb->NicHandle = HandleBuffer[HandleIndex];
> - IfCb->IfInfo = IfInfo;
> - IfCb->IfCfg = Ip6Cfg;
> - IfCb->DnsCnt = (UINT32) (DataSize / sizeof (EFI_IPv6_ADDRESS));
> -
> - //
> - // Get the dns server list if has.
> - //
> - if (DataSize > 0) {
> -
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeDnsServer,
> - &DataSize,
> - IfCb->DnsAddr
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> - }
> - //
> - // Get the interface id if has.
> - //
> - DataSize = sizeof (EFI_IP6_CONFIG_INTERFACE_ID);
> - IfCb->IfId = AllocateZeroPool (DataSize);
> -
> - if (IfCb->IfId == NULL) {
> - goto ON_ERROR;
> - }
> -
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeAltInterfaceId,
> - &DataSize,
> - IfCb->IfId
> - );
> -
> - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - if (Status == EFI_NOT_FOUND) {
> - FreePool (IfCb->IfId);
> - IfCb->IfId = NULL;
> - }
> - //
> - // Get the config policy.
> - //
> - DataSize = sizeof (EFI_IP6_CONFIG_POLICY);
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypePolicy,
> - &DataSize,
> - &IfCb->Policy
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> - //
> - // Get the dad transmits.
> - //
> - DataSize = sizeof (EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS);
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeDupAddrDetectTransmits,
> - &DataSize,
> - &IfCb->Xmits
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - InsertTailList (IfList, &IfCb->Link);
> -
> - if ((IfName != NULL) && (StrCmp (IfName, IfInfo->Name) == 0)) {
> - //
> - // Only need the appointed interface, keep the allocated buffer.
> - //
> - IfCb = NULL;
> - IfInfo = NULL;
> - break;
> - }
> - }
> -
> - if (HandleBuffer != NULL) {
> - FreePool (HandleBuffer);
> - }
> -
> - return EFI_SUCCESS;
> -
> -ON_ERROR:
> -
> - if (IfInfo != NULL) {
> - FreePool (IfInfo);
> - }
> -
> - if (IfCb != NULL) {
> - if (IfCb->IfId != NULL) {
> - FreePool (IfCb->IfId);
> - }
> -
> - FreePool (IfCb);
> - }
> -
> - return Status;
> -}
> -
> -/**
> - The list process of the IfConfig6 application.
> -
> - @param[in] IfList The pointer of IfList(interface list).
> -
> - @retval EFI_SUCCESS The IfConfig6 list processed successfully.
> - @retval others The IfConfig6 list process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ShowInterfaceInfo (
> - IN LIST_ENTRY *IfList
> - )
> -{
> - EFI_STATUS Status;
> - LIST_ENTRY *Entry;
> - IFCONFIG6_INTERFACE_CB *IfCb;
> - UINTN Index;
> -
> - Entry = IfList->ForwardLink;
> - Status = EFI_SUCCESS;
> -
> - if (IsListEmpty (IfList)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
> - }
> -
> - //
> - // Go through the interface list.
> - //
> - while (Entry != IfList) {
> -
> - IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
> -
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_BREAK), mHiiHandle);
> -
> - //
> - // Print interface name.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_IF_NAME), mHiiHandle, IfCb->IfInfo->Name);
> -
> - //
> - // Print interface config policy.
> - //
> - if (IfCb->Policy == Ip6ConfigPolicyAutomatic) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_POLICY_AUTO), mHiiHandle);
> - } else {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_POLICY_MAN), mHiiHandle);
> - }
> -
> - //
> - // Print dad transmit.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_DAD_TRANSMITS), mHiiHandle, IfCb->Xmits);
> -
> - //
> - // Print interface id if has.
> - //
> - if (IfCb->IfId != NULL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_INTERFACE_ID_HEAD), mHiiHandle);
> -
> - IfConfig6PrintMacAddr (
> - IfCb->IfId->Id,
> - 8
> - );
> - }
> - //
> - // Print mac address of the interface.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_MAC_ADDR_HEAD), mHiiHandle);
> -
> - IfConfig6PrintMacAddr (
> - IfCb->IfInfo->HwAddress.Addr,
> - IfCb->IfInfo->HwAddressSize
> - );
> -
> - //
> - // Print ip addresses list of the interface.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_IP_ADDR_HEAD), mHiiHandle);
> -
> - for (Index = 0; Index < IfCb->IfInfo->AddressInfoCount; Index++) {
> - IfConfig6PrintIpAddr (
> - &IfCb->IfInfo->AddressInfo[Index].Address,
> - &IfCb->IfInfo->AddressInfo[Index].PrefixLength
> - );
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
> - }
> -
> - //
> - // Print dns server addresses list of the interface if has.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_DNS_ADDR_HEAD), mHiiHandle);
> -
> - for (Index = 0; Index < IfCb->DnsCnt; Index++) {
> - IfConfig6PrintIpAddr (
> - &IfCb->DnsAddr[Index],
> - NULL
> - );
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
> - }
> -
> - //
> - // Print route table of the interface if has.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_ROUTE_HEAD), mHiiHandle);
> -
> - for (Index = 0; Index < IfCb->IfInfo->RouteCount; Index++) {
> - IfConfig6PrintIpAddr (
> - &IfCb->IfInfo->RouteTable[Index].Destination,
> - &IfCb->IfInfo->RouteTable[Index].PrefixLength
> - );
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_JOINT), mHiiHandle);
> -
> - IfConfig6PrintIpAddr (
> - &IfCb->IfInfo->RouteTable[Index].Gateway,
> - NULL
> - );
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
> - }
> -
> - Entry = Entry->ForwardLink;
> - }
> -
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_INFO_BREAK), mHiiHandle);
> -
> - return Status;
> -}
> -
> -/**
> - The clean process of the IfConfig6 application.
> -
> - @param[in] IfList The pointer of IfList(interface list).
> -
> - @retval EFI_SUCCESS The IfConfig6 clean processed successfully.
> - @retval others The IfConfig6 clean process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6ClearInterfaceInfo (
> - IN LIST_ENTRY *IfList
> - )
> -{
> - EFI_STATUS Status;
> - LIST_ENTRY *Entry;
> - IFCONFIG6_INTERFACE_CB *IfCb;
> - EFI_IP6_CONFIG_POLICY Policy;
> -
> - Policy = Ip6ConfigPolicyAutomatic;
> - Entry = IfList->ForwardLink;
> - Status = EFI_SUCCESS;
> -
> - if (IsListEmpty (IfList)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
> - }
> -
> - //
> - // Go through the interface list.
> - //
> - while (Entry != IfList) {
> -
> - IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
> -
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypePolicy,
> - sizeof (EFI_IP6_CONFIG_POLICY),
> - &Policy
> - );
> -
> - if (EFI_ERROR (Status)) {
> - break;
> - }
> -
> - Entry = Entry->ForwardLink;
> - }
> -
> - return Status;
> -}
> -
> -/**
> - The set process of the IfConfig6 application.
> -
> - @param[in] IfList The pointer of IfList(interface list).
> - @param[in] VarArg The pointer of ARG_LIST(Args with "-s" option).
> -
> - @retval EFI_SUCCESS The IfConfig6 set processed successfully.
> - @retval others The IfConfig6 set process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6SetInterfaceInfo (
> - IN LIST_ENTRY *IfList,
> - IN ARG_LIST *VarArg
> - )
> -{
> - EFI_STATUS Status;
> - IFCONFIG6_INTERFACE_CB *IfCb;
> - EFI_IP6_CONFIG_MANUAL_ADDRESS *CfgManAddr;
> - EFI_IPv6_ADDRESS *CfgAddr;
> - UINTN AddrSize;
> - EFI_IP6_CONFIG_INTERFACE_ID *InterfaceId;
> - UINT32 DadXmits;
> - UINT32 CurDadXmits;
> - UINTN CurDadXmitsLen;
> - EFI_IP6_CONFIG_POLICY Policy;
> -
> - VAR_CHECK_CODE CheckCode;
> - EFI_EVENT TimeOutEvt;
> - EFI_EVENT MappedEvt;
> - BOOLEAN IsAddressOk;
> -
> - UINTN DataSize;
> - UINT32 Index;
> - UINT32 Index2;
> - BOOLEAN IsAddressSet;
> - EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;
> -
> - CfgManAddr = NULL;
> - CfgAddr = NULL;
> - TimeOutEvt = NULL;
> - MappedEvt = NULL;
> - IfInfo = NULL;
> - InterfaceId = NULL;
> - CurDadXmits = 0;
> -
> - if (IsListEmpty (IfList)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
> - return EFI_INVALID_PARAMETER;
> - }
> - //
> - // Make sure to set only one interface each time.
> - //
> - IfCb = BASE_CR (IfList->ForwardLink, IFCONFIG6_INTERFACE_CB, Link);
> - Status = EFI_SUCCESS;
> -
> - //
> - // Initialize check list mechanism.
> - //
> - CheckCode = IfConfig6RetriveCheckListByName(
> - NULL,
> - NULL,
> - TRUE
> - );
> -
> - //
> - // Create events & timers for asynchronous settings.
> - //
> - Status = gBS->CreateEvent (
> - EVT_TIMER,
> - TPL_CALLBACK,
> - NULL,
> - NULL,
> - &TimeOutEvt
> - );
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - Status = gBS->CreateEvent (
> - EVT_NOTIFY_SIGNAL,
> - TPL_NOTIFY,
> - IfConfig6ManualAddressNotify,
> - &IsAddressOk,
> - &MappedEvt
> - );
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Parse the setting variables.
> - //
> - while (VarArg != NULL) {
> - //
> - // Check invalid parameters (duplication & unknown & conflict).
> - //
> - CheckCode = IfConfig6RetriveCheckListByName(
> - mSetCheckList,
> - VarArg->Arg,
> - FALSE
> - );
> -
> - if (VarCheckOk != CheckCode) {
> - switch (CheckCode) {
> - case VarCheckDuplicate:
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_DUPLICATE_COMMAND), mHiiHandle, VarArg->Arg);
> - break;
> -
> - case VarCheckConflict:
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_CONFLICT_COMMAND), mHiiHandle, VarArg->Arg);
> - break;
> -
> - case VarCheckUnknown:
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_UNKNOWN_COMMAND), mHiiHandle, VarArg->Arg);
> - break;
> -
> - default:
> - break;
> - }
> -
> - VarArg = VarArg->Next;
> - continue;
> - }
> - //
> - // Process valid variables.
> - //
> - if (StrCmp(VarArg->Arg, L"auto") == 0) {
> - //
> - // Set automaic config policy
> - //
> - Policy = Ip6ConfigPolicyAutomatic;
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypePolicy,
> - sizeof (EFI_IP6_CONFIG_POLICY),
> - &Policy
> - );
> -
> - if (EFI_ERROR(Status)) {
> - goto ON_EXIT;
> - }
> -
> - VarArg= VarArg->Next;
> -
> - } else if (StrCmp (VarArg->Arg, L"man") == 0) {
> - //
> - // Set manual config policy.
> - //
> - Policy = Ip6ConfigPolicyManual;
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypePolicy,
> - sizeof (EFI_IP6_CONFIG_POLICY),
> - &Policy
> - );
> -
> - if (EFI_ERROR(Status)) {
> - goto ON_EXIT;
> - }
> -
> - VarArg= VarArg->Next;
> -
> - } else if (StrCmp (VarArg->Arg, L"host") == 0) {
> - //
> - // Parse till the next tag or the end of command line.
> - //
> - VarArg = VarArg->Next;
> - Status = IfConfig6ParseManualAddressList (
> - &VarArg,
> - &CfgManAddr,
> - &AddrSize
> - );
> -
> - if (EFI_ERROR (Status)) {
> - if (Status == EFI_INVALID_PARAMETER) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"host");
> - continue;
> - } else {
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Set static host ip6 address list.
> - // This is a asynchronous process.
> - //
> - IsAddressOk = FALSE;
> -
> - Status = IfCb->IfCfg->RegisterDataNotify (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeManualAddress,
> - MappedEvt
> - );
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeManualAddress,
> - AddrSize,
> - CfgManAddr
> - );
> -
> - if (Status == EFI_NOT_READY) {
> - //
> - // Get current dad transmits count.
> - //
> - CurDadXmitsLen = sizeof
> (EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS);
> - IfCb->IfCfg->GetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeDupAddrDetectTransmits,
> - &CurDadXmitsLen,
> - &CurDadXmits
> - );
> -
> - gBS->SetTimer (TimeOutEvt, TimerRelative, 50000000 + 10000000 *
> CurDadXmits);
> -
> - while (EFI_ERROR (gBS->CheckEvent (TimeOutEvt))) {
> - if (IsAddressOk) {
> - Status = EFI_SUCCESS;
> - break;
> - }
> - }
> - }
> -
> - IfCb->IfCfg->UnregisterDataNotify (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeManualAddress,
> - MappedEvt
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_MAN_HOST), mHiiHandle, Status);
> - goto ON_EXIT;
> - }
> -
> - //
> - // Check whether the address is set successfully.
> - //
> - DataSize = 0;
> -
> - Status = IfCb->IfCfg->GetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &DataSize,
> - NULL
> - );
> -
> - if (Status != EFI_BUFFER_TOO_SMALL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_EXIT;
> - }
> -
> - IfInfo = AllocateZeroPool (DataSize);
> -
> - if (IfInfo == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ON_EXIT;
> - }
> -
> - Status = IfCb->IfCfg->GetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &DataSize,
> - IfInfo
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_EXIT;
> - }
> -
> - for ( Index = 0; Index < (UINTN) (AddrSize / sizeof
> (EFI_IP6_CONFIG_MANUAL_ADDRESS)); Index++) {
> - IsAddressSet = FALSE;
> - //
> - // By default, the prefix length 0 is regarded as 64.
> - //
> - if (CfgManAddr[Index].PrefixLength == 0) {
> - CfgManAddr[Index].PrefixLength = 64;
> - }
> -
> - for (Index2 = 0; Index2 < IfInfo->AddressInfoCount; Index2++) {
> - if (EFI_IP6_EQUAL (&IfInfo->AddressInfo[Index2].Address,
> &CfgManAddr[Index].Address) &&
> - (IfInfo->AddressInfo[Index2].PrefixLength ==
> CfgManAddr[Index].PrefixLength)) {
> - IsAddressSet = TRUE;
> - break;
> - }
> - }
> -
> - if (!IsAddressSet) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_ADDRESS_FAILED), mHiiHandle);
> - IfConfig6PrintIpAddr (
> - &CfgManAddr[Index].Address,
> - &CfgManAddr[Index].PrefixLength
> - );
> - }
> - }
> -
> - } else if (StrCmp (VarArg->Arg, L"gw") == 0) {
> - //
> - // Parse till the next tag or the end of command line.
> - //
> - VarArg = VarArg->Next;
> - Status = IfConfig6ParseGwDnsAddressList (
> - &VarArg,
> - &CfgAddr,
> - &AddrSize
> - );
> -
> - if (EFI_ERROR (Status)) {
> - if (Status == EFI_INVALID_PARAMETER) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"gw");
> - continue;
> - } else {
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Set static gateway ip6 address list.
> - //
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeGateway,
> - AddrSize,
> - CfgAddr
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - } else if (StrCmp (VarArg->Arg, L"dns") == 0) {
> - //
> - // Parse till the next tag or the end of command line.
> - //
> - VarArg = VarArg->Next;
> - Status = IfConfig6ParseGwDnsAddressList (
> - &VarArg,
> - &CfgAddr,
> - &AddrSize
> - );
> -
> - if (EFI_ERROR (Status)) {
> - if (Status == EFI_INVALID_PARAMETER) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"dns");
> - continue;
> - } else {
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Set static dhs server ip6 address list.
> - //
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeDnsServer,
> - AddrSize,
> - CfgAddr
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - } else if (StrCmp (VarArg->Arg, L"id") == 0) {
> - //
> - // Parse till the next tag or the end of command line.
> - //
> - VarArg = VarArg->Next;
> - Status = IfConfig6ParseInterfaceId (&VarArg, &InterfaceId);
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Set alternative interface id.
> - //
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeAltInterfaceId,
> - sizeof (EFI_IP6_CONFIG_INTERFACE_ID),
> - InterfaceId
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - } else if (StrCmp (VarArg->Arg, L"dad") == 0) {
> - //
> - // Parse till the next tag or the end of command line.
> - //
> - VarArg = VarArg->Next;
> - Status = IfConfig6ParseDadXmits (&VarArg, &DadXmits);
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Set dad transmits count.
> - //
> - Status = IfCb->IfCfg->SetData (
> - IfCb->IfCfg,
> - Ip6ConfigDataTypeDupAddrDetectTransmits,
> - sizeof (EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS),
> - &DadXmits
> - );
> -
> - if (EFI_ERROR(Status)) {
> - goto ON_EXIT;
> - }
> - }
> - }
> -
> -ON_EXIT:
> -
> - if (CfgManAddr != NULL) {
> - FreePool (CfgManAddr);
> - }
> -
> - if (CfgAddr != NULL) {
> - FreePool (CfgAddr);
> - }
> -
> - if (MappedEvt != NULL) {
> - gBS->CloseEvent (MappedEvt);
> - }
> -
> - if (TimeOutEvt != NULL) {
> - gBS->CloseEvent (TimeOutEvt);
> - }
> -
> - if (IfInfo != NULL) {
> - FreePool (IfInfo);
> - }
> -
> - return Status;
> -
> -}
> -
> -/**
> - The IfConfig6 main process.
> -
> - @param[in] Private The pointer of IFCONFIG6_PRIVATE_DATA.
> -
> - @retval EFI_SUCCESS IfConfig6 processed successfully.
> - @retval others The IfConfig6 process failed.
> -
> -**/
> -EFI_STATUS
> -IfConfig6 (
> - IN IFCONFIG6_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> -
> - //
> - // Get configure information of all interfaces.
> - //
> - Status = IfConfig6GetInterfaceInfo (
> - Private->ImageHandle,
> - Private->IfName,
> - &Private->IfList
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> -
> - switch (Private->OpCode) {
> - case IfConfig6OpList:
> - Status = IfConfig6ShowInterfaceInfo (&Private->IfList);
> - break;
> -
> - case IfConfig6OpClear:
> - Status = IfConfig6ClearInterfaceInfo (&Private->IfList);
> - break;
> -
> - case IfConfig6OpSet:
> - Status = IfConfig6SetInterfaceInfo (&Private->IfList, Private->VarArg);
> - break;
> -
> - default:
> - Status = EFI_ABORTED;
> - }
> -
> -ON_EXIT:
> -
> - return Status;
> -}
> -
> -/**
> - The IfConfig6 cleanup process, free the allocated memory.
> -
> - @param[in] Private The pointer of IFCONFIG6_PRIVATE_DATA.
> -
> -**/
> -VOID
> -IfConfig6Cleanup (
> - IN IFCONFIG6_PRIVATE_DATA *Private
> - )
> -{
> - LIST_ENTRY *Entry;
> - LIST_ENTRY *NextEntry;
> - IFCONFIG6_INTERFACE_CB *IfCb;
> - ARG_LIST *ArgNode;
> - ARG_LIST *ArgHead;
> -
> - ASSERT (Private != NULL);
> -
> - //
> - // Clean the list which save the set config Args.
> - //
> - if (Private->VarArg != NULL) {
> - ArgHead = Private->VarArg;
> -
> - while (ArgHead->Next != NULL) {
> - ArgNode = ArgHead->Next;
> - FreePool (ArgHead);
> - ArgHead = ArgNode;
> - }
> -
> - FreePool (ArgHead);
> - }
> -
> - if (Private->IfName != NULL)
> - FreePool (Private->IfName);
> -
> -
> - //
> - // Clean the IFCONFIG6_INTERFACE_CB list.
> - //
> - Entry = Private->IfList.ForwardLink;
> - NextEntry = Entry->ForwardLink;
> -
> - while (Entry != &Private->IfList) {
> -
> - IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
> -
> - RemoveEntryList (&IfCb->Link);
> -
> - if (IfCb->IfId != NULL) {
> -
> - FreePool (IfCb->IfId);
> - }
> -
> - if (IfCb->IfInfo != NULL) {
> -
> - FreePool (IfCb->IfInfo);
> - }
> -
> - FreePool (IfCb);
> -
> - Entry = NextEntry;
> - NextEntry = Entry->ForwardLink;
> - }
> -
> - FreePool (Private);
> -}
> -
> -/**
> - This is the declaration of an EFI image entry point. This entry point is
> - the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers,
> including
> - both device drivers and bus drivers.
> -
> - The entry point for the IfConfig6 application which parses the command
> line input and calls the IfConfig6 process.
> -
> - @param[in] ImageHandle The image handle of this application.
> - @param[in] SystemTable The pointer to the EFI System Table.
> -
> - @retval EFI_SUCCESS The operation completed successfully.
> - @retval Others Some errors occur.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IfConfig6Initialize (
> - IN EFI_HANDLE ImageHandle,
> - IN EFI_SYSTEM_TABLE *SystemTable
> - )
> -{
> - EFI_STATUS Status;
> - IFCONFIG6_PRIVATE_DATA *Private;
> - EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> - LIST_ENTRY *ParamPackage;
> - CONST CHAR16 *ValueStr;
> - ARG_LIST *ArgList;
> - CHAR16 *ProblemParam;
> - CHAR16 *Str;
> -
> - Private = NULL;
> -
> - //
> - // Retrieve HII package list from ImageHandle
> - //
> - Status = gBS->OpenProtocol (
> - ImageHandle,
> - &gEfiHiiPackageListProtocolGuid,
> - (VOID **) &PackageList,
> - ImageHandle,
> - NULL,
> - EFI_OPEN_PROTOCOL_GET_PROTOCOL
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - //
> - // Publish HII package list to HII Database.
> - //
> - Status = gHiiDatabase->NewPackageList (
> - gHiiDatabase,
> - PackageList,
> - NULL,
> - &mHiiHandle
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - ASSERT (mHiiHandle != NULL);
> -
> - Status = ShellCommandLineParseEx (mIfConfig6CheckList, &ParamPackage,
> &ProblemParam, TRUE, FALSE);
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_INVALID_COMMAND), mHiiHandle, ProblemParam);
> - goto ON_EXIT;
> - }
> -
> - //
> - // To handle no option.
> - //
> - if (!ShellCommandLineGetFlag (ParamPackage, L"-r")
> && !ShellCommandLineGetFlag (ParamPackage, L"-s") &&
> - !ShellCommandLineGetFlag (ParamPackage, L"-l")) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_LACK_OPTION), mHiiHandle);
> - goto ON_EXIT;
> - }
> - //
> - // To handle conflict options.
> - //
> - if (((ShellCommandLineGetFlag (ParamPackage, L"-r")) &&
> (ShellCommandLineGetFlag (ParamPackage, L"-s"))) ||
> - ((ShellCommandLineGetFlag (ParamPackage, L"-r")) &&
> (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||
> - ((ShellCommandLineGetFlag (ParamPackage, L"-s")) &&
> (ShellCommandLineGetFlag (ParamPackage, L"-l")))) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_CONFLICT_OPTIONS), mHiiHandle);
> - goto ON_EXIT;
> - }
> -
> - Status = EFI_INVALID_PARAMETER;
> -
> - Private = AllocateZeroPool (sizeof (IFCONFIG6_PRIVATE_DATA));
> -
> - if (Private == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ON_EXIT;
> - }
> -
> - InitializeListHead (&Private->IfList);
> -
> - //
> - // To get interface name for the list option.
> - //
> - if (ShellCommandLineGetFlag (ParamPackage, L"-l")) {
> - Private->OpCode = IfConfig6OpList;
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");
> - if (ValueStr != NULL) {
> - Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);
> - ASSERT (Str != NULL);
> - Private->IfName = Str;
> - }
> - }
> - //
> - // To get interface name for the clear option.
> - //
> - if (ShellCommandLineGetFlag (ParamPackage, L"-r")) {
> - Private->OpCode = IfConfig6OpClear;
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");
> - if (ValueStr != NULL) {
> - Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);
> - ASSERT (Str != NULL);
> - Private->IfName = Str;
> - }
> - }
> - //
> - // To get interface name and corresponding Args for the set option.
> - //
> - if (ShellCommandLineGetFlag (ParamPackage, L"-s")) {
> -
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");
> - if (ValueStr == NULL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_LACK_INTERFACE), mHiiHandle);
> - goto ON_EXIT;
> - }
> - //
> - // To split the configuration into multi-section.
> - //
> - ArgList = SplitStrToList (ValueStr, L' ');
> - ASSERT (ArgList != NULL);
> -
> - Private->OpCode = IfConfig6OpSet;
> - Private->IfName = ArgList->Arg;
> -
> - Private->VarArg = ArgList->Next;
> -
> - if (Private->IfName == NULL || Private->VarArg == NULL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG6_ERR_LACK_COMMAND), mHiiHandle);
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Main process of ifconfig6.
> - //
> - Status = IfConfig6 (Private);
> -
> -ON_EXIT:
> -
> - ShellCommandLineFreeVarList (ParamPackage);
> - HiiRemovePackages (mHiiHandle);
> - if (Private != NULL)
> - IfConfig6Cleanup (Private);
> -
> - return Status;
> -}
> -
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6.h
> b/NetworkPkg/Application/IfConfig6/IfConfig6.h
> deleted file mode 100644
> index f74897108d..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6.h
> +++ /dev/null
> @@ -1,79 +0,0 @@
> -/** @file
> - The interface function declaration of shell application IfConfig6.
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef _IFCONFIG6_H_
> -#define _IFCONFIG6_H_
> -
> -enum {
> - IfConfig6OpList = 1,
> - IfConfig6OpSet = 2,
> - IfConfig6OpClear = 3
> -};
> -
> -typedef enum {
> - VarCheckReserved = -1,
> - VarCheckOk = 0,
> - VarCheckDuplicate,
> - VarCheckConflict,
> - VarCheckUnknown,
> - VarCheckLackValue,
> - VarCheckOutOfMem
> -} VAR_CHECK_CODE;
> -
> -typedef enum {
> - FlagTypeSingle = 0,
> - FlagTypeNeedVar,
> - FlagTypeNeedSet,
> - FlagTypeSkipUnknown
> -} VAR_CHECK_FLAG_TYPE;
> -
> -#define MACADDRMAXSIZE 32
> -#define PREFIXMAXLEN 16
> -
> -typedef struct _IFCONFIG6_INTERFACE_CB {
> - EFI_HANDLE NicHandle;
> - LIST_ENTRY Link;
> - EFI_IP6_CONFIG_PROTOCOL *IfCfg;
> - EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;
> - EFI_IP6_CONFIG_INTERFACE_ID *IfId;
> - EFI_IP6_CONFIG_POLICY Policy;
> - EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS Xmits;
> - UINT32 DnsCnt;
> - EFI_IPv6_ADDRESS DnsAddr[1];
> -} IFCONFIG6_INTERFACE_CB;
> -
> -typedef struct _ARG_LIST ARG_LIST;
> -
> -struct _ARG_LIST {
> - ARG_LIST *Next;
> - CHAR16 *Arg;
> -};
> -
> -typedef struct _IFCONFIG6_PRIVATE_DATA {
> - EFI_HANDLE ImageHandle;
> - LIST_ENTRY IfList;
> -
> - UINT32 OpCode;
> - CHAR16 *IfName;
> - ARG_LIST *VarArg;
> -} IFCONFIG6_PRIVATE_DATA;
> -
> -typedef struct _VAR_CHECK_ITEM{
> - CHAR16 *FlagStr;
> - UINT32 FlagID;
> - UINT32 ConflictMask;
> - VAR_CHECK_FLAG_TYPE FlagType;
> -} VAR_CHECK_ITEM;
> -#endif
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6.inf
> b/NetworkPkg/Application/IfConfig6/IfConfig6.inf
> deleted file mode 100644
> index 519b7c3279..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6.inf
> +++ /dev/null
> @@ -1,67 +0,0 @@
> -## @file
> -# Shell application IfConfig6.
> -#
> -# It is shell application which is used to set and get configurations for the
> -# EFI IPv6 network stack.
> -#
> -# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -#
> -# This program and the accompanying materials
> -# are licensed and made available under the terms and conditions of the
> BSD License
> -# which accompanies this distribution. The full text of the license may be
> found at
> -# http://opensource.org/licenses/bsd-license.php.
> -#
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -#
> -##
> -
> -[Defines]
> - INF_VERSION = 0x00010006
> - BASE_NAME = IfConfig6
> - FILE_GUID = 6F71926E-60CE-428d-AA58-A3D9FB879429
> - MODULE_TYPE = UEFI_APPLICATION
> - VERSION_STRING = 1.0
> - ENTRY_POINT = IfConfig6Initialize
> - MODULE_UNI_FILE = IfConfig6.uni
> -
> -#
> -#
> -# This flag specifies whether HII resource section is generated into PE image.
> -#
> - UEFI_HII_RESOURCE_SECTION = TRUE
> -
> -#
> -# The following information is for reference only and not required by the
> build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF
> -#
> -[Sources]
> - IfConfig6Strings.uni
> - IfConfig6.c
> - IfConfig6.h
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - MdeModulePkg/MdeModulePkg.dec
> - ShellPkg/ShellPkg.dec
> -
> -[LibraryClasses]
> - BaseLib
> - UefiBootServicesTableLib
> - UefiApplicationEntryPoint
> - UefiHiiServicesLib
> - BaseMemoryLib
> - ShellLib
> - MemoryAllocationLib
> - DebugLib
> - HiiLib
> - NetLib
> -
> -[Protocols]
> - gEfiIp6ServiceBindingProtocolGuid ## CONSUMES
> - gEfiIp6ConfigProtocolGuid ## CONSUMES
> - gEfiHiiPackageListProtocolGuid ## CONSUMES
> -
> -[UserExtensions.TianoCore."ExtraFiles"]
> - IfConfig6Extra.uni
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6.uni
> b/NetworkPkg/Application/IfConfig6/IfConfig6.uni
> deleted file mode 100644
> index e0ea589771..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6.uni
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -// /** @file
> -// Shell application IfConfig6.
> -//
> -// It is shell application which is used to set and get configurations for the
> -// EFI IPv6 network stack.
> -//
> -// Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
> -//
> -// This program and the accompanying materials
> -// are licensed and made available under the terms and conditions of the
> BSD License
> -// which accompanies this distribution. The full text of the license may be
> found at
> -// http://opensource.org/licenses/bsd-license.php.
> -//
> -// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -//
> -// **/
> -
> -
> -#string STR_MODULE_ABSTRACT #language en-US "Shell application
> IfConfig6"
> -
> -#string STR_MODULE_DESCRIPTION #language en-US "It is shell
> application which is used to set and get configurations for the EFI IPv6
> network stack."
> -
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6Extra.uni
> b/NetworkPkg/Application/IfConfig6/IfConfig6Extra.uni
> deleted file mode 100644
> index 7d3f27a073..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6Extra.uni
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -// /** @file
> -// IfConfig6 Localized Strings and Content
> -//
> -// Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
> -//
> -// This program and the accompanying materials
> -// are licensed and made available under the terms and conditions of the
> BSD License
> -// which accompanies this distribution. The full text of the license may be
> found at
> -// http://opensource.org/licenses/bsd-license.php.
> -//
> -// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -//
> -// **/
> -
> -#string STR_PROPERTIES_MODULE_NAME
> -#language en-US
> -"IfConfig6 App"
> -
> -
> diff --git a/NetworkPkg/Application/IfConfig6/IfConfig6Strings.uni
> b/NetworkPkg/Application/IfConfig6/IfConfig6Strings.uni
> deleted file mode 100644
> index 0c10bbdf78..0000000000
> --- a/NetworkPkg/Application/IfConfig6/IfConfig6Strings.uni
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -/** @file
> - String definitions for the Shell application IfConfig6.
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions
> - of the BSD License which accompanies this distribution. The full
> - text of the license may be found at<BR>
> - http://opensource.org/licenses/bsd-license.php
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#langdef en-US "English"
> -
> -#string STR_IFCONFIG6_ERR_IP6CFG_GETDATA #language en-US
> "Ip6Config->GetData return %hr\n"
> -#string STR_IFCONFIG6_INFO_BREAK #language en-US "-------------
> ----------------------------------------------------"
> -#string STR_IFCONFIG6_INFO_COLON #language en-US ":"
> -#string STR_IFCONFIG6_INFO_JOINT #language en-US " >> "
> -#string STR_IFCONFIG6_INFO_NEWLINE #language en-US "\n"
> -#string STR_IFCONFIG6_INFO_IF_NAME #language en-US
> "\n%Hname : %s%N\n"
> -#string STR_IFCONFIG6_INFO_POLICY_AUTO #language en-US
> "%Hpolicy : automatic%N\n"
> -#string STR_IFCONFIG6_INFO_POLICY_MAN #language en-US
> "%Hpolicy : manual%N\n"
> -#string STR_IFCONFIG6_INFO_DAD_TRANSMITS #language en-US
> "%Hdad xmits : %d%N\n"
> -#string STR_IFCONFIG6_INFO_INTERFACE_ID_HEAD #language en-US
> "%Hinterface id : %N"
> -#string STR_IFCONFIG6_INFO_MAC_ADDR_HEAD #language en-US
> "%Hmac addr : %N"
> -#string STR_IFCONFIG6_INFO_MAC_ADDR_BODY #language en-US
> "%02x"
> -#string STR_IFCONFIG6_INFO_IP_ADDR_HEAD #language en-US
> "\n%Hhost addr : %N\n"
> -#string STR_IFCONFIG6_INFO_DNS_ADDR_HEAD #language en-US
> "\n%Hdns server : %N\n"
> -#string STR_IFCONFIG6_INFO_IP_ADDR_BODY #language en-US
> "%02x"
> -#string STR_IFCONFIG6_INFO_IP_ADDR_BODY4BIT #language en-US
> "%x"
> -#string STR_IFCONFIG6_INFO_ROUTE_HEAD #language en-US
> "\n%Hroute table : %N\n"
> -#string STR_IFCONFIG6_INFO_PREFIX_LEN #language en-US "/%d"
> -
> -#string STR_IFCONFIG6_LINE_HELP #language en-US "Displays or
> modifies the IPv6 configuration"
> -#string STR_IFCONFIG6_ERR_LACK_INTERFACE #language en-US "Lack
> interface name.\n"
> - "Usage: IfConfig6 -s {ifname} {config
> options ...}\n"
> - "Example: IfConfig6 -s eth0 auto\n"
> -#string STR_IFCONFIG6_LACK_OPTION #language en-US "Flags lack.
> Please type 'IfConfig6 -?' for help info.\n"
> -#string STR_IFCONFIG6_CONFLICT_OPTIONS #language en-US "Flags
> conflict. Please type 'IfConfig6 -?' for help info.\n"
> -#string STR_IFCONFIG6_ERR_LACK_COMMAND #language en-US
> "Lack interface config option.\n"
> - "Usage: IfConfig6 -s {ifname} {config
> options ...}\n"
> - "Example: IfConfig6 -s eth0 auto\n"
> -#string STR_IFCONFIG6_ERR_INVALID_INTERFACE #language en-US
> "Invalid interface name.\n"
> - "Hint: Use {IfConfig6 -l} to check existing
> interface names.\n"
> -#string STR_IFCONFIG6_ERR_INVALID_COMMAND #language en-US
> "Invalid command. Bad command %H%s%N is skipped.\n"
> - "Hint: Incorrect option or arguments.
> Please type 'IfConfig6 -?' for help info.\n"
> -#string STR_IFCONFIG6_ERR_LACK_ARGUMENTS #language en-US
> "Lack arguments. Bad command %H%s%N is skipped.\n"
> - "Hint: Please type 'IfConfig6 -?' for help
> info.\n"
> -#string STR_IFCONFIG6_ERR_LACK_OPTION #language en-US "Lack
> options.\n"
> - "Hint: Please type 'IfConfig6 -?' for help
> info.\n"
> -#string STR_IFCONFIG6_ERR_MAN_HOST #language en-US "Manual
> address configuration failed. Please retry.\n"
> -#string STR_IFCONFIG6_ERR_DUPLICATE_COMMAND #language en-US
> "Duplicate commands. Bad command %H%s%N is skipped.\n"
> - "Hint: Please type 'IfConfig6 -?' for help
> info.\n"
> -#string STR_IFCONFIG6_ERR_CONFLICT_COMMAND #language en-US
> "Conflict commands. Bad command %H%s%N is skipped.\n"
> - "Hint: Please type 'IfConfig6 -?' for help
> info.\n"
> -#string STR_IFCONFIG6_ERR_UNKNOWN_COMMAND #language en-US
> "Unknown commands. Bad command %H%s%N is skipped.\n"
> - "Hint: Please type 'IfConfig6 -?' for help
> info.\n"
> -#string STR_IFCONFIG6_ERR_ADDRESS_FAILED #language en-US "It
> failed to set .\n"
> -#string STR_IFCONFIG6_INVALID_IP #language en-US "%IfConfig6:
> Invalid IP6 address, %s\n"
> -
> -#string STR_IFCONFIG6_HELP #language en-US ""
> -".TH IfConfig6 0 "Displays or modifies IPv6 configuration for network
> interface."\r\n"
> -".SH NAME\r\n"
> -"Displays or modifies IPv6 configuration for network interface.\r\n"
> -".SH SYNOPSIS\r\n"
> -" \r\n"
> -"IfConfig6 [-b] [-r {ifname}] [-l {ifname}] [-s {ifname} {command ...}] [-
> ?]\r\n"
> -".SH OPTIONS\r\n"
> -" \r\n"
> -" -b (break) enable page break.\r\n"
> -" -r (renew) renew configuration of interface and set automatic policy.\r\n"
> -" -l (list) list the configuration of interface.\r\n"
> -" -s (set) set configuration of interface as follows.\r\n"
> -" |man/auto manual or automatic policy\r\n"
> -" |id {mac} alternative interface id.\r\n"
> -" |dad {num} dad transmits count.\r\n"
> -" |host{ip} static host ip address, must under manual policy.\r\n"
> -" |gw {ip} gateway ip address, must under manual policy.\r\n"
> -" |dns {ip} dns server ip address, must under manual policy.\r\n"
> -".SH EXAMPLES\r\n"
> -" \r\n"
> -"Examples:\r\n"
> -" IfConfig6 -l\r\n"
> -" IfConfig6 -b -l\r\n"
> -" IfConfig6 -r eth0\r\n"
> -" IfConfig6 -s eth0 auto dad 10\r\n"
> -" IfConfig6 -s eth0 man id ff:dd:aa:88:66:cc\r\n"
> -" IfConfig6 -s eth1 man host 2002::1/64 2002::2/64 gw 2002::3\r\n"
> diff --git a/NetworkPkg/Application/Ping6/Ia32/Tsc.c
> b/NetworkPkg/Application/Ping6/Ia32/Tsc.c
> deleted file mode 100644
> index e2eae99077..0000000000
> --- a/NetworkPkg/Application/Ping6/Ia32/Tsc.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/** @file
> - The implement to read TSC in IA32 platform.
> -
> - Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/BaseLib.h>
> -
> -/**
> - Reads and returns the current value of the Time Stamp Counter (TSC).
> -
> - @return The current value of TSC.
> -
> -**/
> -UINT64
> -ReadTime ()
> -{
> - return AsmReadTsc ();
> -}
> diff --git a/NetworkPkg/Application/Ping6/Ipf/Itc.c
> b/NetworkPkg/Application/Ping6/Ipf/Itc.c
> deleted file mode 100644
> index 131e5c0e30..0000000000
> --- a/NetworkPkg/Application/Ping6/Ipf/Itc.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/** @file
> - The implement to read ITC in IA64 platform.
> -
> - Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/BaseLib.h>
> -
> -/**
> - Reads and returns the current value of the Interval Timer Counter Register
> (ITC).
> -
> - @return The current value of ITC.
> -
> -**/
> -UINT64
> -ReadTime ()
> -{
> - return AsmReadItc ();
> -}
> diff --git a/NetworkPkg/Application/Ping6/Ping6.c
> b/NetworkPkg/Application/Ping6/Ping6.c
> deleted file mode 100644
> index 66daac27be..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6.c
> +++ /dev/null
> @@ -1,1200 +0,0 @@
> -/** @file
> - The implementation for Ping6 application.
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/ShellLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/BaseLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/UefiHiiServicesLib.h>
> -#include <Library/HiiLib.h>
> -#include <Library/NetLib.h>
> -
> -#include <Protocol/Cpu.h>
> -#include <Protocol/ServiceBinding.h>
> -#include <Protocol/Ip6.h>
> -#include <Protocol/Ip6Config.h>
> -
> -#include "Ping6.h"
> -
> -//
> -// String token ID of Ping6 command help message text.
> -//
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID
> mStringPing6HelpToken = STRING_TOKEN (STR_PING6_HELP);
> -
> -SHELL_PARAM_ITEM Ping6ParamList[] = {
> - {
> - L"-l",
> - TypeValue
> - },
> - {
> - L"-n",
> - TypeValue
> - },
> - {
> - L"-s",
> - TypeValue
> - },
> - {
> - NULL,
> - TypeMax
> - },
> -};
> -
> -//
> -// Global Variables in Ping6 application.
> -//
> -EFI_HII_HANDLE mHiiHandle;
> -CONST CHAR16 *mIp6DstString;
> -CONST CHAR16 *mIp6SrcString;
> -UINT64 mFrequency = 0;
> -/**
> - Get and calculate the frequency in tick/ms.
> - The result is saved in the globle variable mFrequency
> -
> - @retval EFI_SUCCESS Calculated the frequency successfully.
> - @retval Others Failed to calculate the frequency.
> -
> -**/
> -EFI_STATUS
> -Ping6GetFrequency (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - EFI_CPU_ARCH_PROTOCOL *Cpu;
> - UINT64 CurrentTick;
> - UINT64 TimerPeriod;
> -
> - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)
> &Cpu);
> -
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - Status = Cpu->GetTimerValue (Cpu, 0, &CurrentTick, &TimerPeriod);
> -
> - if (EFI_ERROR (Status)) {
> - //
> - // For NT32 Simulator only. 358049 is a similar value to keep timer
> granularity.
> - // Set the timer period by ourselves.
> - //
> - TimerPeriod = (UINT64) NTTIMERPERIOD;
> - }
> - //
> - // The timer period is in femtosecond (1 femtosecond is 1e-15 second).
> - // So 1e+12 is divided by timer period to produce the freq in tick/ms.
> - //
> - mFrequency = DivU64x64Remainder (1000000000000ULL, TimerPeriod,
> NULL);
> -
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Get and calculate the duration in ms.
> -
> - @param[in] Begin The start point of time.
> - @param[in] End The end point of time.
> -
> - @return The duration in ms.
> -
> -**/
> -UINT64
> -Ping6CalculateTick (
> - IN UINT64 Begin,
> - IN UINT64 End
> - )
> -{
> - ASSERT (End > Begin);
> - return DivU64x64Remainder (End - Begin, mFrequency, NULL);
> -}
> -
> -/**
> - Destroy IPING6_ICMP6_TX_INFO, and recollect the memory.
> -
> - @param[in] TxInfo The pointer to PING6_ICMP6_TX_INFO.
> -
> -**/
> -VOID
> -Ping6DestroyTxInfo (
> - IN PING6_ICMP6_TX_INFO *TxInfo
> - )
> -{
> - EFI_IP6_TRANSMIT_DATA *TxData;
> - EFI_IP6_FRAGMENT_DATA *FragData;
> - UINTN Index;
> -
> - ASSERT (TxInfo != NULL);
> -
> - if (TxInfo->Token != NULL) {
> -
> - if (TxInfo->Token->Event != NULL) {
> - gBS->CloseEvent (TxInfo->Token->Event);
> - }
> -
> - TxData = TxInfo->Token->Packet.TxData;
> - if (TxData != NULL) {
> -
> - if (TxData->OverrideData != NULL) {
> - FreePool (TxData->OverrideData);
> - }
> -
> - if (TxData->ExtHdrs != NULL) {
> - FreePool (TxData->ExtHdrs);
> - }
> -
> - for (Index = 0; Index < TxData->FragmentCount; Index++) {
> - FragData = TxData->FragmentTable[Index].FragmentBuffer;
> - if (FragData != NULL) {
> - FreePool (FragData);
> - }
> - }
> - }
> -
> - FreePool (TxInfo->Token);
> - }
> -
> - FreePool (TxInfo);
> -}
> -
> -/**
> - Match the request, and reply with SequenceNum/TimeStamp.
> -
> - @param[in] Private The pointer to PING6_PRIVATE_DATA.
> - @param[in] Packet The pointer to ICMP6_ECHO_REQUEST_REPLY.
> -
> - @retval EFI_SUCCESS The match is successful.
> - @retval EFI_NOT_FOUND The reply can't be matched with any request.
> -
> -**/
> -EFI_STATUS
> -Ping6MatchEchoReply (
> - IN PING6_PRIVATE_DATA *Private,
> - IN ICMP6_ECHO_REQUEST_REPLY *Packet
> - )
> -{
> - PING6_ICMP6_TX_INFO *TxInfo;
> - LIST_ENTRY *Entry;
> - LIST_ENTRY *NextEntry;
> -
> - NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Private->TxList) {
> - TxInfo = BASE_CR (Entry, PING6_ICMP6_TX_INFO, Link);
> -
> - if ((TxInfo->SequenceNum == Packet->SequenceNum) && (TxInfo-
> >TimeStamp == Packet->TimeStamp)) {
> - Private->RxCount++;
> - RemoveEntryList (&TxInfo->Link);
> - Ping6DestroyTxInfo (TxInfo);
> - return EFI_SUCCESS;
> - }
> - }
> -
> - return EFI_NOT_FOUND;
> -}
> -
> -/**
> - The original intention is to send a request.
> - Currently, the application retransmits an icmp6 echo request packet
> - per second in sendnumber times that is specified by the user.
> - Because nothing can be done here, all things move to the timer rountine.
> -
> - @param[in] Event A EFI_EVENT type event.
> - @param[in] Context The pointer to Context.
> -
> -**/
> -VOID
> -EFIAPI
> -Ping6OnEchoRequestSent (
> - IN EFI_EVENT Event,
> - IN VOID *Context
> - )
> -{
> -}
> -
> -/**
> - receive reply, match and print reply infomation.
> -
> - @param[in] Event A EFI_EVENT type event.
> - @param[in] Context The pointer to context.
> -
> -**/
> -VOID
> -EFIAPI
> -Ping6OnEchoReplyReceived (
> - IN EFI_EVENT Event,
> - IN VOID *Context
> - )
> -{
> - EFI_STATUS Status;
> - PING6_PRIVATE_DATA *Private;
> - EFI_IP6_COMPLETION_TOKEN *RxToken;
> - EFI_IP6_RECEIVE_DATA *RxData;
> - ICMP6_ECHO_REQUEST_REPLY *Reply;
> - UINT32 PayLoad;
> - UINT64 Rtt;
> - CHAR8 Near;
> -
> - Private = (PING6_PRIVATE_DATA *) Context;
> -
> - if (Private->Status == EFI_ABORTED) {
> - return;
> - }
> -
> - RxToken = &Private->RxToken;
> - RxData = RxToken->Packet.RxData;
> - Reply = RxData->FragmentTable[0].FragmentBuffer;
> - PayLoad = RxData->DataLength;
> -
> - if (RxData->Header->NextHeader != IP6_ICMP) {
> - goto ON_EXIT;
> - }
> -
> - if (!IP6_IS_MULTICAST (&Private->DstAddress) &&
> - !EFI_IP6_EQUAL (&RxData->Header->SourceAddress, &Private-
> >DstAddress)) {
> - goto ON_EXIT;
> - }
> -
> - if ((Reply->Type != ICMP_V6_ECHO_REPLY) || (Reply->Code != 0)) {
> - goto ON_EXIT;
> - }
> -
> - if (PayLoad != Private->BufferSize) {
> - goto ON_EXIT;
> - }
> - //
> - // Check whether the reply matches the sent request before.
> - //
> - Status = Ping6MatchEchoReply (Private, Reply);
> - if (EFI_ERROR(Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Display statistics on this icmp6 echo reply packet.
> - //
> - Rtt = Ping6CalculateTick (Reply->TimeStamp, ReadTime ());
> - if (Rtt != 0) {
> - Near = (CHAR8) '=';
> - } else {
> - Near = (CHAR8) '<';
> - }
> -
> - Private->RttSum += Rtt;
> - Private->RttMin = Private->RttMin > Rtt ? Rtt : Private->RttMin;
> - Private->RttMax = Private->RttMax < Rtt ? Rtt : Private->RttMax;
> -
> - ShellPrintHiiEx (
> - -1,
> - -1,
> - NULL,
> - STRING_TOKEN (STR_PING6_REPLY_INFO),
> - mHiiHandle,
> - PayLoad,
> - mIp6DstString,
> - Reply->SequenceNum,
> - RxData->Header->HopLimit,
> - Near,
> - Rtt
> - );
> -
> -ON_EXIT:
> -
> - if (Private->RxCount < Private->SendNum) {
> - //
> - // Continue to receive icmp6 echo reply packets.
> - //
> - RxToken->Status = EFI_ABORTED;
> -
> - Status = Private->Ip6->Receive (Private->Ip6, RxToken);
> -
> - if (EFI_ERROR (Status)) {
> - Private->Status = EFI_ABORTED;
> - }
> - } else {
> - //
> - // All reply have already been received from the dest host.
> - //
> - Private->Status = EFI_SUCCESS;
> - }
> - //
> - // Singal to recycle the each rxdata here, not at the end of process.
> - //
> - gBS->SignalEvent (RxData->RecycleSignal);
> -}
> -
> -/**
> - Initial EFI_IP6_COMPLETION_TOKEN.
> -
> - @param[in] Private The pointer of PING6_PRIVATE_DATA.
> - @param[in] TimeStamp The TimeStamp of request.
> - @param[in] SequenceNum The SequenceNum of request.
> -
> - @return The pointer of EFI_IP6_COMPLETION_TOKEN.
> -
> -**/
> -EFI_IP6_COMPLETION_TOKEN *
> -Ping6GenerateToken (
> - IN PING6_PRIVATE_DATA *Private,
> - IN UINT64 TimeStamp,
> - IN UINT16 SequenceNum
> - )
> -{
> - EFI_STATUS Status;
> - EFI_IP6_COMPLETION_TOKEN *Token;
> - EFI_IP6_TRANSMIT_DATA *TxData;
> - ICMP6_ECHO_REQUEST_REPLY *Request;
> -
> - Request = AllocateZeroPool (Private->BufferSize);
> -
> - if (Request == NULL) {
> - return NULL;
> - }
> - //
> - // Assembly icmp6 echo request packet.
> - //
> - Request->Type = ICMP_V6_ECHO_REQUEST;
> - Request->Code = 0;
> - Request->SequenceNum = SequenceNum;
> - Request->TimeStamp = TimeStamp;
> - Request->Identifier = 0;
> - //
> - // Leave check sum to ip6 layer, since it has no idea of source address
> - // selection.
> - //
> - Request->Checksum = 0;
> -
> - TxData = AllocateZeroPool (sizeof (EFI_IP6_TRANSMIT_DATA));
> -
> - if (TxData == NULL) {
> - FreePool (Request);
> - return NULL;
> - }
> - //
> - // Assembly ipv6 token for transmit.
> - //
> - TxData->OverrideData = 0;
> - TxData->ExtHdrsLength = 0;
> - TxData->ExtHdrs = NULL;
> - TxData->DataLength = Private->BufferSize;
> - TxData->FragmentCount = 1;
> - TxData->FragmentTable[0].FragmentBuffer = (VOID *) Request;
> - TxData->FragmentTable[0].FragmentLength = Private->BufferSize;
> -
> - Token = AllocateZeroPool (sizeof (EFI_IP6_COMPLETION_TOKEN));
> -
> - if (Token == NULL) {
> - FreePool (Request);
> - FreePool (TxData);
> - return NULL;
> - }
> -
> - Token->Status = EFI_ABORTED;
> - Token->Packet.TxData = TxData;
> -
> - Status = gBS->CreateEvent (
> - EVT_NOTIFY_SIGNAL,
> - TPL_CALLBACK,
> - Ping6OnEchoRequestSent,
> - Private,
> - &Token->Event
> - );
> -
> - if (EFI_ERROR (Status)) {
> - FreePool (Request);
> - FreePool (TxData);
> - FreePool (Token);
> - return NULL;
> - }
> -
> - return Token;
> -}
> -
> -/**
> - Transmit the EFI_IP6_COMPLETION_TOKEN.
> -
> - @param[in] Private The pointer of PING6_PRIVATE_DATA.
> -
> - @retval EFI_SUCCESS Transmitted successfully.
> - @retval EFI_OUT_OF_RESOURCES No memory is available on the
> platform.
> - @retval others Transmitted unsuccessfully.
> -
> -**/
> -EFI_STATUS
> -Ping6SendEchoRequest (
> - IN PING6_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> - PING6_ICMP6_TX_INFO *TxInfo;
> -
> - TxInfo = AllocateZeroPool (sizeof (PING6_ICMP6_TX_INFO));
> -
> - if (TxInfo == NULL) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> -
> - TxInfo->TimeStamp = ReadTime ();
> - TxInfo->SequenceNum = (UINT16) (Private->TxCount + 1);
> -
> - TxInfo->Token = Ping6GenerateToken (
> - Private,
> - TxInfo->TimeStamp,
> - TxInfo->SequenceNum
> - );
> -
> - if (TxInfo->Token == NULL) {
> - Ping6DestroyTxInfo (TxInfo);
> - return EFI_OUT_OF_RESOURCES;
> - }
> -
> - Status = Private->Ip6->Transmit (Private->Ip6, TxInfo->Token);
> -
> - if (EFI_ERROR (Status)) {
> - Ping6DestroyTxInfo (TxInfo);
> - return Status;
> - }
> -
> - InsertTailList (&Private->TxList, &TxInfo->Link);
> - Private->TxCount++;
> -
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Place a completion token into the receive packet queue to receive the
> echo reply.
> -
> - @param[in] Private The pointer of PING6_PRIVATE_DATA.
> -
> - @retval EFI_SUCCESS Put the token into the receive packet queue
> successfully.
> - @retval others Put the token into the receive packet queue
> unsuccessfully.
> -
> -**/
> -EFI_STATUS
> -Ping6ReceiveEchoReply (
> - IN PING6_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> -
> - ZeroMem (&Private->RxToken, sizeof (EFI_IP6_COMPLETION_TOKEN));
> -
> - Status = gBS->CreateEvent (
> - EVT_NOTIFY_SIGNAL,
> - TPL_CALLBACK,
> - Ping6OnEchoReplyReceived,
> - Private,
> - &Private->RxToken.Event
> - );
> -
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - Private->RxToken.Status = EFI_NOT_READY;
> -
> - return Private->Ip6->Receive (Private->Ip6, &Private->RxToken);
> -}
> -
> -/**
> - Remove the timeout request from the list.
> -
> - @param[in] Event A EFI_EVENT type event.
> - @param[in] Context The pointer to Context.
> -
> -**/
> -VOID
> -EFIAPI
> -Ping6OnTimerRoutine (
> - IN EFI_EVENT Event,
> - IN VOID *Context
> - )
> -{
> - EFI_STATUS Status;
> - PING6_PRIVATE_DATA *Private;
> - PING6_ICMP6_TX_INFO *TxInfo;
> - LIST_ENTRY *Entry;
> - LIST_ENTRY *NextEntry;
> - UINT64 Time;
> -
> - Private = (PING6_PRIVATE_DATA *) Context;
> -
> - //
> - // Retransmit icmp6 echo request packets per second in sendnumber times.
> - //
> - if (Private->TxCount < Private->SendNum) {
> -
> - Status = Ping6SendEchoRequest (Private);
> - if (Private->TxCount != 0){
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_SEND_REQUEST), mHiiHandle, Private->TxCount + 1);
> - }
> - }
> - }
> - //
> - // Check whether any icmp6 echo request in the list timeout.
> - //
> - NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Private->TxList) {
> - TxInfo = BASE_CR (Entry, PING6_ICMP6_TX_INFO, Link);
> - Time = Ping6CalculateTick (TxInfo->TimeStamp, ReadTime ());
> -
> - //
> - // Remove the timeout echo request from txlist.
> - //
> - if (Time > PING6_DEFAULT_TIMEOUT) {
> -
> - if (EFI_ERROR (TxInfo->Token->Status)) {
> - Private->Ip6->Cancel (Private->Ip6, TxInfo->Token);
> - }
> - //
> - // Remove the timeout icmp6 echo request from list.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_TIMEOUT),
> mHiiHandle, TxInfo->SequenceNum);
> -
> - RemoveEntryList (&TxInfo->Link);
> - Ping6DestroyTxInfo (TxInfo);
> -
> - if (IsListEmpty (&Private->TxList) && (Private->TxCount == Private-
> >SendNum)) {
> - //
> - // All the left icmp6 echo request in the list timeout.
> - //
> - Private->Status = EFI_TIMEOUT;
> - }
> - }
> - }
> -}
> -
> -/**
> - Create a valid IP6 instance.
> -
> - @param[in] Private The pointer of PING6_PRIVATE_DATA.
> -
> - @retval EFI_SUCCESS Create a valid IP6 instance successfully.
> - @retval EFI_ABORTED Locate handle with ip6 service binding
> protocol unsuccessfully.
> - @retval EFI_INVALID_PARAMETER The source address is unspecified
> when the destination address is a link -ocal address.
> - @retval EFI_OUT_OF_RESOURCES No memory is available on the
> platform.
> - @retval EFI_NOT_FOUND The source address is not found.
> -**/
> -EFI_STATUS
> -Ping6CreateIp6Instance (
> - IN PING6_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> - UINTN HandleIndex;
> - UINTN HandleNum;
> - EFI_HANDLE *HandleBuffer;
> - EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;
> - EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;
> - EFI_IP6_CONFIG_DATA Ip6Config;
> - EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;
> - UINTN IfInfoSize;
> - EFI_IPv6_ADDRESS *Addr;
> - UINTN AddrIndex;
> -
> - HandleBuffer = NULL;
> - Ip6Sb = NULL;
> - IfInfo = NULL;
> - IfInfoSize = 0;
> -
> - //
> - // Locate all the handles with ip6 service binding protocol.
> - //
> - Status = gBS->LocateHandleBuffer (
> - ByProtocol,
> - &gEfiIp6ServiceBindingProtocolGuid,
> - NULL,
> - &HandleNum,
> - &HandleBuffer
> - );
> - if (EFI_ERROR (Status) || (HandleNum == 0)) {
> - return EFI_ABORTED;
> - }
> - //
> - // Source address is required when pinging a link-local address on multi-
> - // interfaces host.
> - //
> - if (NetIp6IsLinkLocalAddr (&Private->DstAddress) &&
> - NetIp6IsUnspecifiedAddr (&Private->SrcAddress) &&
> - (HandleNum > 1)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_INVALID_SOURCE), mHiiHandle);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_ERROR;
> - }
> - //
> - // For each ip6 protocol, check interface addresses list.
> - //
> - for (HandleIndex = 0; HandleIndex < HandleNum; HandleIndex++) {
> -
> - Ip6Sb = NULL;
> - IfInfo = NULL;
> - IfInfoSize = 0;
> -
> - Status = gBS->HandleProtocol (
> - HandleBuffer[HandleIndex],
> - &gEfiIp6ServiceBindingProtocolGuid,
> - (VOID **) &Ip6Sb
> - );
> - if (EFI_ERROR (Status)) {
> - goto ON_ERROR;
> - }
> -
> - if (NetIp6IsUnspecifiedAddr (&Private->SrcAddress)) {
> - //
> - // No need to match interface address.
> - //
> - break;
> - } else {
> - //
> - // Ip6config protocol and ip6 service binding protocol are installed
> - // on the same handle.
> - //
> - Status = gBS->HandleProtocol (
> - HandleBuffer[HandleIndex],
> - &gEfiIp6ConfigProtocolGuid,
> - (VOID **) &Ip6Cfg
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_ERROR;
> - }
> - //
> - // Get the interface information size.
> - //
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &IfInfoSize,
> - NULL
> - );
> -
> - if (Status != EFI_BUFFER_TOO_SMALL) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - IfInfo = AllocateZeroPool (IfInfoSize);
> -
> - if (IfInfo == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ON_ERROR;
> - }
> - //
> - // Get the interface info.
> - //
> - Status = Ip6Cfg->GetData (
> - Ip6Cfg,
> - Ip6ConfigDataTypeInterfaceInfo,
> - &IfInfoSize,
> - IfInfo
> - );
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_IP6CFG_GETDATA), mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> - //
> - // Check whether the source address is one of the interface addresses.
> - //
> - for (AddrIndex = 0; AddrIndex < IfInfo->AddressInfoCount; AddrIndex++)
> {
> -
> - Addr = &(IfInfo->AddressInfo[AddrIndex].Address);
> - if (EFI_IP6_EQUAL (&Private->SrcAddress, Addr)) {
> - //
> - // Match a certain interface address.
> - //
> - break;
> - }
> - }
> -
> - if (AddrIndex < IfInfo->AddressInfoCount) {
> - //
> - // Found a nic handle with right interface address.
> - //
> - break;
> - }
> - }
> -
> - FreePool (IfInfo);
> - IfInfo = NULL;
> - }
> - //
> - // No exact interface address matched.
> - //
> -
> - if (HandleIndex == HandleNum) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_SOURCE_NOT_FOUND), mHiiHandle, mIp6SrcString);
> - Status = EFI_NOT_FOUND;
> - goto ON_ERROR;
> - }
> -
> - Private->NicHandle = HandleBuffer[HandleIndex];
> -
> - ASSERT (Ip6Sb != NULL);
> - Status = Ip6Sb->CreateChild (Ip6Sb, &Private->Ip6ChildHandle);
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_ERROR;
> - }
> -
> - Status = gBS->OpenProtocol (
> - Private->Ip6ChildHandle,
> - &gEfiIp6ProtocolGuid,
> - (VOID **) &Private->Ip6,
> - Private->ImageHandle,
> - Private->Ip6ChildHandle,
> - EFI_OPEN_PROTOCOL_GET_PROTOCOL
> - );
> - if (EFI_ERROR (Status)) {
> - goto ON_ERROR;
> - }
> -
> - ZeroMem (&Ip6Config, sizeof (EFI_IP6_CONFIG_DATA));
> -
> - //
> - // Configure the ip6 instance for icmp6 packet exchange.
> - //
> - Ip6Config.DefaultProtocol = 58;
> - Ip6Config.AcceptAnyProtocol = FALSE;
> - Ip6Config.AcceptIcmpErrors = TRUE;
> - Ip6Config.AcceptPromiscuous = FALSE;
> - Ip6Config.TrafficClass = 0;
> - Ip6Config.HopLimit = 128;
> - Ip6Config.FlowLabel = 0;
> - Ip6Config.ReceiveTimeout = 0;
> - Ip6Config.TransmitTimeout = 0;
> -
> - IP6_COPY_ADDRESS (&Ip6Config.StationAddress, &Private->SrcAddress);
> -
> - IP6_COPY_ADDRESS (&Ip6Config.DestinationAddress, &Private-
> >DstAddress);
> -
> - Status = Private->Ip6->Configure (Private->Ip6, &Ip6Config);
> -
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_IP6_CONFIG),
> mHiiHandle, Status);
> - goto ON_ERROR;
> - }
> -
> - return EFI_SUCCESS;
> -
> -ON_ERROR:
> - if (HandleBuffer != NULL) {
> - FreePool (HandleBuffer);
> - }
> -
> - if (IfInfo != NULL) {
> - FreePool (IfInfo);
> - }
> -
> - if ((Ip6Sb != NULL) && (Private->Ip6ChildHandle != NULL)) {
> - Ip6Sb->DestroyChild (Ip6Sb, Private->Ip6ChildHandle);
> - }
> -
> - return Status;
> -}
> -
> -/**
> - Destroy the IP6 instance.
> -
> - @param[in] Private The pointer of PING6_PRIVATE_DATA.
> -
> -**/
> -VOID
> -Ping6DestroyIp6Instance (
> - IN PING6_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> - EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;
> -
> - gBS->CloseProtocol (
> - Private->Ip6ChildHandle,
> - &gEfiIp6ProtocolGuid,
> - Private->ImageHandle,
> - Private->Ip6ChildHandle
> - );
> -
> - Status = gBS->HandleProtocol (
> - Private->NicHandle,
> - &gEfiIp6ServiceBindingProtocolGuid,
> - (VOID **) &Ip6Sb
> - );
> -
> - if (!EFI_ERROR(Status)) {
> - Ip6Sb->DestroyChild (Ip6Sb, Private->Ip6ChildHandle);
> - }
> -}
> -
> -/**
> - The Ping6 Process.
> -
> - @param[in] ImageHandle The firmware allocated handle for the UEFI
> image.
> - @param[in] SendNumber The send request count.
> - @param[in] BufferSize The send buffer size.
> - @param[in] SrcAddress The source IPv6 address.
> - @param[in] DstAddress The destination IPv6 address.
> -
> - @retval EFI_SUCCESS The ping6 processed successfullly.
> - @retval others The ping6 processed unsuccessfully.
> -
> -**/
> -EFI_STATUS
> -Ping6 (
> - IN EFI_HANDLE ImageHandle,
> - IN UINT32 SendNumber,
> - IN UINT32 BufferSize,
> - IN EFI_IPv6_ADDRESS *SrcAddress,
> - IN EFI_IPv6_ADDRESS *DstAddress
> - )
> -{
> - EFI_STATUS Status;
> - EFI_INPUT_KEY Key;
> - PING6_PRIVATE_DATA *Private;
> - PING6_ICMP6_TX_INFO *TxInfo;
> - LIST_ENTRY *Entry;
> - LIST_ENTRY *NextEntry;
> -
> - Private = AllocateZeroPool (sizeof (PING6_PRIVATE_DATA));
> -
> - ASSERT (Private != NULL);
> -
> - Private->ImageHandle = ImageHandle;
> - Private->SendNum = SendNumber;
> - Private->BufferSize = BufferSize;
> - Private->RttMin = ~((UINT64 )(0x0));
> - Private->Status = EFI_NOT_READY;
> -
> - InitializeListHead (&Private->TxList);
> -
> - IP6_COPY_ADDRESS (&Private->SrcAddress, SrcAddress);
> - IP6_COPY_ADDRESS (&Private->DstAddress, DstAddress);
> -
> - //
> - // Open and configure a ip6 instance for ping6.
> - //
> - Status = Ping6CreateIp6Instance (Private);
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Print the command line itself.
> - //
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_START),
> mHiiHandle, mIp6DstString, Private->BufferSize);
> - //
> - // Create a ipv6 token to receive the first icmp6 echo reply packet.
> - //
> - Status = Ping6ReceiveEchoReply (Private);
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Create and start timer to send icmp6 echo request packet per second.
> - //
> - Status = gBS->CreateEvent (
> - EVT_TIMER | EVT_NOTIFY_SIGNAL,
> - TPL_CALLBACK,
> - Ping6OnTimerRoutine,
> - Private,
> - &Private->Timer
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Create a ipv6 token to send the first icmp6 echo request packet.
> - //
> - Status = Ping6SendEchoRequest (Private);
> - //
> - // EFI_NOT_READY for IPsec is enable and IKE is not established.
> - //
> - if (EFI_ERROR (Status) && (Status != EFI_NOT_READY)) {
> - if(Status == EFI_NOT_FOUND) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_NOSOURCE_INDOMAIN), mHiiHandle, mIp6DstString);
> - }
> -
> - goto ON_EXIT;
> - }
> -
> - Status = gBS->SetTimer (
> - Private->Timer,
> - TimerPeriodic,
> - PING6_ONE_SECOND
> - );
> -
> - if (EFI_ERROR (Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Control the ping6 process by two factors:
> - // 1. Hot key
> - // 2. Private->Status
> - // 2.1. success means all icmp6 echo request packets get reply packets.
> - // 2.2. timeout means the last icmp6 echo reply request timeout to get
> reply.
> - // 2.3. noready means ping6 process is on-the-go.
> - //
> - while (Private->Status == EFI_NOT_READY) {
> - Private->Ip6->Poll (Private->Ip6);
> -
> - //
> - // Terminate the ping6 process by 'esc' or 'ctl-c'.
> - //
> - Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
> -
> - if (!EFI_ERROR(Status)) {
> - if ((Key.UnicodeChar == 0x1b) || (Key.UnicodeChar == 0x03) ||
> - ((Key.UnicodeChar == 0) && (Key.ScanCode == SCAN_ESC))) {
> - goto ON_STAT;
> - }
> - }
> - }
> -
> -ON_STAT:
> - //
> - // Display the statistics in all.
> - //
> - gBS->SetTimer (Private->Timer, TimerCancel, 0);
> -
> - if (Private->TxCount != 0) {
> - ShellPrintHiiEx (
> - -1,
> - -1,
> - NULL,
> - STRING_TOKEN (STR_PING6_STAT),
> - mHiiHandle,
> - Private->TxCount,
> - Private->RxCount,
> - (100 * (Private->TxCount - Private->RxCount)) / Private->TxCount,
> - Private->RttSum
> - );
> - }
> -
> - if (Private->RxCount != 0) {
> - ShellPrintHiiEx (
> - -1,
> - -1,
> - NULL,
> - STRING_TOKEN (STR_PING6_RTT),
> - mHiiHandle,
> - Private->RttMin,
> - Private->RttMax,
> - DivU64x64Remainder (Private->RttSum, Private->RxCount, NULL)
> - );
> - }
> -
> -ON_EXIT:
> -
> - if (Private != NULL) {
> - Private->Status = EFI_ABORTED;
> -
> - NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Private->TxList) {
> - TxInfo = BASE_CR (Entry, PING6_ICMP6_TX_INFO, Link);
> -
> - Status = Private->Ip6->Cancel (Private->Ip6, TxInfo->Token);
> -
> - RemoveEntryList (&TxInfo->Link);
> - Ping6DestroyTxInfo (TxInfo);
> - }
> -
> - if (Private->Timer != NULL) {
> - gBS->CloseEvent (Private->Timer);
> - }
> -
> - if (Private->Ip6 != NULL) {
> - Status = Private->Ip6->Cancel (Private->Ip6, &Private->RxToken);
> - }
> -
> - if (Private->RxToken.Event != NULL) {
> - gBS->CloseEvent (Private->RxToken.Event);
> - }
> -
> - if (Private->Ip6ChildHandle != NULL) {
> - Ping6DestroyIp6Instance (Private);
> - }
> -
> - FreePool (Private);
> - }
> -
> - return Status;
> -}
> -
> -/**
> - This is the declaration of an EFI image entry point. This entry point is
> - the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers,
> including
> - both device drivers and bus drivers.
> -
> - The entry point for the Ping6 application that parses the command line
> input and calls the Ping6 process.
> -
> - @param[in] ImageHandle The firmware allocated handle for the UEFI
> image.
> - @param[in] SystemTable A pointer to the EFI System Table.
> -
> - @retval EFI_SUCCESS The operation completed successfully.
> - @retval EFI_INVALID_PARAMETETR Input parameters combination is
> invalid.
> - @retval Others Some errors occur.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -InitializePing6 (
> - IN EFI_HANDLE ImageHandle,
> - IN EFI_SYSTEM_TABLE *SystemTable
> - )
> -{
> - EFI_STATUS Status;
> - EFI_IPv6_ADDRESS DstAddress;
> - EFI_IPv6_ADDRESS SrcAddress;
> - UINT64 BufferSize;
> - UINTN SendNumber;
> - LIST_ENTRY *ParamPackage;
> - CONST CHAR16 *ValueStr;
> - CONST CHAR16 *ValueStrPtr;
> - UINTN NonOptionCount;
> - EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> -
> - //
> - // Retrieve HII package list from ImageHandle
> - //
> - Status = gBS->OpenProtocol (
> - ImageHandle,
> - &gEfiHiiPackageListProtocolGuid,
> - (VOID **) &PackageList,
> - ImageHandle,
> - NULL,
> - EFI_OPEN_PROTOCOL_GET_PROTOCOL
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - //
> - // Publish HII package list to HII Database.
> - //
> - Status = gHiiDatabase->NewPackageList (
> - gHiiDatabase,
> - PackageList,
> - NULL,
> - &mHiiHandle
> - );
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> -
> - ASSERT (mHiiHandle != NULL);
> -
> - Status = ShellCommandLineParseEx (Ping6ParamList, &ParamPackage,
> NULL, TRUE, FALSE);
> - if (EFI_ERROR(Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_INVALID_INPUT), mHiiHandle);
> - goto ON_EXIT;
> - }
> -
> - SendNumber = 10;
> - BufferSize = 16;
> -
> - //
> - // Parse the parameter of count number.
> - //
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-n");
> - ValueStrPtr = ValueStr;
> - if (ValueStr != NULL) {
> - SendNumber = ShellStrToUintn (ValueStrPtr);
> -
> - //
> - // ShellStrToUintn will return 0 when input is 0 or an invalid input string.
> - //
> - if ((SendNumber == 0) || (SendNumber > PING6_MAX_SEND_NUMBER))
> {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_INVALID_SEND_NUMBER), mHiiHandle, ValueStr);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Parse the parameter of buffer size.
> - //
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");
> - ValueStrPtr = ValueStr;
> - if (ValueStr != NULL) {
> - BufferSize = ShellStrToUintn (ValueStrPtr);
> -
> - //
> - // ShellStrToUintn will return 0 when input is 0 or an invalid input string.
> - //
> - if ((BufferSize < 16) || (BufferSize > PING6_MAX_BUFFER_SIZE)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_INVALID_BUFFER_SIZE), mHiiHandle, ValueStr);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_EXIT;
> - }
> - }
> -
> - ZeroMem (&SrcAddress, sizeof (EFI_IPv6_ADDRESS));
> - ZeroMem (&DstAddress, sizeof (EFI_IPv6_ADDRESS));
> -
> - //
> - // Parse the parameter of source ip address.
> - //
> - ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");
> - ValueStrPtr = ValueStr;
> - if (ValueStr != NULL) {
> - mIp6SrcString = ValueStr;
> - Status = NetLibStrToIp6 (ValueStrPtr, &SrcAddress);
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_IP),
> mHiiHandle, ValueStr);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Parse the parameter of destination ip address.
> - //
> - NonOptionCount = ShellCommandLineGetCount(ParamPackage);
> - ValueStr = ShellCommandLineGetRawValue (ParamPackage,
> (UINT32)(NonOptionCount-1));
> - if (NonOptionCount != 2) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_PING6_INVALID_INPUT), mHiiHandle);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_EXIT;
> - }
> - ValueStrPtr = ValueStr;
> - if (ValueStr != NULL) {
> - mIp6DstString = ValueStr;
> - Status = NetLibStrToIp6 (ValueStrPtr, &DstAddress);
> - if (EFI_ERROR (Status)) {
> - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_IP),
> mHiiHandle, ValueStr);
> - Status = EFI_INVALID_PARAMETER;
> - goto ON_EXIT;
> - }
> - }
> - //
> - // Get frequency to calculate the time from ticks.
> - //
> - Status = Ping6GetFrequency ();
> -
> - if (EFI_ERROR(Status)) {
> - goto ON_EXIT;
> - }
> - //
> - // Enter into ping6 process.
> - //
> - Status = Ping6 (
> - ImageHandle,
> - (UINT32)SendNumber,
> - (UINT32)BufferSize,
> - &SrcAddress,
> - &DstAddress
> - );
> -
> -ON_EXIT:
> - ShellCommandLineFreeVarList (ParamPackage);
> - HiiRemovePackages (mHiiHandle);
> - return Status;
> -}
> diff --git a/NetworkPkg/Application/Ping6/Ping6.h
> b/NetworkPkg/Application/Ping6/Ping6.h
> deleted file mode 100644
> index 6f590af8c0..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6.h
> +++ /dev/null
> @@ -1,87 +0,0 @@
> -/** @file
> - The interface function declaration of shell application Ping6 (Ping for v6
> series).
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#ifndef _PING6_H_
> -#define _PING6_H_
> -
> -#define PING6_DEFAULT_TIMEOUT 5000
> -#define PING6_MAX_SEND_NUMBER 10000
> -#define PING6_MAX_BUFFER_SIZE 32768
> -#define PING6_ONE_SECOND 10000000
> -
> -//
> -// A similar amount of time that passes in femtoseconds
> -// for each increment of TimerValue. It is for NT32 only.
> -//
> -#define NTTIMERPERIOD 358049
> -
> -#pragma pack(1)
> -
> -typedef struct _ICMP6_ECHO_REQUEST_REPLY {
> - UINT8 Type;
> - UINT8 Code;
> - UINT16 Checksum;
> - UINT16 Identifier;
> - UINT16 SequenceNum;
> - UINT64 TimeStamp;
> - UINT8 Data[1];
> -} ICMP6_ECHO_REQUEST_REPLY;
> -
> -#pragma pack()
> -
> -typedef struct _PING6_ICMP6_TX_INFO {
> - LIST_ENTRY Link;
> - UINT16 SequenceNum;
> - UINT64 TimeStamp;
> - EFI_IP6_COMPLETION_TOKEN *Token;
> -} PING6_ICMP6_TX_INFO;
> -
> -typedef struct _PING6_PRIVATE_DATA {
> - EFI_HANDLE ImageHandle;
> - EFI_HANDLE NicHandle;
> - EFI_HANDLE Ip6ChildHandle;
> - EFI_IP6_PROTOCOL *Ip6;
> - EFI_EVENT Timer;
> -
> - EFI_STATUS Status;
> - LIST_ENTRY TxList;
> - EFI_IP6_COMPLETION_TOKEN RxToken;
> - UINT16 RxCount;
> - UINT16 TxCount;
> - UINT64 RttSum;
> - UINT64 RttMin;
> - UINT64 RttMax;
> - UINT32 SequenceNum;
> -
> - EFI_IPv6_ADDRESS SrcAddress;
> - EFI_IPv6_ADDRESS DstAddress;
> - UINT32 SendNum;
> - UINT32 BufferSize;
> -} PING6_PRIVATE_DATA;
> -
> -/**
> - Reads and returns the current value of register.
> - In IA64, the register is the Interval Timer Vector (ITV).
> - In X86(IA32/X64), the register is the Time Stamp Counter (TSC)
> -
> - @return The current value of the register.
> -
> -**/
> -UINT64
> -ReadTime (
> - VOID
> - );
> -
> -#endif
> diff --git a/NetworkPkg/Application/Ping6/Ping6.inf
> b/NetworkPkg/Application/Ping6/Ping6.inf
> deleted file mode 100644
> index 68b5f2d32f..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6.inf
> +++ /dev/null
> @@ -1,78 +0,0 @@
> -## @file
> -# Shell application Ping6.
> -#
> -# It is an shell application which is used to Ping the target host with IPv6
> stack.
> -#
> -# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -#
> -# This program and the accompanying materials
> -# are licensed and made available under the terms and conditions of the
> BSD License
> -# which accompanies this distribution. The full text of the license may be
> found at
> -# http://opensource.org/licenses/bsd-license.php.
> -#
> -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -#
> -##
> -
> -[Defines]
> - INF_VERSION = 0x00010006
> - BASE_NAME = Ping6
> - FILE_GUID = F35F733F-5235-4d7b-83FA-97780CEBCB20
> - MODULE_TYPE = UEFI_APPLICATION
> - VERSION_STRING = 1.0
> - ENTRY_POINT = InitializePing6
> - MODULE_UNI_FILE = Ping6.uni
> -
> -#
> -#
> -# This flag specifies whether HII resource section is generated into PE image.
> -#
> - UEFI_HII_RESOURCE_SECTION = TRUE
> -
> -#
> -# The following information is for reference only and not required by the
> build tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64 IPF
> -#
> -
> -[Sources]
> - Ping6.c
> - Ping6Strings.uni
> - Ping6.h
> -
> -[Sources.IA32]
> - Ia32/Tsc.c
> -
> -[Sources.X64]
> - X64/Tsc.c
> -
> -[Sources.IPF]
> - Ipf/Itc.c
> -
> -[Packages]
> - MdePkg/MdePkg.dec
> - MdeModulePkg/MdeModulePkg.dec
> - ShellPkg/ShellPkg.dec
> -
> -[LibraryClasses]
> - BaseLib
> - UefiBootServicesTableLib
> - UefiApplicationEntryPoint
> - UefiHiiServicesLib
> - BaseMemoryLib
> - ShellLib
> - MemoryAllocationLib
> - DebugLib
> - HiiLib
> - NetLib
> -
> -[Protocols]
> - gEfiCpuArchProtocolGuid ## CONSUMES
> - gEfiIp6ProtocolGuid ## CONSUMES
> - gEfiIp6ServiceBindingProtocolGuid ## CONSUMES
> - gEfiIp6ConfigProtocolGuid ## CONSUMES
> - gEfiHiiPackageListProtocolGuid ## CONSUMES
> -
> -[UserExtensions.TianoCore."ExtraFiles"]
> - Ping6Extra.uni
> diff --git a/NetworkPkg/Application/Ping6/Ping6.uni
> b/NetworkPkg/Application/Ping6/Ping6.uni
> deleted file mode 100644
> index afd14b796a..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6.uni
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -// /** @file
> -// Shell application Ping6.
> -//
> -// It is an shell application which is used to Ping the target host with IPv6
> stack.
> -//
> -// Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
> -//
> -// This program and the accompanying materials
> -// are licensed and made available under the terms and conditions of the
> BSD License
> -// which accompanies this distribution. The full text of the license may be
> found at
> -// http://opensource.org/licenses/bsd-license.php.
> -//
> -// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -//
> -// **/
> -
> -
> -#string STR_MODULE_ABSTRACT #language en-US "Shell application
> Ping6"
> -
> -#string STR_MODULE_DESCRIPTION #language en-US "It is an shell
> application which is used to Ping the target host with IPv6 stack."
> -
> diff --git a/NetworkPkg/Application/Ping6/Ping6Extra.uni
> b/NetworkPkg/Application/Ping6/Ping6Extra.uni
> deleted file mode 100644
> index 097ea5578a..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6Extra.uni
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -// /** @file
> -// Ping6 Localized Strings and Content
> -//
> -// Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
> -//
> -// This program and the accompanying materials
> -// are licensed and made available under the terms and conditions of the
> BSD License
> -// which accompanies this distribution. The full text of the license may be
> found at
> -// http://opensource.org/licenses/bsd-license.php.
> -//
> -// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -//
> -// **/
> -
> -#string STR_PROPERTIES_MODULE_NAME
> -#language en-US
> -"Ping6 App"
> -
> -
> diff --git a/NetworkPkg/Application/Ping6/Ping6Strings.uni
> b/NetworkPkg/Application/Ping6/Ping6Strings.uni
> deleted file mode 100644
> index e4ab19fe63..0000000000
> --- a/NetworkPkg/Application/Ping6/Ping6Strings.uni
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -/** @file
> - String definitions for the Shell Ping6 application.
> -
> - Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#langdef en-US "English"
> -
> -#string STR_PING6_INVALID_IP #language en-US "%Ping6: Invalid
> IP6 address, %s\n"
> -#string STR_PING6_INVALID_INPUT #language en-US "%Ping6: Invalid
> input, please type 'Ping6 -?'for help\n"
> -#string STR_PING6_INVALID_SEND_NUMBER #language en-US "%Ping6:
> Invalid send number, %s\n"
> -#string STR_PING6_INVALID_BUFFER_SIZE #language en-US "%Ping6:
> Invalid buffer size, %s\n"
> -#string STR_PING6_INVALID_SOURCE #language en-US "%Ping6:
> Require source interface option\n"
> -#string STR_PING6_IP6_CONFIG #language en-US "%Ping6: Ip6-
> >Config %r\n"
> -#string STR_PING6_IP6_GETMODE #language en-US "%Ping6: Ip6-
> >GetModeData %r\n"
> -#string STR_PING6_IP6CFG_GETDATA #language en-US "%Ping6:
> Ip6Config->GetData %r\n"
> -#string STR_PING6_SEND_REQUEST #language en-US "Echo request
> sequence %d fails.\n"
> -#string STR_PING6_SOURCE_NOT_FOUND #language en-US
> "Source %s not found.\n"
> -#string STR_PING6_NOSOURCE_INDOMAIN #language en-US "No
> sources in %s's multicast domain.\n"
> -#string STR_PING6_START #language en-US "Ping %s %d data
> bytes\n\n"
> -#string STR_PING6_TIMEOUT #language en-US "Echo request
> sequence %d timeout.\n"
> -#string STR_PING6_REPLY_INFO #language en-US "%d bytes
> from %s : icmp_seq=%d ttl=%d time%c%dms\n"
> -#string STR_PING6_STAT #language en-US "\n%d packets
> transmitted, %d received, %d%% packet loss, time %dms\n"
> -#string STR_PING6_RTT #language en-US "\nRtt(round trip time)
> min=%dms max=%dms avg=%dms\n"
> -#string STR_PING6_LINE_HELP #language en-US "Ping a target
> machine with UEFI IPv6 network stack"
> -
> -#string STR_PING6_HELP #language en-US ""
> -".TH Ping6 0 "Ping a target machine with UEFI IPv6 network stack."\r\n"
> -".SH NAME\r\n"
> -"Ping a target machine with UEFI IPv6 network stack.\r\n"
> -".SH SYNOPSIS\r\n"
> -" \r\n"
> -"Ping6 [-l size] [-n count] [-s SourceIp] TargetIp\r\n"
> -".SH OPTIONS\r\n"
> -" \r\n"
> -" -l size Send buffer size, in bytes(default=16, min=16, max=32768).\r\n"
> -" -n count Send request count, (default=10, min=1, max=10000).\r\n"
> -" -s SourceIp Source IPv6 address.\r\n"
> -" TargetIp Target IPv6 address.\r\n"
> -".SH EXAMPLES\r\n"
> -" \r\n"
> -"Examples:\r\n"
> -" Ping6 -s 2002::1 2002::2 -l 1000 -n 5\r\n"
> -" Ping6 2002::2 -l 1000\r\n"
> diff --git a/NetworkPkg/Application/Ping6/X64/Tsc.c
> b/NetworkPkg/Application/Ping6/X64/Tsc.c
> deleted file mode 100644
> index b3e7bdbb96..0000000000
> --- a/NetworkPkg/Application/Ping6/X64/Tsc.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/** @file
> - The implement to read TSC in X64 platform.
> -
> - Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
> -
> - This program and the accompanying materials
> - are licensed and made available under the terms and conditions of the BSD
> License
> - which accompanies this distribution. The full text of the license may be
> found at
> - http://opensource.org/licenses/bsd-license.php.
> -
> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include <Library/BaseLib.h>
> -
> -/**
> - Reads and returns the current value of Time Stamp Counter (TSC).
> -
> - @return The current value of TSC
> -
> -**/
> -UINT64
> -ReadTime ()
> -{
> - return AsmReadTsc ();
> -}
> diff --git a/NetworkPkg/NetworkPkg.dsc b/NetworkPkg/NetworkPkg.dsc
> index 56a1a6b617..b193f5f38b 100644
> --- a/NetworkPkg/NetworkPkg.dsc
> +++ b/NetworkPkg/NetworkPkg.dsc
> @@ -116,7 +116,6 @@
> NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> NetworkPkg/HttpBootDxe/HttpBootDxe.inf
>
> - NetworkPkg/Application/IfConfig6/IfConfig6.inf
> NetworkPkg/Application/IpsecConfig/IpSecConfig.inf
> NetworkPkg/Application/VConfig/VConfig.inf
>
> @@ -126,8 +125,6 @@
> NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
> NetworkPkg/TlsDxe/TlsDxe.inf
> NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf
> -
> - NetworkPkg/Application/Ping6/Ping6.inf
>
> [BuildOptions]
> *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
> --
> 2.13.0.windows.1
next prev parent reply other threads:[~2017-10-18 7:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-17 13:07 [Patch] NetworkPkg: Remove ping6 and ifconfig shell application Fu Siyuan
2017-10-18 7:15 ` Wu, Jiaxin [this message]
2017-10-18 7:35 ` Ye, Ting
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=895558F6EA4E3B41AC93A00D163B72741633ED29@SHSMSX103.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox