/** @file
  String definitions for the Shell IpSecConfig application.

  Copyright (c) 2009 - 2014, 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_IPSEC_CONFIG_UNKNOWN_OPERATION          #language en-US  "%s: Operation not specified.\n"

#string STR_IPSEC_CONFIG_INCORRECT_DB               #language en-US  "%s: Incorrect Database - %s.\n"

#string STR_IPSEC_CONFIG_PROTOCOL_INEXISTENT        #language en-US  "%s: IPSEC_CONFIG protocol inexistent.\n"

#string STR_IPSEC_CONFIG_MISSING_DB                 #language en-US  "%s: Missing Database.\n"

#string STR_IPSEC_CONFIG_FILE_OPEN_FAILED           #language en-US  "%s: Open file failed - %s.\n"

#string STR_IPSEC_CONFIG_INCORRECT_PARAMETER_VALUE  #language en-US  "%s: Incorrect value of %s - %s.\n"

#string STR_IPSEC_CONFIG_ACCEPT_PARAMETERS          #language en-US  "  Values could be:"

#string STR_IPSEC_CONFIG_MISSING_PARAMETER          #language en-US  "%s: Missing parameter - %s.\n"

#string STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS  #language en-US  "%s: Missing one of the parameters - %s.\n"

#string STR_IPSEC_CONFIG_UNWANTED_PARAMETER         #language en-US  "%s: Unwanted parameter - %s.\n"

#string STR_IPSEC_CONFIG_INSERT_FAILED              #language en-US  "%s: Policy entry insertion failed!\n"

#string STR_IPSEC_CONFIG_DELETE_FAILED              #language en-US  "%s: Policy entry deletion failed!\n"

#string STR_IPSEC_CONFIG_EDIT_FAILED                #language en-US  "%s: Policy entry edit failed!\n"

#string STR_IPSEC_CONFIG_ALREADY_EXISTS             #language en-US  "%s: Policy entry already exists!\n"

#string STR_IPSEC_CONFIG_INDEX_NOT_FOUND            #language en-US  "%s: Specified index not found!\n"

#string STR_IPSEC_CONFIG_INDEX_NOT_SPECIFIED        #language en-US  "%s: Index should be Specified!\n"

#string STR_IPSEC_CONFIG_INSERT_UNSUPPORT           #language en-US  "%s: Policy entry insertion not supported!\n"

#string STR_IPSEC_MISTAKEN_OPTIONS                  #language en-US  "Mistaken Input. Please refer to %H"IpSecConfig -?"%N for more help information.\n"

#string STR_IPSEC_REDUNDANCY_MANY                   #language en-US  "%s has one redundancy option: %H%s%N\n"

#string STR_IPSEC_CONFIG_ALREADY_ENABLE             #language en-US  "IPsec has been already enabled!\n"

#string STR_IPSEC_CONFIG_ENABLE_SUCCESS             #language en-US  "Enable IPsec ! \n"

#string STR_IPSEC_CONFIG_DISABLE_SUCCESS            #language en-US  "Disable IPsec ! \n"

#string STR_IPSEC_CONFIG_ALREADY_DISABLE            #language en-US  "IPsec has been already disabled !\n"

#string STR_IPSEC_CONFIG_STATUS_ENABLE              #language en-US  "IPsec Status : Enabled ! \n"

#string STR_IPSEC_CONFIG_STATUS_DISABLE             #language en-US  "IPsec Status : Disabled ! \n"

#string STR_IPSEC_CONFIG_ENABLE_FAILED              #language en-US  "Error: Enable IPsec failed !\n"

#string STR_IPSEC_CONFIG_DISABLE_FAILED             #language en-US  "Error: Disable IPsec failed !\n"

#string STR_IPSEC_CONFIG_HELP                 #language en-US    ""
".TH IpSecConfig 0 "Displays or modifies the current IPsec configuration."\r\n"
".SH NAME\r\n"
"Displays or modifies the current IPsec configuration.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"%HIpSecConfig [-p {SPD|SAD|PAD}] [command] [options[parameters]]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"%H-p (SPD|SAD|PAD)%N                   required.point to certain policy database.\r\n"
" \r\n"
"%Hcommand%N:\r\n"
"  -a [options[parameters]]         Add new policy entry.\r\n"
"  -i entryid [options[parameters]] Insert new policy entry before the one\r\n"
"                                   matched by the entryid.\r\n"
"                                   It's only supported on SPD policy database.\r\n"
"  -d entryid                       Delete the policy entry matched by the \r\n"
"                                   entryid.\r\n"
"  -e entryid [options[parameters]] Edit the policy entry matched by the\r\n"
"                                   entryid.\r\n"
"  -f                               Flush the entire policy database.\r\n"
"  -l                               List all entries for specified database.\r\n"
"  -enable                          Enable IPsec.\r\n"
"  -disable                         Disable IPsec.\r\n"
"  -status                          Show IPsec current status.\r\n"
" \r\n"
"%H[options[parameters]]%N for %HSPD%N:\r\n"
"  --local localaddress               optional local address\r\n"
"  --remote remoteaddress             required remote address\r\n"
"  --proto (TCP|UDP|ICMP|...)         required IP protocol\r\n"
"  --local-port port                  optional local port for tcp/udp protocol\r\n"
"  --remote-port port                 optional remote port for tcp/udp protocol\r\n"
"  --name name                        optional SPD name\r\n"
"  --action (Bypass|Discard|Protect)  required \r\n"
"                                     required IPsec action\r\n"
"  --mode (Transport|Tunnel)          optional IPsec mode, transport by default\r\n"
"  --ipsec-proto (AH|ESP)             optional IPsec protocol, ESP by default\r\n"
"  --auth-algo (NONE|SHA1HMAC)        optional authentication algorithm\r\n"
"  --encrypt-algo(NONE|DESCBC|3DESCBC)optional encryption algorithm\r\n"
"  --tunnel-local tunnellocaladdr     optional tunnel local address(only for tunnel mode)\r\n"
"  --tunnel-remote tunnelremoteaddr   optional tunnel remote address(only for tunnel mode)\r\n"
" \r\n"
"%H[options[parameters]]%N for %HSAD%N:\r\n"
"  --spi  spi                            required SPI value\r\n"
"  --ipsec-proto   (AH|ESP)              required IPsec protocol\r\n"
"  --local         localaddress          optional local address\r\n"
"  --remote        remoteaddress         required destination address\r\n"
"  --auth-algo     (NONE|SHA1HMAC)       required for AH. authentication algorithm\n"
"  --auth-key      key                   required for AH. key for authentication\r\n"
"  --encrypt-algo  (NONE|DESCBC|3DESCBC) required for ESP. encryption algorithm\r\n"
"  --encrypt-key   key                   required for ESP. key for encryption\r\n"
"  --mode          (Transport|Tunnel)    optional IPsec mode, transport by default\r\n"
"  --tunnel-dest   tunneldestaddr        optional tunnel destination address(only for tunnel mode)\r\n"
"  --tunnel-source tunnelsourceaddr      optional tunnel source address(only for tunnel mode)\r\n"
" \r\n"
"%H[options[parameters]]%N for %HPAD%N:\r\n"
"  --peer-address address                        required peer address\r\n"
"  --auth-proto (IKEv1|IKEv2)                    optional IKE protocol, IKEv1 by\r\n"
"                                                default\r\n"
"  --auth-method (PreSharedSecret|Certificates)  required authentication method\r\n"
"  --auth-data  authdata                         required data for authentication\r\n"
" \r\n"
