Browse Source

NetworkPkg: Add IPv6 DUID configuration support using platform PCD.

The code today always uses DUID-UUID unless there is an error in reading the UUID, 
which results in falling through to DUID-LLT. This change allows the platform to
 control the DUID method (DUID-UUID or DUID-LLT) using a platform dynamic PCD.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Samer El-Haj-Mahmoud <elhaj@hp.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17751 6f19259b-4bc3-4df7-8a09-765794883524
Samer El-Haj-Mahmoud 9 years ago
parent
commit
c413813d61

+ 6 - 1
NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf

@@ -4,6 +4,7 @@
 #  This driver produces EFI DHCPv6 Protocol which is used to get IPv6 addresses
 #  and other configuration parameters from DHCPv6 servers.
 #
+#  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
 #  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
 #
 #  This program and the accompanying materials
@@ -51,7 +52,7 @@
 [Packages]
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
-
+  NetworkPkg/NetworkPkg.dec
 
 [LibraryClasses]
   UefiLib
@@ -73,5 +74,9 @@
   gEfiDhcp6ProtocolGuid                              ## BY_START
   gEfiIp6ConfigProtocolGuid                          ## TO_START
 
+ 
+[Pcd]
+  gEfiNetworkPkgTokenSpaceGuid.PcdDhcp6UidType
+
 [UserExtensions.TianoCore."ExtraFiles"]
   Dhcp6DxeExtra.uni

+ 2 - 1
NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c

@@ -1,6 +1,7 @@
 /** @file
   Dhcp6 support functions implementation.
 
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
   Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
@@ -63,7 +64,7 @@ Dhcp6GenerateClientId (
   //
   // If System UUID is found from SMBIOS Table, use DUID-UUID type.
   //
-  if (!EFI_ERROR (NetLibGetSystemGuid (&Uuid))) {
+  if ((PcdGet8 (PcdDhcp6UidType) == Dhcp6DuidTypeUuid) && !EFI_ERROR (NetLibGetSystemGuid (&Uuid))) {
     //
     //
     //  The format of DUID-UUID:

+ 9 - 0
NetworkPkg/NetworkPkg.dec

@@ -3,6 +3,7 @@
 #
 # This package provides network modules that conform to UEFI 2.4 specification.
 #
+# (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
 # Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials are licensed and made available under
@@ -68,5 +69,13 @@
   # @Prompt Private Key's size.
   gEfiNetworkPkgTokenSpaceGuid.PcdIpsecUefiCertificateKeySize|0x3d5|UINT32|0x00000006
 
+[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)
+  gEfiNetworkPkgTokenSpaceGuid.PcdDhcp6UidType|4|UINT8|0x10000001
+
 [UserExtensions.TianoCore."ExtraFiles"]
   NetworkPkgExtra.uni