[mle] add Mle::RxMessage::ReadAndSetNetworkDataTlv() (#10358)

This commit adds `ReadAndSetNetworkDataTlv()` to `Mle::RxMessage` to
read the Network Data TLV from a received MLE message and set it in
`NetworkData::Leader`.
This commit is contained in:
Abtin Keshavarzian
2024-06-11 08:45:11 -07:00
committed by GitHub
parent 7ba7fb2eb6
commit fe0037e67a
2 changed files with 26 additions and 18 deletions
+25 -18
View File
@@ -2902,8 +2902,6 @@ Error Mle::HandleLeaderData(RxInfo &aRxInfo)
bool saveActiveDataset = false;
bool savePendingDataset = false;
bool dataRequest = false;
uint16_t offset;
uint16_t length;
SuccessOrExit(error = aRxInfo.mMessage.ReadLeaderDataTlv(leaderData));
@@ -2977,16 +2975,15 @@ Error Mle::HandleLeaderData(RxInfo &aRxInfo)
ExitNow(error = kErrorParse);
}
if (Tlv::FindTlvValueOffset(aRxInfo.mMessage, Tlv::kNetworkData, offset, length) == kErrorNone)
switch (error = aRxInfo.mMessage.ReadAndSetNetworkDataTlv(leaderData))
{
error = Get<NetworkData::Leader>().SetNetworkData(leaderData.GetDataVersion(NetworkData::kFullSet),
leaderData.GetDataVersion(NetworkData::kStableSubset),
GetNetworkDataType(), aRxInfo.mMessage, offset, length);
SuccessOrExit(error);
}
else
{
ExitNow(dataRequest = true);
case kErrorNone:
break;
case kErrorNotFound:
dataRequest = true;
OT_FALL_THROUGH;
default:
ExitNow();
}
#if OPENTHREAD_FTD
@@ -3308,8 +3305,6 @@ void Mle::HandleChildIdResponse(RxInfo &aRxInfo)
uint16_t sourceAddress;
uint16_t shortAddress;
MeshCoP::Timestamp timestamp;
uint16_t networkDataOffset;
uint16_t networkDataLength;
SuccessOrExit(error = Tlv::Find<SourceAddressTlv>(aRxInfo.mMessage, sourceAddress));
@@ -3324,8 +3319,7 @@ void Mle::HandleChildIdResponse(RxInfo &aRxInfo)
SuccessOrExit(error = aRxInfo.mMessage.ReadLeaderDataTlv(leaderData));
SuccessOrExit(
error = Tlv::FindTlvValueOffset(aRxInfo.mMessage, Tlv::kNetworkData, networkDataOffset, networkDataLength));
VerifyOrExit(aRxInfo.mMessage.ContainsTlv(Tlv::kNetworkData));
switch (Tlv::Find<ActiveTimestampTlv>(aRxInfo.mMessage, timestamp))
{
@@ -3388,9 +3382,7 @@ void Mle::HandleChildIdResponse(RxInfo &aRxInfo)
mParent.SetRloc16(sourceAddress);
IgnoreError(Get<NetworkData::Leader>().SetNetworkData(
leaderData.GetDataVersion(NetworkData::kFullSet), leaderData.GetDataVersion(NetworkData::kStableSubset),
GetNetworkDataType(), aRxInfo.mMessage, networkDataOffset, networkDataLength));
IgnoreError(aRxInfo.mMessage.ReadAndSetNetworkDataTlv(leaderData));
SetStateChild(shortAddress);
@@ -5064,6 +5056,21 @@ exit:
return error;
}
Error Mle::RxMessage::ReadAndSetNetworkDataTlv(const LeaderData &aLeaderData) const
{
Error error;
uint16_t offset;
uint16_t length;
SuccessOrExit(error = Tlv::FindTlvValueOffset(*this, Tlv::kNetworkData, offset, length));
error = Get<NetworkData::Leader>().SetNetworkData(aLeaderData.GetDataVersion(NetworkData::kFullSet),
aLeaderData.GetDataVersion(NetworkData::kStableSubset),
Get<Mle>().GetNetworkDataType(), *this, offset, length);
exit:
return error;
}
Error Mle::RxMessage::ReadAndSaveActiveDataset(const MeshCoP::Timestamp &aActiveTimestamp) const
{
return ReadAndSaveDataset(MeshCoP::Dataset::kActive, aActiveTimestamp);
+1
View File
@@ -1072,6 +1072,7 @@ private:
Error ReadFrameCounterTlvs(uint32_t &aLinkFrameCounter, uint32_t &aMleFrameCounter) const;
Error ReadTlvRequestTlv(TlvList &aTlvList) const;
Error ReadLeaderDataTlv(LeaderData &aLeaderData) const;
Error ReadAndSetNetworkDataTlv(const LeaderData &aLeaderData) const;
Error ReadAndSaveActiveDataset(const MeshCoP::Timestamp &aActiveTimestamp) const;
Error ReadAndSavePendingDataset(const MeshCoP::Timestamp &aPendingTimestamp) const;
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE