diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index 49747f68c..74c3d6024 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -96,15 +96,15 @@ otError Joiner::Start(const char * aPskd, void * aContext) { otError error; - Mac::ExtAddress joinerId; + Mac::ExtAddress randomAddress; otLogInfoMeshCoP("Joiner starting"); VerifyOrExit(mState == OT_JOINER_STATE_IDLE, error = OT_ERROR_BUSY); - // Use extended address based on factory-assigned IEEE EUI-64 - GetJoinerId(joinerId); - Get().SetExtAddress(joinerId); + // Use random-generated extended address. + randomAddress.GenerateRandom(); + Get().SetExtAddress(randomAddress); Get().UpdateLinkLocalAddress(); SuccessOrExit(error = Get().Start(kJoinerUdpPort)); @@ -222,6 +222,8 @@ void Joiner::HandleDiscoverResult(otActiveScanResult *aResult, void *aContext) void Joiner::HandleDiscoverResult(otActiveScanResult *aResult) { + Mac::ExtAddress joinerId; + VerifyOrExit(mState == OT_JOINER_STATE_DISCOVER, OT_NOOP); if (aResult != NULL) @@ -230,6 +232,11 @@ void Joiner::HandleDiscoverResult(otActiveScanResult *aResult) } else { + // Use extended address based on factory-assigned IEEE EUI-64 + GetJoinerId(joinerId); + Get().SetExtAddress(joinerId); + Get().UpdateLinkLocalAddress(); + mJoinerRouterIndex = 0; TryNextJoinerRouter(OT_ERROR_NONE); }