/** @file
  String definitions for the Shell Ping6 application.

  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>

  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#langdef en-US "English"

#string STR_PING6_INVALID_IP               #language en-US  "%Ping6: Invalid IP6 address, %s\n"
#string STR_PING6_INVALID_INPUT            #language en-US  "%Ping6: Invalid input, please type 'Ping6 -?'for help\n"
#string STR_PING6_INVALID_SEND_NUMBER      #language en-US  "%Ping6: Invalid send number, %s\n"
#string STR_PING6_INVALID_BUFFER_SIZE      #language en-US  "%Ping6: Invalid buffer size, %s\n"
#string STR_PING6_INVALID_SOURCE           #language en-US  "%Ping6: Require source interface option\n"
#string STR_PING6_IP6_CONFIG               #language en-US  "%Ping6: Ip6->Config %r\n"
#string STR_PING6_IP6_GETMODE              #language en-US  "%Ping6: Ip6->GetModeData %r\n"
#string STR_PING6_IP6CFG_GETDATA           #language en-US  "%Ping6: Ip6Config->GetData %r\n"
#string STR_PING6_SEND_REQUEST             #language en-US  "Echo request sequence %d fails.\n"
#string STR_PING6_SOURCE_NOT_FOUND         #language en-US  "Source %s not found.\n"
#string STR_PING6_NOSOURCE_INDOMAIN        #language en-US  "No sources in %s's multicast domain.\n"
#string STR_PING6_START                    #language en-US  "Ping %s %d data bytes\n\n"
#string STR_PING6_TIMEOUT                  #language en-US  "Echo request sequence %d timeout.\n"
#string STR_PING6_REPLY_INFO               #language en-US  "%d bytes from %s : icmp_seq=%d ttl=%d time%c%dms\n"
#string STR_PING6_STAT                     #language en-US  "\n%d packets transmitted, %d received, %d%% packet loss, time %dms\n"
#string STR_PING6_RTT                      #language en-US  "\nRtt(round trip time) min=%dms max=%dms avg=%dms\n"
#string STR_PING6_LINE_HELP                #language en-US  "Ping a target machine with UEFI IPv6 network stack"
#string STR_PING6_HELP                     #language en-US  "Ping a target machine with UEFI IPv6 network stack.\n\n"
                                                            "Usage: Ping6 [-l size] [-n count] [-s SourceIp] TargetIp\n"
                                                            "       Use ESC and Ctrl+C to interrupt Ping6 process.\n"
                                                            "\n"
                                                            "Options:\n"
                                                            "  -l size     Send buffer size, in bytes(default=16, min=16, max=32768).\n"
                                                            "  -n count    Send request count, (default=10, min=1, max=10000).\n"
                                                            "  -s SourceIp Source IPv6 address.\n"
                                                            "  TargetIp    Target IPv6 address.\n"
                                                            "  -?          Help document.\n"
                                                            "\n"
                                                            "Examples:\n"
                                                            "  Ping6 -s 2002::1 2002::2 -l 1000 -n 5\n"
                                                            "  Ping6 2002::2 -l 1000\n"