## @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-2020 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  Http IO helper routines for HTTP transfer.
  #   This library is only intended to be used by UEFI network stack modules.
  HttpIoLib|Include/Library/HttpIoLib.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

  ## The maximum size of total HTTP chunk transfer.
  # @Prompt Max size of total HTTP chunk transfer. the default value is 12MB.
  gEfiNetworkPkgTokenSpaceGuid.PcdMaxHttpChunkTransfer|0x0C00000|UINT32|0x0000000E

[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
