From 18f7bc32f1c195a250e824605ab6e1ff8715a773 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 5 Jun 2024 10:52:58 -0700 Subject: [PATCH] [mle] add `TxMessage::AppendActiveAndPendingTimestampTlvs()` (#10341) This commit adds `AppendActiveAndPendingTimestampTlvs()` helper method, which appends both Active and Pending Timestamp TLVs to the message. This helps simplify the code as the two TLVs are almost always included together in different MLE messages. --- src/core/thread/mle.cpp | 20 ++++++++++++++------ src/core/thread/mle.hpp | 1 + src/core/thread/mle_router.cpp | 12 ++++-------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index d37c760b4..516a4f9b6 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1630,8 +1630,7 @@ void Mle::SendDelayedResponse(TxMessage &aMessage, const DelayedResponseMetadata if (aMessage.GetSubType() == Message::kSubTypeMleDataRequest) { - SuccessOrExit(error = aMessage.AppendActiveTimestampTlv()); - SuccessOrExit(error = aMessage.AppendPendingTimestampTlv()); + SuccessOrExit(error = aMessage.AppendActiveAndPendingTimestampTlvs()); } SuccessOrExit(error = aMessage.SendTo(aMetadata.mDestination)); @@ -1807,8 +1806,7 @@ Error Mle::SendChildIdRequest(void) } SuccessOrExit(error = message->AppendTlvRequestTlv(kTlvs, tlvsLen)); - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); mParentCandidate.SetState(Neighbor::kStateValid); @@ -1878,8 +1876,7 @@ Error Mle::SendDataRequest(const Ip6::Address &aDestination, const uint8_t *aTlv } else { - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); SuccessOrExit(error = message->SendTo(aDestination)); Log(kMessageSend, kTypeDataRequest, aDestination); @@ -4749,6 +4746,17 @@ exit: return error; } +Error Mle::TxMessage::AppendActiveAndPendingTimestampTlvs(void) +{ + Error error; + + SuccessOrExit(error = AppendActiveTimestampTlv()); + error = AppendPendingTimestampTlv(); + +exit: + return error; +} + #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE Error Mle::TxMessage::AppendCslChannelTlv(void) { diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index 045ea7ea4..7633ffbd2 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1024,6 +1024,7 @@ private: Error AppendXtalAccuracyTlv(void); Error AppendActiveTimestampTlv(void); Error AppendPendingTimestampTlv(void); + Error AppendActiveAndPendingTimestampTlvs(void); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE Error AppendTimeRequestTlv(void); Error AppendTimeParameterTlv(void); diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 67dd68dde..7c12d8133 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -2775,8 +2775,7 @@ Error MleRouter::SendChildIdResponse(Child &aChild) VerifyOrExit((message = NewMleMessage(kCommandChildIdResponse)) != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->AppendSourceAddressTlv()); SuccessOrExit(error = message->AppendLeaderDataTlv()); - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); if ((aChild.GetRloc16() == 0) || !RouterIdMatch(aChild.GetRloc16(), GetRloc16())) { @@ -2895,8 +2894,7 @@ Error MleRouter::SendChildUpdateRequest(Child &aChild) SuccessOrExit(error = message->AppendSourceAddressTlv()); SuccessOrExit(error = message->AppendLeaderDataTlv()); SuccessOrExit(error = message->AppendNetworkDataTlv(aChild.GetNetworkDataType())); - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); if (!aChild.IsStateValid()) { @@ -2999,8 +2997,7 @@ void MleRouter::SendChildUpdateResponse(Child *aChild, case Tlv::kNetworkData: SuccessOrExit(error = message->AppendNetworkDataTlv(aChild->GetNetworkDataType())); - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); break; case Tlv::kTimeout: @@ -3057,8 +3054,7 @@ void MleRouter::SendDataResponse(const Ip6::Address &aDestination, VerifyOrExit((message = NewMleMessage(kCommandDataResponse)) != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->AppendSourceAddressTlv()); SuccessOrExit(error = message->AppendLeaderDataTlv()); - SuccessOrExit(error = message->AppendActiveTimestampTlv()); - SuccessOrExit(error = message->AppendPendingTimestampTlv()); + SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs()); for (uint8_t tlvType : aTlvList) {