From f302796bd2add05b25f10a84a0b422a9665a1750 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Thu, 4 Jun 2020 01:59:19 +0800 Subject: [PATCH] [simulation] send enh-ack for 802.15.4-2015 frames (#5039) This commit changes the simulation radio to send secured enh-ack for secured frames. This improves code coverage for testing. --- examples/platforms/simulation/radio.c | 25 ++++++++++++++++++------- examples/platforms/utils/mac_frame.cpp | 4 ++-- src/core/mac/mac_frame.cpp | 4 ++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/examples/platforms/simulation/radio.c b/examples/platforms/simulation/radio.c index 7e0188229..c0e26dcd9 100644 --- a/examples/platforms/simulation/radio.c +++ b/examples/platforms/simulation/radio.c @@ -732,7 +732,7 @@ void radioTransmit(struct RadioMessage *aMessage, const struct otRadioFrame *aFr #endif // OPENTHREAD_SIMULATION_VIRTUAL_TIME == 0 } -void radioGenerateAck(void) +void radioSendAck(void) { if ( #if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 @@ -746,17 +746,28 @@ void radioGenerateAck(void) sReceiveFrame.mInfo.mRxInfo.mAckedWithFramePending = true; } - otMacFrameGenerateImmAck(&sReceiveFrame, sReceiveFrame.mInfo.mRxInfo.mAckedWithFramePending, &sAckFrame); -} - -void radioSendAck(void) -{ - radioGenerateAck(); +#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 + // Use enh-ack for 802.15.4-2015 frames + if (otMacFrameIsVersion2015(&sReceiveFrame)) + { + otEXPECT(otMacFrameGenerateEnhAck(&sReceiveFrame, sReceiveFrame.mInfo.mRxInfo.mAckedWithFramePending, NULL, 0, + &sAckFrame) == OT_ERROR_NONE); + } + else +#endif + { + otMacFrameGenerateImmAck(&sReceiveFrame, sReceiveFrame.mInfo.mRxInfo.mAckedWithFramePending, &sAckFrame); + } sAckMessage.mChannel = sReceiveFrame.mChannel; radioComputeCrc(&sAckMessage, sAckFrame.mLength); radioTransmit(&sAckMessage, &sAckFrame); + +#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 +exit: +#endif + return; } void radioProcessFrame(otInstance *aInstance) diff --git a/examples/platforms/utils/mac_frame.cpp b/examples/platforms/utils/mac_frame.cpp index 991f7c2f0..8a9c932a8 100644 --- a/examples/platforms/utils/mac_frame.cpp +++ b/examples/platforms/utils/mac_frame.cpp @@ -139,7 +139,7 @@ void otMacFrameGenerateImmAck(const otRadioFrame *aFrame, bool aIsFramePending, static_cast(aAckFrame)->GenerateImmAck(*static_cast(aFrame), aIsFramePending); } -#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 otError otMacFrameGenerateEnhAck(const otRadioFrame *aFrame, bool aIsFramePending, const uint8_t * aIeData, @@ -151,6 +151,7 @@ otError otMacFrameGenerateEnhAck(const otRadioFrame *aFrame, return static_cast(aAckFrame)->GenerateEnhAck(*static_cast(aFrame), aIsFramePending, aIeData, aIeLength); } +#endif #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE void otMacFrameSetCslIe(otRadioFrame *aFrame, uint16_t aCslPeriod, uint16_t aCslPhase) @@ -158,4 +159,3 @@ void otMacFrameSetCslIe(otRadioFrame *aFrame, uint16_t aCslPeriod, uint16_t aCsl static_cast(aFrame)->SetCslIe(aCslPeriod, aCslPhase); } #endif // OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE -#endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT diff --git a/src/core/mac/mac_frame.cpp b/src/core/mac/mac_frame.cpp index d11a8c871..b23a2f588 100644 --- a/src/core/mac/mac_frame.cpp +++ b/src/core/mac/mac_frame.cpp @@ -1082,7 +1082,7 @@ void TxFrame::GenerateImmAck(const RxFrame &aFrame, bool aIsFramePending) mLength = kImmAckLength; } -#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 otError TxFrame::GenerateEnhAck(const RxFrame &aFrame, bool aIsFramePending, const uint8_t *aIeData, uint8_t aIeLength) { otError error = OT_ERROR_NONE; @@ -1193,7 +1193,7 @@ otError TxFrame::GenerateEnhAck(const RxFrame &aFrame, bool aIsFramePending, con exit: return error; } -#endif +#endif // OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 // LCOV_EXCL_START