From f0bcd8a1ee346bd54b77a8dba59fd8055d7076f3 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Tue, 26 Nov 2019 02:38:54 +0800 Subject: [PATCH] [joiner] store network configuration using operational dataset (#4332) This commit changes the Joiner::HandleJoinerEntrust implementation to store Thread network configuration parameters in the Active Operational Dataset. Using the operational dataset stores configuration parameters in non-volatile memory. This commit only utilizes Thread network parameters that are useful in the Thread attach process. For example, parameters such as Extended PAN ID, Mesh Local Prefix, and Active Timestamp are not useful during the attach process. --- src/core/meshcop/joiner.cpp | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index d0ef8c109..63d63fde7 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -519,13 +519,9 @@ void Joiner::HandleJoinerEntrust(void *aContext, otMessage *aMessage, const otMe void Joiner::HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo) { - otError error; - NetworkMasterKeyTlv masterKey; - MeshLocalPrefixTlv meshLocalPrefix; - ExtendedPanIdTlv extendedPanId; - NetworkNameTlv networkName; - ActiveTimestampTlv activeTimestamp; - NetworkKeySequenceTlv networkKeySeq; + otError error; + NetworkMasterKeyTlv masterKey; + otOperationalDataset dataset; VerifyOrExit(mState == OT_JOINER_STATE_ENTRUST && aMessage.GetType() == OT_COAP_TYPE_CONFIRMABLE && aMessage.GetCode() == OT_COAP_CODE_POST, @@ -537,26 +533,18 @@ void Joiner::HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkMasterKey, sizeof(masterKey), masterKey)); VerifyOrExit(masterKey.IsValid(), error = OT_ERROR_PARSE); - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kMeshLocalPrefix, sizeof(meshLocalPrefix), meshLocalPrefix)); - VerifyOrExit(meshLocalPrefix.IsValid(), error = OT_ERROR_PARSE); + memset(&dataset, 0, sizeof(dataset)); - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kExtendedPanId, sizeof(extendedPanId), extendedPanId)); - VerifyOrExit(extendedPanId.IsValid(), error = OT_ERROR_PARSE); + dataset.mMasterKey = masterKey.GetNetworkMasterKey(); + dataset.mComponents.mIsMasterKeyPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkName, sizeof(networkName), networkName)); + dataset.mChannel = Get().GetPanChannel(); + dataset.mComponents.mIsChannelPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kActiveTimestamp, sizeof(activeTimestamp), activeTimestamp)); - VerifyOrExit(activeTimestamp.IsValid(), error = OT_ERROR_PARSE); + dataset.mPanId = Get().GetPanId(); + dataset.mComponents.mIsPanIdPresent = true; - SuccessOrExit(error = Tlv::GetTlv(aMessage, Tlv::kNetworkKeySequence, sizeof(networkKeySeq), networkKeySeq)); - VerifyOrExit(networkKeySeq.IsValid(), error = OT_ERROR_PARSE); - - Get().SetMasterKey(masterKey.GetNetworkMasterKey()); - Get().SetCurrentKeySequence(networkKeySeq.GetNetworkKeySequence()); - Get().SetMeshLocalPrefix(meshLocalPrefix.GetMeshLocalPrefix()); - Get().SetExtendedPanId(extendedPanId.GetExtendedPanId()); - - Get().SetNetworkName(networkName.GetNetworkName()); + Get().Save(dataset); otLogInfoMeshCoP("Joiner successful!");