mirror of
https://github.com/espressif/openthread.git
synced 2026-08-13 14:17:47 +00:00
[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:
+43
-24
@@ -1261,8 +1261,7 @@ Error Mle::SendChildUpdateRequestToParent(ChildUpdateRequestMode aMode)
|
||||
break;
|
||||
|
||||
case kRoleChild:
|
||||
SuccessOrExit(error = message->AppendSourceAddressTlv());
|
||||
SuccessOrExit(error = message->AppendLeaderDataTlv());
|
||||
SuccessOrExit(error = message->AppendSourceAddressAndLeaderDataTlvs());
|
||||
SuccessOrExit(error = message->AppendTimeoutTlv((aMode == kAppendZeroTimeout) ? 0 : mTimeout));
|
||||
SuccessOrExit(error = message->AppendSupervisionIntervalTlvIfSleepyChild());
|
||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
@@ -3545,6 +3544,9 @@ exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
// TxMessage - Append single TLV
|
||||
|
||||
Error Mle::TxMessage::AppendSourceAddressTlv(void)
|
||||
{
|
||||
return Tlv::Append<SourceAddressTlv>(*this, Get<Mle>().GetRloc16());
|
||||
@@ -3589,17 +3591,6 @@ Error Mle::TxMessage::AppendMleFrameCounterTlv(void)
|
||||
return Tlv::Append<MleFrameCounterTlv>(*this, Get<KeyManager>().GetMleFrameCounter());
|
||||
}
|
||||
|
||||
Error Mle::TxMessage::AppendLinkAndMleFrameCounterTlvs(void)
|
||||
{
|
||||
Error error;
|
||||
|
||||
SuccessOrExit(error = AppendLinkFrameCounterTlv());
|
||||
error = AppendMleFrameCounterTlv();
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
Error Mle::TxMessage::AppendAddress16Tlv(uint16_t aRloc16) { return Tlv::Append<Address16Tlv>(*this, aRloc16); }
|
||||
|
||||
Error Mle::TxMessage::AppendLeaderDataTlv(void)
|
||||
@@ -3827,17 +3818,6 @@ 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)
|
||||
{
|
||||
@@ -3873,6 +3853,45 @@ Error Mle::TxMessage::AppendCslClockAccuracyTlv(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
// TxMessage - Append multiple TLVs
|
||||
|
||||
Error Mle::TxMessage::AppendLinkAndMleFrameCounterTlvs(void)
|
||||
{
|
||||
Error error;
|
||||
|
||||
SuccessOrExit(error = AppendLinkFrameCounterTlv());
|
||||
error = AppendMleFrameCounterTlv();
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
Error Mle::TxMessage::AppendSourceAddressAndLeaderDataTlvs(void)
|
||||
{
|
||||
Error error;
|
||||
|
||||
SuccessOrExit(error = AppendSourceAddressTlv());
|
||||
error = AppendLeaderDataTlv();
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
Error Mle::TxMessage::AppendActiveAndPendingTimestampTlvs(void)
|
||||
{
|
||||
Error error;
|
||||
|
||||
SuccessOrExit(error = AppendActiveTimestampTlv());
|
||||
error = AppendPendingTimestampTlv();
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
// TxMessage - Misc
|
||||
|
||||
Error Mle::TxMessage::SendTo(const Ip6::Address &aDestination)
|
||||
{
|
||||
Error error = kErrorNone;
|
||||
|
||||
@@ -1556,6 +1556,7 @@ private:
|
||||
class TxMessage : public Message
|
||||
{
|
||||
public:
|
||||
// Appending single TLV
|
||||
Error AppendSourceAddressTlv(void);
|
||||
Error AppendModeTlv(DeviceMode aMode);
|
||||
Error AppendTimeoutTlv(uint32_t aTimeout);
|
||||
@@ -1563,7 +1564,6 @@ private:
|
||||
Error AppendResponseTlv(const RxChallenge &aResponse);
|
||||
Error AppendLinkFrameCounterTlv(void);
|
||||
Error AppendMleFrameCounterTlv(void);
|
||||
Error AppendLinkAndMleFrameCounterTlvs(void);
|
||||
Error AppendAddress16Tlv(uint16_t aRloc16);
|
||||
Error AppendNetworkDataTlv(NetworkData::Type aType);
|
||||
Error AppendTlvRequestTlv(const uint8_t *aTlvs, uint8_t aTlvsLength);
|
||||
@@ -1578,7 +1578,6 @@ 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);
|
||||
@@ -1603,6 +1602,11 @@ private:
|
||||
return AppendTlvRequestTlv(aTlvArray, kArrayLength);
|
||||
}
|
||||
|
||||
// Appending multiple TLVs
|
||||
Error AppendLinkAndMleFrameCounterTlvs(void);
|
||||
Error AppendSourceAddressAndLeaderDataTlvs(void);
|
||||
Error AppendActiveAndPendingTimestampTlvs(void);
|
||||
|
||||
Error SendTo(const Ip6::Address &aDestination);
|
||||
|
||||
private:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user