mirror of
https://github.com/espressif/openthread.git
synced 2026-07-29 23:27:46 +00:00
Remove timestamp from Active/Pending Dataset Tlv. (#932)
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user