[netdata] enhance NetworkData::Service::Iterator (#11680)

This commit enhances the `NetworkData::Service::Iterator` class.
The `Iterator` is now a separate class from `Service::Manager`. It
provides `GetNextDnsSrpAnycastInfo()` & `GetNextDnsSrpUnicastInfo()`
methods, simplifying the code for iterating over these service
entries. The `Iterator` is also generalized to track a given
`NetworkData` instance, allowing it to iterate over service entries
on any `NetworkData` object, not just the Leader's.
This commit is contained in:
Abtin Keshavarzian
2025-07-08 15:57:15 -07:00
committed by GitHub
parent a9b30754e4
commit 1bd98b7804
8 changed files with 163 additions and 139 deletions
+7 -7
View File
@@ -2413,9 +2413,9 @@ exit:
Error Client::SelectUnicastEntry(DnsSrpUnicastType aType, DnsSrpUnicastInfo &aInfo) const
{
Error error = kErrorNotFound;
DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::Manager::Iterator iterator;
Error error = kErrorNotFound;
DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::Iterator iterator(GetInstance());
#if OPENTHREAD_CONFIG_SRP_CLIENT_SAVE_SELECTED_SERVER_ENABLE
Settings::SrpClientInfo savedInfo;
bool hasSavedServerInfo = false;
@@ -2426,7 +2426,7 @@ Error Client::SelectUnicastEntry(DnsSrpUnicastType aType, DnsSrpUnicastInfo &aIn
}
#endif
while (Get<NetworkData::Service::Manager>().GetNextDnsSrpUnicastInfo(iterator, aType, unicastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpUnicastInfo(aType, unicastInfo) == kErrorNone)
{
bool preferNewEntry;
@@ -2519,10 +2519,10 @@ void Client::SelectNextServer(bool aDisallowSwitchOnRegisteredHost)
do
{
DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::Manager::Iterator iterator;
DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::Iterator iterator(GetInstance());
while (Get<NetworkData::Service::Manager>().GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo) == kErrorNone)
{
if (selectNext)
{
+3 -5
View File
@@ -303,7 +303,7 @@ bool Server::NetDataContainsOtherSrpServers(void) const
bool contains = false;
NetworkData::Service::DnsSrpAnycastInfo anycastInfo;
NetworkData::Service::DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::Manager::Iterator iterator;
NetworkData::Service::Iterator iterator(GetInstance());
if (Get<NetworkData::Service::Manager>().FindPreferredDnsSrpAnycastInfo(anycastInfo) == kErrorNone)
{
@@ -313,8 +313,7 @@ bool Server::NetDataContainsOtherSrpServers(void) const
iterator.Reset();
if (Get<NetworkData::Service::Manager>().GetNextDnsSrpUnicastInfo(
iterator, NetworkData::Service::kAddrInServiceData, unicastInfo) == kErrorNone)
if (iterator.GetNextDnsSrpUnicastInfo(NetworkData::Service::kAddrInServiceData, unicastInfo) == kErrorNone)
{
contains = true;
ExitNow();
@@ -322,8 +321,7 @@ bool Server::NetDataContainsOtherSrpServers(void) const
iterator.Reset();
while (Get<NetworkData::Service::Manager>().GetNextDnsSrpUnicastInfo(
iterator, NetworkData::Service::kAddrInServerData, unicastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpUnicastInfo(NetworkData::Service::kAddrInServerData, unicastInfo) == kErrorNone)
{
if (!Get<Mle::Mle>().HasRloc16(unicastInfo.mRloc16) &&
Get<Mle::Mle>().GetMeshLocalEid() != unicastInfo.mSockAddr.GetAddress())
+2 -2
View File
@@ -587,13 +587,13 @@ Error AddressResolver::ResolveUsingNetDataServices(const Ip6::Address &aEid, uin
// if successful, otherwise returns `kErrorNotFound`.
Error error = kErrorNotFound;
NetworkData::Service::Manager::Iterator iterator;
NetworkData::Service::Iterator iterator(GetInstance());
NetworkData::Service::DnsSrpUnicastInfo unicastInfo;
NetworkData::Service::DnsSrpUnicastType type = NetworkData::Service::kAddrInServerData;
VerifyOrExit(Get<Mle::Mle>().GetDeviceMode().GetNetworkDataType() == NetworkData::kFullSet);
while (Get<NetworkData::Service::Manager>().GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo) == kErrorNone)
{
if (aEid == unicastInfo.mSockAddr.GetAddress())
{
+3 -1
View File
@@ -78,8 +78,9 @@ namespace ot {
namespace NetworkData {
namespace Service {
class Iterator;
class Manager;
}
} // namespace Service
/**
* @addtogroup core-netdata-core
@@ -109,6 +110,7 @@ class NetworkData : public InstanceLocator
friend class Leader;
friend class Publisher;
friend class MutableNetworkData;
friend class Service::Iterator;
friend class Service::Manager;
public:
+8 -8
View File
@@ -690,10 +690,10 @@ void Publisher::DnsSrpServiceEntry::CountAnycastEntries(uint8_t &aNumEntries, ui
// (routers are preferred over end-devices. If same type, then
// the smaller RLOC16 value is preferred).
Service::Manager::Iterator iterator;
Service::Iterator iterator(GetInstance());
Service::DnsSrpAnycastInfo anycastInfo;
while (Get<Service::Manager>().GetNextDnsSrpAnycastInfo(iterator, anycastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpAnycastInfo(anycastInfo) == kErrorNone)
{
if (anycastInfo.mSequenceNumber == mInfo.GetSequenceNumber() && (anycastInfo.mVersion >= mInfo.GetVersion()))
{
@@ -709,10 +709,10 @@ void Publisher::DnsSrpServiceEntry::CountAnycastEntries(uint8_t &aNumEntries, ui
bool Publisher::DnsSrpServiceEntry::HasAnyAnycastEntry(void) const
{
Service::Manager::Iterator iterator;
Service::Iterator iterator(GetInstance());
Service::DnsSrpAnycastInfo anycastInfo;
return (Get<Service::Manager>().GetNextDnsSrpAnycastInfo(iterator, anycastInfo) == kErrorNone);
return (iterator.GetNextDnsSrpAnycastInfo(anycastInfo) == kErrorNone);
}
void Publisher::DnsSrpServiceEntry::CountUnicastEntries(Service::DnsSrpUnicastType aType,
@@ -726,10 +726,10 @@ void Publisher::DnsSrpServiceEntry::CountUnicastEntries(Service::DnsSrpUnicastTy
// over end-devices. If same type, then the smaller RLOC16 value is
// preferred).
Service::Manager::Iterator iterator;
Service::Iterator iterator(GetInstance());
Service::DnsSrpUnicastInfo unicastInfo;
while (Get<Service::Manager>().GetNextDnsSrpUnicastInfo(iterator, aType, unicastInfo) == kErrorNone)
while (iterator.GetNextDnsSrpUnicastInfo(aType, unicastInfo) == kErrorNone)
{
if (unicastInfo.mVersion >= mInfo.GetVersion())
{
@@ -745,11 +745,11 @@ void Publisher::DnsSrpServiceEntry::CountUnicastEntries(Service::DnsSrpUnicastTy
bool Publisher::DnsSrpServiceEntry::HasAnyServiceDataUnicastEntry(void) const
{
Service::Manager::Iterator iterator;
Service::Iterator iterator(GetInstance());
Service::DnsSrpUnicastInfo unicastInfo;
Service::DnsSrpUnicastType type = Service::kAddrInServiceData;
return (Get<Service::Manager>().GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo) == kErrorNone);
return (iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo) == kErrorNone);
}
//---------------------------------------------------------------------------------------------------------------------
+61 -43
View File
@@ -39,6 +39,25 @@ namespace ot {
namespace NetworkData {
namespace Service {
Iterator::Iterator(Instance &aInstance)
: Iterator(aInstance, aInstance.Get<Leader>())
{
}
Iterator::Iterator(Instance &aInstance, const NetworkData &aNetworkData)
: InstanceLocator(aInstance)
, mNetworkData(aNetworkData)
, mServiceTlv(nullptr)
, mServerSubTlv(nullptr)
{
}
void Iterator::Reset(void)
{
mServiceTlv = nullptr;
mServerSubTlv = nullptr;
}
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
Error Manager::AddDnsSrpAnycastService(uint8_t aSequenceNumber, uint8_t aVersion)
@@ -99,11 +118,11 @@ void Manager::GetBackboneRouterPrimary(ot::BackboneRouter::Config &aConfig) cons
while ((serviceTlv = Get<Leader>().FindNextThreadService(serviceTlv, serviceData,
NetworkData::kServicePrefixMatch)) != nullptr)
{
Iterator iterator;
Iterator iterator(GetInstance());
iterator.mServiceTlv = serviceTlv;
while (IterateToNextServer(iterator) == kErrorNone)
while (iterator.AdvanceToNextServer() == kErrorNone)
{
ServerData data;
const BbrServerData *serverData;
@@ -157,10 +176,10 @@ exit:
#endif // (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
Error Manager::GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycastInfo &aInfo) const
Error Iterator::GetNextDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo)
{
Error error = kErrorNone;
uint8_t serviceNumber = kDnsSrpAnycastServiceNumber;
uint8_t serviceNumber = Manager::kDnsSrpAnycastServiceNumber;
do
{
@@ -168,21 +187,20 @@ Error Manager::GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycastInfo &
// Process the next Server sub-TLV in the current Service TLV.
if (IterateToNextServer(aIterator) == kErrorNone)
if (AdvanceToNextServer() == kErrorNone)
{
uint8_t dataLength = aIterator.mServiceTlv->GetServiceDataLength();
uint8_t dataLength = mServiceTlv->GetServiceDataLength();
if (dataLength >= sizeof(DnsSrpAnycastServiceData))
if (dataLength >= sizeof(Manager::DnsSrpAnycastServiceData))
{
const DnsSrpAnycastServiceData *anycastData =
reinterpret_cast<const DnsSrpAnycastServiceData *>(aIterator.mServiceTlv->GetServiceData());
const Manager::DnsSrpAnycastServiceData *anycastData =
reinterpret_cast<const Manager::DnsSrpAnycastServiceData *>(mServiceTlv->GetServiceData());
Get<Mle::Mle>().GetServiceAloc(aIterator.mServiceTlv->GetServiceId(), aInfo.mAnycastAddress);
Get<Mle::Mle>().GetServiceAloc(mServiceTlv->GetServiceId(), aInfo.mAnycastAddress);
aInfo.mSequenceNumber = anycastData->GetSequenceNumber();
aInfo.mRloc16 = aIterator.mServerSubTlv->GetServer16();
aInfo.mVersion = (aIterator.mServerSubTlv->GetServerDataLength() >= sizeof(uint8_t))
? *aIterator.mServerSubTlv->GetServerData()
: 0;
aInfo.mRloc16 = mServerSubTlv->GetServer16();
aInfo.mVersion =
(mServerSubTlv->GetServerDataLength() >= sizeof(uint8_t)) ? *mServerSubTlv->GetServerData() : 0;
ExitNow();
}
}
@@ -190,14 +208,13 @@ Error Manager::GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycastInfo &
// Find the next matching Service TLV.
serviceData.InitFrom(serviceNumber);
aIterator.mServiceTlv =
Get<Leader>().FindNextThreadService(aIterator.mServiceTlv, serviceData, NetworkData::kServicePrefixMatch);
aIterator.mServerSubTlv = nullptr;
mServiceTlv = mNetworkData.FindNextThreadService(mServiceTlv, serviceData, NetworkData::kServicePrefixMatch);
mServerSubTlv = nullptr;
// If we have a valid Service TLV, restart the loop
// to process its Server sub-TLVs.
} while (aIterator.mServiceTlv != nullptr);
} while (mServiceTlv != nullptr);
error = kErrorNotFound;
@@ -208,7 +225,7 @@ exit:
Error Manager::FindPreferredDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo) const
{
Error error = kErrorNotFound;
Iterator iterator;
Iterator iterator(GetInstance());
DnsSrpAnycastInfo info;
DnsSrpAnycastInfo maxNumericalSeqNumInfo;
@@ -217,7 +234,7 @@ Error Manager::FindPreferredDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo) const
// comparison, while `maxNumericalSeqNumInfo` tracks the largest
// using normal numerical comparison.
while (GetNextDnsSrpAnycastInfo(iterator, info) == kErrorNone)
while (iterator.GetNextDnsSrpAnycastInfo(info) == kErrorNone)
{
if (error == kErrorNotFound)
{
@@ -246,7 +263,7 @@ Error Manager::FindPreferredDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo) const
iterator.Reset();
while (GetNextDnsSrpAnycastInfo(iterator, info) == kErrorNone)
while (iterator.GetNextDnsSrpAnycastInfo(info) == kErrorNone)
{
constexpr uint8_t kMidValue = (NumericLimits<uint8_t>::kMax / 2) + 1;
uint8_t seqNumber = info.mSequenceNumber;
@@ -272,7 +289,7 @@ Error Manager::FindPreferredDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo) const
iterator.Reset();
while (GetNextDnsSrpAnycastInfo(iterator, info) == kErrorNone)
while (iterator.GetNextDnsSrpAnycastInfo(info) == kErrorNone)
{
if (info.mSequenceNumber == aInfo.mSequenceNumber)
{
@@ -299,10 +316,10 @@ exit:
return error;
}
Error Manager::GetNextDnsSrpUnicastInfo(Iterator &aIterator, DnsSrpUnicastType aType, DnsSrpUnicastInfo &aInfo) const
Error Iterator::GetNextDnsSrpUnicastInfo(DnsSrpUnicastType aType, DnsSrpUnicastInfo &aInfo)
{
Error error = kErrorNone;
uint8_t serviceNumber = kDnsSrpUnicastServiceNumber;
uint8_t serviceNumber = Manager::kDnsSrpUnicastServiceNumber;
do
{
@@ -310,13 +327,13 @@ Error Manager::GetNextDnsSrpUnicastInfo(Iterator &aIterator, DnsSrpUnicastType a
// Process Server sub-TLVs in the current Service TLV.
while (IterateToNextServer(aIterator) == kErrorNone)
while (AdvanceToNextServer() == kErrorNone)
{
aInfo.mRloc16 = aIterator.mServerSubTlv->GetServer16();
aInfo.mRloc16 = mServerSubTlv->GetServer16();
if (aType == kAddrInServiceData)
{
if (DnsSrpUnicast::ServiceData::ParseFrom(*aIterator.mServiceTlv, aInfo) == kErrorNone)
if (Manager::DnsSrpUnicast::ServiceData::ParseFrom(*mServiceTlv, aInfo) == kErrorNone)
{
ExitNow();
}
@@ -335,20 +352,20 @@ Error Manager::GetNextDnsSrpUnicastInfo(Iterator &aIterator, DnsSrpUnicastType a
// (then we parse and return the info), or it can be
// empty (then we skip over it).
if (DnsSrpUnicast::ServerData::ParseFrom(*aIterator.mServerSubTlv, aInfo) == kErrorNone)
if (Manager::DnsSrpUnicast::ServerData::ParseFrom(*mServerSubTlv, aInfo) == kErrorNone)
{
ExitNow();
}
if (aIterator.mServerSubTlv->GetServerDataLength() == sizeof(uint16_t))
if (mServerSubTlv->GetServerDataLength() == sizeof(uint16_t))
{
// Handle the case where the server TLV data only
// contains a port number and use the RLOC as the
// IPv6 address.
aInfo.mSockAddr.GetAddress().SetToRoutingLocator(Get<Mle::Mle>().GetMeshLocalPrefix(),
aIterator.mServerSubTlv->GetServer16());
aInfo.mSockAddr.SetPort(BigEndian::ReadUint16(aIterator.mServerSubTlv->GetServerData()));
mServerSubTlv->GetServer16());
aInfo.mSockAddr.SetPort(BigEndian::ReadUint16(mServerSubTlv->GetServerData()));
aInfo.mVersion = 0;
ExitNow();
}
@@ -357,14 +374,13 @@ Error Manager::GetNextDnsSrpUnicastInfo(Iterator &aIterator, DnsSrpUnicastType a
// Find the next matching Service TLV.
serviceData.InitFrom(serviceNumber);
aIterator.mServiceTlv =
Get<Leader>().FindNextThreadService(aIterator.mServiceTlv, serviceData, NetworkData::kServicePrefixMatch);
aIterator.mServerSubTlv = nullptr;
mServiceTlv = mNetworkData.FindNextThreadService(mServiceTlv, serviceData, NetworkData::kServicePrefixMatch);
mServerSubTlv = nullptr;
// If we have a valid Service TLV, restart the loop
// to process its Server sub-TLVs.
} while (aIterator.mServiceTlv != nullptr);
} while (mServiceTlv != nullptr);
error = kErrorNotFound;
@@ -372,18 +388,20 @@ exit:
return error;
}
Error Manager::IterateToNextServer(Iterator &aIterator) const
Error Iterator::AdvanceToNextServer(void)
{
Error error = kErrorNotFound;
Error error = kErrorNotFound;
const NetworkDataTlv *start;
const NetworkDataTlv *end;
VerifyOrExit(aIterator.mServiceTlv != nullptr);
VerifyOrExit(mServiceTlv != nullptr);
aIterator.mServerSubTlv = NetworkDataTlv::Find<ServerTlv>(
/* aStart */ (aIterator.mServerSubTlv != nullptr) ? aIterator.mServerSubTlv->GetNext()
: aIterator.mServiceTlv->GetSubTlvs(),
/* aEnd */ aIterator.mServiceTlv->GetNext());
start = (mServerSubTlv != nullptr) ? mServerSubTlv->GetNext() : mServiceTlv->GetSubTlvs();
end = mServiceTlv->GetNext();
if (aIterator.mServerSubTlv != nullptr)
mServerSubTlv = NetworkDataTlv::Find<ServerTlv>(start, end);
if (mServerSubTlv != nullptr)
{
error = kErrorNone;
}
+67 -61
View File
@@ -82,43 +82,79 @@ struct DnsSrpUnicastInfo
uint16_t mRloc16; ///< The BR RLOC16 adding the entry.
};
class Manager;
/**
* Represents an iterator to iterate over service entries in a Network Data.
*/
class Iterator : public InstanceLocator, private NonCopyable
{
friend class Manager;
public:
/**
* Initializes the `Iterator` for iterating over service entries in the Leader Network Data
*
* @param[in] aInstance The OpenThread instance.
*/
explicit Iterator(Instance &aInstance);
/**
* Initializes the `Iterator` for iterating over service entries in a given Network Data.
*
* @param[in] aInstance The OpenThread instance.
* @param[in] aNetworkData The `NetworkData` to use with this iterator.
*/
Iterator(Instance &aInstance, const NetworkData &aNetworkData);
/**
* Resets the `Iterator` to start over.
*/
void Reset(void);
/**
* Gets the next DNS/SRP info from the Thread Network Data "DNS/SRP Service Anycast Address" entries.
*
* To start from the first entry, ensure the iterator is reset (e.g., by creating a new `Iterator` instance, or by
* calling `Reset()`).
*
* @param[out] aInfo A reference to `DnsSrpAnycastInfo` to return the info.
*
* @retval kErrorNone Successfully got the next info. @p aInfo is updated.
* @retval kErrorNotFound No more matching entries in the Network Data.
*/
Error GetNextDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo);
/**
* Gets the next DNS/SRP info from the Thread Network Data "DNS/SRP Service Unicast Address" entries.
*
* To start from the first entry, ensure the iterator is reset (e.g., by creating a new `Iterator` instance, or by
* calling `Reset()`).
*
* @param[in] aType The entry type, `kAddrInServiceData` or `kAddrInServerData`
* @param[out] aInfo A reference to `DnsSrpUnicastInfo` to return the info.
*
* @retval kErrorNone Successfully got the next info. @p aInfo is updated.
* @retval kErrorNotFound No more matching entries in the Network Data.
*/
Error GetNextDnsSrpUnicastInfo(DnsSrpUnicastType aType, DnsSrpUnicastInfo &aInfo);
private:
Error AdvanceToNextServer(void);
const NetworkData &mNetworkData;
const ServiceTlv *mServiceTlv;
const ServerTlv *mServerSubTlv;
};
/**
* Manages the Thread Service entries in Thread Network Data.
*/
class Manager : public InstanceLocator, private NonCopyable
{
friend class Iterator;
public:
/**
* Represents an iterator used to iterate through Network Data Service entries.
*/
class Iterator : public Clearable<Iterator>
{
friend class Manager;
public:
/**
* Initializes the iterator (as empty/clear).
*/
Iterator(void)
: mServiceTlv(nullptr)
, mServerSubTlv(nullptr)
{
}
/**
* Resets the iterator to start from beginning.
*/
void Reset(void)
{
mServiceTlv = nullptr;
mServerSubTlv = nullptr;
}
private:
const ServiceTlv *mServiceTlv;
const ServerTlv *mServerSubTlv;
};
/**
* Initializes the `Manager` object.
*
@@ -259,20 +295,6 @@ public:
}
#endif
/**
* Gets the next DNS/SRP info from the Thread Network Data "DNS/SRP Service Anycast Address" entries.
*
* To get the first entry, @p aIterator should be cleared (e.g., a new instance of `Iterator` or calling `Clear()`
* method).
*
* @param[in,out] aIterator A reference to an iterator.
* @param[out] aInfo A reference to `DnsSrpAnycastInfo` to return the info.
*
* @retval kErrorNone Successfully got the next info. @p aInfo and @p aIterator are updated.
* @retval kErrorNotFound No more matching entries in the Network Data.
*/
Error GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycastInfo &aInfo) const;
/**
* Finds the preferred DNS/SRP info among all the Thread Network Data "DNS/SRP Service Anycast Address"
* entries.
@@ -290,21 +312,6 @@ public:
*/
Error FindPreferredDnsSrpAnycastInfo(DnsSrpAnycastInfo &aInfo) const;
/**
* Gets the next DNS/SRP info from the Thread Network Data "DNS/SRP Service Unicast Address" entries.
*
* To get the first entry @p aIterator should be cleared (e.g., a new instance of `Iterator` or calling `Clear()`
* method).
*
* @param[in,out] aIterator A reference to an iterator.
* @param[in] aType The entry type, `kAddrInServiceData` or `kAddrInServerData`
* @param[out] aInfo A reference to `DnsSrpUnicastInfo` to return the info.
*
* @retval kErrorNone Successfully got the next info. @p aInfo and @p aIterator are updated.
* @retval kErrorNotFound No more matching entries in the Network Data.
*/
Error GetNextDnsSrpUnicastInfo(Iterator &aIterator, DnsSrpUnicastType aType, DnsSrpUnicastInfo &aInfo) const;
private:
static constexpr uint8_t kBackboneRouterServiceNumber = 0x01;
static constexpr uint8_t kDnsSrpAnycastServiceNumber = 0x5c;
@@ -476,7 +483,6 @@ private:
#endif
Error GetServiceId(uint8_t aServiceNumber, uint8_t &aServiceId) const;
Error IterateToNextServer(Iterator &aIterator) const;
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
bool IsBackboneRouterPreferredTo(const ServerTlv &aServerTlv,
+12 -12
View File
@@ -735,7 +735,7 @@ void TestNetworkDataDsnSrpServices(void)
const uint8_t kPreferredAnycastEntryIndex = 2;
Service::Manager &manager = instance->Get<Service::Manager>();
Service::Manager::Iterator iterator;
Service::Iterator iterator(*instance);
Service::DnsSrpAnycastInfo anycastInfo;
Service::DnsSrpUnicastInfo unicastInfo;
Service::DnsSrpUnicastType type;
@@ -766,7 +766,7 @@ void TestNetworkDataDsnSrpServices(void)
for (const AnycastEntry &entry : kAnycastEntries)
{
SuccessOrQuit(manager.GetNextDnsSrpAnycastInfo(iterator, anycastInfo));
SuccessOrQuit(iterator.GetNextDnsSrpAnycastInfo(anycastInfo));
printf("\nanycastInfo { %s, seq:%d, rlco16:%04x, version:%u }",
anycastInfo.mAnycastAddress.ToString().AsCString(), anycastInfo.mSequenceNumber, anycastInfo.mRloc16,
@@ -775,7 +775,7 @@ void TestNetworkDataDsnSrpServices(void)
VerifyOrQuit(entry.Matches(anycastInfo), "GetNextDnsSrpAnycastInfo() returned incorrect info");
}
VerifyOrQuit(manager.GetNextDnsSrpAnycastInfo(iterator, anycastInfo) == kErrorNotFound,
VerifyOrQuit(iterator.GetNextDnsSrpAnycastInfo(anycastInfo) == kErrorNotFound,
"GetNextDnsSrpAnycastInfo() returned unexpected extra entry");
// Find the preferred "DNS/SRP Anycast Service" entries in Network Data
@@ -791,37 +791,37 @@ void TestNetworkDataDsnSrpServices(void)
printf("\n\n- - - - - - - - - - - - - - - - - - - -");
printf("\nDNS/SRP Unicast Service entries (server data)\n");
iterator.Clear();
iterator.Reset();
type = Service::kAddrInServerData;
for (const UnicastEntry &entry : kUnicastEntriesFromServerData)
{
SuccessOrQuit(manager.GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo));
SuccessOrQuit(iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo));
printf("\nunicastInfo { %s, rloc16:%04x }", unicastInfo.mSockAddr.ToString().AsCString(),
unicastInfo.mRloc16);
VerifyOrQuit(entry.Matches(unicastInfo), "GetNextDnsSrpUnicastInfo() returned incorrect info");
}
VerifyOrQuit(manager.GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo) == kErrorNotFound,
VerifyOrQuit(iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo) == kErrorNotFound,
"GetNextDnsSrpUnicastInfo() returned unexpected extra entry");
printf("\n\n- - - - - - - - - - - - - - - - - - - -");
printf("\nDNS/SRP Unicast Service entries (service data)\n");
iterator.Clear();
iterator.Reset();
type = Service::kAddrInServiceData;
for (const UnicastEntry &entry : kUnicastEntriesFromServiceData)
{
SuccessOrQuit(manager.GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo));
SuccessOrQuit(iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo));
printf("\nunicastInfo { %s, rloc16:%04x }", unicastInfo.mSockAddr.ToString().AsCString(),
unicastInfo.mRloc16);
VerifyOrQuit(entry.Matches(unicastInfo), "GetNextDnsSrpUnicastInfo() returned incorrect info");
}
VerifyOrQuit(manager.GetNextDnsSrpUnicastInfo(iterator, type, unicastInfo) == kErrorNotFound,
VerifyOrQuit(iterator.GetNextDnsSrpUnicastInfo(type, unicastInfo) == kErrorNotFound,
"GetNextDnsSrpUnicastInfo() returned unexpected extra entry");
printf("\n");
@@ -1036,7 +1036,7 @@ void TestNetworkDataDsnSrpAnycastSeqNumSelection(void)
for (const TestInfo &test : kTests)
{
Service::Manager::Iterator iterator;
Service::Iterator iterator(*instance);
Service::DnsSrpAnycastInfo anycastInfo;
reinterpret_cast<TestLeader &>(instance->Get<Leader>()).Populate(test.mNetworkData, test.mNetworkDataLength);
@@ -1046,7 +1046,7 @@ void TestNetworkDataDsnSrpAnycastSeqNumSelection(void)
for (uint8_t index = 0; index < test.mSeqNumbersLength; index++)
{
SuccessOrQuit(manager.GetNextDnsSrpAnycastInfo(iterator, anycastInfo));
SuccessOrQuit(iterator.GetNextDnsSrpAnycastInfo(anycastInfo));
printf("\n { %s, seq:%u, version:%u, rlco16:%04x }", anycastInfo.mAnycastAddress.ToString().AsCString(),
@@ -1056,7 +1056,7 @@ void TestNetworkDataDsnSrpAnycastSeqNumSelection(void)
VerifyOrQuit(anycastInfo.mRloc16 == 0x5000 + index);
}
VerifyOrQuit(manager.GetNextDnsSrpAnycastInfo(iterator, anycastInfo) == kErrorNotFound);
VerifyOrQuit(iterator.GetNextDnsSrpAnycastInfo(anycastInfo) == kErrorNotFound);
SuccessOrQuit(manager.FindPreferredDnsSrpAnycastInfo(anycastInfo));
printf("\n preferred -> seq:%u, version:%u ", anycastInfo.mSequenceNumber, anycastInfo.mVersion);