## @file
# Network Package.
#
# This package provides network modules that conform to UEFI 2.4 specification.
#
# Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  DEC_SPECIFICATION              = 0x00010005
  PACKAGE_NAME                   = NetworkPkg
  PACKAGE_GUID                   = 947988BE-8D5C-471a-893D-AD181C46BEBB
  PACKAGE_VERSION                = 0.98
  PACKAGE_UNI_FILE               = NetworkPkg.uni

[Includes]
  Include

[LibraryClasses]
  ##  @libraryclass  IpIo layer upon EFI IP4 Protocol.
  #   This library is only intended to be used by UEFI network stack modules.
  IpIoLib|Include/Library/IpIoLib.h

  ##  @libraryclass  Basic function for UEFI network stack.
  #   This library is only intended to be used by UEFI network stack modules.
  NetLib|Include/Library/NetLib.h

  ##  @libraryclass  The helper routines to access UDP service.
  #   This library is only intended to be used by UEFI network stack modules.
  UdpIoLib|Include/Library/UdpIoLib.h

  ##  @libraryclass  The helper routines to access TCP service.
  #   This library is only intended to be used by UEFI network stack modules.
  TcpIoLib|Include/Library/TcpIoLib.h

  ##  @libraryclass  The helper routines to access HTTP service.
  #   This library is only intended to be used by UEFI network stack modules.
  HttpLib|Include/Library/HttpLib.h

  ##  @libraryclass  Library for Deferred Procedure Calls.
  DpcLib|Include/Library/DpcLib.h

[Guids]
  ## Network package token space guid.
  # Include/Guid/NetworkPkgTokenSpace.h
  gEfiNetworkPkgTokenSpaceGuid  = { 0x40e064b2, 0x0ae0, 0x48b1, { 0xa0, 0x7d, 0xf8, 0xcf, 0x1e, 0x1a, 0x23, 0x10}}

  # Include/Guid/Ip6ConfigHii.h
  gIp6ConfigNvDataGuid          = { 0x2eea107, 0x98db, 0x400e, { 0x98, 0x30, 0x46, 0xa, 0x15, 0x42, 0xd7, 0x99}}

  # Include/Guid/IscsiConfigHii.h
  gIScsiConfigGuid              = { 0x4b47d616, 0xa8d6, 0x4552, { 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0xf, 0x4c, 0xf9}}

  # Include/Guid/HttpBootConfigHii.h
  gHttpBootConfigGuid           = { 0x4d20583a, 0x7765, 0x4e7a, { 0x8a, 0x67, 0xdc, 0xde, 0x74, 0xee, 0x3e, 0xc5 }}

  # Include/Guid/TlsAuthConfigHii.h
  gTlsAuthConfigGuid            = { 0xb0eae4f8, 0x9a04, 0x4c6d, { 0xa7, 0x48, 0x79, 0x3d, 0xaa, 0xf, 0x65, 0xdf }}

  # Include/Guid/TlsAuthentication.h
  gEfiTlsCaCertificateGuid      = { 0xfd2340D0, 0x3dab, 0x4349, { 0xa6, 0xc7, 0x3b, 0x4f, 0x12, 0xb4, 0x8e, 0xae }}

  # Include/Guid/HttpTlsCipherList.h
  gEdkiiHttpTlsCipherListGuid   = { 0x46ddb415, 0x5244, 0x49c7, { 0x93, 0x74, 0xf0, 0xe2, 0x98, 0xe7, 0xd3, 0x86 }}

  # Include/Guid/WifiConnectionManagerConfigHii.h
  gWifiConfigGuid               = { 0x9f94d327, 0x0b18, 0x4245, { 0x8f, 0xf2, 0x83, 0x2e, 0x30, 0xd, 0x2c, 0xef }}

  ## Include/Guid/Ip4Config2Hii.h
  gIp4Config2NvDataGuid              = { 0x9b942747, 0x154e, 0x4d29, { 0xa4, 0x36, 0xbf, 0x71, 0x0, 0xc8, 0xb5, 0x3b }}

  ## Include/Guid/VlanConfigHii.h
  gVlanConfigFormSetGuid             = { 0xd79df6b0, 0xef44, 0x43bd, { 0x97, 0x97, 0x43, 0xe9, 0x3b, 0xcf, 0x5f, 0xa8 }}

  ## Include/Guid/Ip4IScsiConfigHii.h
  gIp4IScsiConfigGuid                = { 0x6456ed61, 0x3579, 0x41c9, { 0x8a, 0x26, 0x0a, 0x0b, 0xd6, 0x2b, 0x78, 0xfc }}
  gIScsiCHAPAuthInfoGuid             = { 0x786ec0ac, 0x65ae, 0x4d1b, { 0xb1, 0x37, 0xd, 0x11, 0xa, 0x48, 0x37, 0x97 }}

[Protocols]
  ## Include/Protocol/Dpc.h
  gEfiDpcProtocolGuid           = {0x480f8ae9, 0xc46, 0x4aa9,  { 0xbc, 0x89, 0xdb, 0x9f, 0xba, 0x61, 0x98, 0x6 }}

[PcdsFixedAtBuild]
  ## The max attempt number will be created by iSCSI driver.
  # @Prompt Max attempt number.
  gEfiNetworkPkgTokenSpaceGuid.PcdMaxIScsiAttemptNumber|0x08|UINT8|0x0000000D

[PcdsFixedAtBuild, PcdsPatchableInModule]
  ## Indicates whether HTTP connections (i.e., unsecured) are permitted or not.
  # TRUE  - HTTP connections are allowed. Both the "https://" and "http://" URI schemes are permitted.
  # FALSE - HTTP connections are denied. Only the "https://" URI scheme is permitted.
  # @Prompt Indicates whether HTTP connections are permitted or not.
  gEfiNetworkPkgTokenSpaceGuid.PcdAllowHttpConnections|FALSE|BOOLEAN|0x00000008

  ## This setting is to specify the MTFTP windowsize used by UEFI PXE driver.
  # A value of 0 indicates the default value of windowsize(1).
  # A non-zero value will be used as windowsize.
  # @Prompt PXE TFTP windowsize.
  gEfiNetworkPkgTokenSpaceGuid.PcdPxeTftpWindowSize|0x4|UINT64|0x10000008


  ## This setting can override the default TFTP block size. A value of 0 computes
  # the default from MTU information. A non-zero value will be used as block size
  # in bytes.
  # @Prompt TFTP block size.
  gEfiNetworkPkgTokenSpaceGuid.PcdTftpBlockSize|0x0|UINT64|0x1000000B

  ## Indicates whether SnpDxe driver will create an event that will be notified
  # upon gBS->ExitBootServices() call.
  # TRUE - Event being triggered upon ExitBootServices call will be created
  # FALSE - Event being triggered upon ExitBootServices call will NOT be created
  # @Prompt Indicates whether SnpDxe creates event for ExitBootServices() call.
  gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent|TRUE|BOOLEAN|0x1000000C

[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
  ## IPv6 DHCP Unique Identifier (DUID) Type configuration (From RFCs 3315 and 6355).
  # 01 = DUID Based on Link-layer Address Plus Time [DUID-LLT]
  # 04 = UUID-Based DHCPv6 Unique Identifier (DUID-UUID)
  # 02 = DUID Assigned by Vendor Based on Enterprise Number [DUID-EN] (not supported)
  # 03 = DUID Based on Link-layer Address [DUID-LL] (not supported)
  # @Prompt Type Value of Dhcp6 Unique Identifier (DUID).
  gEfiNetworkPkgTokenSpaceGuid.PcdDhcp6UidType|4|UINT8|0x10000001

  ## Network boot policy to stop UEFI iSCSI if applicable.
  # 0x00 = Always use UEFI iSCSI and ignore iSCSI HBA.
  # 0x01 = Stop UEFI iSCSI if iSCSI HBA adapter produces AIP protocol with Network Boot.
  # 0x02 = Stop UEFI iSCSI if iSCSI HBA adapter supports booting from iSCSI IPv4 targets.
  # 0x04 = Stop UEFI iSCSI if iSCSI HBA adapter supports booting from iSCSI IPv6 targets.
  # 0x08 = Stop UEFI iSCSI if iSCSI HBA adapter supports an offload engine for iSCSI boot.
  # 0x10 = Stop UEFI iSCSI if iSCSI HBA adapter supports multipath I/O for iSCSI boot.
  # 0x20 = Stop UEFI iSCSI if iSCSI HBA adapter is currently configured to boot from iSCSI IPv4 targets.
  # 0x40 = Stop UEFI iSCSI if iSCSI HBA adapter is currently configured to boot from iSCSI IPv6 targets.
  # 0xFF = Always use iSCSI HBA and ignore UEFI iSCSI.
  # @Prompt Type Value of network boot policy used in iSCSI.
  gEfiNetworkPkgTokenSpaceGuid.PcdIScsiAIPNetworkBootPolicy|0x08|UINT8|0x10000007

  ## IPv4 PXE support
  # 0x01 = PXE Enabled
  # 0x00 = PXE Disabled
  gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01|UINT8|0x10000009

  ## IPv6 PXE support
  # 0x01 = PXE Enabled
  # 0x00 = PXE Disabled
  gEfiNetworkPkgTokenSpaceGuid.PcdIPv6PXESupport|0x01|UINT8|0x1000000a

[UserExtensions.TianoCore."ExtraFiles"]
  NetworkPkgExtra.uni
