From a887530e0d55d768d0b17a05715f2da17bd9b7c6 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Sat, 7 Sep 2024 03:21:03 +0800 Subject: [PATCH] [pcap] fix pcap callback for TX frames (#10678) This commit fixes the pcap callback for TX frames: * Report the tx frame on each tx started callback, so that retransmissions can be captured. * Set the RSSI to be invalid for TX frames. --- src/core/mac/sub_mac.cpp | 10 +++++----- src/ncp/ncp_base_mtd.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/core/mac/sub_mac.cpp b/src/core/mac/sub_mac.cpp index 94916f6d7..28b170f9a 100644 --- a/src/core/mac/sub_mac.cpp +++ b/src/core/mac/sub_mac.cpp @@ -473,11 +473,6 @@ void SubMac::BeginTransmit(void) SetState(kStateTransmit); - if (mPcapCallback.IsSet()) - { - mPcapCallback.Invoke(&mTransmitFrame, true); - } - error = Get().Transmit(mTransmitFrame); if (error == kErrorInvalidState && mTransmitFrame.mInfo.mTxInfo.mTxDelay > 0) @@ -497,6 +492,11 @@ exit: void SubMac::HandleTransmitStarted(TxFrame &aFrame) { + if (mPcapCallback.IsSet()) + { + mPcapCallback.Invoke(&aFrame, true); + } + if (ShouldHandleAckTimeout() && aFrame.GetAckRequest()) { StartTimer(kAckTimeout); diff --git a/src/ncp/ncp_base_mtd.cpp b/src/ncp/ncp_base_mtd.cpp index 3c1faf7a6..4f7c80569 100644 --- a/src/ncp/ncp_base_mtd.cpp +++ b/src/ncp/ncp_base_mtd.cpp @@ -4600,9 +4600,10 @@ void NcpBase::HandlePcapFrame(const otRadioFrame *aFrame, bool aIsTx) SuccessOrExit(mEncoder.WriteData(aFrame->mPsdu, aFrame->mLength)); // Append metadata (rssi, etc) - SuccessOrExit(mEncoder.WriteInt8(aFrame->mInfo.mRxInfo.mRssi)); // RSSI - SuccessOrExit(mEncoder.WriteInt8(-128)); // Noise floor (Currently unused) - SuccessOrExit(mEncoder.WriteUint16(flags)); // Flags + SuccessOrExit( + mEncoder.WriteInt8((aIsTx ? static_cast(OT_RADIO_RSSI_INVALID) : aFrame->mInfo.mRxInfo.mRssi))); // RSSI + SuccessOrExit(mEncoder.WriteInt8(-128)); // Noise floor (Currently unused) + SuccessOrExit(mEncoder.WriteUint16(flags)); // Flags SuccessOrExit(mEncoder.OpenStruct()); // PHY-data // Empty for now