* [Patch] NetworkPkg: Remove ping6 and ifconfig shell application.
@ 2017-10-17 13:07 Fu Siyuan
2017-10-18 7:15 ` Wu, Jiaxin
2017-10-18 7:35 ` Ye, Ting
0 siblings, 2 replies; 3+ messages in thread
From: Fu Siyuan @ 2017-10-17 13:07 UTC (permalink / raw)
To: edk2-devel; +Cc: Wu Jiaxin, Ye Ting
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 -
| 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 -
| 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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Patch] NetworkPkg: Remove ping6 and ifconfig shell application.
2017-10-17 13:07 [Patch] NetworkPkg: Remove ping6 and ifconfig shell application Fu Siyuan
@ 2017-10-18 7:15 ` Wu, Jiaxin
2017-10-18 7:35 ` Ye, Ting
1 sibling, 0 replies; 3+ messages in thread
From: Wu, Jiaxin @ 2017-10-18 7:15 UTC (permalink / raw)
To: Fu, Siyuan, edk2-devel@lists.01.org; +Cc: Ye, Ting
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch] NetworkPkg: Remove ping6 and ifconfig shell application.
2017-10-17 13:07 [Patch] NetworkPkg: Remove ping6 and ifconfig shell application Fu Siyuan
2017-10-18 7:15 ` Wu, Jiaxin
@ 2017-10-18 7:35 ` Ye, Ting
1 sibling, 0 replies; 3+ messages in thread
From: Ye, Ting @ 2017-10-18 7:35 UTC (permalink / raw)
To: Fu, Siyuan, edk2-devel@lists.01.org; +Cc: Wu, Jiaxin
Reviewed-by: Ye Ting <ting.ye@intel.com>
-----Original Message-----
From: Fu, Siyuan
Sent: Tuesday, October 17, 2017 9:08 PM
To: edk2-devel@lists.01.org
Cc: Wu, Jiaxin; Ye, Ting
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 -
| 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 -
| 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
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-10-18 7:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-17 13:07 [Patch] NetworkPkg: Remove ping6 and ifconfig shell application Fu Siyuan
2017-10-18 7:15 ` Wu, Jiaxin
2017-10-18 7:35 ` Ye, Ting
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox