From 3ac958441edb4158125a2fad5aa70593fafda40a Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Fri, 5 Oct 2018 15:58:19 +0800 Subject: [PATCH] [meshcop] add commissioner aloc (#3123) --- src/core/meshcop/commissioner.cpp | 12 +++++++++--- src/core/meshcop/commissioner.hpp | 6 ++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index 2cae57986..f7236f15e 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -60,7 +60,6 @@ namespace MeshCoP { Commissioner::Commissioner(Instance &aInstance) : InstanceLocator(aInstance) - , mState(OT_COMMISSIONER_STATE_DISABLED) , mJoinerPort(0) , mJoinerRloc(0) , mJoinerExpirationTimer(aInstance, HandleJoinerExpirationTimer, this) @@ -73,6 +72,7 @@ Commissioner::Commissioner(Instance &aInstance) , mAnnounceBegin(aInstance) , mEnergyScan(aInstance) , mPanIdQuery(aInstance) + , mState(OT_COMMISSIONER_STATE_DISABLED) { memset(mJoiners, 0, sizeof(mJoiners)); } @@ -121,6 +121,7 @@ otError Commissioner::Stop(void) GetNetif().GetCoapSecure().Stop(); mState = OT_COMMISSIONER_STATE_DISABLED; + GetNetif().RemoveUnicastAddress(mCommissionerAloc); GetNotifier().Signal(OT_CHANGED_COMMISSIONER_STATE); RemoveCoapResources(); ClearJoiners(); @@ -649,12 +650,13 @@ void Commissioner::HandleLeaderPetitionResponse(Coap::Header * aHeader, const Ip6::MessageInfo *aMessageInfo, otError aResult) { - (void)aMessageInfo; - + ThreadNetif & netif = GetNetif(); StateTlv state; CommissionerSessionIdTlv sessionId; bool retransmit = false; + OT_UNUSED_VARIABLE(aMessageInfo); + VerifyOrExit(mState == OT_COMMISSIONER_STATE_PETITION, mState = OT_COMMISSIONER_STATE_DISABLED); VerifyOrExit(aResult == OT_ERROR_NONE && aHeader->GetCode() == OT_COAP_CODE_CHANGED, retransmit = true); @@ -669,6 +671,9 @@ void Commissioner::HandleLeaderPetitionResponse(Coap::Header * aHeader, VerifyOrExit(sessionId.IsValid()); mSessionId = sessionId.GetCommissionerSessionId(); + netif.GetMle().GetCommissionerAloc(mCommissionerAloc.GetAddress(), mSessionId); + netif.AddUnicastAddress(mCommissionerAloc); + AddCoapResources(); mState = OT_COMMISSIONER_STATE_ACTIVE; @@ -772,6 +777,7 @@ exit: if (mState != OT_COMMISSIONER_STATE_ACTIVE) { + GetNetif().RemoveUnicastAddress(mCommissionerAloc); RemoveCoapResources(); } } diff --git a/src/core/meshcop/commissioner.hpp b/src/core/meshcop/commissioner.hpp index a6ae51d7f..9095efa1f 100644 --- a/src/core/meshcop/commissioner.hpp +++ b/src/core/meshcop/commissioner.hpp @@ -324,8 +324,6 @@ private: otError SendPetition(void); otError SendKeepAlive(void); - otCommissionerState mState; - struct Joiner { Mac::ExtAddress mEui64; @@ -352,6 +350,10 @@ private: AnnounceBeginClient mAnnounceBegin; EnergyScanClient mEnergyScan; PanIdQueryClient mPanIdQuery; + + Ip6::NetifUnicastAddress mCommissionerAloc; + + otCommissionerState mState; }; } // namespace MeshCoP