From 545c0894298b2cc504bd89e60695024d4c2e10b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Maciejo=C5=84czyk?= <32327281+lmaciejonczyk@users.noreply.github.com> Date: Thu, 30 Sep 2021 19:52:15 +0200 Subject: [PATCH] [link-metrics] fix endianess for PDU in link metrics report sub-tlv (#7046) This commit force Big Endian encoding for number of PDUs received in Link Metrics Report Sub-TLV. --- src/core/thread/link_metrics.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/thread/link_metrics.cpp b/src/core/thread/link_metrics.cpp index db5fc8edd..265a96c69 100644 --- a/src/core/thread/link_metrics.cpp +++ b/src/core/thread/link_metrics.cpp @@ -36,6 +36,7 @@ #if OPENTHREAD_CONFIG_MLE_LINK_METRICS_INITIATOR_ENABLE || OPENTHREAD_CONFIG_MLE_LINK_METRICS_SUBJECT_ENABLE #include "common/code_utils.hpp" +#include "common/encoding.hpp" #include "common/instance.hpp" #include "common/locator_getters.hpp" #include "common/logging.hpp" @@ -46,6 +47,8 @@ namespace ot { namespace LinkMetrics { +using ot::Encoding::BigEndian::HostSwap32; + void SeriesInfo::Init(uint8_t aSeriesId, const SeriesFlags &aSeriesFlags, const Metrics &aMetrics) { mSeriesId = aSeriesId; @@ -287,7 +290,7 @@ Error LinkMetrics::AppendReport(Message &aMessage, const Message &aRequestMessag if (queryId == kQueryIdSingleProbe) { - values.mPduCountValue = aRequestMessage.GetPsduCount(); + values.mPduCountValue = HostSwap32(aRequestMessage.GetPsduCount()); values.mLqiValue = aRequestMessage.GetAverageLqi(); // Linearly scale Link Margin from [0, 130] to [0, 255] values.mLinkMarginValue = @@ -313,7 +316,7 @@ Error LinkMetrics::AppendReport(Message &aMessage, const Message &aRequestMessag else { values.SetMetrics(seriesInfo->GetLinkMetrics()); - values.mPduCountValue = seriesInfo->GetPduCount(); + values.mPduCountValue = HostSwap32(seriesInfo->GetPduCount()); values.mLqiValue = seriesInfo->GetAverageLqi(); // Linearly scale Link Margin from [0, 130] to [0, 255] values.mLinkMarginValue = @@ -505,6 +508,7 @@ void LinkMetrics::HandleReport(const Message & aMessage, case TypeIdFlags::kPdu: values.GetMetrics().mPduCount = true; SuccessOrExit(aMessage.Read(pos, values.mPduCountValue)); + values.mPduCountValue = HostSwap32(values.mPduCountValue); pos += sizeof(uint32_t); otLogDebgMle(" - PDU Counter: %d (Count/Summation)", values.mPduCountValue); break;