Optimize joiner's Pan ID usage (#613)

* use joiner's Pan ID as the destination Pan ID when sending discovery request, there are two cases:
      - Pan ID is not initialized, so the destination Pan ID is still broadcast(0xffff)
      - Pan ID is already initialized, so it can only join the specific network

  * set joiner's Pan ID to be the same with joiner router
This commit is contained in:
Shu Chen
2016-09-19 09:05:18 -07:00
committed by Jonathan Hui
parent a1b8dbee68
commit 85bd21825b
2 changed files with 4 additions and 1 deletions
+3 -1
View File
@@ -76,7 +76,7 @@ ThreadError Joiner::Start(const char *aPSKd)
SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd), SuccessOrExit(error = mNetif.GetDtls().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd),
static_cast<uint8_t>(strlen(aPSKd)))); static_cast<uint8_t>(strlen(aPSKd))));
SuccessOrExit(error = mNetif.GetMle().Discover(0, 0, OT_PANID_BROADCAST, HandleDiscoverResult, this)); SuccessOrExit(error = mNetif.GetMle().Discover(0, 0, mNetif.GetMac().GetPanId(), HandleDiscoverResult, this));
exit: exit:
return error; return error;
@@ -99,6 +99,7 @@ void Joiner::HandleDiscoverResult(otActiveScanResult *aResult)
{ {
if (aResult != NULL) if (aResult != NULL)
{ {
mJoinerRouterPanId = aResult->mPanId;
mJoinerRouterChannel = aResult->mChannel; mJoinerRouterChannel = aResult->mChannel;
memcpy(&mJoinerRouter, &aResult->mExtAddress, sizeof(mJoinerRouter)); memcpy(&mJoinerRouter, &aResult->mExtAddress, sizeof(mJoinerRouter));
} }
@@ -110,6 +111,7 @@ void Joiner::HandleDiscoverResult(otActiveScanResult *aResult)
mSocket.Open(&HandleUdpReceive, this); mSocket.Open(&HandleUdpReceive, this);
mSocket.Bind(sockaddr); mSocket.Bind(sockaddr);
mNetif.GetMac().SetPanId(mJoinerRouterPanId);
mNetif.GetMac().SetChannel(mJoinerRouterChannel); mNetif.GetMac().SetChannel(mJoinerRouterChannel);
mNetif.GetIp6Filter().AddUnsecurePort(sockaddr.mPort); mNetif.GetIp6Filter().AddUnsecurePort(sockaddr.mPort);
+1
View File
@@ -103,6 +103,7 @@ private:
void SendJoinerFinalize(void); void SendJoinerFinalize(void);
uint8_t mJoinerRouterChannel; uint8_t mJoinerRouterChannel;
uint16_t mJoinerRouterPanId;
Mac::ExtAddress mJoinerRouter; Mac::ExtAddress mJoinerRouter;
Message *mTransmitMessage; Message *mTransmitMessage;
Ip6::UdpSocket mSocket; Ip6::UdpSocket mSocket;