From ed6d72eccde2c1dc09d71381d0c31b6d9930bdc9 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Mon, 26 Sep 2016 15:12:41 -0700 Subject: [PATCH] MeshForwader: Update `HandleDataRequest()` to use the counter `mQueuedIndirectMessageCnt` (#688) This commit makes the following changes in `HandleDataRequest()` in `MeshForwader` class: - We use the counter `mQueuedIndirectMessageCnt` to determine if there are any queued frames for a given child. - Handle data poll/request from a child only. --- src/core/thread/mesh_forwarder.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 22951b833..2b3cc8274 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -1654,27 +1654,21 @@ void MeshForwarder::UpdateFramePending() void MeshForwarder::HandleDataRequest(const Mac::Address &aMacSource, const ThreadMessageInfo &aMessageInfo) { - Neighbor *neighbor; - uint8_t childIndex; + Child *child; // Security Check: only process secure Data Poll frames. VerifyOrExit(aMessageInfo.mLinkSecurity, ;); assert(mMle.GetDeviceState() != Mle::kDeviceStateDetached); - VerifyOrExit((neighbor = mMle.GetNeighbor(aMacSource)) != NULL, ;); - neighbor->mLastHeard = Timer::GetNow(); + VerifyOrExit((child = mMle.GetChild(aMacSource)) != NULL, ;); + child->mLastHeard = Timer::GetNow(); - mMle.HandleMacDataRequest(*static_cast(neighbor)); - childIndex = mMle.GetChildIndex(*static_cast(neighbor)); + mMle.HandleMacDataRequest(*child); - for (Message *message = mSendQueue.GetHead(); message; message = message->GetNext()) + if (child->mQueuedIndirectMessageCnt > 0) { - if (message->GetDirectTransmission() == false && message->GetChildMask(childIndex)) - { - neighbor->mDataRequest = true; - break; - } + child->mDataRequest = true; } mScheduleTransmissionTask.Post();