From e93d2812887c5a1edd0e7f53176c2374084c3edf Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 30 Jul 2025 14:15:47 -0700 Subject: [PATCH] [history-tracker] move `HistoryTracker` to its own namespace (#11756) This commit refactors `Utils::HistoryTracker` by moving it into its own dedicated `ot::HistoryTracker` namespace for better code organization. The main implementation class is renamed from `HistoryTracker` to `Local`, making the new class `ot::HistoryTracker::Local`. This allows additional components (like server and client) to be defined within the `HistoryTracker` namespace. Nested types, such as `Iterator`, are now direct members of the new `HistoryTracker` namespace. --- src/core/api/history_tracker_api.cpp | 24 ++--- src/core/common/notifier.cpp | 2 +- src/core/instance/instance.cpp | 2 +- src/core/instance/instance.hpp | 4 +- src/core/meshcop/border_agent.cpp | 22 ++--- src/core/net/netif.cpp | 4 +- src/core/thread/mesh_forwarder.cpp | 4 +- src/core/thread/mle.cpp | 2 +- src/core/thread/neighbor_table.cpp | 2 +- src/core/thread/router_table.cpp | 2 +- src/core/utils/history_tracker.cpp | 86 ++++++++-------- src/core/utils/history_tracker.hpp | 143 ++++++++++++++------------- tests/nexus/test_border_agent.cpp | 3 +- 13 files changed, 149 insertions(+), 151 deletions(-) diff --git a/src/core/api/history_tracker_api.cpp b/src/core/api/history_tracker_api.cpp index 73bdf7249..51f7aac8a 100644 --- a/src/core/api/history_tracker_api.cpp +++ b/src/core/api/history_tracker_api.cpp @@ -47,7 +47,7 @@ const otHistoryTrackerNetworkInfo *otHistoryTrackerIterateNetInfoHistory(otInsta { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateNetInfoHistory(AsCoreType(aIterator), *aEntryAge); + return AsCoreType(aInstance).Get().IterateNetInfoHistory(AsCoreType(aIterator), *aEntryAge); } const otHistoryTrackerUnicastAddressInfo *otHistoryTrackerIterateUnicastAddressHistory( @@ -57,7 +57,7 @@ const otHistoryTrackerUnicastAddressInfo *otHistoryTrackerIterateUnicastAddressH { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateUnicastAddressHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateUnicastAddressHistory(AsCoreType(aIterator), *aEntryAge); } @@ -68,7 +68,7 @@ const otHistoryTrackerMulticastAddressInfo *otHistoryTrackerIterateMulticastAddr { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateMulticastAddressHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateMulticastAddressHistory(AsCoreType(aIterator), *aEntryAge); } @@ -78,7 +78,7 @@ const otHistoryTrackerMessageInfo *otHistoryTrackerIterateRxHistory(otInstance { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateRxHistory(AsCoreType(aIterator), *aEntryAge); + return AsCoreType(aInstance).Get().IterateRxHistory(AsCoreType(aIterator), *aEntryAge); } const otHistoryTrackerMessageInfo *otHistoryTrackerIterateTxHistory(otInstance *aInstance, @@ -87,7 +87,7 @@ const otHistoryTrackerMessageInfo *otHistoryTrackerIterateTxHistory(otInstance { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateTxHistory(AsCoreType(aIterator), *aEntryAge); + return AsCoreType(aInstance).Get().IterateTxHistory(AsCoreType(aIterator), *aEntryAge); } const otHistoryTrackerNeighborInfo *otHistoryTrackerIterateNeighborHistory(otInstance *aInstance, @@ -96,7 +96,7 @@ const otHistoryTrackerNeighborInfo *otHistoryTrackerIterateNeighborHistory(otIns { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateNeighborHistory(AsCoreType(aIterator), *aEntryAge); + return AsCoreType(aInstance).Get().IterateNeighborHistory(AsCoreType(aIterator), *aEntryAge); } const otHistoryTrackerRouterInfo *otHistoryTrackerIterateRouterHistory(otInstance *aInstance, @@ -105,7 +105,7 @@ const otHistoryTrackerRouterInfo *otHistoryTrackerIterateRouterHistory(otInstanc { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateRouterHistory(AsCoreType(aIterator), *aEntryAge); + return AsCoreType(aInstance).Get().IterateRouterHistory(AsCoreType(aIterator), *aEntryAge); } const otHistoryTrackerOnMeshPrefixInfo *otHistoryTrackerIterateOnMeshPrefixHistory(otInstance *aInstance, @@ -114,7 +114,7 @@ const otHistoryTrackerOnMeshPrefixInfo *otHistoryTrackerIterateOnMeshPrefixHisto { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateOnMeshPrefixHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateOnMeshPrefixHistory(AsCoreType(aIterator), *aEntryAge); } @@ -125,7 +125,7 @@ const otHistoryTrackerExternalRouteInfo *otHistoryTrackerIterateExternalRouteHis { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateExternalRouteHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateExternalRouteHistory(AsCoreType(aIterator), *aEntryAge); } @@ -135,7 +135,7 @@ const otHistoryTrackerDnsSrpAddrInfo *otHistoryTrackerIterateDnsSrpAddrHistory(o { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateDnsSrpAddrHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateDnsSrpAddrHistory(AsCoreType(aIterator), *aEntryAge); } @@ -147,14 +147,14 @@ const otHistoryTrackerBorderAgentEpskcEvent *otHistoryTrackerIterateBorderAgentE { AssertPointerIsNotNull(aEntryAge); - return AsCoreType(aInstance).Get().IterateEpskcEventHistory(AsCoreType(aIterator), + return AsCoreType(aInstance).Get().IterateEpskcEventHistory(AsCoreType(aIterator), *aEntryAge); } #endif void otHistoryTrackerEntryAgeToString(uint32_t aEntryAge, char *aBuffer, uint16_t aSize) { - Utils::HistoryTracker::EntryAgeToString(aEntryAge, aBuffer, aSize); + HistoryTracker::Local::EntryAgeToString(aEntryAge, aBuffer, aSize); } #endif // OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE diff --git a/src/core/common/notifier.cpp b/src/core/common/notifier.cpp index d8794485d..f7aceff30 100644 --- a/src/core/common/notifier.cpp +++ b/src/core/common/notifier.cpp @@ -152,7 +152,7 @@ void Notifier::EmitEvents(void) Get().HandleNotifierEvents(events); #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().HandleNotifierEvents(events); + Get().HandleNotifierEvents(events); #endif #if OPENTHREAD_ENABLE_VENDOR_EXTENSION Get().HandleNotifierEvents(events); diff --git a/src/core/instance/instance.cpp b/src/core/instance/instance.cpp index 435d6144d..672dbed1e 100644 --- a/src/core/instance/instance.cpp +++ b/src/core/instance/instance.cpp @@ -247,7 +247,7 @@ Instance::Instance(void) , mMeshDiag(*this) #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - , mHistoryTracker(*this) + , mHistoryTrackerLocal(*this) #endif #if OPENTHREAD_CONFIG_LINK_METRICS_MANAGER_ENABLE , mLinkMetricsManager(*this) diff --git a/src/core/instance/instance.hpp b/src/core/instance/instance.hpp index 25b8126be..e99148500 100644 --- a/src/core/instance/instance.hpp +++ b/src/core/instance/instance.hpp @@ -682,7 +682,7 @@ private: #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Utils::HistoryTracker mHistoryTracker; + HistoryTracker::Local mHistoryTrackerLocal; #endif #if OPENTHREAD_CONFIG_LINK_METRICS_MANAGER_ENABLE @@ -993,7 +993,7 @@ template <> inline Utils::MeshDiag &Instance::Get(void) { return mMeshDiag; } #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE -template <> inline Utils::HistoryTracker &Instance::Get(void) { return mHistoryTracker; } +template <> inline HistoryTracker::Local &Instance::Get(void) { return mHistoryTrackerLocal; } #endif #if OPENTHREAD_CONFIG_LINK_METRICS_MANAGER_ENABLE diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 3b40f5271..a050991b1 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -741,7 +741,7 @@ exit: case kErrorNone: Get().mCounters.mEpskcActivations++; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcActivated); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcActivated); #endif break; case kErrorInvalidState: @@ -790,14 +790,14 @@ void BorderAgent::EphemeralKeyManager::UpdateCountersAndRecordEvent(Deactivation struct ReasonToCounterEventEntry { DeactivationReason mReason; - uint8_t mEvent; // Raw values of `Utils::HistoryTracker::Epskc` enum. + uint8_t mEvent; // Raw values of `HistoryTracker::Local::Epskc` enum. uint32_t Counters::*mCounterPtr; }; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE #define ReasonEntry(kReason, kCounter, kEvent) \ { \ - kReason, Utils::HistoryTracker::kEvent, &Counters::kCounter, \ + kReason, HistoryTracker::Local::kEvent, &Counters::kCounter, \ } #else #define ReasonEntry(kReason, kCounter, kEvent) \ @@ -818,7 +818,7 @@ void BorderAgent::EphemeralKeyManager::UpdateCountersAndRecordEvent(Deactivation #undef ReasonEntry #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Utils::HistoryTracker::EpskcEvent event = Utils::HistoryTracker::kEpskcDeactivatedUnknown; + HistoryTracker::EpskcEvent event = HistoryTracker::Local::kEpskcDeactivatedUnknown; #endif for (const ReasonToCounterEventEntry &entry : kReasonToCounterEventEntries) @@ -827,14 +827,14 @@ void BorderAgent::EphemeralKeyManager::UpdateCountersAndRecordEvent(Deactivation { (Get().mCounters.*(entry.mCounterPtr))++; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - event = static_cast(entry.mEvent); + event = static_cast(entry.mEvent); #endif break; } } #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordEpskcEvent(event); + Get().RecordEpskcEvent(event); #endif } @@ -900,7 +900,7 @@ void BorderAgent::EphemeralKeyManager::HandleSessionConnected(void) SetState(kStateConnected); Get().mCounters.mEpskcSecureSessionSuccesses++; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcConnected); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcConnected); #endif } @@ -940,7 +940,7 @@ void BorderAgent::EphemeralKeyManager::HandleCommissionerPetitionAccepted(void) SetState(kStateAccepted); Get().mCounters.mEpskcCommissionerPetitions++; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcPetitioned); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcPetitioned); #endif } @@ -1168,7 +1168,7 @@ void BorderAgent::CoapDtlsSession::HandleTmfCommissionerKeepAlive(Coap::Message #if OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE && OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE if (Get().OwnsSession(*this)) { - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcKeepAlive); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcKeepAlive); } #endif @@ -1504,7 +1504,7 @@ void BorderAgent::CoapDtlsSession::HandleTmfDatasetGet(Coap::Message &aMessage, #if OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE && OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE if (Get().OwnsSession(*this)) { - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcRetrievedActiveDataset); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcRetrievedActiveDataset); } #endif break; @@ -1515,7 +1515,7 @@ void BorderAgent::CoapDtlsSession::HandleTmfDatasetGet(Coap::Message &aMessage, #if OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE && OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE if (Get().OwnsSession(*this)) { - Get().RecordEpskcEvent(Utils::HistoryTracker::kEpskcRetrievedPendingDataset); + Get().RecordEpskcEvent(HistoryTracker::Local::kEpskcRetrievedPendingDataset); } #endif break; diff --git a/src/core/net/netif.cpp b/src/core/net/netif.cpp index a6f39f2c2..605451da4 100644 --- a/src/core/net/netif.cpp +++ b/src/core/net/netif.cpp @@ -235,7 +235,7 @@ void Netif::SignalMulticastAddressChange(AddressEvent aEvent, const MulticastAdd Get().Signal(aEvent == kAddressAdded ? kEventIp6MulticastSubscribed : kEventIp6MulticastUnsubscribed); #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordAddressEvent(aEvent, aAddress, aOrigin); + Get().RecordAddressEvent(aEvent, aAddress, aOrigin); #endif if ((aOrigin == kOriginThread) && mAddressCallback.IsSet()) @@ -414,7 +414,7 @@ void Netif::SignalUnicastAddressChange(AddressEvent aEvent, const UnicastAddress #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordAddressEvent(aEvent, aAddress); + Get().RecordAddressEvent(aEvent, aAddress); #endif if (!IsUnicastAddressExternal(aAddress) && mAddressCallback.IsSet()) diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index d04313a26..e53e048a2 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -1246,7 +1246,7 @@ void MeshForwarder::UpdateSendMessage(Error aFrameTxError, Mac::Address &aMacDes #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordTxMessage(*mSendMessage, aMacDest); + Get().RecordTxMessage(*mSendMessage, aMacDest); #endif LogMessage(kMessageTransmit, *mSendMessage, txError, &aMacDest); @@ -1614,7 +1614,7 @@ exit: Error MeshForwarder::HandleDatagram(Message &aMessage, const Mac::Address &aMacSource) { #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordRxMessage(aMessage, aMacSource); + Get().RecordRxMessage(aMessage, aMacSource); #endif LogMessage(kMessageReceive, aMessage, kErrorNone, &aMacSource); diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 8d769625a..3fba43180 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -836,7 +836,7 @@ Error Mle::SetDeviceMode(DeviceMode aDeviceMode) mDeviceMode = aDeviceMode; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordNetworkInfo(); + Get().RecordNetworkInfo(); #endif #if OPENTHREAD_CONFIG_OTNS_ENABLE diff --git a/src/core/thread/neighbor_table.cpp b/src/core/thread/neighbor_table.cpp index fed2c695e..c3c71e7b6 100644 --- a/src/core/thread/neighbor_table.cpp +++ b/src/core/thread/neighbor_table.cpp @@ -289,7 +289,7 @@ void NeighborTable::Signal(Event aEvent, const Neighbor &aNeighbor) } #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordNeighborEvent(aEvent, info); + Get().RecordNeighborEvent(aEvent, info); if (mCallback != nullptr) #endif diff --git a/src/core/thread/router_table.cpp b/src/core/thread/router_table.cpp index 1f125e115..00b9efbd9 100644 --- a/src/core/thread/router_table.cpp +++ b/src/core/thread/router_table.cpp @@ -887,7 +887,7 @@ void RouterTable::HandleTableChanged(void) #endif #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE - Get().RecordRouterTableChange(); + Get().RecordRouterTableChange(); #endif Get().UpdateAdvertiseInterval(); diff --git a/src/core/utils/history_tracker.cpp b/src/core/utils/history_tracker.cpp index 21e650370..153d2ea52 100644 --- a/src/core/utils/history_tracker.cpp +++ b/src/core/utils/history_tracker.cpp @@ -38,12 +38,12 @@ #include "instance/instance.hpp" namespace ot { -namespace Utils { +namespace HistoryTracker { //--------------------------------------------------------------------------------------------------------------------- -// HistoryTracker +// Local -HistoryTracker::HistoryTracker(Instance &aInstance) +Local::Local(Instance &aInstance) : InstanceLocator(aInstance) , mTimer(aInstance) #if OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA @@ -57,7 +57,7 @@ HistoryTracker::HistoryTracker(Instance &aInstance) #endif } -void HistoryTracker::RecordNetworkInfo(void) +void Local::RecordNetworkInfo(void) { NetworkInfo *entry = mNetInfoHistory.AddNewEntry(); Mle::DeviceMode mode; @@ -74,7 +74,7 @@ exit: return; } -void HistoryTracker::RecordMessage(const Message &aMessage, const Mac::Address &aMacAddress, MessageType aType) +void Local::RecordMessage(const Message &aMessage, const Mac::Address &aMacAddress, MessageType aType) { MessageInfo *entry = nullptr; Ip6::Headers headers; @@ -178,7 +178,7 @@ exit: return; } -void HistoryTracker::RecordNeighborEvent(NeighborTable::Event aEvent, const NeighborTable::EntryInfo &aInfo) +void Local::RecordNeighborEvent(NeighborTable::Event aEvent, const NeighborTable::EntryInfo &aInfo) { NeighborInfo *entry = mNeighborHistory.AddNewEntry(); @@ -239,8 +239,7 @@ exit: return; } -void HistoryTracker::RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, - const Ip6::Netif::UnicastAddress &aUnicastAddress) +void Local::RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, const Ip6::Netif::UnicastAddress &aUnicastAddress) { UnicastAddressInfo *entry = mUnicastAddressHistory.AddNewEntry(); @@ -259,9 +258,9 @@ exit: return; } -void HistoryTracker::RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, - const Ip6::Netif::MulticastAddress &aMulticastAddress, - Ip6::Netif::AddressOrigin aAddressOrigin) +void Local::RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, + const Ip6::Netif::MulticastAddress &aMulticastAddress, + Ip6::Netif::AddressOrigin aAddressOrigin) { MulticastAddressInfo *entry = mMulticastAddressHistory.AddNewEntry(); @@ -276,7 +275,7 @@ exit: } #if OPENTHREAD_FTD -void HistoryTracker::RecordRouterTableChange(void) +void Local::RecordRouterTableChange(void) { #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ROUTER_LIST_SIZE > 0 @@ -346,7 +345,7 @@ void HistoryTracker::RecordRouterTableChange(void) #endif // OPENTHREAD_FTD #if OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA -void HistoryTracker::RecordNetworkDataChange(void) +void Local::RecordNetworkDataChange(void) { static const NetworkData::Service::DnsSrpUnicastType kDnsSrpUnicastTypes[] = { NetworkData::Service::kAddrInServiceData, @@ -453,7 +452,7 @@ void HistoryTracker::RecordNetworkDataChange(void) SuccessOrAssert(Get().CopyNetworkData(NetworkData::kFullSet, mPreviousNetworkData)); } -void HistoryTracker::RecordOnMeshPrefixEvent(NetDataEvent aEvent, const NetworkData::OnMeshPrefixConfig &aPrefix) +void Local::RecordOnMeshPrefixEvent(NetDataEvent aEvent, const NetworkData::OnMeshPrefixConfig &aPrefix) { OnMeshPrefixInfo *entry = mOnMeshPrefixHistory.AddNewEntry(); @@ -465,7 +464,7 @@ exit: return; } -void HistoryTracker::RecordExternalRouteEvent(NetDataEvent aEvent, const NetworkData::ExternalRouteConfig &aRoute) +void Local::RecordExternalRouteEvent(NetDataEvent aEvent, const NetworkData::ExternalRouteConfig &aRoute) { ExternalRouteInfo *entry = mExternalRouteHistory.AddNewEntry(); @@ -477,9 +476,9 @@ exit: return; } -void HistoryTracker::RecordDnsSrpAddrEvent(NetDataEvent aEvent, - const NetworkData::Service::DnsSrpUnicastInfo &aUnicastInfo, - NetworkData::Service::DnsSrpUnicastType aType) +void Local::RecordDnsSrpAddrEvent(NetDataEvent aEvent, + const NetworkData::Service::DnsSrpUnicastInfo &aUnicastInfo, + NetworkData::Service::DnsSrpUnicastType aType) { DnsSrpAddrInfo *entry = mDnsSrpAddrHistory.AddNewEntry(); @@ -506,8 +505,7 @@ exit: return; } -void HistoryTracker::RecordDnsSrpAddrEvent(NetDataEvent aEvent, - const NetworkData::Service::DnsSrpAnycastInfo &aAnycastInfo) +void Local::RecordDnsSrpAddrEvent(NetDataEvent aEvent, const NetworkData::Service::DnsSrpAnycastInfo &aAnycastInfo) { DnsSrpAddrInfo *entry = mDnsSrpAddrHistory.AddNewEntry(); @@ -525,9 +523,9 @@ exit: return; } -bool HistoryTracker::NetDataContainsDnsSrpUnicast(const NetworkData::NetworkData &aNetworkData, - const NetworkData::Service::DnsSrpUnicastInfo &aUnicastInfo, - NetworkData::Service::DnsSrpUnicastType aType) const +bool Local::NetDataContainsDnsSrpUnicast(const NetworkData::NetworkData &aNetworkData, + const NetworkData::Service::DnsSrpUnicastInfo &aUnicastInfo, + NetworkData::Service::DnsSrpUnicastType aType) const { bool contains = false; NetworkData::Service::Iterator iterator(GetInstance(), aNetworkData); @@ -545,8 +543,8 @@ bool HistoryTracker::NetDataContainsDnsSrpUnicast(const NetworkData::NetworkData return contains; } -bool HistoryTracker::NetDataContainsDnsSrpAnycast(const NetworkData::NetworkData &aNetworkData, - const NetworkData::Service::DnsSrpAnycastInfo &aAnycastInfo) const +bool Local::NetDataContainsDnsSrpAnycast(const NetworkData::NetworkData &aNetworkData, + const NetworkData::Service::DnsSrpAnycastInfo &aAnycastInfo) const { bool contains = false; NetworkData::Service::Iterator iterator(GetInstance(), aNetworkData); @@ -567,7 +565,7 @@ bool HistoryTracker::NetDataContainsDnsSrpAnycast(const NetworkData::NetworkData #endif // OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA #if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE && OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE -void HistoryTracker::RecordEpskcEvent(EpskcEvent aEvent) +void Local::RecordEpskcEvent(EpskcEvent aEvent) { EpskcEvent *entry = mEpskcEventHistory.AddNewEntry(); @@ -579,7 +577,7 @@ exit: } #endif -void HistoryTracker::HandleNotifierEvents(Events aEvents) +void Local::HandleNotifierEvents(Events aEvents) { if (aEvents.ContainsAny(kEventThreadRoleChanged | kEventThreadRlocAdded | kEventThreadRlocRemoved | kEventThreadPartitionIdChanged)) @@ -595,7 +593,7 @@ void HistoryTracker::HandleNotifierEvents(Events aEvents) #endif } -void HistoryTracker::HandleTimer(void) +void Local::HandleTimer(void) { mNetInfoHistory.UpdateAgedEntries(); mUnicastAddressHistory.UpdateAgedEntries(); @@ -612,7 +610,7 @@ void HistoryTracker::HandleTimer(void) mTimer.Start(kAgeCheckPeriod); } -void HistoryTracker::EntryAgeToString(uint32_t aEntryAge, char *aBuffer, uint16_t aSize) +void Local::EntryAgeToString(uint32_t aEntryAge, char *aBuffer, uint16_t aSize) { StringWriter writer(aBuffer, aSize); @@ -638,9 +636,9 @@ void HistoryTracker::EntryAgeToString(uint32_t aEntryAge, char *aBuffer, uint16_ } //--------------------------------------------------------------------------------------------------------------------- -// HistoryTracker::Timestamp +// Local::Timestamp -void HistoryTracker::Timestamp::SetToNow(void) +void Local::Timestamp::SetToNow(void) { mTime = TimerMilli::GetNow(); @@ -653,27 +651,27 @@ void HistoryTracker::Timestamp::SetToNow(void) } } -uint32_t HistoryTracker::Timestamp::GetDurationTill(TimeMilli aTime) const +uint32_t Local::Timestamp::GetDurationTill(TimeMilli aTime) const { return IsDistantPast() ? kMaxAge : Min(aTime - mTime, kMaxAge); } //--------------------------------------------------------------------------------------------------------------------- -// HistoryTracker::List +// Local::List -HistoryTracker::List::List(void) +Local::List::List(void) : mStartIndex(0) , mSize(0) { } -void HistoryTracker::List::Clear(void) +void Local::List::Clear(void) { mStartIndex = 0; mSize = 0; } -uint16_t HistoryTracker::List::Add(uint16_t aMaxSize, Timestamp aTimestamps[]) +uint16_t Local::List::Add(uint16_t aMaxSize, Timestamp aTimestamps[]) { // Add a new entry and return its list index. Overwrites the // oldest entry if list is full. @@ -690,11 +688,11 @@ uint16_t HistoryTracker::List::Add(uint16_t aMaxSize, Timestamp aTimestamps[]) return mStartIndex; } -Error HistoryTracker::List::Iterate(uint16_t aMaxSize, - const Timestamp aTimestamps[], - Iterator &aIterator, - uint16_t &aListIndex, - uint32_t &aEntryAge) const +Error Local::List::Iterate(uint16_t aMaxSize, + const Timestamp aTimestamps[], + Iterator &aIterator, + uint16_t &aListIndex, + uint32_t &aEntryAge) const { Error error = kErrorNone; @@ -709,7 +707,7 @@ exit: return error; } -uint16_t HistoryTracker::List::MapEntryNumberToListIndex(uint16_t aEntryNumber, uint16_t aMaxSize) const +uint16_t Local::List::MapEntryNumberToListIndex(uint16_t aEntryNumber, uint16_t aMaxSize) const { // Map the `aEntryNumber` to the list index. `aEntryNumber` value // of zero corresponds to the newest (the most recently added) @@ -727,7 +725,7 @@ uint16_t HistoryTracker::List::MapEntryNumberToListIndex(uint16_t aEntryNumber, return static_cast(index); } -void HistoryTracker::List::UpdateAgedEntries(uint16_t aMaxSize, Timestamp aTimestamps[]) +void Local::List::UpdateAgedEntries(uint16_t aMaxSize, Timestamp aTimestamps[]) { TimeMilli now = TimerMilli::GetNow(); @@ -754,7 +752,7 @@ void HistoryTracker::List::UpdateAgedEntries(uint16_t aMaxSize, Timestamp aTimes } } -} // namespace Utils +} // namespace HistoryTracker } // namespace ot #endif // #if OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE diff --git a/src/core/utils/history_tracker.hpp b/src/core/utils/history_tracker.hpp index 817b2e006..27c894391 100644 --- a/src/core/utils/history_tracker.hpp +++ b/src/core/utils/history_tracker.hpp @@ -59,8 +59,7 @@ #include "thread/router_table.hpp" namespace ot { - -namespace Utils { +namespace HistoryTracker { #ifdef OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA #error "OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA should not be defined directly." \ @@ -72,10 +71,68 @@ namespace Utils { (OPENTHREAD_CONFIG_HISTORY_TRACKER_EXTERNAL_ROUTE_LIST_SIZE > 0) || \ (OPENTHREAD_CONFIG_HISTORY_TRACKER_DNSSRP_ADDR_LIST_SIZE > 0)) +class Local; + /** - * Implements History Tracker. + * Represents an iterator to iterate through a history list. */ -class HistoryTracker : public InstanceLocator, private NonCopyable +class Iterator : public otHistoryTrackerIterator +{ + friend class Local; + +public: + /** + * Initializes an `Iterator` + * + * An iterator MUST be initialized before it is used. An iterator can be initialized again to start from + * the beginning of the list. + */ + void Init(void) { ResetEntryNumber(), SetInitTime(); } + +private: + uint16_t GetEntryNumber(void) const { return mData16; } + void ResetEntryNumber(void) { mData16 = 0; } + void IncrementEntryNumber(void) { mData16++; } + TimeMilli GetInitTime(void) const { return TimeMilli(mData32); } + void SetInitTime(void) { mData32 = TimerMilli::GetNow().GetValue(); } +}; + +typedef otHistoryTrackerNetworkInfo NetworkInfo; ///< Thread network info. +typedef otHistoryTrackerUnicastAddressInfo UnicastAddressInfo; ///< Unicast IPv6 address info. +typedef otHistoryTrackerMulticastAddressInfo MulticastAddressInfo; ///< Multicast IPv6 address info. +typedef otHistoryTrackerMessageInfo MessageInfo; ///< RX/TX IPv6 message info. +typedef otHistoryTrackerNeighborInfo NeighborInfo; ///< Neighbor info. +typedef otHistoryTrackerRouterInfo RouterInfo; ///< Router info. +typedef otHistoryTrackerOnMeshPrefixInfo OnMeshPrefixInfo; ///< Network Data on mesh prefix info. +typedef otHistoryTrackerExternalRouteInfo ExternalRouteInfo; ///< Network Data external route info +typedef otHistoryTrackerDnsSrpAddrInfo DnsSrpAddrInfo; ///< Network Data SRP/DNS address info. +#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE && OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE +typedef otHistoryTrackerBorderAgentEpskcEvent EpskcEvent; ///< Border Agent ePSKc Event. +#endif + +/** + * This constant specifies the maximum age of entries which is 49 days (value in msec). + * + * Entries older than the max age will give this value as their age. + */ +static constexpr uint32_t kMaxAge = OT_HISTORY_TRACKER_MAX_AGE; + +/** + * This constant specifies the recommend string size to represent an entry age + */ +static constexpr uint16_t kEntryAgeStringSize = OT_HISTORY_TRACKER_ENTRY_AGE_STRING_SIZE; + +/** + * This constants specified no next hop. + * + * Used for `mNextHop` in `RouteInfo` structure. + */ +static constexpr uint8_t kNoNextHop = OT_HISTORY_TRACKER_NO_NEXT_HOP; + +/** + * Implements the local history tracker. + */ +class Local : public InstanceLocator, private NonCopyable { friend class ot::MeshForwarder; friend class ot::Notifier; @@ -92,67 +149,11 @@ class HistoryTracker : public InstanceLocator, private NonCopyable public: /** - * This constant specifies the maximum age of entries which is 49 days (value in msec). - * - * Entries older than the max age will give this value as their age. - */ - static constexpr uint32_t kMaxAge = OT_HISTORY_TRACKER_MAX_AGE; - - /** - * This constant specifies the recommend string size to represent an entry age - */ - static constexpr uint16_t kEntryAgeStringSize = OT_HISTORY_TRACKER_ENTRY_AGE_STRING_SIZE; - - /** - * This constants specified no next hop. - * - * Used for `mNextHop` in `RouteInfo` structure. - */ - static constexpr uint8_t kNoNextHop = OT_HISTORY_TRACKER_NO_NEXT_HOP; - - /** - * Represents an iterator to iterate through a history list. - */ - class Iterator : public otHistoryTrackerIterator - { - friend class HistoryTracker; - - public: - /** - * Initializes an `Iterator` - * - * An iterator MUST be initialized before it is used. An iterator can be initialized again to start from - * the beginning of the list. - */ - void Init(void) { ResetEntryNumber(), SetInitTime(); } - - private: - uint16_t GetEntryNumber(void) const { return mData16; } - void ResetEntryNumber(void) { mData16 = 0; } - void IncrementEntryNumber(void) { mData16++; } - TimeMilli GetInitTime(void) const { return TimeMilli(mData32); } - void SetInitTime(void) { mData32 = TimerMilli::GetNow().GetValue(); } - }; - - typedef otHistoryTrackerNetworkInfo NetworkInfo; ///< Thread network info. - typedef otHistoryTrackerUnicastAddressInfo UnicastAddressInfo; ///< Unicast IPv6 address info. - typedef otHistoryTrackerMulticastAddressInfo MulticastAddressInfo; ///< Multicast IPv6 address info. - typedef otHistoryTrackerMessageInfo MessageInfo; ///< RX/TX IPv6 message info. - typedef otHistoryTrackerNeighborInfo NeighborInfo; ///< Neighbor info. - typedef otHistoryTrackerRouterInfo RouterInfo; ///< Router info. - typedef otHistoryTrackerOnMeshPrefixInfo OnMeshPrefixInfo; ///< Network Data on mesh prefix info. - typedef otHistoryTrackerExternalRouteInfo ExternalRouteInfo; ///< Network Data external route info - typedef otHistoryTrackerDnsSrpAddrInfo DnsSrpAddrInfo; ///< Network Data SRP/DNS address info. -#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE && OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE - typedef otHistoryTrackerBorderAgentEpskcEvent EpskcEvent; ///< Border Agent ePSKc Event. -#endif - - /** - * Initializes the `HistoryTracker`. + * Initializes the local tracker. * * @param[in] aInstance A reference to the OpenThread instance. */ - explicit HistoryTracker(Instance &aInstance); + explicit Local(Instance &aInstance); /** * Iterates over the entries in the network info history list. @@ -477,7 +478,7 @@ private: void RecordEpskcEvent(EpskcEvent aEvent); #endif - using TrackerTimer = TimerMilliIn; + using TrackerTimer = TimerMilliIn; EntryList mNetInfoHistory; EntryList mUnicastAddressHistory; @@ -513,15 +514,15 @@ private: #endif }; -} // namespace Utils +} // namespace HistoryTracker -DefineCoreType(otHistoryTrackerIterator, Utils::HistoryTracker::Iterator); -DefineCoreType(otHistoryTrackerNetworkInfo, Utils::HistoryTracker::NetworkInfo); -DefineCoreType(otHistoryTrackerMessageInfo, Utils::HistoryTracker::MessageInfo); -DefineCoreType(otHistoryTrackerNeighborInfo, Utils::HistoryTracker::NeighborInfo); -DefineCoreType(otHistoryTrackerRouterInfo, Utils::HistoryTracker::RouterInfo); -DefineCoreType(otHistoryTrackerOnMeshPrefixInfo, Utils::HistoryTracker::OnMeshPrefixInfo); -DefineCoreType(otHistoryTrackerExternalRouteInfo, Utils::HistoryTracker::ExternalRouteInfo); +DefineCoreType(otHistoryTrackerIterator, HistoryTracker::Iterator); +DefineCoreType(otHistoryTrackerNetworkInfo, HistoryTracker::NetworkInfo); +DefineCoreType(otHistoryTrackerMessageInfo, HistoryTracker::MessageInfo); +DefineCoreType(otHistoryTrackerNeighborInfo, HistoryTracker::NeighborInfo); +DefineCoreType(otHistoryTrackerRouterInfo, HistoryTracker::RouterInfo); +DefineCoreType(otHistoryTrackerOnMeshPrefixInfo, HistoryTracker::OnMeshPrefixInfo); +DefineCoreType(otHistoryTrackerExternalRouteInfo, HistoryTracker::ExternalRouteInfo); } // namespace ot diff --git a/tests/nexus/test_border_agent.cpp b/tests/nexus/test_border_agent.cpp index 54a4e7c3a..251daf6d2 100644 --- a/tests/nexus/test_border_agent.cpp +++ b/tests/nexus/test_border_agent.cpp @@ -39,7 +39,6 @@ namespace Nexus { using ActiveDatasetManager = MeshCoP::ActiveDatasetManager; using BorderAgent = MeshCoP::BorderAgent; using EphemeralKeyManager = MeshCoP::BorderAgent::EphemeralKeyManager; -using HistoryTracker = Utils::HistoryTracker; using EpskcEvent = HistoryTracker::EpskcEvent; using Iterator = HistoryTracker::Iterator; using ExtendedPanIdManager = MeshCoP::ExtendedPanIdManager; @@ -764,7 +763,7 @@ EpskcEvent GetNewestEpskcEvent(Node &aNode) uint32_t age; iter.Init(); - epskcEvent = aNode.Get().IterateEpskcEventHistory(iter, age); + epskcEvent = aNode.Get().IterateEpskcEventHistory(iter, age); VerifyOrQuit(epskcEvent != nullptr); return *epskcEvent;