// /** @file
// This package provides network modules that conform to UEFI 2.4 specification.
//
// This package provides network modules that conform to UEFI 2.4 specification.
//
// Copyright (c) 2009 - 2018, 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.
//
// **/


#string STR_PACKAGE_ABSTRACT            #language en-US "This package provides network modules that conform to UEFI 2.4 specification."

#string STR_PACKAGE_DESCRIPTION         #language en-US "This package provides network modules that conform to UEFI 2.4 specification."


#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdMaxIScsiAttemptNumber_PROMPT  #language en-US "Max attempt number."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdMaxIScsiAttemptNumber_HELP  #language en-US "Max attempt number created by iSCSI."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCaFile_PROMPT  #language en-US "CA file."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCaFile_HELP  #language en-US "CA certificate used by IPsec."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCaFileSize_PROMPT  #language en-US "CA file's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCaFileSize_HELP  #language en-US "CA certificate file's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificate_PROMPT  #language en-US "Pubic Key for remote peer."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificate_HELP  #language en-US "X509 certificate as Public Key which is used by IPsec (DER format)"

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateSize_PROMPT  #language en-US "Pubic Key's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateSize_HELP  #language en-US "X509 certificate as Public Key's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateKey_PROMPT  #language en-US "Private Key."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateKey_HELP  #language en-US "Private Key used by IPsec (PEM format)."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateKeySize_PROMPT  #language en-US "Private Key's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecUefiCertificateKeySize_HELP  #language en-US "Private Key's size."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdAllowHttpConnections_PROMPT  #language en-US "Indicates whether HTTP connections are permitted or not."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdAllowHttpConnections_HELP  #language en-US "Indicates whether HTTP connections are permitted or not.\n"
                                                                                       "TRUE  - HTTP connections are allowed.\n"
                                                                                       "FALSE - HTTP connections are denied."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecCertificateEnabled_PROMPT  #language en-US "Enable IPsec IKEv2 Certificate Authentication."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIpsecCertificateEnabled_HELP  #language en-US "Indicates if the IPsec IKEv2 Certificate Authentication feature is enabled or not.<BR><BR>\n"
                                                                                          "TRUE  - Certificate Authentication feature is enabled.<BR>\n"
                                                                                          "FALSE - Does not support Certificate Authentication.<BR>"

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdDhcp6UidType_PROMPT  #language en-US "Type Value of Dhcp6 Unique Identifier (DUID)."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdDhcp6UidType_HELP  #language en-US "IPv6 DHCP Unique Identifier (DUID) Type configuration (From RFCs 3315 and 6355).\n"
                                                                               "01 = DUID Based on Link-layer Address Plus Time [DUID-LLT]\n"
                                                                               "04 = UUID-Based DHCPv6 Unique Identifier (DUID-UUID)\n"
                                                                               "02 = DUID Assigned by Vendor Based on Enterprise Number [DUID-EN] (not supported)\n"
                                                                               "03 = DUID Based on Link-layer Address [DUID-LL] (not supported)"

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIScsiAIPNetworkBootPolicy_PROMPT  #language en-US "Type Value of network boot policy used in iSCSI."

#string STR_gEfiNetworkPkgTokenSpaceGuid_PcdIScsiAIPNetworkBootPolicy_HELP  #language en-US "Network boot policy to stop UEFI iSCSI if applicable.\n"
                                                                                            "0x00 = Always use UEFI iSCSI and ignore AIP.\n"
                                                                                            "0x01 = Stop UEFI iSCSI if iSCSI HBA adapter produces AIP protocol with Network Boot.\n"
                                                                                            "0x02 = Stop UEFI iSCSI if iSCSI HBA adapter supports booting from iSCSI IPv4 targets.\n"
                                                                                            "0x04 = Stop UEFI iSCSI if iSCSI HBA adapter supports booting from iSCSI IPv6 targets.\n"
                                                                                            "0x08 = Stop UEFI iSCSI if iSCSI HBA adapter supports an offload engine for iSCSI boot.\n"
                                                                                            "0x10 = Stop UEFI iSCSI if iSCSI HBA adapter supports multipath I/O for iSCSI boot.\n"
                                                                                            "0x20 = Stop UEFI iSCSI if iSCSI HBA adapter is currently configured to boot from iSCSI IPv4 targets.\n"
                                                                                            "0x40 = Stop UEFI iSCSI if iSCSI HBA adapter is currently configured to boot from iSCSI IPv6 targets."
