/** @file\r
Dhcp6 support functions implementation.\r
\r
- Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
//\r
// If System UUID is found from SMBIOS Table, use DUID-UUID type.\r
//\r
- if (!EFI_ERROR (NetLibGetSystemGuid (&Uuid))) {\r
+ if ((PcdGet8 (PcdDhcp6UidType) == Dhcp6DuidTypeUuid) && !EFI_ERROR (NetLibGetSystemGuid (&Uuid)) && !CompareGuid (&Uuid, &gZeroGuid)) {\r
//\r
//\r
// The format of DUID-UUID:\r
- // \r
+ //\r
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\r
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r
// | DUID-Type (4) | UUID (128 bits) |\r
// sizeof (Duid-type + UUID-size) = 18 bytes\r
//\r
Duid->Length = (UINT16) (18);\r
- \r
+\r
//\r
// Set the Duid-type and copy UUID.\r
//\r
WriteUnaligned16 ((UINT16 *) (Duid->Duid), HTONS (Dhcp6DuidTypeUuid));\r
- \r
+\r
CopyMem (Duid->Duid + 2, &Uuid, sizeof(EFI_GUID));\r
\r
} else {\r
- \r
+\r
//\r
//\r
// The format of DUID-LLT:\r
gRT->GetTime (&Time, NULL);\r
Stamp = (UINT32)\r
(\r
- (((((Time.Year - 2000) * 360 + (Time.Month - 1)) * 30 + (Time.Day - 1)) * 24 + Time.Hour) * 60 + Time.Minute) *\r
+ ((((UINT32)(Time.Year - 2000) * 360 + (Time.Month - 1) * 30 + (Time.Day - 1)) * 24 + Time.Hour) * 60 + Time.Minute) *\r
60 +\r
Time.Second\r
);\r
if (Duid == NULL) {\r
return NULL;\r
}\r
- \r
+\r
//\r
// sizeof (Duid-type + hardware-type + time) = 8 bytes\r
//\r
Duid->Length = (UINT16) (Mode->HwAddressSize + 8);\r
- \r
+\r
//\r
// Set the Duid-type, hardware-type, time and copy the hardware address.\r
//\r
// . IAaddr-options .\r
// . .\r
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r
- \r
+\r
//\r
// Fill the value of Ia Address option type\r
//\r
// Generate a time stamp of the centiseconds from 2000/1/1, assume 30day/month.\r
//\r
gRT->GetTime (&Time, NULL);\r
- CurrentStamp = (UINT64)\r
- (\r
- ((((((Time.Year - 2000) * 360 +\r
- (Time.Month - 1)) * 30 +\r
- (Time.Day - 1)) * 24 + Time.Hour) * 60 +\r
- Time.Minute) * 60 + Time.Second) * 100\r
- + DivU64x32(Time.Nanosecond, 10000000)\r
- );\r
+ CurrentStamp = MultU64x32 (\r
+ ((((UINT32)(Time.Year - 2000) * 360 + (Time.Month - 1) * 30 + (Time.Day - 1)) * 24 + Time.Hour) * 60 + Time.Minute) * 60 + Time.Second,\r
+ 100\r
+ ) +\r
+ DivU64x32(\r
+ Time.Nanosecond,\r
+ 10000000\r
+ );\r
\r
//\r
// Sentinel value of 0 means that this is the first DHCP packet that we are\r
}\r
\r
/**\r
- Check whether the incoming IPv6 address in IaAddr is one of the maintained \r
+ Check whether the incoming IPv6 address in IaAddr is one of the maintained\r
addresses in the IA control blcok.\r
\r
@param[in] IaAddr The pointer to the IA Address to be checked.\r
UINT32 Index;\r
\r
ASSERT (IaAddr != NULL && CurrentIa != NULL);\r
- \r
+\r
for (Index = 0; Index < CurrentIa->IaAddressCount; Index++) {\r
if (EFI_IP6_EQUAL(&IaAddr->IpAddress, &CurrentIa->IaAddress[Index].IpAddress)) {\r
return TRUE;\r
Dhcp6GetMappingTimeOut (\r
IN EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg,\r
OUT UINTN *TimeOut\r
- ) \r
+ )\r
{\r
EFI_STATUS Status;\r
UINTN DataSize;\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- \r
+\r
*TimeOut = TICKS_PER_SECOND * DadXmits.DupAddrDetectTransmits + DHCP6_DAD_ADDITIONAL_DELAY;\r
- \r
+\r
return EFI_SUCCESS;\r
}\r