/** @file

  String definitions for UEFI Shell network 2 commands
  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>

  This program and the accompanying materials
  are licensed and made available under the terms and conditions
  of the BSD License which accompanies this distribution.  The full
  text of the license may be found at<BR>
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

  Module Name:

   UefiShellNetwork2CommandsLib.uni

  Abstract:

   String definitions for UEFI Shell 2.0 network 2 commands
**/

#langdef   en-US "english"

#string STR_GEN_ERR_AD                     #language en-US  "%H%s%N: Access denied.\r\n"
#string STR_GEN_OUT_MEM                    #language en-US  "%H%s%N: Memory allocation was not successful.\r\n"

#string STR_PING6_INVALID_IP               #language en-US  "%Ping6: Invalid IP6 address, %s\r\n"
#string STR_PING6_INVALID_INPUT            #language en-US  "%Ping6: Invalid input, please type 'Ping6 -?'for help\r\n"
#string STR_PING6_INVALID_SEND_NUMBER      #language en-US  "%Ping6: Invalid send number, %s\r\n"
#string STR_PING6_INVALID_BUFFER_SIZE      #language en-US  "%Ping6: Invalid buffer size, %s\r\n"
#string STR_PING6_INVALID_SOURCE           #language en-US  "%Ping6: Require source interface option\r\n"
#string STR_PING6_IP6_CONFIG               #language en-US  "%Ping6: The process of Ip6 Configure %r\r\n"
#string STR_PING6_IP6CFG_GETDATA           #language en-US  "%Ping6: Get data of the interface information %r\r\n"
#string STR_PING6_SEND_REQUEST             #language en-US  "Echo request sequence %d fails.\r\n"
#string STR_PING6_CONFIGD_NIC_NF           #language en-US  "%Ping6: No configured interfaces were found.\r\n"
#string STR_PING6_NOSOURCE_INDOMAIN        #language en-US  "No sources in %s's multicast domain.\r\n"
#string STR_PING6_START                    #language en-US  "Ping %s %d data bytes\r\n"
#string STR_PING6_TIMEOUT                  #language en-US  "Echo request sequence %d timeout.\r\n"
#string STR_PING6_REPLY_INFO               #language en-US  "%d bytes from %s : icmp_seq=%d ttl=%d time%d~%dms\r\n"
#string STR_PING6_STAT                     #language en-US  "\n%d packets transmitted, %d received, %d%% packet loss, time %dms\r\n"
#string STR_PING6_RTT                      #language en-US  "\nRtt(round trip time) min=%d~%dms max=%d~%dms avg=%d~%dms\r\n"

#string STR_IFCONFIG6_ERR_IP6CFG_GETDATA       #language en-US    "Get data of the interface information %hr\r\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    "\r\n"
#string STR_IFCONFIG6_INFO_IF_NAME             #language en-US    "\n%Hname         : %s%N\r\n"
#string STR_IFCONFIG6_INFO_POLICY_AUTO         #language en-US    "%Hpolicy       : automatic%N\r\n"
#string STR_IFCONFIG6_INFO_POLICY_MAN          #language en-US    "%Hpolicy       : manual%N\r\n"
#string STR_IFCONFIG6_INFO_DAD_TRANSMITS       #language en-US    "%Hdad xmits    : %d%N\r\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\r\n"
#string STR_IFCONFIG6_INFO_DNS_ADDR_HEAD       #language en-US    "\n%Hdns server   : %N\r\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\r\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.\r\n"
                                                                  "Usage: IfConfig6 -s <Name> \r\n"
                                                                  "Example: IfConfig6 -s eth0 auto\r\n"
#string STR_IFCONFIG6_LACK_OPTION              #language en-US    "Flags lack. Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_CONFLICT_OPTIONS         #language en-US    "Flags conflict. Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_LACK_COMMAND         #language en-US    "Lack interface config option.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_INVALID_INTERFACE    #language en-US    "Invalid interface name.\r\n"
                                                                  "Hint: Use {IfConfig6 -l} to check existing interface names.\r\n"
#string STR_IFCONFIG6_ERR_INVALID_COMMAND      #language en-US    "Invalid command. Bad command %H%s%N is skipped.\r\n"
                                                                  "Hint: Incorrect option or arguments. Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_LACK_ARGUMENTS       #language en-US    "Lack arguments. Bad command %H%s%N is skipped.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_LACK_OPTION          #language en-US    "Lack options.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_MAN_HOST             #language en-US    "Manual address configuration failed. Please retry.\r\n"

#string STR_IFCONFIG6_ERR_MAN_GW               #language en-US    "Gateway address configuration failed. Please check the argument.\r\n"

#string STR_IFCONFIG6_ERR_INVALID_IP_CONFIG    #language en-US    "The IP address is not configurable when the policy is Ip6ConfigPolicyAutomatic.\r\n"

#string STR_IFCONFIG6_ERR_INVALID_GW_CONFIG    #language en-US    "The gateway address is not configurable when the policy is Ip6ConfigPolicyAutomatic.\r\n"

#string STR_IFCONFIG6_ERR_INVALID_DNS_CONFIG   #language en-US    "The DNS server address is not configurable when the policy is Ip6ConfigPolicyAutomatic.\r\n"

#string STR_IFCONFIG6_ERR_DUPLICATE_COMMAND    #language en-US    "Duplicate commands. Bad command %H%s%N is skipped.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_CONFLICT_COMMAND     #language en-US    "Conflict commands. Bad command %H%s%N is skipped.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_UNKNOWN_COMMAND      #language en-US    "Unknown commands. Bad command %H%s%N is skipped.\r\n"
                                                                  "Hint: Please type 'IfConfig6 -?' for help info.\r\n"
#string STR_IFCONFIG6_ERR_ADDRESS_FAILED       #language en-US    "It failed to set .\r\n"


#string STR_GET_HELP_PING6                     #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"
"NOTES:\r\n"
"  1. When TargetIp is a link local address, SourceIp needs to be specified.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"Examples:\r\n"
"  * To ping the target host by sending 5 request with 1000 bytes from 2002::1\r\n"
"    Shell:\> Ping6 -s 2002::1 2002::2 -l 1000 -n 5\r\n"
" \r\n"
"  * To ping the target host with 1000 bytes\r\n"
"    Shell:\> Ping6 2002::2 -l 1000\r\n"

#string STR_GET_HELP_IFCONFIG6                 #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 -r [Name] | -l [Name] \r\n"
"IfConfig6 -s <Name> [dad <Num>] [auto | [man [id <mac>] [host <IPv6> gw <IPv6>]\r\n"
"             [dns <IPv6>]]]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  Name                     Adapter name, i.e., eth0\r\n"
"  -r [Name]                Reconfigure all or specified interface, and set\r\n"
"                           automatic policy. If specified interface is already\r\n"
"                           set to automatic,then refresh the IPv6 configuration.\r\n"
"  -l [Name]                List the configuration of the specified interface.\r\n"
"  -s <Name> dad <Num>      Set dad transmits count of the specified interface.\r\n"
"  -s <Name> auto           Set automatic policy of the specified interface.\r\n"
"  -s <Name> man id <Mac>   Set alternative interface id of the specified \r\n"
"                           interface. Must under manual policy.\r\n"
"  -s <Name> man host <IPv6> gw <IPv6>\r\n"
"                           Set static host IP and gateway address of the\r\n"
"                           specified interface. Must under manual policy.\r\n"
"  -s <Name> man dns <IPv6> Set DNS server IP addresses of the specified\r\n"
"                           interface.Must under manual policy.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To list the configuration for the interface eth0:\r\n"
"    Shell:\> ifConfig6 -l eth0\r\n"
" \r\n"
"  * To use automatic configuration to request the IPv6 address configuration\r\n"
"    dynamically for the interface eth0:\r\n"
"    Shell:\> ifconfig6 -s eth0 auto\r\n"
" \r\n"
"  * To set the dad transmits count for eth0 under automatic policy:\r\n"
"    Shell:\> ifconfig6 -s eth0 auto dad 10\r\n"
" \r\n"
"  * To set the alternative interface id of eth0 under manual policy:\r\n"
"    Shell:\> ifconfig6 -s eth0 man id ff:dd:aa:88:66:cc\r\n"
" \r\n"
"  * To use the static IP6 addresses configuration for the interface eth0,\r\n"
"    and this configuration survives the network reload:\r\n"
"    Shell:\> ifconfig6 -s eth0 man host 2002::1/64 2002::2/64 gw 2002::3/64\r\n"
