// /**
//
// (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
// Copyright (c) 2010 - 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
// 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:
//
// UefiShellNetwork1CommandsLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell 2.0 network 1 commands
//
//
// **/

/=#

#langdef   en-US "english"

#string STR_GEN_TOO_MANY          #language en-US "%H%s%N: Too many arguments.\r\n"
#string STR_GEN_TOO_FEW           #language en-US "%H%s%N: Too few arguments.\r\n"
#string STR_GEN_PARAM_INV         #language en-US "%H%s%N: Invalid argument - '%H%s%N'\r\n"
#string STR_GEN_PROBLEM           #language en-US "%H%s%N: Unknown flag - '%H%s%N'\r\n"
#string STR_GEN_PROBLEM_OP2       #language en-US "%H%s%N: Invalid argument - '%H%s%N'. Expected '%B%s%N' or '%B%s%N'.\r\n"
#string STR_GEN_PROBLEM_VAL       #language en-US "%H%s%N: Bad value - '%H%s%N' for flag - '%H%s%N'\r\n"
#string STR_GEN_NO_VALUE          #language en-US "%H%s%N: Missing argument for flag - '%H%s%N'\r\n"
#string STR_GEN_ERR_AD            #language en-US "%H%s%N: Access denied.\r\n"
#string STR_GEN_ERR_UK            #language en-US "%H%s%N: Status: %r\r\n"
#string STR_GEN_PARAM_CON         #language en-US "%H%s%N: Parameters conflict.\r\n"
#string STR_GEN_FILE_OPEN_FAIL    #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
#string STR_GEN_FILE_AD           #language en-US "%H%s%N: Access file error - '%H%s%N'\r\n"
#string STR_GEN_CRLF              #language en-US "\r\n"
#string STR_GEN_NO_FILES          #language en-US "%H%s%N: No matching files were found.\r\n"
#string STR_GEN_DIR_NF            #language en-US "%H%s%N: Directory not found - '%H%s%N'\r\n"
#string STR_GEN_FILE_NF           #language en-US "%H%s%N: File not found - '%H%s%N'\r\n"
#string STR_GEN_IS_DIR            #language en-US "%H%s%N: '%H%s%N' is a directory\r\n"
#string STR_GEN_PROTOCOL_NF       #language en-US "%H%s%N: The protocol '%H%s%N' is required and not found (%g).\r\n"
#string STR_GEN_OUT_MEM           #language en-US "%H%s%N: Memory allocation was not successful.\r\n"

#string STR_PING_INVALID_SOURCE      #language en-US "%Ping: Require source interface option\r\n"
#string STR_PING_CONFIG              #language en-US "Config %r\r\n"
#string STR_PING_GETMODE             #language en-US "GetModeData %r\r\n"
#string STR_PING_GETDATA             #language en-US "GetData %r\r\n"
#string STR_PING_SEND_REQUEST        #language en-US "Echo request sequence %d did not complete successfully.\r\n"
#string STR_PING_NOSOURCE_INDO       #language en-US "There are no sources in %s's multicast domain.\r\n"
#string STR_PING_NETWORK_ERROR       #language en-US "%H%s%N: Network function failed with %r\r\n"
#string STR_PING_CONFIGD_NIC_NF      #language en-US "%H%s%N: No configured interfaces were found.\r\n"
#string STR_PING_NOROUTE_FOUND       #language en-US "There is no route to the destination '%B%s%N' from the source '%B%s%N' was found.\r\n"
#string STR_PING_START               #language en-US "Ping %s %d data bytes.\r\n"
#string STR_PING_TIMEOUT             #language en-US "Echo request sequence %d timeout.\r\n"
#string STR_PING_REPLY_INFO          #language en-US "%d bytes from %s : icmp_seq=%d ttl=%d time%c%dms\r\n"
#string STR_PING_STAT                #language en-US "\n%d packets transmitted, %d received, %d%% packet loss, time %dms\r\n"
#string STR_PING_RTT                 #language en-US "\nRtt(round trip time) min=%dms max=%dms avg=%dms\r\n"

#string STR_IFCONFIG_UNSUPPORTED_OPTION       #language en-US    "The option '%H%s%N' is unsupported now.\n"
#string STR_IFCONFIG_LACK_OPTION              #language en-US    "Flags lack.\n"
#string STR_IFCONFIG_LACK_INTERFACE           #language en-US    "Lack interface name.\n"
#string STR_IFCONFIG_LACK_COMMAND             #language en-US    "Lack interface config option.\n"
#string STR_IFCONFIG_INVALID_INTERFACE        #language en-US    "Invalid interface name.\n"
#string STR_IFCONFIG_INVALID_IPADDRESS        #language en-US    "Invalid ipv4 address: '%H%s%N'\n"
#string STR_IFCONFIG_DUPLICATE_COMMAND        #language en-US    "Duplicate commands. Bad command %H%s%N is skipped.\n"
#string STR_IFCONFIG_CONFLICT_COMMAND         #language en-US    "Conflict commands. Bad command %H%s%N is skipped.\n"
#string STR_IFCONFIG_UNKNOWN_COMMAND          #language en-US    "Unknown commands. Bad command %H%s%N is skipped.\n"
#string STR_IFCONFIG_SET_ADDR_FAILED          #language en-US    "Failed to set address.\n"
#string STR_IFCONFIG_ROUTES_SIZE              #language en-US  	 "\n%H  Routes (%d entries):\n"
#string STR_IFCONFIG_ROUTES_ENTRY_INDEX       #language en-US    "%H    Entry[%d]\n"
#string STR_IFCONFIG_SHOW_IP_ADDR             #language en-US    "%12s: %N%d.%d.%d.%d\n"
#string STR_IFCONFIG_INFO_NEWLINE             #language en-US    "\n"
#string STR_IFCONFIG_INFO_DNS_ADDR_BODY       #language en-US    "%8d.%d.%d.%d\n"
#string STR_IFCONFIG_INFO_BREAK               #language en-US    "\n-----------------------------------------------------------------\n"
#string STR_IFCONFIG_INFO_COLON               #language en-US    ":"
#string STR_IFCONFIG_INFO_IF_NAME             #language en-US    "\n%Hname         : %s%N\n"
#string STR_IFCONFIG_INFO_MEDIA_STATE         #language en-US    "%HMedia State  : %s%N\n"
#string STR_IFCONFIG_INFO_POLICY_DHCP         #language en-US    "%Hpolicy       : dhcp%N\n"
#string STR_IFCONFIG_INFO_POLICY_MAN          #language en-US    "%Hpolicy       : static%N\n"
#string STR_IFCONFIG_INFO_MAC_ADDR_HEAD       #language en-US    "%Hmac addr     : %N"
#string STR_IFCONFIG_INFO_MAC_ADDR_BODY       #language en-US    "%02x"
#string STR_IFCONFIG_INFO_IP_ADDR_HEAD        #language en-US    "\n%Hipv4 address : %N"
#string STR_IFCONFIG_INFO_SUBNET_MASK_HEAD    #language en-US    "\n%Hsubnet mask  : %N"
#string STR_IFCONFIG_INFO_GATEWAY_HEAD        #language en-US    "\n%Hdefault gateway: %N"
#string STR_IFCONFIG_INFO_DNS_ADDR_HEAD       #language en-US    "\n%HDNS server   : %N\n"
#string STR_IFCONFIG_INFO_IP_ADDR_BODY        #language en-US    "%d.%d.%d.%d\n"

#string STR_GET_HELP_PING         #language en-US ""
".TH ping 0 "Ping the target host with an IPv4 stack."\r\n"
".SH NAME\r\n"
"Ping the target host with an IPv4 stack.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"PING [-n count] [-l size] [-s SourceIp] TargetIp\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -n       - Specifies the number of echo request datagrams to be sent.\r\n"
"  -l       - Specifies the size of the data buffer in the echo request datagram.\r\n"
"  -s       - Specifies the source adapter as IPv4 address.\r\n"
"  SourceIp - Specifies the IPv4 address of the source machine.\r\n"
"  TargetIp - Specifies the IPv4 address of the target machine.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command uses the ICMPv4 ECHO_REQUEST datagram to elicit an\r\n"
"     ECHO_REPLY from a host.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To ping the target host with 64 bytes data:\r\n"
"    fs0:\> ping -l 64 192.168.0.1\r\n"
" \r\n"
"  * To ping the target host by sending 20 echo request datagrams:\r\n"
"    fs0:\> ping -n 20 202.120.100.1\r\n"
" \r\n"
"  * To ping the target host by specifying the source adapter as IPv4 address:\r\n"
"    fs0:\> ping -s 202.120.100.12 202.120.100.1\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"

#string STR_GET_HELP_IFCONFIG                 #language en-US    ""
".TH ifconfig 0 "Modifies the default IP address of the UEFI IPv4 Network Stack."\r\n"
".SH NAME\r\n"
"Modifies the default IP address of the UEFI IPv4 Network Stack.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"IFCONFIG [-r [Name]] [-l [Name]]\r\n"
"IFCONFIG [-s <Name> dhcp | <static <IP> <Mask>  <Gateway>> | <dns <IP>>]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -r          - Renew configuration of interface and set dhcp policy.\r\n"
"  -l          - Lists the configuration.\r\n"
"  -s          - Sets the configuration.\r\n"
"  Name        - Specifies an adapter name (for example, eth0).\r\n"
"  IP          - Specifies the IPv4 address in four integer values:\r\n"
"                  - Example: 192.168.0.10\r\n"
"  SubnetMask  - Specifies a subnet mask in four integer values:\r\n"
"                  - Example: 255.255.255.0\r\n"
"  GatewayMask - Specifies a default gateway in four integer values:\r\n"
"                  - Example: 192.168.0.1\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command modifies the default IP address for the UEFI IP4\r\n"
"     network stack.\r\n"
"  2. Use '-r' to renew configuration of interface and set dhcp policy.\r\n"
"  3. Use '-l' to list the DNS and other address related settings for all\r\n"
"     interfaces or the specified interface.\r\n"
"  4. Use '-s <Name> static <IP> <SubnetMask> <GatewayMask>' with \r\n"
"     static IP4 address configuration for specified interface.\r\n"
"  5. Use '-s <Name> dhcp' for DHCP4 to request the IP4 address\r\n"
"     configuration dynamically for specified interface.\r\n"
"  6. Use '-s <Name> dns <IP>' must under manual policy.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To list the configuration for the eth0 interface:\r\n"
"    fs0:\> ifconfig -l eth0\r\n"
" \r\n"
"  * To use DHCP4 to request the IPv4 address configuration dynamically for the\r\n"
"    eth0 interface:\r\n"
"    fs0:\> ifconfig -s eth0 dhcp\r\n"
" \r\n"
"  * To use the static IPv4 address configuration for the eth0 interface:\r\n"
"    fs0:\> ifconfig -s eth0 static 192.168.0.5 255.255.255.0 192.168.0.1\r\n"
" \r\n"
"  * To configure DNS server address for the eth0 interface:\r\n"
"    fs0:\> ifconfig -s eth0 dns 192.168.0.8 192.168.0.9\r\n"
                                                                  


