[mesh-forwarder] fix and enhance `LogMessage()` (#7556)
This commit updates `LogMessage()` in `MeshForwarder`:
- Fixes `MessageActionToString()` so when there is a passed-in error
it correctly returns the related action string (and only when
`aAction == kMessageTransmit` it returned "Failed to send").
- Changes the order of parameters in `LogMessage()` and uses default
value for parameters to simplify its use.
diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp
index d555b10..0509ecc 100644
--- a/src/core/net/ip6.cpp
+++ b/src/core/net/ip6.cpp
@@ -1214,7 +1214,7 @@
{
// Remove encapsulating header and start over.
aMessage.RemoveHeader(aMessage.GetOffset());
- Get<MeshForwarder>().LogMessage(MeshForwarder::kMessageReceive, aMessage, nullptr, kErrorNone);
+ Get<MeshForwarder>().LogMessage(MeshForwarder::kMessageReceive, aMessage);
goto start;
}
diff --git a/src/core/thread/indirect_sender.cpp b/src/core/thread/indirect_sender.cpp
index 8fa0fd8..6b4e68c 100644
--- a/src/core/thread/indirect_sender.cpp
+++ b/src/core/thread/indirect_sender.cpp
@@ -320,7 +320,7 @@
mDataPollHandler.HandleNewFrame(aChild);
aChild.GetMacAddress(childAddress);
- Get<MeshForwarder>().LogMessage(MeshForwarder::kMessagePrepareIndirect, *message, &childAddress, kErrorNone);
+ Get<MeshForwarder>().LogMessage(MeshForwarder::kMessagePrepareIndirect, *message, kErrorNone, &childAddress);
}
}
@@ -519,7 +519,7 @@
if (!aFrame.IsEmpty())
{
IgnoreError(aFrame.GetDstAddr(macDest));
- Get<MeshForwarder>().LogMessage(MeshForwarder::kMessageTransmit, *message, &macDest, txError);
+ Get<MeshForwarder>().LogMessage(MeshForwarder::kMessageTransmit, *message, txError, &macDest);
}
if (message->GetType() == Message::kTypeIp6)
diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp
index e527fbf..9edf7eb 100644
--- a/src/core/thread/mesh_forwarder.cpp
+++ b/src/core/thread/mesh_forwarder.cpp
@@ -224,7 +224,7 @@
}
}
- LogMessage(kMessageEvict, aMessage, nullptr, kErrorNoBufs);
+ LogMessage(kMessageEvict, aMessage, kErrorNoBufs);
queue->DequeueAndFree(aMessage);
}
@@ -320,7 +320,7 @@
#endif
default:
- LogMessage(kMessageDrop, *curMessage, nullptr, error);
+ LogMessage(kMessageDrop, *curMessage, error);
mSendQueue.DequeueAndFree(*curMessage);
continue;
}
@@ -1071,7 +1071,7 @@
Get<Utils::HistoryTracker>().RecordTxMessage(*mSendMessage, aMacDest);
#endif
- LogMessage(kMessageTransmit, *mSendMessage, &aMacDest, txError);
+ LogMessage(kMessageTransmit, *mSendMessage, txError, &aMacDest);
if (mSendMessage->GetType() == Message::kTypeIp6)
{
@@ -1348,7 +1348,7 @@
{
for (Message &message : mReassemblyList)
{
- LogMessage(kMessageReassemblyDrop, message, nullptr, kErrorNoFrameReceived);
+ LogMessage(kMessageReassemblyDrop, message, kErrorNoFrameReceived);
if (message.GetType() == Message::kTypeIp6)
{
@@ -1385,7 +1385,7 @@
}
else
{
- LogMessage(kMessageReassemblyDrop, message, nullptr, kErrorReassemblyTimeout);
+ LogMessage(kMessageReassemblyDrop, message, kErrorReassemblyTimeout);
if (message.GetType() == Message::kTypeIp6)
{
@@ -1475,7 +1475,7 @@
Get<Utils::HistoryTracker>().RecordRxMessage(aMessage, aMacSource);
#endif
- LogMessage(kMessageReceive, aMessage, &aMacSource, kErrorNone);
+ LogMessage(kMessageReceive, aMessage, kErrorNone, &aMacSource);
if (aMessage.GetType() == Message::kTypeIp6)
{
@@ -1713,6 +1713,8 @@
"Evicting", // (5) kMessageEvict
};
+ const char *string = kMessageActionStrings[aAction];
+
static_assert(kMessageReceive == 0, "kMessageReceive value is incorrect");
static_assert(kMessageTransmit == 1, "kMessageTransmit value is incorrect");
static_assert(kMessagePrepareIndirect == 2, "kMessagePrepareIndirect value is incorrect");
@@ -1720,7 +1722,12 @@
static_assert(kMessageReassemblyDrop == 4, "kMessageReassemblyDrop value is incorrect");
static_assert(kMessageEvict == 5, "kMessageEvict value is incorrect");
- return (aError == kErrorNone) ? kMessageActionStrings[aAction] : "Failed to send";
+ if ((aAction == kMessageTransmit) && (aError != kErrorNone))
+ {
+ string = "Failed to send";
+ }
+
+ return string;
}
const char *MeshForwarder::MessagePriorityToString(const Message &aMessage)
@@ -1803,8 +1810,9 @@
void MeshForwarder::LogMessage(MessageAction aAction,
const Message & aMessage,
- const Mac::Address *aMacAddress,
- Error aError)
+ Error aError,
+ const Mac::Address *aMacAddress)
+
{
LogLevel logLevel = kLogLevelInfo;
@@ -1882,7 +1890,7 @@
#else // #if OT_SHOULD_LOG_AT( OT_LOG_LEVEL_NOTE)
-void MeshForwarder::LogMessage(MessageAction, const Message &, const Mac::Address *, Error)
+void MeshForwarder::LogMessage(MessageAction, const Message &, Error, const Mac::Address *)
{
}
diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp
index 86594f5..476c7d0 100644
--- a/src/core/thread/mesh_forwarder.hpp
+++ b/src/core/thread/mesh_forwarder.hpp
@@ -512,7 +512,11 @@
void PauseMessageTransmissions(void) { mTxPaused = true; }
void ResumeMessageTransmissions(void);
- void LogMessage(MessageAction aAction, const Message &aMessage, const Mac::Address *aAddress, Error aError);
+ void LogMessage(MessageAction aAction,
+ const Message & aMessage,
+ Error aError = kErrorNone,
+ const Mac::Address *aAddress = nullptr);
+
void LogFrame(const char *aActionText, const Mac::Frame &aFrame, Error aError);
void LogFragmentFrameDrop(Error aError,
uint16_t aFrameLength,
diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp
index 2468f5c..fb3df52 100644
--- a/src/core/thread/mesh_forwarder_ftd.cpp
+++ b/src/core/thread/mesh_forwarder_ftd.cpp
@@ -169,7 +169,7 @@
}
else
{
- LogMessage(kMessageDrop, message, nullptr, aError);
+ LogMessage(kMessageDrop, message, aError);
message.Free();
}
}
@@ -349,7 +349,7 @@
mSendMessage = nullptr;
}
- LogMessage(kMessageDrop, message, nullptr, kErrorNone);
+ LogMessage(kMessageDrop, message);
mSendQueue.DequeueAndFree(message);
}
}
@@ -807,7 +807,7 @@
message->SetRadioType(static_cast<Mac::RadioType>(aLinkInfo.mRadioType));
#endif
- LogMessage(kMessageReceive, *message, &aMacSource, kErrorNone);
+ LogMessage(kMessageReceive, *message, kErrorNone, &aMacSource);
#if OPENTHREAD_CONFIG_MULTI_RADIO
// Since the message will be forwarded, we clear the radio