mirror of
https://github.com/espressif/openthread.git
synced 2026-08-11 13:17:48 +00:00
[backbone-router] fix Leader isn't always selected as PBBR (#6751)
This commit is contained in:
@@ -119,11 +119,7 @@ void Manager::GetBackboneRouterPrimary(ot::BackboneRouter::BackboneRouterConfig
|
||||
serverData = reinterpret_cast<const BackboneRouter::ServerData *>(iterator.mServerSubTlv->GetServerData());
|
||||
|
||||
if (rvalServerTlv == nullptr ||
|
||||
(iterator.mServerSubTlv->GetServer16() ==
|
||||
Mle::Mle::Rloc16FromRouterId(Get<Mle::MleRouter>().GetLeaderId())) ||
|
||||
serverData->GetSequenceNumber() > rvalServerData->GetSequenceNumber() ||
|
||||
(serverData->GetSequenceNumber() == rvalServerData->GetSequenceNumber() &&
|
||||
iterator.mServerSubTlv->GetServer16() > rvalServerTlv->GetServer16()))
|
||||
IsBackboneRouterPreferredTo(*iterator.mServerSubTlv, *serverData, *rvalServerTlv, *rvalServerData))
|
||||
{
|
||||
rvalServerTlv = iterator.mServerSubTlv;
|
||||
rvalServerData = serverData;
|
||||
@@ -141,6 +137,24 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
bool Manager::IsBackboneRouterPreferredTo(const ServerTlv & aServerTlv,
|
||||
const BackboneRouter::ServerData &aServerData,
|
||||
const ServerTlv & aOtherServerTlv,
|
||||
const BackboneRouter::ServerData &aOtherServerData) const
|
||||
{
|
||||
bool isPreferred;
|
||||
uint16_t leaderRloc16 = Mle::Mle::Rloc16FromRouterId(Get<Mle::MleRouter>().GetLeaderId());
|
||||
|
||||
VerifyOrExit(aServerTlv.GetServer16() != leaderRloc16, isPreferred = true);
|
||||
VerifyOrExit(aOtherServerTlv.GetServer16() != leaderRloc16, isPreferred = false);
|
||||
|
||||
isPreferred = aServerData.GetSequenceNumber() > aOtherServerData.GetSequenceNumber() ||
|
||||
(aServerData.GetSequenceNumber() == aOtherServerData.GetSequenceNumber() &&
|
||||
aServerTlv.GetServer16() > aOtherServerTlv.GetServer16());
|
||||
exit:
|
||||
return isPreferred;
|
||||
}
|
||||
|
||||
#endif // (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||
|
||||
Error Manager::GetNextDnsSrpAnycastInfo(Iterator &aIterator, DnsSrpAnycast::Info &aInfo) const
|
||||
|
||||
@@ -623,6 +623,13 @@ private:
|
||||
bool aServerStable,
|
||||
uint8_t & aServiceId) const;
|
||||
Error IterateToNextServer(Iterator &aIterator) const;
|
||||
|
||||
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||
bool IsBackboneRouterPreferredTo(const ServerTlv & aServerTlv,
|
||||
const BackboneRouter::ServerData &aServerData,
|
||||
const ServerTlv & aOtherServerTlv,
|
||||
const BackboneRouter::ServerData &aOtherServerData) const;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace Service
|
||||
|
||||
Reference in New Issue
Block a user