diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 41aa70d74..e12b5b8d1 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -389,21 +389,6 @@ void MeshForwarder::GetMacDestinationAddress(const Ip6::Address &aIp6Addr, Mac:: } } -otError MeshForwarder::SkipMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength) -{ - otError error = OT_ERROR_NONE; - Lowpan::MeshHeader meshHeader; - uint16_t headerLength; - - VerifyOrExit(Lowpan::MeshHeader::IsMeshHeader(aFrame, aFrameLength)); - SuccessOrExit(error = meshHeader.ParseFrom(aFrame, aFrameLength, headerLength)); - aFrame += headerLength; - aFrameLength -= headerLength; - -exit: - return error; -} - otError MeshForwarder::GetFragmentHeader(const uint8_t * aFrame, uint16_t aFrameLength, Lowpan::FragmentHeader &aFragmentHeader) @@ -432,8 +417,6 @@ otError MeshForwarder::DecompressIp6Header(const uint8_t * aFrame, Lowpan::FragmentHeader fragmentHeader; int headerLength; - SuccessOrExit(error = SkipMeshHeader(aFrame, aFrameLength)); - if (GetFragmentHeader(aFrame, aFrameLength, fragmentHeader) == OT_ERROR_NONE) { // only the first fragment header is followed by a LOWPAN_IPHC header diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index ce8e915da..ed9300a40 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 SkipMeshHeader(const uint8_t *&aFrame, uint16_t &aFrameLength); otError DecompressIp6Header(const uint8_t * aFrame, uint16_t aFrameLength, const Mac::Address &aMacSource, diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 5604b9675..67ddf360f 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -516,14 +516,14 @@ void MeshForwarder::HandleMesh(uint8_t * aFrame, meshSource.SetShort(meshHeader.GetSource()); meshDest.SetShort(meshHeader.GetDestination()); + aFrame += headerLength; + aFrameLength -= headerLength; + UpdateRoutes(aFrame, aFrameLength, meshSource, meshDest); if (meshDest.GetShort() == Get().GetShortAddress() || Get().IsMinimalChild(meshDest.GetShort())) { - aFrame += headerLength; - aFrameLength -= headerLength; - if (reinterpret_cast(aFrame)->IsFragmentHeader()) { HandleFragment(aFrame, aFrameLength, meshSource, meshDest, aLinkInfo); @@ -548,9 +548,6 @@ void MeshForwarder::HandleMesh(uint8_t * aFrame, meshHeader.DecrementHopsLeft(); - aFrame += headerLength; - aFrameLength -= headerLength; - GetForwardFramePriority(aFrame, aFrameLength, meshSource, meshDest, priority); message = Get().New(Message::kType6lowpan, priority); VerifyOrExit(message != NULL, error = OT_ERROR_NO_BUFS);