/** @file\r
The implementation for Ping6 application.\r
\r
- Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "UefiShellNetwork2CommandsLib.h"\r
\r
-#define PING6_DEFAULT_TIMEOUT 5000\r
-#define PING6_MAX_SEND_NUMBER 10000\r
-#define PING6_MAX_BUFFER_SIZE 32768\r
-#define PING6_ONE_SECOND 10000000\r
-#define STALL_1_MILLI_SECOND 1000\r
+#define PING6_DEFAULT_TIMEOUT 5000\r
+#define PING6_MAX_SEND_NUMBER 10000\r
+#define PING6_MAX_BUFFER_SIZE 32768\r
+#define PING6_ONE_SECOND 10000000\r
+#define STALL_1_MILLI_SECOND 1000\r
\r
#pragma pack(1)\r
\r
typedef struct _ICMP6_ECHO_REQUEST_REPLY {\r
- UINT8 Type;\r
- UINT8 Code;\r
- UINT16 Checksum;\r
- UINT16 Identifier;\r
- UINT16 SequenceNum;\r
- UINT32 TimeStamp;\r
- UINT8 Data[1];\r
+ UINT8 Type;\r
+ UINT8 Code;\r
+ UINT16 Checksum;\r
+ UINT16 Identifier;\r
+ UINT16 SequenceNum;\r
+ UINT32 TimeStamp;\r
+ UINT8 Data[1];\r
} ICMP6_ECHO_REQUEST_REPLY;\r
\r
#pragma pack()\r
EFI_EVENT Timer;\r
\r
UINT32 TimerPeriod;\r
- UINT32 RttTimerTick; \r
+ UINT32 RttTimerTick;\r
EFI_EVENT RttTimer;\r
\r
EFI_STATUS Status;\r
UINT32 BufferSize;\r
} PING6_PRIVATE_DATA;\r
\r
-\r
-SHELL_PARAM_ITEM Ping6ParamList[] = {\r
+SHELL_PARAM_ITEM Ping6ParamList[] = {\r
{\r
L"-l",\r
TypeValue\r
//\r
// Global Variables in Ping6 application.\r
//\r
-CONST CHAR16 *mIp6DstString;\r
-CONST CHAR16 *mIp6SrcString;\r
-EFI_CPU_ARCH_PROTOCOL *Cpu = NULL;\r
+CONST CHAR16 *mIp6DstString;\r
+CONST CHAR16 *mIp6SrcString;\r
+EFI_CPU_ARCH_PROTOCOL *Cpu = NULL;\r
\r
/**\r
RTT timer tick routine.\r
VOID\r
EFIAPI\r
Ping6RttTimerTickRoutine (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- UINT32 *RttTimerTick;\r
+ UINT32 *RttTimerTick;\r
\r
- RttTimerTick = (UINT32*) Context;\r
+ RttTimerTick = (UINT32 *)Context;\r
(*RttTimerTick)++;\r
}\r
\r
\r
**/\r
UINT32\r
-Ping6GetTimerPeriod(\r
+Ping6GetTimerPeriod (\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT32 RttTimerTick;\r
- EFI_EVENT TimerEvent;\r
- UINT32 StallCounter;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ UINT32 RttTimerTick;\r
+ EFI_EVENT TimerEvent;\r
+ UINT32 StallCounter;\r
+ EFI_TPL OldTpl;\r
\r
RttTimerTick = 0;\r
- StallCounter = 0;\r
+ StallCounter = 0;\r
\r
Status = gBS->CreateEvent (\r
EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
return StallCounter / RttTimerTick;\r
}\r
\r
-\r
/**\r
Initialize the timer event for RTT (round trip time).\r
\r
**/\r
EFI_STATUS\r
Ping6InitRttTimer (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Private->TimerPeriod = Ping6GetTimerPeriod ();\r
if (Private->TimerPeriod == 0) {\r
return EFI_ABORTED;\r
}\r
- \r
+\r
Private->RttTimerTick = 0;\r
- Status = gBS->CreateEvent (\r
- EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
- TPL_NOTIFY,\r
- Ping6RttTimerTickRoutine,\r
- &Private->RttTimerTick,\r
- &Private->RttTimer\r
- );\r
+ Status = gBS->CreateEvent (\r
+ EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ Ping6RttTimerTickRoutine,\r
+ &Private->RttTimerTick,\r
+ &Private->RttTimer\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
\r
return EFI_SUCCESS;\r
-\r
}\r
\r
/**\r
**/\r
VOID\r
Ping6FreeRttTimer (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
if (Private->RttTimer != NULL) {\r
\r
/**\r
Read the current time.\r
- \r
+\r
@param[in] Private The pointer to PING6_PRIVATE_DATA.\r
\r
@retval the current tick value.\r
**/\r
UINT32\r
Ping6ReadTime (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
return Private->RttTimerTick;\r
**/\r
UINT32\r
Ping6CalculateTick (\r
- IN PING6_PRIVATE_DATA *Private,\r
- IN UINT32 Begin,\r
- IN UINT32 End\r
+ IN PING6_PRIVATE_DATA *Private,\r
+ IN UINT32 Begin,\r
+ IN UINT32 End\r
)\r
{\r
if (End < Begin) {\r
}\r
\r
return (End - Begin) * Private->TimerPeriod;\r
-\r
}\r
\r
/**\r
**/\r
VOID\r
Ping6DestroyTxInfo (\r
- IN PING6_ICMP6_TX_INFO *TxInfo\r
+ IN PING6_ICMP6_TX_INFO *TxInfo\r
)\r
{\r
- EFI_IP6_TRANSMIT_DATA *TxData;\r
- EFI_IP6_FRAGMENT_DATA *FragData;\r
- UINTN Index;\r
+ EFI_IP6_TRANSMIT_DATA *TxData;\r
+ EFI_IP6_FRAGMENT_DATA *FragData;\r
+ UINTN Index;\r
\r
ASSERT (TxInfo != NULL);\r
\r
if (TxInfo->Token != NULL) {\r
-\r
if (TxInfo->Token->Event != NULL) {\r
gBS->CloseEvent (TxInfo->Token->Event);\r
}\r
\r
TxData = TxInfo->Token->Packet.TxData;\r
if (TxData != NULL) {\r
-\r
if (TxData->OverrideData != NULL) {\r
FreePool (TxData->OverrideData);\r
}\r
**/\r
EFI_STATUS\r
Ping6OnMatchEchoReply (\r
- IN PING6_PRIVATE_DATA *Private,\r
- IN ICMP6_ECHO_REQUEST_REPLY *Packet\r
+ IN PING6_PRIVATE_DATA *Private,\r
+ IN ICMP6_ECHO_REQUEST_REPLY *Packet\r
)\r
{\r
- PING6_ICMP6_TX_INFO *TxInfo;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
+ PING6_ICMP6_TX_INFO *TxInfo;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Private->TxList) {\r
TxInfo = BASE_CR (Entry, PING6_ICMP6_TX_INFO, Link);\r
VOID\r
EFIAPI\r
Ping6OnEchoRequestSent6 (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
}\r
VOID\r
EFIAPI\r
Ping6OnEchoReplyReceived6 (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- PING6_PRIVATE_DATA *Private;\r
- EFI_IP6_COMPLETION_TOKEN *RxToken;\r
- EFI_IP6_RECEIVE_DATA *RxData;\r
- ICMP6_ECHO_REQUEST_REPLY *Reply;\r
- UINT32 PayLoad;\r
- UINT32 Rtt;\r
+ EFI_STATUS Status;\r
+ PING6_PRIVATE_DATA *Private;\r
+ EFI_IP6_COMPLETION_TOKEN *RxToken;\r
+ EFI_IP6_RECEIVE_DATA *RxData;\r
+ ICMP6_ECHO_REQUEST_REPLY *Reply;\r
+ UINT32 PayLoad;\r
+ UINT32 Rtt;\r
\r
- Private = (PING6_PRIVATE_DATA *) Context;\r
+ Private = (PING6_PRIVATE_DATA *)Context;\r
\r
if (Private->Status == EFI_ABORTED) {\r
return;\r
}\r
\r
if (!IP6_IS_MULTICAST (&Private->DstAddress) &&\r
- !EFI_IP6_EQUAL (&RxData->Header->SourceAddress, &Private->DstAddress)) {\r
+ !EFI_IP6_EQUAL (&RxData->Header->SourceAddress, &Private->DstAddress))\r
+ {\r
goto ON_EXIT;\r
}\r
\r
if (PayLoad != Private->BufferSize) {\r
goto ON_EXIT;\r
}\r
+\r
//\r
// Check whether the reply matches the sent request before.\r
//\r
Status = Ping6OnMatchEchoReply (Private, Reply);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
goto ON_EXIT;\r
}\r
+\r
//\r
// Display statistics on this icmp6 echo reply packet.\r
//\r
- Rtt = Ping6CalculateTick (Private, Reply->TimeStamp, Ping6ReadTime (Private));\r
+ Rtt = Ping6CalculateTick (Private, Reply->TimeStamp, Ping6ReadTime (Private));\r
\r
Private->RttSum += Rtt;\r
Private->RttMin = Private->RttMin > Rtt ? Rtt : Private->RttMin;\r
//\r
Private->Status = EFI_SUCCESS;\r
}\r
+\r
//\r
// Singal to recycle the each rxdata here, not at the end of process.\r
//\r
**/\r
EFI_IP6_COMPLETION_TOKEN *\r
Ping6GenerateToken (\r
- IN PING6_PRIVATE_DATA *Private,\r
- IN UINT32 TimeStamp,\r
- IN UINT16 SequenceNum\r
+ IN PING6_PRIVATE_DATA *Private,\r
+ IN UINT32 TimeStamp,\r
+ IN UINT16 SequenceNum\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_IP6_COMPLETION_TOKEN *Token;\r
- EFI_IP6_TRANSMIT_DATA *TxData;\r
- ICMP6_ECHO_REQUEST_REPLY *Request;\r
+ EFI_STATUS Status;\r
+ EFI_IP6_COMPLETION_TOKEN *Token;\r
+ EFI_IP6_TRANSMIT_DATA *TxData;\r
+ ICMP6_ECHO_REQUEST_REPLY *Request;\r
\r
Request = AllocateZeroPool (Private->BufferSize);\r
\r
if (Request == NULL) {\r
return NULL;\r
}\r
+\r
//\r
// Assembly icmp6 echo request packet.\r
//\r
// Leave check sum to ip6 layer, since it has no idea of source address\r
// selection.\r
//\r
- Request->Checksum = 0;\r
+ Request->Checksum = 0;\r
\r
TxData = AllocateZeroPool (sizeof (EFI_IP6_TRANSMIT_DATA));\r
\r
FreePool (Request);\r
return NULL;\r
}\r
+\r
//\r
// Assembly ipv6 token for transmit.\r
//\r
- TxData->OverrideData = 0;\r
- TxData->ExtHdrsLength = 0;\r
- TxData->ExtHdrs = NULL;\r
- TxData->DataLength = Private->BufferSize;\r
- TxData->FragmentCount = 1;\r
- TxData->FragmentTable[0].FragmentBuffer = (VOID *) Request;\r
+ TxData->OverrideData = 0;\r
+ TxData->ExtHdrsLength = 0;\r
+ TxData->ExtHdrs = NULL;\r
+ TxData->DataLength = Private->BufferSize;\r
+ TxData->FragmentCount = 1;\r
+ TxData->FragmentTable[0].FragmentBuffer = (VOID *)Request;\r
TxData->FragmentTable[0].FragmentLength = Private->BufferSize;\r
\r
Token = AllocateZeroPool (sizeof (EFI_IP6_COMPLETION_TOKEN));\r
return NULL;\r
}\r
\r
- Token->Status = EFI_ABORTED;\r
- Token->Packet.TxData = TxData;\r
+ Token->Status = EFI_ABORTED;\r
+ Token->Packet.TxData = TxData;\r
\r
Status = gBS->CreateEvent (\r
EVT_NOTIFY_SIGNAL,\r
**/\r
EFI_STATUS\r
Ping6SendEchoRequest (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
- PING6_ICMP6_TX_INFO *TxInfo;\r
+ EFI_STATUS Status;\r
+ PING6_ICMP6_TX_INFO *TxInfo;\r
\r
TxInfo = AllocateZeroPool (sizeof (PING6_ICMP6_TX_INFO));\r
\r
}\r
\r
TxInfo->TimeStamp = Ping6ReadTime (Private);\r
- TxInfo->SequenceNum = (UINT16) (Private->TxCount + 1);\r
+ TxInfo->SequenceNum = (UINT16)(Private->TxCount + 1);\r
\r
- TxInfo->Token = Ping6GenerateToken (\r
- Private,\r
- TxInfo->TimeStamp,\r
- TxInfo->SequenceNum\r
- );\r
+ TxInfo->Token = Ping6GenerateToken (\r
+ Private,\r
+ TxInfo->TimeStamp,\r
+ TxInfo->SequenceNum\r
+ );\r
\r
if (TxInfo->Token == NULL) {\r
Ping6DestroyTxInfo (TxInfo);\r
**/\r
EFI_STATUS\r
Ping6OnReceiveEchoReply (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
ZeroMem (&Private->RxToken, sizeof (EFI_IP6_COMPLETION_TOKEN));\r
\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_IP6_RECEIVE), gShellNetwork2HiiHandle, Status);\r
}\r
+\r
return Status;\r
}\r
\r
VOID\r
EFIAPI\r
Ping6OnTimerRoutine6 (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- PING6_PRIVATE_DATA *Private;\r
- PING6_ICMP6_TX_INFO *TxInfo;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- UINT64 Time;\r
+ EFI_STATUS Status;\r
+ PING6_PRIVATE_DATA *Private;\r
+ PING6_ICMP6_TX_INFO *TxInfo;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ UINT64 Time;\r
\r
- Private = (PING6_PRIVATE_DATA *) Context;\r
+ Private = (PING6_PRIVATE_DATA *)Context;\r
\r
//\r
// Retransmit icmp6 echo request packets per second in sendnumber times.\r
//\r
if (Private->TxCount < Private->SendNum) {\r
-\r
Status = Ping6SendEchoRequest (Private);\r
- if (Private->TxCount != 0){\r
+ if (Private->TxCount != 0) {\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_SEND_REQUEST), gShellNetwork2HiiHandle, Private->TxCount + 1);\r
}\r
}\r
}\r
+\r
//\r
// Check whether any icmp6 echo request in the list timeout.\r
//\r
// Remove the timeout echo request from txlist.\r
//\r
if (Time > PING6_DEFAULT_TIMEOUT) {\r
-\r
if (EFI_ERROR (TxInfo->Token->Status)) {\r
Private->Ip6->Cancel (Private->Ip6, TxInfo->Token);\r
}\r
+\r
//\r
// Remove the timeout icmp6 echo request from list.\r
//\r
**/\r
EFI_STATUS\r
Ping6CreateIpInstance (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN HandleIndex;\r
- UINTN HandleNum;\r
- EFI_HANDLE *HandleBuffer;\r
- BOOLEAN UnspecifiedSrc;\r
- EFI_STATUS MediaStatus;\r
- EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;\r
- EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;\r
- EFI_IP6_CONFIG_DATA Ip6Config;\r
- EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;\r
- UINTN IfInfoSize;\r
- EFI_IPv6_ADDRESS *Addr;\r
- UINTN AddrIndex;\r
-\r
- HandleBuffer = NULL;\r
- UnspecifiedSrc = FALSE;\r
- MediaStatus = EFI_SUCCESS\r
- Ip6Sb = NULL;\r
- IfInfo = NULL;\r
- IfInfoSize = 0;\r
+ EFI_STATUS Status;\r
+ UINTN HandleIndex;\r
+ UINTN HandleNum;\r
+ EFI_HANDLE *HandleBuffer;\r
+ BOOLEAN UnspecifiedSrc;\r
+ EFI_STATUS MediaStatus;\r
+ EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;\r
+ EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;\r
+ EFI_IP6_CONFIG_DATA Ip6Config;\r
+ EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;\r
+ UINTN IfInfoSize;\r
+ EFI_IPv6_ADDRESS *Addr;\r
+ UINTN AddrIndex;\r
+\r
+ HandleBuffer = NULL;\r
+ UnspecifiedSrc = FALSE;\r
+ MediaStatus = EFI_SUCCESS;\r
+ Ip6Sb = NULL;\r
+ IfInfo = NULL;\r
+ IfInfoSize = 0;\r
\r
//\r
// Locate all the handles with ip6 service binding protocol.\r
\r
if (NetIp6IsUnspecifiedAddr (&Private->SrcAddress)) {\r
//\r
- // SrcAddress is unspecified. So, both connected and configured interface will be automatic selected. \r
+ // SrcAddress is unspecified. So, both connected and configured interface will be automatic selected.\r
//\r
UnspecifiedSrc = TRUE;\r
}\r
- \r
+\r
//\r
// Source address is required when pinging a link-local address.\r
//\r
Status = EFI_INVALID_PARAMETER;\r
goto ON_ERROR;\r
}\r
- \r
+\r
//\r
// For each ip6 protocol, check interface addresses list.\r
//\r
for (HandleIndex = 0; HandleIndex < HandleNum; HandleIndex++) {\r
-\r
Ip6Sb = NULL;\r
IfInfo = NULL;\r
IfInfoSize = 0;\r
Status = gBS->HandleProtocol (\r
HandleBuffer[HandleIndex],\r
&gEfiIp6ServiceBindingProtocolGuid,\r
- (VOID **) &Ip6Sb\r
+ (VOID **)&Ip6Sb\r
);\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
Status = gBS->HandleProtocol (\r
HandleBuffer[HandleIndex],\r
&gEfiIp6ConfigProtocolGuid,\r
- (VOID **) &Ip6Cfg\r
+ (VOID **)&Ip6Cfg\r
);\r
\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
}\r
+\r
//\r
// Get the interface information size.\r
//\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_ERROR;\r
}\r
+\r
//\r
// Get the interface info.\r
//\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_IP6CFG_GETDATA), gShellNetwork2HiiHandle, Status);\r
goto ON_ERROR;\r
}\r
+\r
//\r
// Check whether the source address is one of the interface addresses.\r
//\r
//\r
// Select the interface automatically.\r
//\r
- CopyMem(&Private->SrcAddress, Addr, sizeof(Private->SrcAddress));\r
+ CopyMem (&Private->SrcAddress, Addr, sizeof (Private->SrcAddress));\r
break;\r
}\r
} else if (EFI_IP6_EQUAL (&Private->SrcAddress, Addr)) {\r
// Match a certain interface address.\r
//\r
break;\r
- } \r
+ }\r
}\r
\r
if (AddrIndex < IfInfo->AddressInfoCount) {\r
FreePool (IfInfo);\r
IfInfo = NULL;\r
}\r
+\r
//\r
// No exact interface address matched.\r
//\r
Status = gBS->OpenProtocol (\r
Private->Ip6ChildHandle,\r
&gEfiIp6ProtocolGuid,\r
- (VOID **) &Private->Ip6,\r
+ (VOID **)&Private->Ip6,\r
Private->ImageHandle,\r
Private->Ip6ChildHandle,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
**/\r
VOID\r
Ping6DestroyIpInstance (\r
- IN PING6_PRIVATE_DATA *Private\r
+ IN PING6_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;\r
+ EFI_STATUS Status;\r
+ EFI_SERVICE_BINDING_PROTOCOL *Ip6Sb;\r
\r
gBS->CloseProtocol (\r
Private->Ip6ChildHandle,\r
Status = gBS->HandleProtocol (\r
Private->NicHandle,\r
&gEfiIp6ServiceBindingProtocolGuid,\r
- (VOID **) &Ip6Sb\r
+ (VOID **)&Ip6Sb\r
);\r
\r
- if (!EFI_ERROR(Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
Ip6Sb->DestroyChild (Ip6Sb, Private->Ip6ChildHandle);\r
}\r
}\r
**/\r
SHELL_STATUS\r
ShellPing6 (\r
- IN EFI_HANDLE ImageHandle,\r
- IN UINT32 SendNumber,\r
- IN UINT32 BufferSize,\r
- IN EFI_IPv6_ADDRESS *SrcAddress,\r
- IN EFI_IPv6_ADDRESS *DstAddress\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN UINT32 SendNumber,\r
+ IN UINT32 BufferSize,\r
+ IN EFI_IPv6_ADDRESS *SrcAddress,\r
+ IN EFI_IPv6_ADDRESS *DstAddress\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_INPUT_KEY Key;\r
- PING6_PRIVATE_DATA *Private;\r
- PING6_ICMP6_TX_INFO *TxInfo;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- SHELL_STATUS ShellStatus;\r
+ EFI_STATUS Status;\r
+ EFI_INPUT_KEY Key;\r
+ PING6_PRIVATE_DATA *Private;\r
+ PING6_ICMP6_TX_INFO *TxInfo;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ SHELL_STATUS ShellStatus;\r
\r
ShellStatus = SHELL_SUCCESS;\r
- Private = AllocateZeroPool (sizeof (PING6_PRIVATE_DATA));\r
+ Private = AllocateZeroPool (sizeof (PING6_PRIVATE_DATA));\r
\r
if (Private == NULL) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellNetwork2HiiHandle, L"Ping6");\r
Private->ImageHandle = ImageHandle;\r
Private->SendNum = SendNumber;\r
Private->BufferSize = BufferSize;\r
- Private->RttMin = ~((UINT64 )(0x0));\r
+ Private->RttMin = ~((UINT64)(0x0));\r
Private->Status = EFI_NOT_READY;\r
\r
InitializeListHead (&Private->TxList);\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
+\r
//\r
// Print the command line itself.\r
//\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
+\r
//\r
// Create and start timer to send icmp6 echo request packet per second.\r
//\r
//\r
if (EFI_ERROR (Status) && (Status != EFI_NOT_READY)) {\r
ShellStatus = SHELL_ACCESS_DENIED;\r
- if(Status == EFI_NOT_FOUND) {\r
+ if (Status == EFI_NOT_FOUND) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_NOSOURCE_INDOMAIN), gShellNetwork2HiiHandle, mIp6DstString);\r
}\r
\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
+\r
//\r
// Control the ping6 process by two factors:\r
// 1. Hot key\r
//\r
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
\r
- if (!EFI_ERROR(Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
if ((Key.UnicodeChar == 0x1b) || (Key.UnicodeChar == 0x03) ||\r
- ((Key.UnicodeChar == 0) && (Key.ScanCode == SCAN_ESC))) {\r
+ ((Key.UnicodeChar == 0) && (Key.ScanCode == SCAN_ESC)))\r
+ {\r
goto ON_STAT;\r
}\r
}\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- SHELL_STATUS ShellStatus;\r
- EFI_IPv6_ADDRESS DstAddress;\r
- EFI_IPv6_ADDRESS SrcAddress;\r
- UINT64 BufferSize;\r
- UINTN SendNumber;\r
- LIST_ENTRY *ParamPackage;\r
- CONST CHAR16 *ValueStr;\r
- CONST CHAR16 *ValueStrPtr;\r
- UINTN NonOptionCount;\r
- CHAR16 *ProblemParam;\r
+ EFI_STATUS Status;\r
+ SHELL_STATUS ShellStatus;\r
+ EFI_IPv6_ADDRESS DstAddress;\r
+ EFI_IPv6_ADDRESS SrcAddress;\r
+ UINT64 BufferSize;\r
+ UINTN SendNumber;\r
+ LIST_ENTRY *ParamPackage;\r
+ CONST CHAR16 *ValueStr;\r
+ CONST CHAR16 *ValueStrPtr;\r
+ UINTN NonOptionCount;\r
+ CHAR16 *ProblemParam;\r
\r
ProblemParam = NULL;\r
- ShellStatus = SHELL_SUCCESS;\r
+ ShellStatus = SHELL_SUCCESS;\r
\r
Status = ShellCommandLineParseEx (Ping6ParamList, &ParamPackage, &ProblemParam, TRUE, FALSE);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_INPUT), gShellNetwork2HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
//\r
// Parse the parameter of count number.\r
//\r
- ValueStr = ShellCommandLineGetValue (ParamPackage, L"-n");\r
+ ValueStr = ShellCommandLineGetValue (ParamPackage, L"-n");\r
ValueStrPtr = ValueStr;\r
if (ValueStr != NULL) {\r
SendNumber = ShellStrToUintn (ValueStrPtr);\r
goto ON_EXIT;\r
}\r
}\r
+\r
//\r
// Parse the parameter of buffer size.\r
//\r
- ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
+ ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
ValueStrPtr = ValueStr;\r
if (ValueStr != NULL) {\r
BufferSize = ShellStrToUintn (ValueStrPtr);\r
//\r
// Parse the parameter of source ip address.\r
//\r
- ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");\r
+ ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");\r
ValueStrPtr = ValueStr;\r
if (ValueStr != NULL) {\r
mIp6SrcString = ValueStr;\r
- Status = NetLibStrToIp6 (ValueStrPtr, &SrcAddress);\r
+ Status = NetLibStrToIp6 (ValueStrPtr, &SrcAddress);\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_IP), gShellNetwork2HiiHandle, ValueStr);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
}\r
+\r
//\r
// Parse the parameter of destination ip address.\r
//\r
- NonOptionCount = ShellCommandLineGetCount(ParamPackage);\r
- ValueStr = ShellCommandLineGetRawValue (ParamPackage, (UINT32)(NonOptionCount-1));\r
+ NonOptionCount = ShellCommandLineGetCount (ParamPackage);\r
+ ValueStr = ShellCommandLineGetRawValue (ParamPackage, (UINT32)(NonOptionCount-1));\r
if (NonOptionCount != 2) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_INPUT), gShellNetwork2HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
+\r
ValueStrPtr = ValueStr;\r
if (ValueStr != NULL) {\r
mIp6DstString = ValueStr;\r
- Status = NetLibStrToIp6 (ValueStrPtr, &DstAddress);\r
+ Status = NetLibStrToIp6 (ValueStrPtr, &DstAddress);\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING6_INVALID_IP), gShellNetwork2HiiHandle, ValueStr);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
// Enter into ping6 process.\r
//\r
ShellStatus = ShellPing6 (\r
- ImageHandle,\r
- (UINT32)SendNumber,\r
- (UINT32)BufferSize,\r
- &SrcAddress,\r
- &DstAddress\r
- );\r
+ ImageHandle,\r
+ (UINT32)SendNumber,\r
+ (UINT32)BufferSize,\r
+ &SrcAddress,\r
+ &DstAddress\r
+ );\r
\r
ON_EXIT:\r
ShellCommandLineFreeVarList (ParamPackage);\r
return ShellStatus;\r
}\r
-\r