[mle] add AppendSourceAddressAndLeaderDataTlvs() helper (#12867)

This commit introduces `TxMessage::AppendSourceAddressAndLeaderDataTlvs()`
to consolidate the appending of `Source Address` and `Leader Data` TLVs.

This combination is frequently used together across various MLE messages
to provide the sender's identity and leader data. Centralizing this
into a single helper method improves code consistency.

Additionally, the `TxMessage` methods in `mle.hpp` and `mle.cpp` are
organized into "Appending single TLV" and "Appending multiple TLVs"
sections for better clarity and maintainability. Existing multi-TLV
methods like `AppendLinkAndMleFrameCounterTlvs()` and
`AppendActiveAndPendingTimestampTlvs()` are moved to the new section.
This commit is contained in:
Abtin Keshavarzian
2026-04-10 21:37:24 -05:00
committed by GitHub
parent a98813b30a
commit 9feec93a20
3 changed files with 56 additions and 40 deletions
+7 -14
View File
@@ -539,8 +539,7 @@ void Mle::SendAdvertisement(const Ip6::Address &aDestination)
VerifyOrExit(!mAddressSolicitPending);
VerifyOrExit((message = NewMleMessage(kCommandAdvertisement)) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
switch (mRole)
{
@@ -588,8 +587,7 @@ void Mle::SendLinkRequest(Router *aRouter)
break;
case kRoleChild:
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
break;
case kRoleRouter:
@@ -603,8 +601,7 @@ void Mle::SendLinkRequest(Router *aRouter)
SuccessOrExit(error = message->AppendTlvRequestTlv(kValidNeighborTlvs));
}
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
break;
case kRoleDisabled:
@@ -1800,8 +1797,7 @@ void Mle::SendParentResponse(const ParentResponseInfo &aInfo)
VerifyOrExit((message = NewMleMessage(kCommandParentResponse)) != nullptr, error = kErrorNoBufs);
message->SetDirectTransmission();
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
SuccessOrExit(error = message->AppendLinkAndMleFrameCounterTlvs());
SuccessOrExit(error = message->AppendResponseTlv(aInfo.mRxChallenge));
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
@@ -2886,8 +2882,7 @@ Error Mle::SendChildIdResponse(Child &aChild)
TxMessage *message;
VerifyOrExit((message = NewMleMessage(kCommandChildIdResponse)) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs());
if ((aChild.GetRloc16() == 0) || !HasMatchingRouterIdWith(aChild.GetRloc16()))
@@ -2975,8 +2970,7 @@ Error Mle::SendChildUpdateRequestToChild(Child &aChild)
Get<MeshForwarder>().RemoveMessagesForChild(aChild, IsMessageChildUpdateRequest);
VerifyOrExit((message = NewMleMessage(kCommandChildUpdateRequest)) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
SuccessOrExit(error = message->AppendNetworkDataTlv(aChild.GetNetworkDataType()));
SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs());
@@ -3148,8 +3142,7 @@ void Mle::SendDataResponse(const Ip6::Address &aDestination, const TlvList &aTlv
}
VerifyOrExit((message = NewMleMessage(kCommandDataResponse)) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->AppendSourceAddressTlv());
SuccessOrExit(error = message->AppendLeaderDataTlv());
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
SuccessOrExit(error = message->AppendActiveAndPendingTimestampTlvs());
for (uint8_t tlvType : aTlvList)