mirror of
https://github.com/espressif/openthread.git
synced 2026-07-29 15:17:47 +00:00
[mesh-forwarder] update and simplify Counters tracking (#11419)
This commit is contained in:
@@ -516,17 +516,7 @@ void IndirectSender::HandleSentFrameToChild(const Mac::TxFrame &aFrame,
|
||||
Get<MeshForwarder>().LogMessage(MeshForwarder::kMessageTransmit, *message, txError, &macDest);
|
||||
}
|
||||
|
||||
if (message->GetType() == Message::kTypeIp6)
|
||||
{
|
||||
if (aChild.GetIndirectTxSuccess())
|
||||
{
|
||||
Get<MeshForwarder>().mIpCounters.mTxSuccess++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Get<MeshForwarder>().mIpCounters.mTxFailure++;
|
||||
}
|
||||
}
|
||||
Get<MeshForwarder>().mCounters.UpdateOnTxDone(*message, aChild.GetIndirectTxSuccess());
|
||||
|
||||
if (message->GetIndirectTxChildMask().Has(childIndex))
|
||||
{
|
||||
|
||||
@@ -90,6 +90,30 @@ void ThreadLinkInfo::SetFrom(const Mac::RxFrame &aFrame)
|
||||
#endif
|
||||
}
|
||||
|
||||
void MeshForwarder::Counters::UpdateOnTxDone(const Message &aMessage, bool aTxSuccess)
|
||||
{
|
||||
if (aMessage.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
aTxSuccess ? mTxSuccess++ : mTxFailure++;
|
||||
}
|
||||
}
|
||||
|
||||
void MeshForwarder::Counters::UpdateOnRx(const Message &aMessage)
|
||||
{
|
||||
if (aMessage.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
mRxSuccess++;
|
||||
}
|
||||
}
|
||||
|
||||
void MeshForwarder::Counters::UpdateOnDrop(const Message &aMessage)
|
||||
{
|
||||
if (aMessage.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
mRxFailure++;
|
||||
}
|
||||
}
|
||||
|
||||
MeshForwarder::MeshForwarder(Instance &aInstance)
|
||||
: InstanceLocator(aInstance)
|
||||
, mMessageNextOffset(0)
|
||||
@@ -112,8 +136,6 @@ MeshForwarder::MeshForwarder(Instance &aInstance)
|
||||
{
|
||||
mFragTag = Random::NonCrypto::GetUint16();
|
||||
|
||||
ResetCounters();
|
||||
|
||||
#if OPENTHREAD_CONFIG_TX_QUEUE_STATISTICS_ENABLE
|
||||
mTxQueueStats.Clear();
|
||||
#endif
|
||||
@@ -1303,10 +1325,7 @@ void MeshForwarder::FinalizeMessageDirectTx(Message &aMessage, Error aError)
|
||||
aMessage.SetTxSuccess(false);
|
||||
}
|
||||
|
||||
if (aMessage.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
aMessage.GetTxSuccess() ? mIpCounters.mTxSuccess++ : mIpCounters.mTxFailure++;
|
||||
}
|
||||
mCounters.UpdateOnTxDone(aMessage, aMessage.GetTxSuccess());
|
||||
|
||||
if (aMessage.IsMleCommand(Mle::kCommandDiscoveryRequest))
|
||||
{
|
||||
@@ -1561,12 +1580,7 @@ void MeshForwarder::ClearReassemblyList(void)
|
||||
for (Message &message : mReassemblyList)
|
||||
{
|
||||
LogMessage(kMessageReassemblyDrop, message, kErrorNoFrameReceived);
|
||||
|
||||
if (message.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
mIpCounters.mRxFailure++;
|
||||
}
|
||||
|
||||
mCounters.UpdateOnDrop(message);
|
||||
mReassemblyList.DequeueAndFree(message);
|
||||
}
|
||||
}
|
||||
@@ -1596,12 +1610,7 @@ bool MeshForwarder::UpdateReassemblyList(void)
|
||||
if (now - message.GetTimestamp() >= TimeMilli::SecToMsec(kReassemblyTimeout))
|
||||
{
|
||||
LogMessage(kMessageReassemblyDrop, message, kErrorReassemblyTimeout);
|
||||
|
||||
if (message.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
mIpCounters.mRxFailure++;
|
||||
}
|
||||
|
||||
mCounters.UpdateOnDrop(message);
|
||||
mReassemblyList.DequeueAndFree(message);
|
||||
}
|
||||
}
|
||||
@@ -1669,10 +1678,7 @@ Error MeshForwarder::HandleDatagram(Message &aMessage, const Mac::Address &aMacS
|
||||
|
||||
LogMessage(kMessageReceive, aMessage, kErrorNone, &aMacSource);
|
||||
|
||||
if (aMessage.GetType() == Message::kTypeIp6)
|
||||
{
|
||||
mIpCounters.mRxSuccess++;
|
||||
}
|
||||
mCounters.UpdateOnRx(aMessage);
|
||||
|
||||
aMessage.SetLoopbackToHostAllowed(true);
|
||||
aMessage.SetOrigin(Message::kOriginThreadNetif);
|
||||
|
||||
@@ -163,6 +163,22 @@ class MeshForwarder : public InstanceLocator, private NonCopyable
|
||||
friend class TimeTicker;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Represents the IPv6 message counters, tracking the number IPv6 message TX and RX that succeeded or failed.
|
||||
*/
|
||||
class Counters : public otIpCounters, public Clearable<Counters>
|
||||
{
|
||||
friend class MeshForwarder;
|
||||
friend class IndirectSender;
|
||||
|
||||
private:
|
||||
Counters(void) { Clear(); }
|
||||
|
||||
void UpdateOnTxDone(const Message &aMessage, bool aTxSuccess);
|
||||
void UpdateOnRx(const Message &aMessage);
|
||||
void UpdateOnDrop(const Message &aMessage);
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes the object.
|
||||
*
|
||||
@@ -269,12 +285,12 @@ public:
|
||||
*
|
||||
* @returns A reference to the IP level counters.
|
||||
*/
|
||||
const otIpCounters &GetCounters(void) const { return mIpCounters; }
|
||||
const Counters &GetCounters(void) const { return mCounters; }
|
||||
|
||||
/**
|
||||
* Resets the IP level counters.
|
||||
*/
|
||||
void ResetCounters(void) { ClearAllBytes(mIpCounters); }
|
||||
void ResetCounters(void) { mCounters.Clear(); }
|
||||
|
||||
#if OPENTHREAD_CONFIG_TX_QUEUE_STATISTICS_ENABLE
|
||||
/**
|
||||
@@ -642,7 +658,7 @@ private:
|
||||
|
||||
TxTask mScheduleTransmissionTask;
|
||||
|
||||
otIpCounters mIpCounters;
|
||||
Counters mCounters;
|
||||
|
||||
#if OPENTHREAD_FTD || OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
|
||||
IndirectSender mIndirectSender;
|
||||
|
||||
Reference in New Issue
Block a user