diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index 212090fb3..3700e0111 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -1668,12 +1668,13 @@ exit: void Mac::HandleReceivedFrame(Frame *aFrame, otError aError) { - Address srcaddr; - Address dstaddr; - PanId panid; - Neighbor *neighbor; - bool receive = false; - otError error = aError; + ThreadNetif &netif = GetNetif(); + Address srcaddr; + Address dstaddr; + PanId panid; + Neighbor * neighbor; + bool receive = false; + otError error = aError; #if OPENTHREAD_ENABLE_MAC_FILTER int8_t rssi = OT_MAC_FILTER_FIXED_RSS_DISABLED; #endif // OPENTHREAD_ENABLE_MAC_FILTER @@ -1697,7 +1698,7 @@ void Mac::HandleReceivedFrame(Frame *aFrame, otError aError) aFrame->GetSrcAddr(srcaddr); aFrame->GetDstAddr(dstaddr); - neighbor = GetNetif().GetMle().GetNeighbor(srcaddr); + neighbor = netif.GetMle().GetNeighbor(srcaddr); // Destination Address Filtering switch (dstaddr.GetType()) @@ -1712,9 +1713,9 @@ void Mac::HandleReceivedFrame(Frame *aFrame, otError aError) error = OT_ERROR_DESTINATION_ADDRESS_FILTERED); // Allow multicasts from neighbor routers if FFD - if (neighbor == NULL && dstaddr.IsBroadcast() && (GetNetif().GetMle().GetDeviceMode() & Mle::ModeTlv::kModeFFD)) + if (neighbor == NULL && dstaddr.IsBroadcast() && (netif.GetMle().GetDeviceMode() & Mle::ModeTlv::kModeFFD)) { - neighbor = GetNetif().GetMle().GetRxOnlyNeighborRouter(srcaddr); + neighbor = netif.GetMle().GetRxOnlyNeighborRouter(srcaddr); } break; @@ -1811,6 +1812,8 @@ void Mac::HandleReceivedFrame(Frame *aFrame, otError aError) ExitNow(); } + netif.GetMeshForwarder().GetDataPollManager().CheckFramePending(*aFrame); + if (neighbor != NULL) { #if OPENTHREAD_ENABLE_MAC_FILTER diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 5705060d9..4d7db3f56 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -1106,8 +1106,6 @@ void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame) netif.GetSupervisionListener().UpdateOnReceive(macSource, linkInfo.mLinkSecurity); - mDataPollManager.CheckFramePending(aFrame); - switch (aFrame.GetType()) { case Mac::Frame::kFcfFrameData: