Remove timestamp from Active/Pending Dataset Tlv. (#932)

This commit is contained in:
Xiao Ma
2016-11-09 01:18:25 -08:00
committed by Jonathan Hui
parent ede95a1220
commit f1c83f0ce3
3 changed files with 50 additions and 10 deletions
+29
View File
@@ -38,6 +38,7 @@
#include <common/settings.hpp>
#include <platform/settings.h>
#include <thread/meshcop_tlvs.hpp>
#include <thread/mle_tlvs.hpp>
#include <thread/meshcop_dataset.hpp>
namespace Thread {
@@ -482,6 +483,34 @@ exit:
return;
}
ThreadError Dataset::AppendMleDatasetTlv(Message &aMessage)
{
ThreadError error = kThreadError_None;
Mle::Tlv tlv;
Mle::Tlv::Type type;
Tlv *cur = reinterpret_cast<Tlv *>(mTlvs);
Tlv *end = reinterpret_cast<Tlv *>(mTlvs + mLength);
type = (mType == Tlv::kActiveTimestamp ? Mle::Tlv::kActiveDataset : Mle::Tlv::kPendingDataset);
tlv.SetType(type);
tlv.SetLength(static_cast<uint8_t>(mLength) - sizeof(Tlv) - sizeof(Timestamp));
SuccessOrExit(error = aMessage.Append(&tlv, sizeof(Tlv)));
while (cur < end)
{
if (cur->GetType() != mType)
{
SuccessOrExit(error = aMessage.Append(cur, sizeof(Tlv) + cur->GetLength()));
}
cur = cur->GetNext();
}
exit:
return error;
}
void Dataset::Remove(uint8_t *aStart, uint8_t aLength)
{
memmove(aStart, aStart + aLength, mLength - (static_cast<uint8_t>(aStart - mTlvs) + aLength));
+15
View File
@@ -166,8 +166,23 @@ public:
ThreadError Set(const otOperationalDataset &aDataset);
/**
* This method removes a TLV from the Dataset.
*
* @param[in] aType The type of a specific TLV.
*
*/
void Remove(Tlv::Type aType);
/**
* This method appends the MLE Dataset TLV but excluding MeshCoP Sub Timestamp TLV.
*
* @retval kThreadError_None Successfully append MLE Dataset TLV without MeshCoP Sub Timestamp TLV.
* @retval kThreadError_NoBufs Insufficient available buffers to append the message with MLE Dataset TLV.
*
*/
ThreadError AppendMleDatasetTlv(Message &aMessage);
private:
void Remove(uint8_t *aStart, uint8_t aLength);
+6 -10
View File
@@ -3729,12 +3729,10 @@ exit:
ThreadError MleRouter::AppendActiveDataset(Message &aMessage)
{
ThreadError error = kThreadError_None;
Tlv tlv;
tlv.SetType(Tlv::kActiveDataset);
tlv.SetLength(static_cast<uint8_t>(mNetif.GetActiveDataset().GetNetwork().GetSize()));
SuccessOrExit(error = aMessage.Append(&tlv, sizeof(tlv)));
SuccessOrExit(error = aMessage.Append(mNetif.GetActiveDataset().GetNetwork().GetBytes(), tlv.GetLength()));
VerifyOrExit(mNetif.GetActiveDataset().GetNetwork().GetSize() > 0,);
SuccessOrExit(error = mNetif.GetActiveDataset().GetNetwork().AppendMleDatasetTlv(aMessage));
exit:
return error;
@@ -3743,13 +3741,11 @@ exit:
ThreadError MleRouter::AppendPendingDataset(Message &aMessage)
{
ThreadError error = kThreadError_None;
Tlv tlv;
tlv.SetType(Tlv::kPendingDataset);
tlv.SetLength(static_cast<uint8_t>(mNetif.GetPendingDataset().GetNetwork().GetSize()));
SuccessOrExit(error = aMessage.Append(&tlv, sizeof(tlv)));
VerifyOrExit(mNetif.GetPendingDataset().GetNetwork().GetSize() > 0,);
mNetif.GetPendingDataset().UpdateDelayTimer();
SuccessOrExit(error = aMessage.Append(mNetif.GetPendingDataset().GetNetwork().GetBytes(), tlv.GetLength()));
SuccessOrExit(error = mNetif.GetPendingDataset().GetNetwork().AppendMleDatasetTlv(aMessage));
exit:
return error;