Skip to content

Commit c77044f

Browse files
jmartinez-silabsSarthak-Shaha
authored andcommitted
Fix gendiag network interface attribute (project-chip#32390)
1 parent 8abf831 commit c77044f

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

src/include/platform/internal/GenericConfigurationManagerImpl.ipp

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ template <class ConfigClass>
397397
CHIP_ERROR GenericConfigurationManagerImpl<ConfigClass>::GetPrimary802154MACAddress(uint8_t * buf)
398398
{
399399
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
400-
return ThreadStackManager().GetPrimary802154MACAddress(buf);
400+
return ThreadStackMgr().GetPrimary802154MACAddress(buf);
401401
#else
402402
return CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND;
403403
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD

src/platform/silabs/DiagnosticDataProviderImpl.cpp

+25-6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "AppConfig.h"
3232
#include "FreeRTOS.h"
3333
#include "heap_4_silabs.h"
34+
#include <inet/InetInterface.h>
3435
#include <lib/support/CHIPMemString.h>
3536

3637
using namespace ::chip::app::Clusters::GeneralDiagnostics;
@@ -249,13 +250,32 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface **
249250
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
250251
const char * threadNetworkName = otThreadGetNetworkName(ThreadStackMgrImpl().OTInstance());
251252
ifp->name = Span<const char>(threadNetworkName, strlen(threadNetworkName));
252-
ifp->isOperational = true;
253+
ifp->type = InterfaceTypeEnum::kThread;
254+
ifp->isOperational = ThreadStackMgrImpl().IsThreadAttached();
253255
ifp->offPremiseServicesReachableIPv4.SetNull();
254256
ifp->offPremiseServicesReachableIPv6.SetNull();
255-
ifp->type = InterfaceTypeEnum::kThread;
256-
uint8_t macBuffer[ConfigurationManager::kPrimaryMACAddressLength];
257-
ConfigurationMgr().GetPrimary802154MACAddress(macBuffer);
258-
ifp->hardwareAddress = ByteSpan(macBuffer, ConfigurationManager::kPrimaryMACAddressLength);
257+
258+
ThreadStackMgrImpl().GetPrimary802154MACAddress(ifp->MacAddress);
259+
ifp->hardwareAddress = ByteSpan(ifp->MacAddress, kMaxHardwareAddrSize);
260+
261+
// The Thread implementation has only 1 interface and is IPv6-only
262+
Inet::InterfaceAddressIterator interfaceAddressIterator;
263+
uint8_t ipv6AddressesCount = 0;
264+
while (interfaceAddressIterator.HasCurrent() && ipv6AddressesCount < kMaxIPv6AddrCount)
265+
{
266+
Inet::IPAddress ipv6Address;
267+
if (interfaceAddressIterator.GetAddress(ipv6Address) == CHIP_NO_ERROR)
268+
{
269+
memcpy(ifp->Ipv6AddressesBuffer[ipv6AddressesCount], ipv6Address.Addr, kMaxIPv6AddrSize);
270+
ifp->Ipv6AddressSpans[ipv6AddressesCount] = ByteSpan(ifp->Ipv6AddressesBuffer[ipv6AddressesCount]);
271+
ipv6AddressesCount++;
272+
}
273+
interfaceAddressIterator.Next();
274+
}
275+
276+
ifp->IPv6Addresses = app::DataModel::List<ByteSpan>(ifp->Ipv6AddressSpans, ipv6AddressesCount);
277+
278+
*netifpp = ifp;
259279
#else
260280
NetworkInterface * head = NULL;
261281
for (Inet::InterfaceIterator interfaceIterator; interfaceIterator.HasCurrent(); interfaceIterator.Next())
@@ -331,7 +351,6 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface **
331351
*netifpp = head;
332352
#endif
333353

334-
*netifpp = ifp;
335354
return CHIP_NO_ERROR;
336355
}
337356

0 commit comments

Comments
 (0)