diff --git a/src/core/thread/indirect_sender.cpp b/src/core/thread/indirect_sender.cpp index 697ce35d1..00931364c 100644 --- a/src/core/thread/indirect_sender.cpp +++ b/src/core/thread/indirect_sender.cpp @@ -384,7 +384,7 @@ uint16_t IndirectSender::PrepareDataFrame(Mac::TxFrame &aFrame, Child &aChild, M directTxOffset = aMessage.GetOffset(); aMessage.SetOffset(aChild.GetIndirectFragmentOffset()); - nextOffset = Get().PrepareDataFrame(aFrame, aMessage, macAddrs); + nextOffset = Get().PrepareDataFrameWithNoMeshHeader(aFrame, aMessage, macAddrs); aMessage.SetOffset(directTxOffset); diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 8f0acb608..52388bb15 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -586,7 +586,7 @@ Message *MeshForwarder::PrepareNextDirectTransmission(void) } #if OPENTHREAD_CONFIG_DELAY_AWARE_QUEUE_MANAGEMENT_ENABLE - if (UpdateEcnOrDrop(*curMessage) == kErrorDrop) + if (UpdateEcnOrDrop(*curMessage, /* aPreparingToSend */ true) == kErrorDrop) { continue; } @@ -1090,6 +1090,14 @@ start: return nextOffset; } +uint16_t MeshForwarder::PrepareDataFrameWithNoMeshHeader(Mac::TxFrame &aFrame, + Message &aMessage, + const Mac::Addresses &aMacAddrs) +{ + return PrepareDataFrame(aFrame, aMessage, aMacAddrs, /* aAddMeshHeader */ false, /* aMeshSource */ 0xffff, + /* aMeshDest */ 0xffff, /* aAddFragHeader */ false); +} + Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, Error aError, const Mac::Address &aMacDest, @@ -1097,7 +1105,8 @@ Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, { OT_UNUSED_VARIABLE(aIsDataPoll); - Neighbor *neighbor = nullptr; + Neighbor *neighbor = nullptr; + uint8_t failLimit = kFailedRouterTransmissions; VerifyOrExit(mEnabled); @@ -1121,14 +1130,11 @@ Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE if ((aFrame.GetHeaderIe(Mac::CslIe::kHeaderIeId) != nullptr) && aIsDataPoll) { - UpdateNeighborLinkFailures(*neighbor, aError, /* aAllowNeighborRemove */ true, - /* aFailLimit */ kFailedCslDataPollTransmissions); + failLimit = kFailedCslDataPollTransmissions; } - else #endif - { - UpdateNeighborLinkFailures(*neighbor, aError, /* aAllowNeighborRemove */ true); - } + + UpdateNeighborLinkFailures(*neighbor, aError, /* aAllowNeighborRemove */ true, failLimit); exit: return neighbor; @@ -1175,7 +1181,7 @@ void MeshForwarder::HandleDeferredAck(Neighbor &aNeighbor, Error aError) // link failure counter and removes the neighbor if required. Get().UpdateOnDeferredAck(aNeighbor, aError, allowNeighborRemove); #else - UpdateNeighborLinkFailures(aNeighbor, aError, allowNeighborRemove); + UpdateNeighborLinkFailures(aNeighbor, aError, allowNeighborRemove, kFailedRouterTransmissions); #endif exit: @@ -1210,7 +1216,7 @@ void MeshForwarder::HandleSentFrame(Mac::TxFrame &aFrame, Error aError) if (!aFrame.IsEmpty()) { IgnoreError(aFrame.GetDstAddr(macDest)); - neighbor = UpdateNeighborOnSentFrame(aFrame, aError, macDest); + neighbor = UpdateNeighborOnSentFrame(aFrame, aError, macDest, /* aIsDataPoll */ false); } UpdateSendMessage(aError, macDest, neighbor); @@ -1928,6 +1934,16 @@ exit: return; } +void MeshForwarder::LogMessage(MessageAction aAction, const Message &aMessage) +{ + LogMessage(aAction, aMessage, kErrorNone); +} + +void MeshForwarder::LogMessage(MessageAction aAction, const Message &aMessage, Error aError) +{ + LogMessage(aAction, aMessage, aError, nullptr); +} + void MeshForwarder::LogMessage(MessageAction aAction, const Message &aMessage, Error aError, @@ -2018,6 +2034,10 @@ void MeshForwarder::LogLowpanHcFrameDrop(Error aError, #else // #if OT_SHOULD_LOG_AT( OT_LOG_LEVEL_NOTE) +void MeshForwarder::LogMessage(MessageAction, const Message &) {} + +void MeshForwarder::LogMessage(MessageAction, const Message &, Error) {} + void MeshForwarder::LogMessage(MessageAction, const Message &, Error, const Mac::Address *) {} void MeshForwarder::LogFrame(const char *, const Mac::Frame &, Error) {} diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index d62e2aa34..30db918b0 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -516,25 +516,25 @@ private: void HandleFragment(FrameData &aFrameData, const Mac::Addresses &aMacAddrs, const ThreadLinkInfo &aLinkInfo); void HandleLowpanHC(const FrameData &aFrameData, const Mac::Addresses &aMacAddrs, const ThreadLinkInfo &aLinkInfo); - void PrepareMacHeaders(Mac::TxFrame &aFrame, - Mac::Frame::Type aFrameType, - const Mac::Addresses &aMacAddr, - const Mac::PanIds &aPanIds, - Mac::Frame::SecurityLevel aSecurityLevel, - Mac::Frame::KeyIdMode aKeyIdMode, - const Message *aMessage); - + void PrepareMacHeaders(Mac::TxFrame &aFrame, + Mac::Frame::Type aFrameType, + const Mac::Addresses &aMacAddr, + const Mac::PanIds &aPanIds, + Mac::Frame::SecurityLevel aSecurityLevel, + Mac::Frame::KeyIdMode aKeyIdMode, + const Message *aMessage); uint16_t PrepareDataFrame(Mac::TxFrame &aFrame, Message &aMessage, const Mac::Addresses &aMacAddrs, - bool aAddMeshHeader = false, - uint16_t aMeshSource = 0xffff, - uint16_t aMeshDest = 0xffff, - bool aAddFragHeader = false); + bool aAddMeshHeader, + uint16_t aMeshSource, + uint16_t aMeshDest, + bool aAddFragHeader); + uint16_t PrepareDataFrameWithNoMeshHeader(Mac::TxFrame &aFrame, Message &aMessage, const Mac::Addresses &aMacAddrs); void PrepareEmptyFrame(Mac::TxFrame &aFrame, const Mac::Address &aMacDest, bool aAckRequest); #if OPENTHREAD_CONFIG_DELAY_AWARE_QUEUE_MANAGEMENT_ENABLE - Error UpdateEcnOrDrop(Message &aMessage, bool aPreparingToSend = true); + Error UpdateEcnOrDrop(Message &aMessage, bool aPreparingToSend); Error RemoveAgedMessages(void); #endif #if (OPENTHREAD_CONFIG_MAX_FRAMES_IN_DIRECT_TX_QUEUE > 0) @@ -563,14 +563,11 @@ private: Neighbor *UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, Error aError, const Mac::Address &aMacDest, - bool aIsDataPoll = false); - void UpdateNeighborLinkFailures(Neighbor &aNeighbor, - Error aError, - bool aAllowNeighborRemove, - uint8_t aFailLimit = kFailedRouterTransmissions); - void HandleSentFrame(Mac::TxFrame &aFrame, Error aError); - void UpdateSendMessage(Error aFrameTxError, Mac::Address &aMacDest, Neighbor *aNeighbor); - void RemoveMessageIfNoPendingTx(Message &aMessage); + bool aIsDataPoll); + void UpdateNeighborLinkFailures(Neighbor &aNeighbor, Error aError, bool aAllowNeighborRemove, uint8_t aFailLimit); + void HandleSentFrame(Mac::TxFrame &aFrame, Error aError); + void UpdateSendMessage(Error aFrameTxError, Mac::Address &aMacDest, Neighbor *aNeighbor); + void RemoveMessageIfNoPendingTx(Message &aMessage); void HandleTimeTick(void); void ScheduleTransmissionTask(void); @@ -596,10 +593,9 @@ private: void HandleTxDelayTimer(void); #endif - void LogMessage(MessageAction aAction, - const Message &aMessage, - Error aError = kErrorNone, - const Mac::Address *aAddress = nullptr); + void LogMessage(MessageAction aAction, const Message &aMessage); + void LogMessage(MessageAction aAction, const Message &aMessage, Error aError); + void LogMessage(MessageAction aAction, const Message &aMessage, Error aError, const Mac::Address *aAddress); void LogFrame(const char *aActionText, const Mac::Frame &aFrame, Error aError); void LogFragmentFrameDrop(Error aError, uint16_t aFrameLength,