]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellNetwork1CommandsLib/Ping.c
ShellPkg: Standardized HP Copyright Message String
[mirror_edk2.git] / ShellPkg / Library / UefiShellNetwork1CommandsLib / Ping.c
index 493de26f8a95992543350c391ac475fb3eb06798..b8f6728b0432e179df29d644dee7434c08d9013a 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   The implementation for Ping shell command.\r
 \r
 /** @file\r
   The implementation for Ping shell command.\r
 \r
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2012, 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
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -17,6 +18,7 @@
 \r
 #define PING_IP4_COPY_ADDRESS(Dest, Src) (CopyMem ((Dest), (Src), sizeof (EFI_IPv4_ADDRESS)))\r
 \r
 \r
 #define PING_IP4_COPY_ADDRESS(Dest, Src) (CopyMem ((Dest), (Src), sizeof (EFI_IPv4_ADDRESS)))\r
 \r
+UINT64          CurrentTick = 0;\r
 \r
 //\r
 // Function templates to match the IPv4 and IPv6 commands that we use.\r
 \r
 //\r
 // Function templates to match the IPv4 and IPv6 commands that we use.\r
@@ -134,29 +136,21 @@ typedef struct _PING_PRIVATE_DATA {
   PING_IPX_COMPLETION_TOKEN   RxToken;\r
 } PING_PRIVATE_DATA;\r
 \r
   PING_IPX_COMPLETION_TOKEN   RxToken;\r
 } PING_PRIVATE_DATA;\r
 \r
+/**\r
+  Calculate the internet checksum (see RFC 1071).\r
+\r
+  @param[in] Packet  Buffer which contains the data to be checksummed.\r
+  @param[in] Length  Length to be checksummed.\r
+\r
+  @retval Checksum     Returns the 16 bit ones complement of \r
+                       ones complement sum of 16 bit words\r
+**/\r
 UINT16\r
 EFIAPI\r
 NetChecksum (\r
   IN UINT8   *Buffer,\r
   IN UINT32  Length\r
   )\r
 UINT16\r
 EFIAPI\r
 NetChecksum (\r
   IN UINT8   *Buffer,\r
   IN UINT32  Length\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Calculate the internet checksum (see RFC 1071)\r
-\r
-Arguments:\r
-\r
-  Packet             - Buffer which contains the data to be checksummed\r
-  Length             - Length to be checksummed\r
-\r
-Returns:\r
-\r
-  Checksum           - Returns the 16 bit ones complement of \r
-                       ones complement sum of 16 bit words\r
-\r
---*/\r
 {\r
   UINT32  Sum;\r
   UINT8   Odd;\r
 {\r
   UINT32  Sum;\r
   UINT8   Odd;\r
@@ -167,11 +161,11 @@ Returns:
   Sum     = 0;\r
   Odd     = (UINT8) (Length & 1);\r
   Length >>= 1;\r
   Sum     = 0;\r
   Odd     = (UINT8) (Length & 1);\r
   Length >>= 1;\r
-  while (Length--) {\r
+  while ((Length--) != 0) {\r
     Sum += *Packet++;\r
   }\r
 \r
     Sum += *Packet++;\r
   }\r
 \r
-  if (Odd) {\r
+  if (Odd != 0) {\r
     Sum += *(UINT8 *) Packet;\r
   }\r
 \r
     Sum += *(UINT8 *) Packet;\r
   }\r
 \r
@@ -193,11 +187,6 @@ Returns:
   @return The current value of the register.\r
 \r
 **/\r
   @return The current value of the register.\r
 \r
 **/\r
-UINT64\r
-EFIAPI\r
-ReadTime (\r
-  VOID\r
-  );\r
 \r
 STATIC CONST SHELL_PARAM_ITEM    PingParamList[] = {\r
   {\r
 \r
 STATIC CONST SHELL_PARAM_ITEM    PingParamList[] = {\r
   {\r
@@ -228,6 +217,36 @@ STATIC CONST SHELL_PARAM_ITEM    PingParamList[] = {
 STATIC CONST CHAR16      *mDstString;\r
 STATIC CONST CHAR16      *mSrcString;\r
 STATIC UINT64            mFrequency = 0;\r
 STATIC CONST CHAR16      *mDstString;\r
 STATIC CONST CHAR16      *mSrcString;\r
 STATIC UINT64            mFrequency = 0;\r
+EFI_CPU_ARCH_PROTOCOL    *gCpu = NULL;\r
+\r
+/**\r
+  Read the current time.\r
+\r
+  @retval the current tick value.\r
+**/\r
+UINT64\r
+EFIAPI\r
+ReadTime (\r
+  VOID\r
+  )\r
+{\r
+  UINT64                 TimerPeriod;\r
+  EFI_STATUS             Status;\r
+\r
+  ASSERT (gCpu != NULL);\r
+\r
+  Status = gCpu->GetTimerValue (gCpu, 0, &CurrentTick, &TimerPeriod);\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // The WinntGetTimerValue will return EFI_UNSUPPORTED. Set the\r
+    // TimerPeriod by ourselves.\r
+    //\r
+    CurrentTick += 1000000;\r
+  }\r
+  \r
+  return CurrentTick;\r
+}\r
+\r
 \r
 /**\r
   Get and caculate the frequency in tick/ms.\r
 \r
 /**\r
   Get and caculate the frequency in tick/ms.\r
@@ -244,17 +263,15 @@ GetFrequency (
   )\r
 {\r
   EFI_STATUS               Status;\r
   )\r
 {\r
   EFI_STATUS               Status;\r
-  EFI_CPU_ARCH_PROTOCOL    *Cpu;\r
   UINT64                   CurrentTick;\r
   UINT64                   TimerPeriod;\r
 \r
   UINT64                   CurrentTick;\r
   UINT64                   TimerPeriod;\r
 \r
-  Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &Cpu);\r
-\r
+  Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &gCpu);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  Status = Cpu->GetTimerValue (Cpu, 0, &CurrentTick, &TimerPeriod);\r
+  Status = gCpu->GetTimerValue (gCpu, 0, &CurrentTick, &TimerPeriod);\r
 \r
   if (EFI_ERROR (Status)) {\r
     TimerPeriod = DEFAULT_TIMER_PERIOD;\r
 \r
   if (EFI_ERROR (Status)) {\r
     TimerPeriod = DEFAULT_TIMER_PERIOD;\r
@@ -883,7 +900,7 @@ PingCreateIpInstance (
                   &HandleNum,\r
                   &HandleBuffer\r
                   );\r
                   &HandleNum,\r
                   &HandleBuffer\r
                   );\r
-  if (EFI_ERROR (Status) || (HandleNum == 0)) {\r
+  if (EFI_ERROR (Status) || (HandleNum == 0) || (HandleBuffer == NULL)) {\r
     return EFI_ABORTED;\r
   }\r
   //\r
     return EFI_ABORTED;\r
   }\r
   //\r
@@ -894,7 +911,7 @@ PingCreateIpInstance (
     if (NetIp6IsLinkLocalAddr ((EFI_IPv6_ADDRESS*)&Private->DstAddress) &&\r
         NetIp6IsUnspecifiedAddr ((EFI_IPv6_ADDRESS*)&Private->SrcAddress) &&\r
         (HandleNum > 1)) {\r
     if (NetIp6IsLinkLocalAddr ((EFI_IPv6_ADDRESS*)&Private->DstAddress) &&\r
         NetIp6IsUnspecifiedAddr ((EFI_IPv6_ADDRESS*)&Private->SrcAddress) &&\r
         (HandleNum > 1)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, mSrcString);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", mSrcString);  \r
       Status = EFI_INVALID_PARAMETER;\r
       goto ON_ERROR;\r
     }\r
       Status = EFI_INVALID_PARAMETER;\r
       goto ON_ERROR;\r
     }\r
@@ -903,7 +920,7 @@ PingCreateIpInstance (
     if (PingNetIp4IsLinkLocalAddr ((EFI_IPv4_ADDRESS*)&Private->DstAddress) &&\r
         PingNetIp4IsUnspecifiedAddr ((EFI_IPv4_ADDRESS*)&Private->SrcAddress) &&\r
         (HandleNum > 1)) {\r
     if (PingNetIp4IsLinkLocalAddr ((EFI_IPv4_ADDRESS*)&Private->DstAddress) &&\r
         PingNetIp4IsUnspecifiedAddr ((EFI_IPv4_ADDRESS*)&Private->SrcAddress) &&\r
         (HandleNum > 1)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, mSrcString);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", mSrcString);  \r
       Status = EFI_INVALID_PARAMETER;\r
       goto ON_ERROR;\r
     }\r
       Status = EFI_INVALID_PARAMETER;\r
       goto ON_ERROR;\r
     }\r
@@ -1045,7 +1062,7 @@ PingCreateIpInstance (
   //\r
 \r
   if (HandleIndex == HandleNum) {\r
   //\r
 \r
   if (HandleIndex == HandleNum) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, mSrcString);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING_CONFIGD_NIC_NF), gShellNetwork1HiiHandle, L"ping");  \r
     Status = EFI_NOT_FOUND;\r
     goto ON_ERROR;\r
   }\r
     Status = EFI_NOT_FOUND;\r
     goto ON_ERROR;\r
   }\r
@@ -1174,14 +1191,14 @@ ON_ERROR:
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
-  Destory the IP instance.\r
+  Destroy the IP instance.\r
 \r
   @param[in]    Private    The pointer of PING_PRIVATE_DATA.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
 \r
   @param[in]    Private    The pointer of PING_PRIVATE_DATA.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-Ping6DestoryIp6Instance (\r
+Ping6DestroyIp6Instance (\r
   IN PING_PRIVATE_DATA    *Private\r
   )\r
 {\r
   IN PING_PRIVATE_DATA    *Private\r
   )\r
 {\r
@@ -1305,7 +1322,7 @@ ShellPing (
     } else if (Status == RETURN_NO_MAPPING) {\r
       ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING_NOROUTE_FOUND), gShellNetwork1HiiHandle, mDstString, mSrcString);\r
     } else {\r
     } else if (Status == RETURN_NO_MAPPING) {\r
       ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING_NOROUTE_FOUND), gShellNetwork1HiiHandle, mDstString, mSrcString);\r
     } else {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING_NETWORK_ERROR), gShellNetwork1HiiHandle, Status);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PING_NETWORK_ERROR), gShellNetwork1HiiHandle, L"ping", Status);  \r
     }\r
 \r
     goto ON_EXIT;\r
     }\r
 \r
     goto ON_EXIT;\r
@@ -1398,7 +1415,7 @@ ON_EXIT:
     }\r
 \r
     if (Private->IpChildHandle != NULL) {\r
     }\r
 \r
     if (Private->IpChildHandle != NULL) {\r
-      Ping6DestoryIp6Instance (Private);\r
+      Ping6DestroyIp6Instance (Private);\r
     }\r
 \r
     FreePool (Private);\r
     }\r
 \r
     FreePool (Private);\r
@@ -1430,6 +1447,7 @@ ShellCommandRunPing (
   CONST CHAR16        *ValueStr;\r
   UINTN               NonOptionCount;\r
   UINT32              IpChoice;\r
   CONST CHAR16        *ValueStr;\r
   UINTN               NonOptionCount;\r
   UINT32              IpChoice;\r
+  CHAR16              *ProblemParam;\r
 \r
   //\r
   // we use IPv6 buffers to hold items... \r
 \r
   //\r
   // we use IPv6 buffers to hold items... \r
@@ -1441,10 +1459,11 @@ ShellCommandRunPing (
   IpChoice = PING_IP_CHOICE_IP4;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   IpChoice = PING_IP_CHOICE_IP4;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
+  ProblemParam = NULL;\r
 \r
 \r
-  Status = ShellCommandLineParseEx (PingParamList, &ParamPackage, NULL, TRUE, FALSE);\r
+  Status = ShellCommandLineParseEx (PingParamList, &ParamPackage, &ProblemParam, TRUE, FALSE);\r
   if (EFI_ERROR(Status)) {\r
   if (EFI_ERROR(Status)) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", ProblemParam);\r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
@@ -1464,7 +1483,7 @@ ShellCommandRunPing (
     // ShellStrToUintn will return 0 when input is 0 or an invalid input string.\r
     //\r
     if ((SendNumber == 0) || (SendNumber > MAX_SEND_NUMBER)) {\r
     // ShellStrToUintn will return 0 when input is 0 or an invalid input string.\r
     //\r
     if ((SendNumber == 0) || (SendNumber > MAX_SEND_NUMBER)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, ValueStr);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", ValueStr);  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
@@ -1482,7 +1501,7 @@ ShellCommandRunPing (
     // ShellStrToUintn will return 0 when input is 0 or an invalid input string.\r
     //\r
     if ((BufferSize < 16) || (BufferSize > MAX_BUFFER_SIZE)) {\r
     // ShellStrToUintn will return 0 when input is 0 or an invalid input string.\r
     //\r
     if ((BufferSize < 16) || (BufferSize > MAX_BUFFER_SIZE)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, ValueStr);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", ValueStr);  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
@@ -1505,7 +1524,7 @@ ShellCommandRunPing (
       Status = NetLibStrToIp4 (ValueStr, (EFI_IPv4_ADDRESS*)&SrcAddress);\r
     }\r
     if (EFI_ERROR (Status)) {\r
       Status = NetLibStrToIp4 (ValueStr, (EFI_IPv4_ADDRESS*)&SrcAddress);\r
     }\r
     if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, ValueStr);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", ValueStr);  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
@@ -1515,12 +1534,12 @@ ShellCommandRunPing (
   //\r
   NonOptionCount = ShellCommandLineGetCount(ParamPackage);\r
   if (NonOptionCount < 2) {\r
   //\r
   NonOptionCount = ShellCommandLineGetCount(ParamPackage);\r
   if (NonOptionCount < 2) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellNetwork1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellNetwork1HiiHandle, L"ping");  \r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
   if (NonOptionCount > 2) {\r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
   if (NonOptionCount > 2) {\r
-    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellNetwork1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellNetwork1HiiHandle, L"ping");  \r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
@@ -1533,7 +1552,7 @@ ShellCommandRunPing (
       Status = NetLibStrToIp4 (ValueStr, (EFI_IPv4_ADDRESS*)&DstAddress);\r
     }\r
     if (EFI_ERROR (Status)) {\r
       Status = NetLibStrToIp4 (ValueStr, (EFI_IPv4_ADDRESS*)&DstAddress);\r
     }\r
     if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellNetwork1HiiHandle, ValueStr);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ping", ValueStr);  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r