[backbone-router] fix Leader isn't always selected as PBBR (#6751)

This commit is contained in:
Simon Lin
2021-06-24 10:30:49 -07:00
committed by GitHub
parent 7799bae4ef
commit d360c4b601
2 changed files with 26 additions and 5 deletions
+19 -5
View File
@@ -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
+7
View File
@@ -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