From 9819db2c0f7622a46eb183fbf7c255f87fbe0df2 Mon Sep 17 00:00:00 2001 From: jepenven-silabs Date: Fri, 22 Apr 2022 12:12:19 -0400 Subject: [PATCH 1/2] Fix Interface Address Iterator OpenThread --- src/inet/InetInterface.cpp | 38 +++++++++++++++++++++++--- src/inet/InetInterface.h | 6 ++-- src/inet/UDPEndPointImplOpenThread.cpp | 8 ++++++ src/inet/UDPEndPointImplOpenThread.h | 4 ++- 4 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/inet/InetInterface.cpp b/src/inet/InetInterface.cpp index e6125a14508066..3acaa2492d2b81 100644 --- a/src/inet/InetInterface.cpp +++ b/src/inet/InetInterface.cpp @@ -57,6 +57,10 @@ #include #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_NET_IF +#if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT +#include +#endif + #include #include @@ -105,15 +109,41 @@ bool InterfaceIterator::Next() // TODO : Cleanup #17346 return false; } + +InterfaceAddressIterator::InterfaceAddressIterator() +{ + mNetifAddrList = nullptr; + mCurAddr = nullptr; +} + bool InterfaceAddressIterator::HasCurrent() { - return mIntfIter.HasCurrent(); + return (mNetifAddrList != nullptr) ? (mCurAddr != nullptr) : Next(); } bool InterfaceAddressIterator::Next() { - // TODO : Cleanup #17346 - return false; + if (mNetifAddrList == nullptr) + { + mNetifAddrList = otIp6GetUnicastAddresses(Inet::globalOtInstance); + + if (mNetifAddrList == nullptr) + { + return false; + } + mCurAddr = const_cast(mNetifAddrList); + } + else if (mCurAddr != nullptr) + { + mCurAddr = mCurAddr->mNext; + } + + if (mCurAddr == nullptr) + { + return false; + } + + return true; } CHIP_ERROR InterfaceAddressIterator::GetAddress(IPAddress & outIPAddress) { @@ -122,7 +152,7 @@ CHIP_ERROR InterfaceAddressIterator::GetAddress(IPAddress & outIPAddress) return CHIP_ERROR_SENTINEL; } - outIPAddress = IPAddress((*(mAddrInfoList[mCurAddrIndex].mAddress))); + outIPAddress = IPAddress(mCurAddr->mAddress); return CHIP_NO_ERROR; } diff --git a/src/inet/InetInterface.h b/src/inet/InetInterface.h index e0a3ac1aaba725..1663d71f165d9b 100644 --- a/src/inet/InetInterface.h +++ b/src/inet/InetInterface.h @@ -540,15 +540,13 @@ class DLL_EXPORT InterfaceAddressIterator int mCurAddrIndex = -1; #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_NET_IF #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT - otIp6AddressInfo * mAddrInfoList; - int mCurAddrIndex; - InterfaceIterator mIntfIter; + const otNetifAddress * mNetifAddrList; + otNetifAddress * mCurAddr; #endif // #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT }; #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT inline InterfaceIterator::InterfaceIterator(void) {} -inline InterfaceAddressIterator::InterfaceAddressIterator(void) {} inline InterfaceIterator::~InterfaceIterator() = default; inline InterfaceAddressIterator::~InterfaceAddressIterator() = default; inline bool InterfaceIterator::HasCurrent(void) diff --git a/src/inet/UDPEndPointImplOpenThread.cpp b/src/inet/UDPEndPointImplOpenThread.cpp index c7dc23c47dd8d6..a7b80ff70bc43d 100644 --- a/src/inet/UDPEndPointImplOpenThread.cpp +++ b/src/inet/UDPEndPointImplOpenThread.cpp @@ -30,6 +30,8 @@ namespace chip { namespace Inet { +otInstance * globalOtInstance; + void UDPEndPointImplOT::handleUdpReceive(void * aContext, otMessage * aMessage, const otMessageInfo * aMessageInfo) { UDPEndPointImplOT * ep = static_cast(aContext); @@ -170,6 +172,12 @@ void UDPEndPointImplOT::HandleDataReceived(System::PacketBufferHandle && msg) } } +void UDPEndPointImplOT::SetNativeParams(void * params) +{ + mOTInstance = static_cast(params); + globalOtInstance = mOTInstance; +} + CHIP_ERROR UDPEndPointImplOT::SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback) { (void) aIPVersion; diff --git a/src/inet/UDPEndPointImplOpenThread.h b/src/inet/UDPEndPointImplOpenThread.h index f1ad4eaf0451fc..b566c4187695d3 100644 --- a/src/inet/UDPEndPointImplOpenThread.h +++ b/src/inet/UDPEndPointImplOpenThread.h @@ -32,6 +32,8 @@ namespace chip { namespace Inet { +extern otInstance * globalOtInstance; + class UDPEndPointImplOT : public UDPEndPoint, public EndPointStateOpenThread { public: @@ -44,7 +46,7 @@ class UDPEndPointImplOT : public UDPEndPoint, public EndPointStateOpenThread uint16_t GetBoundPort() const override; void Free() override; void HandleDataReceived(System::PacketBufferHandle && msg); - inline void SetNativeParams(void * params) { mOTInstance = static_cast(params); } + void SetNativeParams(void * params); CHIP_ERROR SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback) override; CHIP_ERROR BindInterfaceImpl(IPAddressType addressType, InterfaceId interfaceId) override; From f9e0a9d6f07ac102b48c9d2d2062e8cb4d0cc3ba Mon Sep 17 00:00:00 2001 From: jepenven-silabs Date: Fri, 22 Apr 2022 12:58:24 -0400 Subject: [PATCH 2/2] Apply PR comments --- src/inet/InetInterface.cpp | 14 ++------------ src/inet/InetInterface.h | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/inet/InetInterface.cpp b/src/inet/InetInterface.cpp index 3acaa2492d2b81..5d0eb3aa94243f 100644 --- a/src/inet/InetInterface.cpp +++ b/src/inet/InetInterface.cpp @@ -126,24 +126,14 @@ bool InterfaceAddressIterator::Next() if (mNetifAddrList == nullptr) { mNetifAddrList = otIp6GetUnicastAddresses(Inet::globalOtInstance); - - if (mNetifAddrList == nullptr) - { - return false; - } - mCurAddr = const_cast(mNetifAddrList); + mCurAddr = mNetifAddrList; } else if (mCurAddr != nullptr) { mCurAddr = mCurAddr->mNext; } - if (mCurAddr == nullptr) - { - return false; - } - - return true; + return (mCurAddr != nullptr); } CHIP_ERROR InterfaceAddressIterator::GetAddress(IPAddress & outIPAddress) { diff --git a/src/inet/InetInterface.h b/src/inet/InetInterface.h index 1663d71f165d9b..d87c1080b89e6c 100644 --- a/src/inet/InetInterface.h +++ b/src/inet/InetInterface.h @@ -541,7 +541,7 @@ class DLL_EXPORT InterfaceAddressIterator #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_NET_IF #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT const otNetifAddress * mNetifAddrList; - otNetifAddress * mCurAddr; + const otNetifAddress * mCurAddr; #endif // #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT };