From a52ad98b23667059a91b1581031ba2bc4878f895 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Fri, 6 Jan 2017 23:41:57 -0800 Subject: [PATCH] Revert "Allow MTDs to locally generate Active Datasets for non-volatile storage." (#1118) --- src/core/meshcop/dataset_manager.cpp | 112 ----------------------- src/core/meshcop/dataset_manager.hpp | 5 - src/core/meshcop/dataset_manager_ftd.cpp | 112 +++++++++++++++++++++++ src/core/meshcop/dataset_manager_ftd.hpp | 4 + src/core/meshcop/dataset_manager_mtd.hpp | 2 + 5 files changed, 118 insertions(+), 117 deletions(-) diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 722ecc27f..8629782a2 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -842,118 +842,6 @@ ActiveDatasetBase::ActiveDatasetBase(ThreadNetif &aThreadNetif): { } -bool ActiveDatasetBase::IsTlvInitialized(Tlv::Type aType) -{ - return mLocal.Get(aType) != NULL; -} - -ThreadError ActiveDatasetBase::GenerateLocal(void) -{ - ThreadError error = kThreadError_None; - otOperationalDataset dataset; - - VerifyOrExit(mNetif.GetMle().IsAttached(), error = kThreadError_InvalidState); - - memset(&dataset, 0, sizeof(dataset)); - - // Active Timestamp - if (!IsTlvInitialized(Tlv::kActiveTimestamp)) - { - ActiveTimestampTlv activeTimestampTlv; - activeTimestampTlv.Init(); - activeTimestampTlv.SetSeconds(0); - activeTimestampTlv.SetTicks(0); - mLocal.Set(activeTimestampTlv); - } - - // Channel - if (!IsTlvInitialized(Tlv::kChannel)) - { - ChannelTlv tlv; - tlv.Init(); - tlv.SetChannelPage(0); - tlv.SetChannel(mNetif.GetMac().GetChannel()); - mLocal.Set(tlv); - } - - // channelMask - if (!IsTlvInitialized(Tlv::kChannelMask)) - { - ChannelMask0Tlv tlv; - tlv.Init(); - tlv.SetMask(kPhySupportedChannelMask); - mLocal.Set(tlv); - } - - // Extended PAN ID - if (!IsTlvInitialized(Tlv::kExtendedPanId)) - { - ExtendedPanIdTlv tlv; - tlv.Init(); - tlv.SetExtendedPanId(mNetif.GetMac().GetExtendedPanId()); - mLocal.Set(tlv); - } - - // Mesh-Local Prefix - if (!IsTlvInitialized(Tlv::kMeshLocalPrefix)) - { - MeshLocalPrefixTlv tlv; - tlv.Init(); - tlv.SetMeshLocalPrefix(mNetif.GetMle().GetMeshLocalPrefix()); - mLocal.Set(tlv); - } - - // Master Key - if (!IsTlvInitialized(Tlv::kNetworkMasterKey)) - { - NetworkMasterKeyTlv tlv; - tlv.Init(); - tlv.SetNetworkMasterKey(mNetif.GetKeyManager().GetMasterKey(NULL)); - mLocal.Set(tlv); - } - - // Network Name - if (!IsTlvInitialized(Tlv::kNetworkName)) - { - NetworkNameTlv tlv; - tlv.Init(); - tlv.SetNetworkName(mNetif.GetMac().GetNetworkName()); - mLocal.Set(tlv); - } - - // Pan ID - if (!IsTlvInitialized(Tlv::kPanId)) - { - PanIdTlv tlv; - tlv.Init(); - tlv.SetPanId(mNetif.GetMac().GetPanId()); - mLocal.Set(tlv); - } - - // PSKc - if (!IsTlvInitialized(Tlv::kPSKc)) - { - const uint8_t PSKc[16] = {0}; - PSKcTlv tlv; - tlv.Init(); - tlv.SetPSKc(PSKc); - mLocal.Set(tlv); - } - - // Security Policy - if (!IsTlvInitialized(Tlv::kSecurityPolicy)) - { - SecurityPolicyTlv tlv; - tlv.Init(); - tlv.SetRotationTime(static_cast(mNetif.GetKeyManager().GetKeyRotation())); - tlv.SetFlags(mNetif.GetKeyManager().GetSecurityPolicyFlags()); - mLocal.Set(tlv); - } - -exit: - return error; -} - ThreadError ActiveDatasetBase::Restore(void) { ThreadError error = kThreadError_None; diff --git a/src/core/meshcop/dataset_manager.hpp b/src/core/meshcop/dataset_manager.hpp index 5bb613818..cc8c5a113 100644 --- a/src/core/meshcop/dataset_manager.hpp +++ b/src/core/meshcop/dataset_manager.hpp @@ -117,8 +117,6 @@ class ActiveDatasetBase: public DatasetManager public: ActiveDatasetBase(ThreadNetif &aThreadNetif); - ThreadError GenerateLocal(void); - ThreadError Restore(void); ThreadError Clear(bool aOnlyClearNetwork); @@ -128,9 +126,6 @@ public: ThreadError Set(const Dataset &aDataset); ThreadError Set(const Timestamp &aTimestamp, const Message &aMessage, uint16_t aOffset, uint8_t aLength); - -private: - bool IsTlvInitialized(Tlv::Type aType); }; class PendingDatasetBase: public DatasetManager diff --git a/src/core/meshcop/dataset_manager_ftd.cpp b/src/core/meshcop/dataset_manager_ftd.cpp index bd7630b9e..1c933cab8 100644 --- a/src/core/meshcop/dataset_manager_ftd.cpp +++ b/src/core/meshcop/dataset_manager_ftd.cpp @@ -65,6 +65,118 @@ ActiveDataset::ActiveDataset(ThreadNetif &aThreadNetif): mCoapServer.AddResource(mResourceGet); } +bool ActiveDataset::IsTlvInitialized(Tlv::Type aType) +{ + return mLocal.Get(aType) != NULL; +} + +ThreadError ActiveDataset::GenerateLocal(void) +{ + ThreadError error = kThreadError_None; + otOperationalDataset dataset; + + VerifyOrExit(mNetif.GetMle().IsAttached(), error = kThreadError_InvalidState); + + memset(&dataset, 0, sizeof(dataset)); + + // Active Timestamp + if (!IsTlvInitialized(Tlv::kActiveTimestamp)) + { + ActiveTimestampTlv activeTimestampTlv; + activeTimestampTlv.Init(); + activeTimestampTlv.SetSeconds(0); + activeTimestampTlv.SetTicks(0); + mLocal.Set(activeTimestampTlv); + } + + // Channel + if (!IsTlvInitialized(Tlv::kChannel)) + { + ChannelTlv tlv; + tlv.Init(); + tlv.SetChannelPage(0); + tlv.SetChannel(mNetif.GetMac().GetChannel()); + mLocal.Set(tlv); + } + + // channelMask + if (!IsTlvInitialized(Tlv::kChannelMask)) + { + ChannelMask0Tlv tlv; + tlv.Init(); + tlv.SetMask(kPhySupportedChannelMask); + mLocal.Set(tlv); + } + + // Extended PAN ID + if (!IsTlvInitialized(Tlv::kExtendedPanId)) + { + ExtendedPanIdTlv tlv; + tlv.Init(); + tlv.SetExtendedPanId(mNetif.GetMac().GetExtendedPanId()); + mLocal.Set(tlv); + } + + // Mesh-Local Prefix + if (!IsTlvInitialized(Tlv::kMeshLocalPrefix)) + { + MeshLocalPrefixTlv tlv; + tlv.Init(); + tlv.SetMeshLocalPrefix(mNetif.GetMle().GetMeshLocalPrefix()); + mLocal.Set(tlv); + } + + // Master Key + if (!IsTlvInitialized(Tlv::kNetworkMasterKey)) + { + NetworkMasterKeyTlv tlv; + tlv.Init(); + tlv.SetNetworkMasterKey(mNetif.GetKeyManager().GetMasterKey(NULL)); + mLocal.Set(tlv); + } + + // Network Name + if (!IsTlvInitialized(Tlv::kNetworkName)) + { + NetworkNameTlv tlv; + tlv.Init(); + tlv.SetNetworkName(mNetif.GetMac().GetNetworkName()); + mLocal.Set(tlv); + } + + // Pan ID + if (!IsTlvInitialized(Tlv::kPanId)) + { + PanIdTlv tlv; + tlv.Init(); + tlv.SetPanId(mNetif.GetMac().GetPanId()); + mLocal.Set(tlv); + } + + // PSKc + if (!IsTlvInitialized(Tlv::kPSKc)) + { + const uint8_t PSKc[16] = {0}; + PSKcTlv tlv; + tlv.Init(); + tlv.SetPSKc(PSKc); + mLocal.Set(tlv); + } + + // Security Policy + if (!IsTlvInitialized(Tlv::kSecurityPolicy)) + { + SecurityPolicyTlv tlv; + tlv.Init(); + tlv.SetRotationTime(static_cast(mNetif.GetKeyManager().GetKeyRotation())); + tlv.SetFlags(mNetif.GetKeyManager().GetSecurityPolicyFlags()); + mLocal.Set(tlv); + } + +exit: + return error; +} + void ActiveDataset::StartLeader(void) { GenerateLocal(); diff --git a/src/core/meshcop/dataset_manager_ftd.hpp b/src/core/meshcop/dataset_manager_ftd.hpp index c14b5ae47..8e7efe071 100644 --- a/src/core/meshcop/dataset_manager_ftd.hpp +++ b/src/core/meshcop/dataset_manager_ftd.hpp @@ -50,6 +50,8 @@ class ActiveDataset: public ActiveDatasetBase public: ActiveDataset(ThreadNetif &aThreadNetif); + ThreadError GenerateLocal(void); + void StartLeader(void); void StopLeader(void); @@ -63,6 +65,8 @@ private: const otMessageInfo *aMessageInfo); void HandleSet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); + bool IsTlvInitialized(Tlv::Type aType); + Coap::Resource mResourceGet; Coap::Resource mResourceSet; }; diff --git a/src/core/meshcop/dataset_manager_mtd.hpp b/src/core/meshcop/dataset_manager_mtd.hpp index 1cc1400a0..d17c2db5a 100644 --- a/src/core/meshcop/dataset_manager_mtd.hpp +++ b/src/core/meshcop/dataset_manager_mtd.hpp @@ -48,6 +48,8 @@ class ActiveDataset: public ActiveDatasetBase public: ActiveDataset(ThreadNetif &aThreadNetif) : ActiveDatasetBase(aThreadNetif) { } + ThreadError GenerateLocal(void) { return kThreadError_NotImplemented; } + void StartLeader(void) { } void StopLeader(void) { }