mirror of
https://github.com/espressif/openthread.git
synced 2026-08-28 21:09:54 +00:00
Update short/extended address logic when adding src match table (#1499)
This commit is contained in:
@@ -1719,6 +1719,13 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError)
|
||||
{
|
||||
child->mIndirectSendInfo.mFragmentOffset = 0;
|
||||
child->mIndirectSendInfo.mMessage = NULL;
|
||||
|
||||
// add short address for subsequent indirect messages after
|
||||
// one indirect message to valid sleepy devices is sent out successfully
|
||||
if (aError == kThreadError_None)
|
||||
{
|
||||
SetSrcMatchAsShort(*child, true);
|
||||
}
|
||||
}
|
||||
|
||||
childIndex = mNetif.GetMle().GetChildIndex(*child);
|
||||
@@ -1841,7 +1848,6 @@ void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame)
|
||||
uint8_t *payload;
|
||||
uint8_t payloadLength;
|
||||
uint8_t commandId;
|
||||
Child *child = NULL;
|
||||
ThreadError error = kThreadError_None;
|
||||
|
||||
if (!mEnabled)
|
||||
@@ -1854,15 +1860,6 @@ void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame)
|
||||
SuccessOrExit(error = aFrame.GetSrcAddr(macSource));
|
||||
SuccessOrExit(aFrame.GetDstAddr(macDest));
|
||||
|
||||
if ((child = mNetif.GetMle().GetChild(macSource)) != NULL)
|
||||
{
|
||||
if (((child->mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0) &&
|
||||
macSource.mLength == sizeof(otShortAddress))
|
||||
{
|
||||
SetSrcMatchAsShort(*child, true);
|
||||
}
|
||||
}
|
||||
|
||||
aFrame.GetSrcPanId(messageInfo.mPanId);
|
||||
messageInfo.mChannel = aFrame.GetChannel();
|
||||
messageInfo.mRss = aFrame.GetPower();
|
||||
|
||||
@@ -2270,7 +2270,6 @@ ThreadError MleRouter::HandleChildUpdateRequest(const Message &aMessage, const I
|
||||
}
|
||||
|
||||
child->mLastHeard = Timer::GetNow();
|
||||
mNetif.GetMeshForwarder().SetSrcMatchAsShort(*child, true);
|
||||
|
||||
SendChildUpdateResponse(child, aMessageInfo, tlvs, tlvslength, &challenge);
|
||||
|
||||
@@ -2361,7 +2360,6 @@ ThreadError MleRouter::HandleChildUpdateResponse(const Message &aMessage, const
|
||||
child->mLastHeard = Timer::GetNow();
|
||||
child->mKeySequence = aKeySequence;
|
||||
child->mLinkInfo.AddRss(mNetif.GetMac().GetNoiseFloor(), threadMessageInfo->mRss);
|
||||
mNetif.GetMeshForwarder().SetSrcMatchAsShort(*child, true);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
@@ -2689,6 +2687,11 @@ ThreadError MleRouter::SendChildIdResponse(Child *aChild)
|
||||
SuccessOrExit(error = AppendChildAddresses(*message, *aChild));
|
||||
}
|
||||
|
||||
if ((aChild->mMode & ModeTlv::kModeRxOnWhenIdle) == 0)
|
||||
{
|
||||
mNetif.GetMeshForwarder().SetSrcMatchAsShort(*aChild, false);
|
||||
}
|
||||
|
||||
SetChildStateToValid(aChild);
|
||||
|
||||
memset(&destination, 0, sizeof(destination));
|
||||
|
||||
Reference in New Issue
Block a user