diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index f3a36eb08..aff629f42 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -389,18 +389,6 @@ void MeshForwarder::GetMacDestinationAddress(const Ip6::Address &aIp6Addr, Mac:: } } -otError MeshForwarder::GetMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength, Lowpan::MeshHeader &aMeshHeader) -{ - otError error; - - VerifyOrExit(aFrameLength >= 1 && reinterpret_cast(aFrame)->IsMeshHeader(), - error = OT_ERROR_NOT_FOUND); - SuccessOrExit(error = aMeshHeader.Init(aFrame, aFrameLength)); - -exit: - return error; -} - otError MeshForwarder::SkipMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength) { otError error = OT_ERROR_NONE; diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index a412094bc..ce8e915da 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -345,7 +345,6 @@ private: const Mac::Address &aMeshSource, const Mac::Address &aMeshDest); - otError GetMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength, Lowpan::MeshHeader &aMeshHeader); otError SkipMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength); otError DecompressIp6Header(const uint8_t * aFrame, uint16_t aFrameLength, @@ -425,8 +424,8 @@ private: otError GetFragmentPriority(Lowpan::FragmentHeader &aFragmentHeader, uint16_t aSrcRloc16, uint8_t &aPriority); otError GetForwardFramePriority(const uint8_t * aFrame, uint16_t aFrameLength, - const Mac::Address &aMacDest, - const Mac::Address &aMacSource, + const Mac::Address &aMeshSource, + const Mac::Address &aMeshDest, uint8_t & aPriority); FragmentPriorityEntry *FindFragmentPriorityEntry(uint16_t aTag, uint16_t aSrcRloc16); diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 298252e58..979301eee 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -547,7 +547,8 @@ void MeshForwarder::HandleMesh(uint8_t * aFrame, meshHeader.SetHopsLeft(meshHeader.GetHopsLeft() - 1); meshHeader.AppendTo(aFrame); - GetForwardFramePriority(aFrame, aFrameLength, meshDest, meshSource, priority); + GetForwardFramePriority(aFrame + meshHeader.GetHeaderLength(), aFrameLength - meshHeader.GetHeaderLength(), + meshSource, meshDest, priority); VerifyOrExit((message = Get().New(Message::kType6lowpan, priority)) != NULL, error = OT_ERROR_NO_BUFS); SuccessOrExit(error = message->SetLength(aFrameLength)); @@ -725,19 +726,14 @@ exit: otError MeshForwarder::GetForwardFramePriority(const uint8_t * aFrame, uint16_t aFrameLength, - const Mac::Address &aMacDest, - const Mac::Address &aMacSource, + const Mac::Address &aMeshSource, + const Mac::Address &aMeshDest, uint8_t & aPriority) { otError error = OT_ERROR_NONE; bool isFragment = false; - Lowpan::MeshHeader meshHeader; Lowpan::FragmentHeader fragmentHeader; - SuccessOrExit(error = GetMeshHeader(aFrame, aFrameLength, meshHeader)); - aFrame += meshHeader.GetHeaderLength(); - aFrameLength -= meshHeader.GetHeaderLength(); - if (GetFragmentHeader(aFrame, aFrameLength, fragmentHeader) == OT_ERROR_NONE) { isFragment = true; @@ -747,23 +743,23 @@ otError MeshForwarder::GetForwardFramePriority(const uint8_t * aFrame, if (fragmentHeader.GetDatagramOffset() > 0) { // Get priority from the pre-buffered info - ExitNow(error = GetFragmentPriority(fragmentHeader, meshHeader.GetSource(), aPriority)); + ExitNow(error = GetFragmentPriority(fragmentHeader, aMeshSource.GetShort(), aPriority)); } } // Get priority from IPv6 header or UDP destination port directly - error = GetFramePriority(aFrame, aFrameLength, aMacSource, aMacDest, aPriority); + error = GetFramePriority(aFrame, aFrameLength, aMeshSource, aMeshDest, aPriority); exit: if (error != OT_ERROR_NONE) { - otLogNoteMac("Failed to get forwarded frame priority, error:%s, len:%d, dst:%s, src:%s", - otThreadErrorToString(error), aFrameLength, aMacDest.ToString().AsCString(), - aMacSource.ToString().AsCString()); + otLogNoteMac("Failed to get forwarded frame priority, error:%s, len:%d, src:%d, dst:%s", + otThreadErrorToString(error), aFrameLength, aMeshSource.ToString().AsCString(), + aMeshDest.ToString().AsCString()); } else if (isFragment) { - UpdateFragmentPriority(fragmentHeader, aFrameLength, meshHeader.GetSource(), aPriority); + UpdateFragmentPriority(fragmentHeader, aFrameLength, aMeshSource.GetShort(), aPriority); } return error;