/** @file
  String definitions for VLAN configuration Shell application.

  Copyright (c) 2009 - 2013, 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_VCONFIG_LOCATE_FAIL          #language en-US    "Failed to locate EFI_VLAN_CONFIG_PROTOCOL - %r.\n"
#string STR_VCONFIG_MAC_FAIL             #language en-US    "Failed to get MAC address - %r.\n"
#string STR_VCONFIG_FIND_FAIL            #language en-US    "Failed to find VLAN configuration - %r.\n"
#string STR_VCONFIG_SET_FAIL             #language en-US    "Failed to set VLAN configuration - %r.\n"
#string STR_VCONFIG_REMOVE_FAIL          #language en-US    "Failed to remove VLAN - %r.\n"
#string STR_VCONFIG_NO_IF                #language en-US    "Network interface not specified.\n"
#string STR_VCONFIG_NO_VID               #language en-US    "VLAN ID not specified.\n"
#string STR_VCONFIG_INVALID_IF           #language en-US    "Invalid network interface - %s.\n"
#string STR_VCONFIG_INVALID_VID          #language en-US    "Invalid VLAN ID - %s.\n"
#string STR_VCONFIG_INVALID_PRIORITY     #language en-US    "Invalid VLAN Priority - %s.\n"
#string STR_VCONFIG_NOT_FOUND            #language en-US    "Cannot find the VLAN device specified.\n"
#string STR_VCONFIG_VLAN_DISPLAY         #language en-US    "    VLAN ID: %4d  Priority: %d\n"
#string STR_VCONFIG_NO_VLAN              #language en-US    "    VLAN is not configured.\n"
#string STR_VCONFIG_ETH_MAC              #language en-US    "eth%d  MAC:%s\n"
#string STR_VCONFIG_SET_SUCCESS          #language en-US    "VLAN device added.\n"
#string STR_VCONFIG_REMOVE_SUCCESS       #language en-US    "VLAN device removed.\n"
#string STR_VCONFIG_NO_ARG               #language en-US    "Invalid argument, try "-?" for help.\n"
#string STR_VCONFIG_HELP                 #language en-US    "Display or modify VLAN configuration for network interface.\n\n"
                                                            "VCONFIG [-?] [-l [IfName]] [-a IfName VlanId [Priority]] [-d IfName.VlanId]\n"
                                                            "\n"
                                                            "  -l          Display VLAN configuration for all or specified interface.\n"
                                                            "  -a          Add a VLAN device for the network interface.\n"
                                                            "  -d          Delete a VLAN device.\n"
                                                            "  IfName      Name of network interface, e.g. eth0, eth1.\n"
                                                            "  VlanId      Unique VLAN identifier (0~4094).\n"
                                                            "  Priority    802.1Q priority level (0~7), default 0.\n"
                                                            "\n"
                                                            "Examples:\n"
                                                            "  * To display VLAN configuration:\n"
                                                            "    fs0:\> vconfig -l\n"
                                                            "    fs0:\> vconfig -l eth0\n"
                                                            "\n"
                                                            "  * To add VLAN device:\n"
                                                            "    fs0:\> vconfig -a eth0 1000\n"
                                                            "    fs0:\> vconfig -a eth0 2000 7\n"
                                                            "\n"
                                                            "  * To delete VLAN device:\n"
                                                            "    fs0:\> vconfig -d eth0.1000\n"
