From b9e5df433641dfe7c597bfb7b15f2cce64e01e5b Mon Sep 17 00:00:00 2001 From: Fu Siyuan Date: Tue, 17 Oct 2017 21:05:59 +0800 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 Reviewed-by: Wu Jiaxin Reviewed-by: Ye Ting --- NetworkPkg/Application/IfConfig6/IfConfig6.c | 1793 ----------------- NetworkPkg/Application/IfConfig6/IfConfig6.h | 79 - .../Application/IfConfig6/IfConfig6.inf | 67 - .../Application/IfConfig6/IfConfig6.uni | 23 - .../Application/IfConfig6/IfConfig6Extra.uni | 20 - .../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.
- - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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.
- - 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.
-# -# 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.
-// -// 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.
-// -// 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.
- - 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_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.
- - 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 - -/** - 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.
- - 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 - -/** - 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.
- - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#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.
- - 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.
-# -# 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.
-// -// 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.
-// -// 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.
- - 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.
- - 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 - -/** - 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.39.2