diff --git a/src/app/server/Dnssd.cpp b/src/app/server/Dnssd.cpp index 1d079593b1d51d..f16a94809a7555 100644 --- a/src/app/server/Dnssd.cpp +++ b/src/app/server/Dnssd.cpp @@ -256,7 +256,11 @@ CHIP_ERROR DnssdServer::AdvertiseOperational() { uint8_t macBuffer[DeviceLayer::ConfigurationManager::kPrimaryMACAddressLength]; MutableByteSpan mac(macBuffer); - chip::DeviceLayer::ConfigurationMgr().GetPrimaryMACAddress(mac); + if (chip::DeviceLayer::ConfigurationMgr().GetPrimaryMACAddress(mac) != CHIP_NO_ERROR) + { + ChipLogError(Discovery, "Failed to get primary mac address of device. Generating a random one."); + Crypto::DRBG_get_bytes(macBuffer, sizeof(macBuffer)); + } const auto advertiseParameters = chip::Dnssd::OperationalAdvertisingParameters() .SetPeerId(fabricInfo.GetPeerId()) @@ -293,7 +297,11 @@ CHIP_ERROR DnssdServer::Advertise(bool commissionableNode, chip::Dnssd::Commissi uint8_t macBuffer[DeviceLayer::ConfigurationManager::kPrimaryMACAddressLength]; MutableByteSpan mac(macBuffer); - chip::DeviceLayer::ConfigurationMgr().GetPrimaryMACAddress(mac); + if (chip::DeviceLayer::ConfigurationMgr().GetPrimaryMACAddress(mac) != CHIP_NO_ERROR) + { + ChipLogError(Discovery, "Failed to get primary mac address of device. Generating a random one."); + Crypto::DRBG_get_bytes(macBuffer, sizeof(macBuffer)); + } advertiseParameters.SetMac(mac); uint16_t value; diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.cpp b/src/include/platform/internal/GenericConfigurationManagerImpl.cpp index 91f14a9cee7105..1ec4aa122e8add 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.cpp +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.cpp @@ -136,18 +136,15 @@ CHIP_ERROR GenericConfigurationManagerImpl::GetPrimaryMACAddress(Mu ChipLogDetail(DeviceLayer, "Using Thread extended MAC for hostname."); return CHIP_NO_ERROR; } -#else - if (DeviceLayer::ConfigurationMgr().GetPrimaryWiFiMACAddress(buf.data()) == CHIP_NO_ERROR) +#endif + + if (chip::DeviceLayer::ConfigurationMgr().GetPrimaryWiFiMACAddress(buf.data()) == CHIP_NO_ERROR) { ChipLogDetail(DeviceLayer, "Using wifi MAC for hostname"); return CHIP_NO_ERROR; } -#endif - ChipLogError(DeviceLayer, "MAC is not known, using a default."); - uint8_t temp[ConfigurationManager::kMaxMACAddressLength] = { 0xEE, 0xAA, 0xBA, 0xDA, 0xBA, 0xD0, 0xDD, 0xCA }; - memcpy(buf.data(), temp, buf.size()); - return CHIP_NO_ERROR; + return CHIP_ERROR_NOT_FOUND; } template diff --git a/src/platform/tests/TestConfigurationMgr.cpp b/src/platform/tests/TestConfigurationMgr.cpp index 26cebebed47767..9057a446a287ef 100644 --- a/src/platform/tests/TestConfigurationMgr.cpp +++ b/src/platform/tests/TestConfigurationMgr.cpp @@ -187,8 +187,7 @@ static void TestConfigurationMgr_Breadcrumb(nlTestSuite * inSuite, void * inCont static void TestConfigurationMgr_GetPrimaryMACAddress(nlTestSuite * inSuite, void * inContext) { - CHIP_ERROR err = CHIP_NO_ERROR; - const uint8_t defaultMacAddress[8] = { 0xEE, 0xAA, 0xBA, 0xDA, 0xBA, 0xD0, 0xDD, 0xCA }; + CHIP_ERROR err = CHIP_NO_ERROR; uint8_t macBuffer8Bytes[8]; uint8_t macBuffer6Bytes[6]; MutableByteSpan mac8Bytes(macBuffer8Bytes); @@ -199,32 +198,17 @@ static void TestConfigurationMgr_GetPrimaryMACAddress(nlTestSuite * inSuite, voi { NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT); } - else - { - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); - - // Verify default MAC address value - NL_TEST_ASSERT(inSuite, - strncmp(reinterpret_cast(mac8Bytes.data()), reinterpret_cast(defaultMacAddress), - mac8Bytes.size()) == 0); - } err = ConfigurationMgr().GetPrimaryMACAddress(mac6Bytes); if (mac6Bytes.size() != ConfigurationManager::kPrimaryMACAddressLength) { NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT); } - else - { - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); -#ifndef __MBED__ - // Verify default MAC address value - NL_TEST_ASSERT(inSuite, - strncmp(reinterpret_cast(mac6Bytes.data()), reinterpret_cast(defaultMacAddress), - mac6Bytes.size()) == 0); -#endif - } + // NOTICE for above: + // no validation for CHIP_NO_ERROR: + // - there is no guarantee in CI that a valid IP address exists, + // expecially if running in emulators (zephyr and qemu) } /**