From 6c6aad2a01397f5c75a8d21b234a7ca681f77c3b Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Fri, 2 Aug 2019 06:28:19 +0800 Subject: [PATCH] [mac] define TxFrame and RxFrame types (#4040) This commit defines RxFrame for receiving frames and TxFrame for transmitting frames. The motivation is to prevent invalid uses of Mac::Frame methods, because some of them are only available for rx frames and some only for tx frames. --- examples/common-switches.mk | 2 +- .../openthread-core-nrf52811-config.h | 6 +- examples/platforms/nrf52811/platform-config.h | 2 +- examples/platforms/nrf52811/radio.c | 10 +- .../openthread-core-nrf52840-config.h | 4 +- examples/platforms/nrf52840/platform-config.h | 2 +- examples/platforms/nrf52840/radio.c | 10 +- examples/platforms/posix/radio.c | 8 +- include/openthread/platform/radio.h | 2 +- src/core/api/link_api.cpp | 4 +- src/core/mac/data_poll_handler.cpp | 14 +- src/core/mac/data_poll_handler.hpp | 12 +- src/core/mac/data_poll_sender.cpp | 4 +- src/core/mac/data_poll_sender.hpp | 4 +- src/core/mac/link_raw.cpp | 14 +- src/core/mac/link_raw.hpp | 18 +- src/core/mac/mac.cpp | 50 +-- src/core/mac/mac.hpp | 41 +- src/core/mac/mac_frame.cpp | 2 +- src/core/mac/mac_frame.hpp | 420 +++++++++--------- src/core/mac/sub_mac.cpp | 18 +- src/core/mac/sub_mac.hpp | 28 +- src/core/mac/sub_mac_callbacks.cpp | 32 +- src/core/thread/indirect_sender.cpp | 8 +- src/core/thread/indirect_sender.hpp | 8 +- src/core/thread/mesh_forwarder.cpp | 10 +- src/core/thread/mesh_forwarder.hpp | 12 +- src/core/thread/mesh_forwarder_ftd.cpp | 2 +- src/core/thread/panid_query_server.cpp | 4 +- src/core/thread/panid_query_server.hpp | 4 +- src/ncp/ncp_base_radio.cpp | 2 +- tests/unit/test_mac_frame.cpp | 4 +- .../crypto/nrf52840-mbedtls-config.h | 2 +- 33 files changed, 392 insertions(+), 371 deletions(-) diff --git a/examples/common-switches.mk b/examples/common-switches.mk index 0ac5ce5b5..de4bfbc03 100644 --- a/examples/common-switches.mk +++ b/examples/common-switches.mk @@ -177,7 +177,7 @@ COMMONCFLAGS += -DOPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE=1 endif ifeq ($(TIME_SYNC),1) -COMMONCFLAGS += -DOPENTHREAD_CONFIG_TIME_SYNC_ENABLE=1 -DOPENTHREAD_CONFIG_HEADER_IE_SUPPORT=1 +COMMONCFLAGS += -DOPENTHREAD_CONFIG_TIME_SYNC_ENABLE=1 -DOPENTHREAD_MAC_CONFIG_HEADER_IE_SUPPORT=1 endif ifeq ($(UDP_FORWARD),1) diff --git a/examples/platforms/nrf52811/openthread-core-nrf52811-config.h b/examples/platforms/nrf52811/openthread-core-nrf52811-config.h index 0c86237a8..0aedea6a0 100644 --- a/examples/platforms/nrf52811/openthread-core-nrf52811-config.h +++ b/examples/platforms/nrf52811/openthread-core-nrf52811-config.h @@ -211,7 +211,7 @@ #endif /** - * @def OPENTHREAD_CONFIG_HEADER_IE_SUPPORT + * @def OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT * * Define as 1 to support IEEE 802.15.4-2015 Header IE (Information Element) generation and parsing, it must be set * to support following features: @@ -221,7 +221,7 @@ * */ #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE -#define OPENTHREAD_CONFIG_HEADER_IE_SUPPORT 1 +#define OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT 1 #endif /** @@ -233,7 +233,7 @@ * context used by Header IE related features. * */ -#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT #define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 1 #else #define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 0 diff --git a/examples/platforms/nrf52811/platform-config.h b/examples/platforms/nrf52811/platform-config.h index bc02b34d0..19fce45fd 100644 --- a/examples/platforms/nrf52811/platform-config.h +++ b/examples/platforms/nrf52811/platform-config.h @@ -444,7 +444,7 @@ * */ #ifndef NRF_802154_TX_STARTED_NOTIFY_ENABLED -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT #define NRF_802154_TX_STARTED_NOTIFY_ENABLED 1 #endif #endif diff --git a/examples/platforms/nrf52811/radio.c b/examples/platforms/nrf52811/radio.c index 2bab46c2c..a7c7bae98 100644 --- a/examples/platforms/nrf52811/radio.c +++ b/examples/platforms/nrf52811/radio.c @@ -84,7 +84,7 @@ static otRadioFrame sReceivedFrames[NRF_802154_RX_BUFFERS]; static otRadioFrame sTransmitFrame; static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE + 1]; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT static otRadioIeInfo sTransmitIeInfo; #endif static otInstance *sInstance = NULL; @@ -116,7 +116,7 @@ static void dataInit(void) sDisabled = true; sTransmitFrame.mPsdu = sTransmitPsdu + 1; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo; #endif @@ -696,7 +696,7 @@ void nrf5RadioProcess(otInstance *aInstance) } } -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT void nrf_802154_received_timestamp_raw(uint8_t *p_data, int8_t power, uint8_t lqi, uint32_t time) #else void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi) @@ -847,14 +847,14 @@ int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance) return NRF52811_RECEIVE_SENSITIVITY; } -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT void nrf_802154_tx_started(const uint8_t *aFrame) { bool notifyFrameUpdated = false; assert(aFrame == sTransmitPsdu); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE - if (sTransmitFrame.mIeInfo->mTimeIeOffset != 0) + if (sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset != 0) { uint8_t *timeIe = sTransmitFrame.mPsdu + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset; uint64_t time = otPlatTimeGet() + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset; diff --git a/examples/platforms/nrf52840/openthread-core-nrf52840-config.h b/examples/platforms/nrf52840/openthread-core-nrf52840-config.h index 2e84405d8..b4aea015e 100644 --- a/examples/platforms/nrf52840/openthread-core-nrf52840-config.h +++ b/examples/platforms/nrf52840/openthread-core-nrf52840-config.h @@ -243,7 +243,7 @@ #endif /** - * @def OPENTHREAD_CONFIG_HEADER_IE_SUPPORT + * @def OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT * * Define as 1 to support IEEE 802.15.4-2015 Header IE (Information Element) generation and parsing, it must be set * to support following features: @@ -253,7 +253,7 @@ * */ #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE -#define OPENTHREAD_CONFIG_HEADER_IE_SUPPORT 1 +#define OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT 1 #endif /* diff --git a/examples/platforms/nrf52840/platform-config.h b/examples/platforms/nrf52840/platform-config.h index 1fd517300..466a409e0 100644 --- a/examples/platforms/nrf52840/platform-config.h +++ b/examples/platforms/nrf52840/platform-config.h @@ -461,7 +461,7 @@ * */ #ifndef NRF_802154_TX_STARTED_NOTIFY_ENABLED -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT #define NRF_802154_TX_STARTED_NOTIFY_ENABLED 1 #endif #endif diff --git a/examples/platforms/nrf52840/radio.c b/examples/platforms/nrf52840/radio.c index 42e5fe06f..159164c17 100644 --- a/examples/platforms/nrf52840/radio.c +++ b/examples/platforms/nrf52840/radio.c @@ -84,7 +84,7 @@ static otRadioFrame sReceivedFrames[NRF_802154_RX_BUFFERS]; static otRadioFrame sTransmitFrame; static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE + 1]; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT static otRadioIeInfo sTransmitIeInfo; #endif static otInstance *sInstance = NULL; @@ -116,7 +116,7 @@ static void dataInit(void) sDisabled = true; sTransmitFrame.mPsdu = sTransmitPsdu + 1; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo; #endif @@ -696,7 +696,7 @@ void nrf5RadioProcess(otInstance *aInstance) } } -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT void nrf_802154_received_timestamp_raw(uint8_t *p_data, int8_t power, uint8_t lqi, uint32_t time) #else void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi) @@ -848,14 +848,14 @@ int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance) return NRF52840_RECEIVE_SENSITIVITY; } -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT void nrf_802154_tx_started(const uint8_t *aFrame) { bool notifyFrameUpdated = false; assert(aFrame == sTransmitPsdu); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE - if (sTransmitFrame.mIeInfo->mTimeIeOffset != 0) + if (sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset != 0) { uint8_t *timeIe = sTransmitFrame.mPsdu + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset; uint64_t time = otPlatTimeGet() + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset; diff --git a/examples/platforms/posix/radio.c b/examples/platforms/posix/radio.c index ab652b251..4d0e9d4a9 100644 --- a/examples/platforms/posix/radio.c +++ b/examples/platforms/posix/radio.c @@ -128,7 +128,7 @@ static otRadioFrame sReceiveFrame; static otRadioFrame sTransmitFrame; static otRadioFrame sAckFrame; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT static otRadioIeInfo sTransmitIeInfo; #endif @@ -495,7 +495,7 @@ void platformRadioInit(void) sTransmitFrame.mPsdu = sTransmitMessage.mPsdu; sAckFrame.mPsdu = sAckMessage.mPsdu; -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo; #else sTransmitFrame.mInfo.mTxInfo.mIeInfo = NULL; @@ -698,7 +698,7 @@ static void radioComputeCrc(struct RadioMessage *aMessage, uint16_t aLength) void radioSendMessage(otInstance *aInstance) { -#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT bool notifyFrameUpdated = false; #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE @@ -724,7 +724,7 @@ void radioSendMessage(otInstance *aInstance) { otPlatRadioFrameUpdated(aInstance, &sTransmitFrame); } -#endif // OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT sTransmitMessage.mChannel = sTransmitFrame.mChannel; diff --git a/include/openthread/platform/radio.h b/include/openthread/platform/radio.h index 618781892..62bbc0f34 100644 --- a/include/openthread/platform/radio.h +++ b/include/openthread/platform/radio.h @@ -562,7 +562,7 @@ extern void otPlatDiagRadioTransmitDone(otInstance *aInstance, otRadioFrame *aFr * The radio driver calls this method to notify OpenThread to process transmit security for the frame, * this happens when the frame includes Header IE(s) that were updated before transmission. * - * This function is used when feature `OPENTHREAD_CONFIG_HEADER_IE_SUPPORT` is enabled. + * This function is used when feature `OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT` is enabled. * * @note This function can be called from interrupt context and it would only read/write data passed in * via @p aFrame, but would not read/write any state within OpenThread. diff --git a/src/core/api/link_api.cpp b/src/core/api/link_api.cpp index 6ffd28748..bf8df9b68 100644 --- a/src/core/api/link_api.cpp +++ b/src/core/api/link_api.cpp @@ -42,7 +42,7 @@ using namespace ot; -static void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame); +static void HandleActiveScanResult(Instance &aInstance, Mac::RxFrame *aFrame); static void HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult); uint8_t otLinkGetChannel(otInstance *aInstance) @@ -372,7 +372,7 @@ bool otLinkIsActiveScanInProgress(otInstance *aInstance) return instance.Get().IsActiveScanInProgress(); } -void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame) +void HandleActiveScanResult(Instance &aInstance, Mac::RxFrame *aFrame) { if (aFrame == NULL) { diff --git a/src/core/mac/data_poll_handler.cpp b/src/core/mac/data_poll_handler.cpp index 3289b2a51..9a99056c5 100644 --- a/src/core/mac/data_poll_handler.cpp +++ b/src/core/mac/data_poll_handler.cpp @@ -47,12 +47,14 @@ DataPollHandler::Callbacks::Callbacks(Instance &aInstance) { } -inline otError DataPollHandler::Callbacks::PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild) +inline otError DataPollHandler::Callbacks::PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild) { return Get().PrepareFrameForChild(aFrame, aChild); } -inline void DataPollHandler::Callbacks::HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild) +inline void DataPollHandler::Callbacks::HandleSentFrameToChild(const Mac::TxFrame &aFrame, + otError aError, + Child & aChild) { Get().HandleSentFrameToChild(aFrame, aError, aChild); } @@ -118,7 +120,7 @@ void DataPollHandler::RequestFrameChange(FrameChange aChange, Child &aChild) } } -void DataPollHandler::HandleDataPoll(Mac::Frame &aFrame) +void DataPollHandler::HandleDataPoll(Mac::RxFrame &aFrame) { Mac::Address macSource; Child * child; @@ -164,7 +166,7 @@ exit: return; } -otError DataPollHandler::HandleFrameRequest(Mac::Frame &aFrame) +otError DataPollHandler::HandleFrameRequest(Mac::TxFrame &aFrame) { otError error = OT_ERROR_NONE; @@ -196,7 +198,7 @@ exit: return error; } -void DataPollHandler::HandleSentFrame(const Mac::Frame &aFrame, otError aError) +void DataPollHandler::HandleSentFrame(const Mac::TxFrame &aFrame, otError aError) { Child *child = mIndirectTxChild; @@ -209,7 +211,7 @@ exit: ProcessPendingPolls(); } -void DataPollHandler::HandleSentFrame(const Mac::Frame &aFrame, otError aError, Child &aChild) +void DataPollHandler::HandleSentFrame(const Mac::TxFrame &aFrame, otError aError, Child &aChild) { if (aChild.IsFramePurgePending()) { diff --git a/src/core/mac/data_poll_handler.hpp b/src/core/mac/data_poll_handler.hpp index 594f37d08..57c82d07e 100644 --- a/src/core/mac/data_poll_handler.hpp +++ b/src/core/mac/data_poll_handler.hpp @@ -151,7 +151,7 @@ public: * @retval OT_ERROR_ABORT Indirect transmission to child should be aborted (no frame for the child). * */ - otError PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild); + otError PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild); /** * This callback method notifies the end of indirect frame transmission to a child. @@ -164,7 +164,7 @@ public: * @param[in] aChild The child to which the frame was transmitted. * */ - void HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild); + void HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild); /** * This callback method notifies that a requested frame change from `RequestFrameChange()` is processed. @@ -242,11 +242,11 @@ public: private: // Callbacks from MAC - void HandleDataPoll(Mac::Frame &aFrame); - otError HandleFrameRequest(Mac::Frame &aFrame); - void HandleSentFrame(const Mac::Frame &aFrame, otError aError); + void HandleDataPoll(Mac::RxFrame &aFrame); + otError HandleFrameRequest(Mac::TxFrame &aFrame); + void HandleSentFrame(const Mac::TxFrame &aFrame, otError aError); - void HandleSentFrame(const Mac::Frame &aFrame, otError aError, Child &aChild); + void HandleSentFrame(const Mac::TxFrame &aFrame, otError aError, Child &aChild); void ProcessPendingPolls(void); Child * mIndirectTxChild; diff --git a/src/core/mac/data_poll_sender.cpp b/src/core/mac/data_poll_sender.cpp index 9524af9e3..05d884073 100644 --- a/src/core/mac/data_poll_sender.cpp +++ b/src/core/mac/data_poll_sender.cpp @@ -196,7 +196,7 @@ uint32_t DataPollSender::GetKeepAlivePollPeriod(void) const return period; } -void DataPollSender::HandlePollSent(Mac::Frame &aFrame, otError aError) +void DataPollSender::HandlePollSent(Mac::TxFrame &aFrame, otError aError) { Mac::Address macDest; bool shouldRecalculatePollPeriod = false; @@ -301,7 +301,7 @@ exit: return; } -void DataPollSender::CheckFramePending(Mac::Frame &aFrame) +void DataPollSender::CheckFramePending(Mac::RxFrame &aFrame) { VerifyOrExit(mEnabled); diff --git a/src/core/mac/data_poll_sender.hpp b/src/core/mac/data_poll_sender.hpp index 21476e8f0..1f3a3697f 100644 --- a/src/core/mac/data_poll_sender.hpp +++ b/src/core/mac/data_poll_sender.hpp @@ -153,7 +153,7 @@ public: * @param[in] aError Error status of a data poll message transmission. * */ - void HandlePollSent(Mac::Frame &aFrame, otError aError); + void HandlePollSent(Mac::TxFrame &aFrame, otError aError); /** * This method informs the data poll sender that a data poll timeout happened, i.e., when the ack in response to @@ -170,7 +170,7 @@ public: * pending frame. * */ - void CheckFramePending(Mac::Frame &aFrame); + void CheckFramePending(Mac::RxFrame &aFrame); /** * This method asks the data poll sender to recalculate the poll period. diff --git a/src/core/mac/link_raw.cpp b/src/core/mac/link_raw.cpp index 5712a4ed2..fdf01c7d3 100644 --- a/src/core/mac/link_raw.cpp +++ b/src/core/mac/link_raw.cpp @@ -149,7 +149,7 @@ exit: return error; } -void LinkRaw::InvokeReceiveDone(Frame *aFrame, otError aError) +void LinkRaw::InvokeReceiveDone(RxFrame *aFrame, otError aError) { otLogDebgMac("LinkRaw::ReceiveDone(%d bytes), error:%s", (aFrame != NULL) ? aFrame->mLength : 0, otThreadErrorToString(aError)); @@ -173,7 +173,7 @@ exit: return error; } -void LinkRaw::InvokeTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError) +void LinkRaw::InvokeTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError) { otLogDebgMac("LinkRaw::TransmitDone(%d bytes), error:%s", aFrame.mLength, otThreadErrorToString(aError)); @@ -210,11 +210,11 @@ void LinkRaw::InvokeEnergyScanDone(int8_t aEnergyScanMaxRssi) #if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1) -void LinkRaw::RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx) +void LinkRaw::RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx) { OT_UNUSED_VARIABLE(aAckFrame); OT_UNUSED_VARIABLE(aWillRetx); diff --git a/src/core/mac/link_raw.hpp b/src/core/mac/link_raw.hpp index b04fc51aa..6e2181776 100644 --- a/src/core/mac/link_raw.hpp +++ b/src/core/mac/link_raw.hpp @@ -112,7 +112,7 @@ public: * OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space. * */ - void InvokeReceiveDone(Frame *aFrame, otError aError); + void InvokeReceiveDone(RxFrame *aFrame, otError aError); /** * This method gets the radio transmit frame. @@ -120,7 +120,7 @@ public: * @returns The transmit frame. * */ - Frame &GetTransmitFrame(void) { return mSubMac.GetTransmitFrame(); } + TxFrame &GetTransmitFrame(void) { return mSubMac.GetTransmitFrame(); } /** * This method starts a (single) Transmit on the link-layer. @@ -146,7 +146,7 @@ public: * OT_ERROR_ABORT when transmission was aborted for other reasons. * */ - void InvokeTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError); + void InvokeTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError); /** * This method starts a (single) Energy Scan on the link-layer. @@ -261,13 +261,13 @@ public: * */ #if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1) - void RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx); + void RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx); #else - void RecordFrameTransmitStatus(const Frame &, const Frame *, otError, uint8_t, bool) {} + void RecordFrameTransmitStatus(const TxFrame &, const RxFrame *, otError, uint8_t, bool) {} #endif private: diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index 5a6db8f4c..16c9cf79f 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -205,7 +205,7 @@ bool Mac::IsInTransmitState(void) const return retval; } -otError Mac::ConvertBeaconToActiveScanResult(Frame *aBeaconFrame, otActiveScanResult &aResult) +otError Mac::ConvertBeaconToActiveScanResult(RxFrame *aBeaconFrame, otActiveScanResult &aResult) { otError error = OT_ERROR_NONE; Address address; @@ -523,7 +523,7 @@ otError Mac::RequestOutOfBandFrameTransmission(otRadioFrame *aOobFrame) VerifyOrExit(!mPendingTransmitOobFrame && (mOperation != kOperationTransmitOutOfBandFrame), error = OT_ERROR_ALREADY); - mOobFrame = static_cast(aOobFrame); + mOobFrame = static_cast(aOobFrame); StartOperation(kOperationTransmitOutOfBandFrame); @@ -789,7 +789,7 @@ void Mac::GenerateNonce(const ExtAddress &aAddress, uint32_t aFrameCounter, uint aNonce[0] = aSecurityLevel; } -otError Mac::PrepareDataRequest(Frame &aFrame) +otError Mac::PrepareDataRequest(TxFrame &aFrame) { otError error = OT_ERROR_NONE; Address src, dst; @@ -822,7 +822,7 @@ exit: return error; } -void Mac::PrepareBeaconRequest(Frame &aFrame) +void Mac::PrepareBeaconRequest(TxFrame &aFrame) { uint16_t fcf = Frame::kFcfFrameMacCmd | Frame::kFcfDstAddrShort | Frame::kFcfSrcAddrNone; @@ -834,7 +834,7 @@ void Mac::PrepareBeaconRequest(Frame &aFrame) otLogInfoMac("Sending Beacon Request"); } -void Mac::PrepareBeacon(Frame &aFrame) +void Mac::PrepareBeacon(TxFrame &aFrame) { uint8_t numUnsecurePorts; uint8_t beaconLength; @@ -909,7 +909,7 @@ exit: return shouldSend; } -void Mac::ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress) +void Mac::ProcessTransmitAesCcm(TxFrame &aFrame, const ExtAddress *aExtAddress) { uint32_t frameCounter = 0; uint8_t securityLevel; @@ -934,7 +934,7 @@ void Mac::ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress) aesCcm.Finalize(aFrame.GetFooter(), &tagLength); } -void Mac::ProcessTransmitSecurity(Frame &aFrame, bool aProcessAesCcm) +void Mac::ProcessTransmitSecurity(TxFrame &aFrame, bool aProcessAesCcm) { KeyManager & keyManager = Get(); uint8_t keyIdMode; @@ -1005,10 +1005,10 @@ exit: void Mac::BeginTransmit(void) { - otError error = OT_ERROR_NONE; - bool applyTransmitSecurity = true; - bool processTransmitAesCcm = true; - Frame & sendFrame = mSubMac.GetTransmitFrame(); + otError error = OT_ERROR_NONE; + bool applyTransmitSecurity = true; + bool processTransmitAesCcm = true; + TxFrame &sendFrame = mSubMac.GetTransmitFrame(); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE uint8_t timeIeOffset = 0; #endif @@ -1135,11 +1135,11 @@ void Mac::RecordCcaStatus(bool aCcaSuccess, uint8_t aChannel) } } -void Mac::RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx) +void Mac::RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx) { bool ackRequested = aFrame.GetAckRequest(); Address dstAddr; @@ -1245,7 +1245,7 @@ exit: return; } -void Mac::HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError) +void Mac::HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError) { Address dstAddr; @@ -1373,7 +1373,7 @@ void Mac::HandleTimer(void) } } -otError Mac::ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor) +otError Mac::ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor) { KeyManager & keyManager = Get(); otError error = OT_ERROR_NONE; @@ -1514,7 +1514,7 @@ exit: return error; } -void Mac::HandleReceivedFrame(Frame *aFrame, otError aError) +void Mac::HandleReceivedFrame(RxFrame *aFrame, otError aError) { Address srcaddr; Address dstaddr; @@ -1807,7 +1807,7 @@ exit: } } -bool Mac::HandleMacCommand(Frame &aFrame) +bool Mac::HandleMacCommand(RxFrame &aFrame) { bool didHandle = false; uint8_t commandId; @@ -1919,7 +1919,7 @@ const char *Mac::OperationToString(Operation aOperation) return retval; } -void Mac::LogFrameRxFailure(const Frame *aFrame, otError aError) const +void Mac::LogFrameRxFailure(const RxFrame *aFrame, otError aError) const { otLogLevel logLevel; @@ -1947,7 +1947,7 @@ void Mac::LogFrameRxFailure(const Frame *aFrame, otError aError) const } } -void Mac::LogFrameTxFailure(const Frame &aFrame, otError aError, uint8_t aRetryCount) const +void Mac::LogFrameTxFailure(const TxFrame &aFrame, otError aError, uint8_t aRetryCount) const { otLogInfoMac("Frame tx failed, error:%s, retries:%d/%d, %s", otThreadErrorToString(aError), aRetryCount, aFrame.GetMaxFrameRetries(), aFrame.ToInfoString().AsCString()); @@ -1960,7 +1960,7 @@ void Mac::LogBeacon(const char *aActionText, const BeaconPayload &aBeaconPayload #else // #if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1) -void Mac::LogFrameRxFailure(const Frame *, otError) const +void Mac::LogFrameRxFailure(const RxFrame *, otError) const { } @@ -1968,7 +1968,7 @@ void Mac::LogBeacon(const char *, const BeaconPayload &) const { } -void Mac::LogFrameTxFailure(const Frame &, otError, uint8_t) const +void Mac::LogFrameTxFailure(const TxFrame &, otError, uint8_t) const { } @@ -1977,7 +1977,7 @@ void Mac::LogFrameTxFailure(const Frame &, otError, uint8_t) const // LCOV_EXCL_STOP #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE -uint8_t Mac::GetTimeIeOffset(Frame &aFrame) +uint8_t Mac::GetTimeIeOffset(const Frame &aFrame) { uint8_t offset = 0; const uint8_t *base = aFrame.GetPsdu(); diff --git a/src/core/mac/mac.hpp b/src/core/mac/mac.hpp index 9ab19787b..57ec6dd9c 100644 --- a/src/core/mac/mac.hpp +++ b/src/core/mac/mac.hpp @@ -114,7 +114,7 @@ public: * @param[in] aBeaconFrame A pointer to the Beacon frame or NULL to indicate end of Active Scan operation. * */ - typedef void (*ActiveScanHandler)(Instance &aInstance, Frame *aBeaconFrame); + typedef void (*ActiveScanHandler)(Instance &aInstance, RxFrame *aBeaconFrame); /** * This method starts an IEEE 802.15.4 Active Scan. @@ -141,7 +141,7 @@ public: * @retval OT_ERROR_PARSE Failed parsing the beacon frame. * */ - otError ConvertBeaconToActiveScanResult(Frame *aBeaconFrame, otActiveScanResult &aResult); + otError ConvertBeaconToActiveScanResult(RxFrame *aBeaconFrame, otActiveScanResult &aResult); /** * This function pointer is called during an Energy Scan when the result for a channel is ready or the scan @@ -438,7 +438,7 @@ public: * OT_ERROR_ABORT when reception was aborted and a frame was not received. * */ - void HandleReceivedFrame(Frame *aFrame, otError aError); + void HandleReceivedFrame(RxFrame *aFrame, otError aError); /** * This method records CCA status (success/failure) for a frame transmission attempt. @@ -466,11 +466,11 @@ public: * when there was an error in transmission (i.e., `aError` is not NONE). * */ - void RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx); + void RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx); /** * This method is called to handle transmit events. @@ -483,7 +483,7 @@ public: * OT_ERROR_ABORT when transmission was aborted for other reasons. * */ - void HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError); + void HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError); /** * This method returns if an active scan is in progress. @@ -607,7 +607,7 @@ public: * for AES CCM computation. * */ - static void ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress); + static void ProcessTransmitAesCcm(TxFrame &aFrame, const ExtAddress *aExtAddress); private: enum @@ -643,24 +643,24 @@ private: * @param[in] aProcessAesCcm TRUE to perform AES CCM immediately, FALSE otherwise. * */ - void ProcessTransmitSecurity(Frame &aFrame, bool aProcessAesCcm); + void ProcessTransmitSecurity(TxFrame &aFrame, bool aProcessAesCcm); static void GenerateNonce(const ExtAddress &aAddress, uint32_t aFrameCounter, uint8_t aSecurityLevel, uint8_t * aNonce); - otError ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor); + otError ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor); void UpdateIdleMode(void); void StartOperation(Operation aOperation); void FinishOperation(void); void PerformNextOperation(void); - otError PrepareDataRequest(Frame &aFrame); - void PrepareBeaconRequest(Frame &aFrame); - void PrepareBeacon(Frame &aFrame); + otError PrepareDataRequest(TxFrame &aFrame); + void PrepareBeaconRequest(TxFrame &aFrame); + void PrepareBeacon(TxFrame &aFrame); bool ShouldSendBeacon(void) const; void BeginTransmit(void); - bool HandleMacCommand(Frame &aFrame); + bool HandleMacCommand(RxFrame &aFrame); Frame * GetOperationFrame(void); static void HandleTimer(Timer &aTimer); @@ -673,13 +673,12 @@ private: void PerformEnergyScan(void); void ReportEnergyScanResult(int8_t aRssi); - void LogFrameRxFailure(const Frame *aFrame, otError aError) const; - void LogFrameTxFailure(const Frame &aFrame, otError aError, uint8_t aRetryCount) const; + void LogFrameRxFailure(const RxFrame *aFrame, otError aError) const; + void LogFrameTxFailure(const TxFrame &aFrame, otError aError, uint8_t aRetryCount) const; void LogBeacon(const char *aActionText, const BeaconPayload &aBeaconPayload) const; #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE - void ProcessTimeIe(Frame &aFrame); - uint8_t GetTimeIeOffset(Frame &aFrame); + uint8_t GetTimeIeOffset(const Frame &aFrame); #endif static const char *OperationToString(Operation aOperation); @@ -727,7 +726,7 @@ private: SubMac mSubMac; Tasklet mOperationTask; TimerMilli mTimer; - Frame * mOobFrame; + TxFrame * mOobFrame; otMacCounters mCounters; uint32_t mKeyIdMode2FrameCounter; SuccessRateTracker mCcaSuccessRateTracker; diff --git a/src/core/mac/mac_frame.cpp b/src/core/mac/mac_frame.cpp index 317eaad6b..a6606f3c9 100644 --- a/src/core/mac/mac_frame.cpp +++ b/src/core/mac/mac_frame.cpp @@ -1033,7 +1033,7 @@ exit: } #endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE -void Frame::CopyFrom(const Frame &aFromFrame) +void TxFrame::CopyFrom(const TxFrame &aFromFrame) { uint8_t * psduBuffer = mPsdu; otRadioIeInfo *ieInfoBuffer = mInfo.mTxInfo.mIeInfo; diff --git a/src/core/mac/mac_frame.hpp b/src/core/mac/mac_frame.hpp index bae8ad8a8..fe1e9505c 100644 --- a/src/core/mac/mac_frame.hpp +++ b/src/core/mac/mac_frame.hpp @@ -1042,141 +1042,6 @@ public: */ void SetChannel(uint8_t aChannel) { mChannel = aChannel; } - /** - * This method returns the RSSI in dBm used for reception. - * - * @returns The RSSI in dBm used for reception. - * - */ - int8_t GetRssi(void) const { return mInfo.mRxInfo.mRssi; } - - /** - * This method sets the RSSI in dBm used for reception. - * - * @param[in] aRssi The RSSI in dBm used for reception. - * - */ - void SetRssi(int8_t aRssi) { mInfo.mRxInfo.mRssi = aRssi; } - - /** - * This method returns the receive Link Quality Indicator. - * - * @returns The receive Link Quality Indicator. - * - */ - uint8_t GetLqi(void) const { return mInfo.mRxInfo.mLqi; } - - /** - * This method sets the receive Link Quality Indicator. - * - * @param[in] aLqi The receive Link Quality Indicator. - * - */ - void SetLqi(uint8_t aLqi) { mInfo.mRxInfo.mLqi = aLqi; } - - /** - * This method returns the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel - * access failure. - * - * Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006. - * - * @returns The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel access - * failure. - * - */ - uint8_t GetMaxCsmaBackoffs(void) const { return mInfo.mTxInfo.mMaxCsmaBackoffs; } - - /** - * This method sets the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel - * access failure. - * - * Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006. - * - * @param[in] aMaxCsmaBackoffs The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring - * a channel access failure. - * - */ - void SetMaxCsmaBackoffs(uint8_t aMaxCsmaBackoffs) { mInfo.mTxInfo.mMaxCsmaBackoffs = aMaxCsmaBackoffs; } - - /** - * This method returns the maximum number of retries allowed after a transmission failure. - * - * Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006. - * - * @returns The maximum number of retries allowed after a transmission failure. - * - */ - uint8_t GetMaxFrameRetries(void) const { return mInfo.mTxInfo.mMaxFrameRetries; } - - /** - * This method sets the maximum number of retries allowed after a transmission failure. - * - * Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006. - * - * @param[in] aMaxFrameRetries The maximum number of retries allowed after a transmission failure. - * - */ - void SetMaxFrameRetries(uint8_t aMaxFrameRetries) { mInfo.mTxInfo.mMaxFrameRetries = aMaxFrameRetries; } - - /** - * This method indicates whether or not the frame is a retransmission. - * - * @retval TRUE Frame is a retransmission - * @retval FALSE This is a new frame and not a retransmission of an earlier frame. - * - */ - bool IsARetransmission(void) const { return mInfo.mTxInfo.mIsARetx; } - - /** - * This method indicates whether or not the received frame is acknowledged with frame pending set. - * - * @retval TRUE This frame is acknowledged with frame pending set. - * @retval FALSE This frame is acknowledged with frame pending not set. - * - */ - bool IsAckedWithFramePending(void) const { return mInfo.mRxInfo.mAckedWithFramePending; } - - /** - * This method sets the retransmission flag attribute. - * - * @param[in] aIsARetx TRUE if frame is a retransmission of an earlier frame, FALSE otherwise. - * - */ - void SetIsARetransmission(bool aIsARetx) { mInfo.mTxInfo.mIsARetx = aIsARetx; } - - /** - * This method indicates whether or not CSMA-CA is enabled. - * - * @retval TRUE CSMA-CA is enabled. - * @retval FALSE CSMA-CA is not enabled is not enabled. - * - */ - bool IsCsmaCaEnabled(void) const { return mInfo.mTxInfo.mCsmaCaEnabled; } - - /** - * This method sets the CSMA-CA enabled attribute. - * - * @param[in] aCsmaCaEnabled TRUE if CSMA-CA must be enabled for this packet, FALSE otherwise. - * - */ - void SetCsmaCaEnabled(bool aCsmaCaEnabled) { mInfo.mTxInfo.mCsmaCaEnabled = aCsmaCaEnabled; } - - /** - * This method returns the key used for frame encryption and authentication (AES CCM). - * - * @returns The pointer to the key. - * - */ - const uint8_t *GetAesKey(void) const { return mInfo.mTxInfo.mAesKey; } - - /** - * This method sets the key used for frame encryption and authentication (AES CCM). - * - * @param[in] aAesKey The pointer to the key. - * - */ - void SetAesKey(const uint8_t *aAesKey) { mInfo.mTxInfo.mAesKey = aAesKey; } - /** * This method returns the IEEE 802.15.4 PSDU length. * @@ -1257,33 +1122,7 @@ public: */ const uint8_t *GetFooter(void) const; - /** - * This method returns the timestamp when the frame was received. - * - * @returns The timestamp when the frame was received, in microseconds. - * - */ - const uint64_t &GetTimestamp(void) const { return mInfo.mRxInfo.mTimestamp; } - #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE - /** - * This method sets the Time IE offset. - * - * @param[in] aOffset The Time IE offset, 0 means no Time IE. - * - */ - void SetTimeIeOffset(uint8_t aOffset) { mInfo.mTxInfo.mIeInfo->mTimeIeOffset = aOffset; } - - /** - * This method sets the offset to network time. - * - * @param[in] aNetworkTimeOffset The offset to network time. - * - */ - void SetNetworkTimeOffset(int64_t aNetworkTimeOffset) - { - mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset = aNetworkTimeOffset; - } /** * This method returns a pointer to the vendor specific Time IE. @@ -1300,33 +1139,6 @@ public: * */ const TimeIe *GetTimeIe(void) const; - - /** - * This method gets the offset to network time. - * - * @returns The offset to network time. - * - */ - int64_t ComputeNetworkTimeOffset(void) const - { - return static_cast(GetTimeIe()->GetTime() - GetTimestamp()); - } - - /** - * This method sets the time sync sequence. - * - * @param[in] aTimeSyncSeq The time sync sequence. - * - */ - void SetTimeSyncSeq(uint8_t aTimeSyncSeq) { mInfo.mTxInfo.mIeInfo->mTimeSyncSeq = aTimeSyncSeq; } - - /** - * This method gets the time sync sequence. - * - * @returns The time sync sequence. - * - */ - uint8_t ReadTimeSyncSeq(void) const { return GetTimeIe()->GetSequence(); } #endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE #if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT @@ -1366,17 +1178,6 @@ public: const uint8_t *GetHeaderIe(uint8_t aIeId) const; #endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT - /** - * This method copies the PSDU and all attributes from another frame. - * - * @note This method performs a deep copy meaning the content of PSDU buffer from the given frame is copied into - * the PSDU buffer of the current frame. - - * @param[in] aFromFrame The frame to copy from. - * - */ - void CopyFrom(const Frame &aFromFrame); - /** * This method returns the maximum transmission unit size (MTU). * @@ -1423,7 +1224,226 @@ private: static uint8_t GetKeySourceLength(uint8_t aKeyIdMode); }; -OT_TOOL_PACKED_BEGIN +/** + * This class supports received IEEE 802.15.4 MAC frame processing. + * + */ +class RxFrame : public Frame +{ +public: + /** + * This method returns the RSSI in dBm used for reception. + * + * @returns The RSSI in dBm used for reception. + * + */ + int8_t GetRssi(void) const { return mInfo.mRxInfo.mRssi; } + + /** + * This method sets the RSSI in dBm used for reception. + * + * @param[in] aRssi The RSSI in dBm used for reception. + * + */ + void SetRssi(int8_t aRssi) { mInfo.mRxInfo.mRssi = aRssi; } + + /** + * This method returns the receive Link Quality Indicator. + * + * @returns The receive Link Quality Indicator. + * + */ + uint8_t GetLqi(void) const { return mInfo.mRxInfo.mLqi; } + + /** + * This method sets the receive Link Quality Indicator. + * + * @param[in] aLqi The receive Link Quality Indicator. + * + */ + void SetLqi(uint8_t aLqi) { mInfo.mRxInfo.mLqi = aLqi; } + + /** + * This method indicates whether or not the received frame is acknowledged with frame pending set. + * + * @retval TRUE This frame is acknowledged with frame pending set. + * @retval FALSE This frame is acknowledged with frame pending not set. + * + */ + bool IsAckedWithFramePending(void) const { return mInfo.mRxInfo.mAckedWithFramePending; } + + /** + * This method returns the timestamp when the frame was received. + * + * @returns The timestamp when the frame was received, in microseconds. + * + */ + const uint64_t &GetTimestamp(void) const { return mInfo.mRxInfo.mTimestamp; } + +#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE + /** + * This method gets the offset to network time. + * + * @returns The offset to network time. + * + */ + int64_t ComputeNetworkTimeOffset(void) const + { + return static_cast(GetTimeIe()->GetTime() - GetTimestamp()); + } + + /** + * This method gets the time sync sequence. + * + * @returns The time sync sequence. + * + */ + uint8_t ReadTimeSyncSeq(void) const { return GetTimeIe()->GetSequence(); } +#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE +}; + +/** + * This class supports IEEE 802.15.4 MAC frame generation for transmission. + * + */ +class TxFrame : public Frame +{ +public: + /** + * This method returns the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel + * access failure. + * + * Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006. + * + * @returns The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel access + * failure. + * + */ + uint8_t GetMaxCsmaBackoffs(void) const { return mInfo.mTxInfo.mMaxCsmaBackoffs; } + + /** + * This method sets the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel + * access failure. + * + * Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006. + * + * @param[in] aMaxCsmaBackoffs The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring + * a channel access failure. + * + */ + void SetMaxCsmaBackoffs(uint8_t aMaxCsmaBackoffs) { mInfo.mTxInfo.mMaxCsmaBackoffs = aMaxCsmaBackoffs; } + + /** + * This method returns the maximum number of retries allowed after a transmission failure. + * + * Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006. + * + * @returns The maximum number of retries allowed after a transmission failure. + * + */ + uint8_t GetMaxFrameRetries(void) const { return mInfo.mTxInfo.mMaxFrameRetries; } + + /** + * This method sets the maximum number of retries allowed after a transmission failure. + * + * Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006. + * + * @param[in] aMaxFrameRetries The maximum number of retries allowed after a transmission failure. + * + */ + void SetMaxFrameRetries(uint8_t aMaxFrameRetries) { mInfo.mTxInfo.mMaxFrameRetries = aMaxFrameRetries; } + + /** + * This method indicates whether or not the frame is a retransmission. + * + * @retval TRUE Frame is a retransmission + * @retval FALSE This is a new frame and not a retransmission of an earlier frame. + * + */ + bool IsARetransmission(void) const { return mInfo.mTxInfo.mIsARetx; } + + /** + * This method sets the retransmission flag attribute. + * + * @param[in] aIsARetx TRUE if frame is a retransmission of an earlier frame, FALSE otherwise. + * + */ + void SetIsARetransmission(bool aIsARetx) { mInfo.mTxInfo.mIsARetx = aIsARetx; } + + /** + * This method indicates whether or not CSMA-CA is enabled. + * + * @retval TRUE CSMA-CA is enabled. + * @retval FALSE CSMA-CA is not enabled is not enabled. + * + */ + bool IsCsmaCaEnabled(void) const { return mInfo.mTxInfo.mCsmaCaEnabled; } + + /** + * This method sets the CSMA-CA enabled attribute. + * + * @param[in] aCsmaCaEnabled TRUE if CSMA-CA must be enabled for this packet, FALSE otherwise. + * + */ + void SetCsmaCaEnabled(bool aCsmaCaEnabled) { mInfo.mTxInfo.mCsmaCaEnabled = aCsmaCaEnabled; } + + /** + * This method returns the key used for frame encryption and authentication (AES CCM). + * + * @returns The pointer to the key. + * + */ + const uint8_t *GetAesKey(void) const { return mInfo.mTxInfo.mAesKey; } + + /** + * This method sets the key used for frame encryption and authentication (AES CCM). + * + * @param[in] aAesKey The pointer to the key. + * + */ + void SetAesKey(const uint8_t *aAesKey) { mInfo.mTxInfo.mAesKey = aAesKey; } + + /** + * This method copies the PSDU and all attributes from another frame. + * + * @note This method performs a deep copy meaning the content of PSDU buffer from the given frame is copied into + * the PSDU buffer of the current frame. + + * @param[in] aFromFrame The frame to copy from. + * + */ + void CopyFrom(const TxFrame &aFromFrame); + +#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE + /** + * This method sets the Time IE offset. + * + * @param[in] aOffset The Time IE offset, 0 means no Time IE. + * + */ + void SetTimeIeOffset(uint8_t aOffset) { mInfo.mTxInfo.mIeInfo->mTimeIeOffset = aOffset; } + + /** + * This method sets the offset to network time. + * + * @param[in] aNetworkTimeOffset The offset to network time. + * + */ + void SetNetworkTimeOffset(int64_t aNetworkTimeOffset) + { + mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset = aNetworkTimeOffset; + } + + /** + * This method sets the time sync sequence. + * + * @param[in] aTimeSyncSeq The time sync sequence. + * + */ + void SetTimeSyncSeq(uint8_t aTimeSyncSeq) { mInfo.mTxInfo.mIeInfo->mTimeSyncSeq = aTimeSyncSeq; } +#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE +}; + class Beacon { public: diff --git a/src/core/mac/sub_mac.cpp b/src/core/mac/sub_mac.cpp index 05352a474..4ab0c0fd4 100644 --- a/src/core/mac/sub_mac.cpp +++ b/src/core/mac/sub_mac.cpp @@ -55,7 +55,7 @@ SubMac::SubMac(Instance &aInstance) , mRxOnWhenBackoff(true) , mEnergyScanMaxRssi(kInvalidRssiValue) , mEnergyScanEndTime(0) - , mTransmitFrame(*static_cast(otPlatRadioGetTransmitBuffer(&aInstance))) + , mTransmitFrame(*static_cast(otPlatRadioGetTransmitBuffer(&aInstance))) , mCallbacks(aInstance) , mPcapCallback(NULL) , mPcapCallbackContext(NULL) @@ -186,7 +186,7 @@ exit: return error; } -void SubMac::HandleReceiveDone(Frame *aFrame, otError aError) +void SubMac::HandleReceiveDone(RxFrame *aFrame, otError aError) { if (mPcapCallback && (aFrame != NULL) && (aError == OT_ERROR_NONE)) { @@ -300,7 +300,7 @@ exit: return; } -void SubMac::HandleTransmitStarted(Frame &aFrame) +void SubMac::HandleTransmitStarted(TxFrame &aFrame) { if (ShouldHandleAckTimeout() && aFrame.GetAckRequest()) { @@ -312,7 +312,7 @@ void SubMac::HandleTransmitStarted(Frame &aFrame) } } -void SubMac::HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError) +void SubMac::HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError) { bool ccaSuccess = true; bool shouldRetx; @@ -559,7 +559,7 @@ exit: } #if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT -void SubMac::HandleFrameUpdated(Frame &aFrame) +void SubMac::HandleFrameUpdated(TxFrame &aFrame) { mCallbacks.FrameUpdated(aFrame); } @@ -616,7 +616,7 @@ extern "C" void otPlatRadioReceiveDone(otInstance *aInstance, otRadioFrame *aFra if (instance->IsInitialized()) { - instance->Get().HandleReceiveDone(static_cast(aFrame), aError); + instance->Get().HandleReceiveDone(static_cast(aFrame), aError); } } @@ -626,7 +626,7 @@ extern "C" void otPlatRadioTxStarted(otInstance *aInstance, otRadioFrame *aFrame if (instance->IsInitialized()) { - instance->Get().HandleTransmitStarted(*static_cast(aFrame)); + instance->Get().HandleTransmitStarted(*static_cast(aFrame)); } } @@ -636,7 +636,7 @@ extern "C" void otPlatRadioTxDone(otInstance *aInstance, otRadioFrame *aFrame, o if (instance->IsInitialized()) { - instance->Get().HandleTransmitDone(*static_cast(aFrame), static_cast(aAckFrame), + instance->Get().HandleTransmitDone(*static_cast(aFrame), static_cast(aAckFrame), aError); } } @@ -658,7 +658,7 @@ extern "C" void otPlatRadioFrameUpdated(otInstance *aInstance, otRadioFrame *aFr if (instance->IsInitialized()) { - instance->Get().HandleFrameUpdated(*static_cast(aFrame)); + instance->Get().HandleFrameUpdated(*static_cast(aFrame)); } } #endif diff --git a/src/core/mac/sub_mac.hpp b/src/core/mac/sub_mac.hpp index f30d2d022..3fccd0d63 100644 --- a/src/core/mac/sub_mac.hpp +++ b/src/core/mac/sub_mac.hpp @@ -106,7 +106,7 @@ public: * OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space. * */ - void ReceiveDone(Frame *aFrame, otError aError); + void ReceiveDone(RxFrame *aFrame, otError aError); /** * This method notifies user of `SubMac` of CCA status (success/failure) for a frame transmission attempt. @@ -138,11 +138,11 @@ public: * when there was an error in current transmission attempt. * */ - void RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx); + void RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx); /** * The method notifies user of `SubMac` that the transmit operation has completed, providing, if applicable, @@ -156,7 +156,7 @@ public: * OT_ERROR_ABORT when transmission was aborted for other reasons. * */ - void TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError); + void TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError); /** * This method notifies user of `SubMac` that energy scan is complete. @@ -177,7 +177,7 @@ public: * @param[in] aFrame The frame which needs to process transmit security. * */ - void FrameUpdated(Frame &aFrame); + void FrameUpdated(TxFrame &aFrame); #endif }; @@ -307,7 +307,7 @@ public: * @returns The transmit frame. * */ - Frame &GetTransmitFrame(void) { return mTransmitFrame; } + TxFrame &GetTransmitFrame(void) { return mTransmitFrame; } /** * This method sends a prepared frame. @@ -353,7 +353,7 @@ public: * OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space. * */ - void HandleReceiveDone(Frame *aFrame, otError aError); + void HandleReceiveDone(RxFrame *aFrame, otError aError); /** * This method handles a Transmit Started event from radio platform. @@ -361,7 +361,7 @@ public: * @param[in] aFrame The frame that is being transmitted. * */ - void HandleTransmitStarted(Frame &aFrame); + void HandleTransmitStarted(TxFrame &aFrame); /** * This method handles a "Transmit Done" event from radio platform. @@ -374,7 +374,7 @@ public: * OT_ERROR_ABORT when transmission was aborted for other reasons. * */ - void HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError); + void HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError); /** * This method handles "Energy Scan Done" event from radio platform. @@ -401,7 +401,7 @@ public: * @param[in] aFrame The frame which needs to process transmit security. * */ - void HandleFrameUpdated(Frame &aFrame); + void HandleFrameUpdated(TxFrame &aFrame); #endif private: @@ -463,7 +463,7 @@ private: bool mRxOnWhenBackoff; int8_t mEnergyScanMaxRssi; uint32_t mEnergyScanEndTime; - Frame & mTransmitFrame; + TxFrame & mTransmitFrame; Callbacks mCallbacks; otLinkPcapCallback mPcapCallback; void * mPcapCallbackContext; diff --git a/src/core/mac/sub_mac_callbacks.cpp b/src/core/mac/sub_mac_callbacks.cpp index 44d36a3fb..f6e3d0994 100644 --- a/src/core/mac/sub_mac_callbacks.cpp +++ b/src/core/mac/sub_mac_callbacks.cpp @@ -48,7 +48,7 @@ SubMac::Callbacks::Callbacks(Instance &aInstance) #if OPENTHREAD_FTD || OPENTHREAD_MTD -void SubMac::Callbacks::ReceiveDone(Frame *aFrame, otError aError) +void SubMac::Callbacks::ReceiveDone(RxFrame *aFrame, otError aError) { #if OPENTHREAD_CONFIG_LINK_RAW_ENABLE if (Get().IsEnabled()) @@ -67,16 +67,16 @@ void SubMac::Callbacks::RecordCcaStatus(bool aCcaSuccess, uint8_t aChannel) Get().RecordCcaStatus(aCcaSuccess, aChannel); } -void SubMac::Callbacks::RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx) +void SubMac::Callbacks::RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx) { Get().RecordFrameTransmitStatus(aFrame, aAckFrame, aError, aRetryCount, aWillRetx); } -void SubMac::Callbacks::TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError) +void SubMac::Callbacks::TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError) { #if OPENTHREAD_CONFIG_LINK_RAW_ENABLE if (Get().IsEnabled()) @@ -105,7 +105,7 @@ void SubMac::Callbacks::EnergyScanDone(int8_t aMaxRssi) } #if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT -void SubMac::Callbacks::FrameUpdated(Frame &aFrame) +void SubMac::Callbacks::FrameUpdated(TxFrame &aFrame) { /** * This function will be called from interrupt context, it should only read/write data passed in @@ -122,7 +122,7 @@ void SubMac::Callbacks::FrameUpdated(Frame &aFrame) #elif OPENTHREAD_RADIO -void SubMac::Callbacks::ReceiveDone(Frame *aFrame, otError aError) +void SubMac::Callbacks::ReceiveDone(RxFrame *aFrame, otError aError) { Get().InvokeReceiveDone(aFrame, aError); } @@ -131,16 +131,16 @@ void SubMac::Callbacks::RecordCcaStatus(bool, uint8_t) { } -void SubMac::Callbacks::RecordFrameTransmitStatus(const Frame &aFrame, - const Frame *aAckFrame, - otError aError, - uint8_t aRetryCount, - bool aWillRetx) +void SubMac::Callbacks::RecordFrameTransmitStatus(const TxFrame &aFrame, + const RxFrame *aAckFrame, + otError aError, + uint8_t aRetryCount, + bool aWillRetx) { Get().RecordFrameTransmitStatus(aFrame, aAckFrame, aError, aRetryCount, aWillRetx); } -void SubMac::Callbacks::TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError) +void SubMac::Callbacks::TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError) { Get().InvokeTransmitDone(aFrame, aAckFrame, aError); } @@ -151,7 +151,7 @@ void SubMac::Callbacks::EnergyScanDone(int8_t aMaxRssi) } #if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT -void SubMac::Callbacks::FrameUpdated(Frame &) +void SubMac::Callbacks::FrameUpdated(TxFrame &) { /** * This function will be called from interrupt context, it should only read/write data passed in diff --git a/src/core/thread/indirect_sender.cpp b/src/core/thread/indirect_sender.cpp index 6433dcefc..724a2ac59 100644 --- a/src/core/thread/indirect_sender.cpp +++ b/src/core/thread/indirect_sender.cpp @@ -320,7 +320,7 @@ void IndirectSender::UpdateIndirectMessage(Child &aChild) } } -otError IndirectSender::PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild) +otError IndirectSender::PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild) { otError error = OT_ERROR_NONE; Message *message = aChild.GetIndirectMessage(); @@ -353,7 +353,7 @@ exit: return error; } -uint16_t IndirectSender::PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Message &aMessage) +uint16_t IndirectSender::PrepareDataFrame(Mac::TxFrame &aFrame, Child &aChild, Message &aMessage) { Ip6::Header ip6Header; Mac::Address macSource, macDest; @@ -397,7 +397,7 @@ uint16_t IndirectSender::PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Mes return nextOffset; } -void IndirectSender::PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool aAckRequest) +void IndirectSender::PrepareEmptyFrame(Mac::TxFrame &aFrame, Child &aChild, bool aAckRequest) { uint16_t fcf; Mac::Address macSource, macDest; @@ -432,7 +432,7 @@ void IndirectSender::PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool a aFrame.SetFramePending(false); } -void IndirectSender::HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild) +void IndirectSender::HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild) { Message *message = aChild.GetIndirectMessage(); diff --git a/src/core/thread/indirect_sender.hpp b/src/core/thread/indirect_sender.hpp index 9490db00d..a23b45863 100644 --- a/src/core/thread/indirect_sender.hpp +++ b/src/core/thread/indirect_sender.hpp @@ -207,15 +207,15 @@ private: }; // Callbacks from DataPollHandler - otError PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild); - void HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild); + otError PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild); + void HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild); void HandleFrameChangeDone(Child &aChild); void UpdateIndirectMessage(Child &aChild); Message *FindIndirectMessage(Child &aChild); void RequestMessageUpdate(Child &aChild); - uint16_t PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Message &aMessage); - void PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool aAckRequest); + uint16_t PrepareDataFrame(Mac::TxFrame &aFrame, Child &aChild, Message &aMessage); + void PrepareEmptyFrame(Mac::TxFrame &aFrame, Child &aChild, bool aAckRequest); void ClearMessagesForRemovedChildren(void); bool mEnabled; diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index c8f890b2b..90beda838 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -472,7 +472,7 @@ exit: return error; } -otError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame) +otError MeshForwarder::HandleFrameRequest(Mac::TxFrame &aFrame) { otError error = OT_ERROR_NONE; @@ -555,7 +555,7 @@ exit: // when message is MLE type and requires fragmentation. It returns the // next offset into the message after the prepared frame. // -uint16_t MeshForwarder::PrepareDataFrame(Mac::Frame & aFrame, +uint16_t MeshForwarder::PrepareDataFrame(Mac::TxFrame & aFrame, Message & aMessage, const Mac::Address &aMacSource, const Mac::Address &aMacDest, @@ -855,7 +855,7 @@ start: return nextOffset; } -Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::Frame &aFrame, otError aError, const Mac::Address &aMacDest) +Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, otError aError, const Mac::Address &aMacDest) { Neighbor *neighbor = NULL; @@ -885,7 +885,7 @@ exit: return neighbor; } -void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, otError aError) +void MeshForwarder::HandleSentFrame(Mac::TxFrame &aFrame, otError aError) { Neighbor * neighbor = NULL; Mac::Address macDest; @@ -1050,7 +1050,7 @@ void MeshForwarder::HandleDiscoverComplete(void) mDiscoverTimer.Stop(); } -void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame) +void MeshForwarder::HandleReceivedFrame(Mac::RxFrame &aFrame) { otThreadLinkInfo linkInfo; Mac::Address macDest; diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index 15fe19f18..4516d192e 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -376,7 +376,7 @@ private: uint16_t aFrameLength, Lowpan::FragmentHeader &aFragmentHeader); - uint16_t PrepareDataFrame(Mac::Frame & aFrame, + uint16_t PrepareDataFrame(Mac::TxFrame & aFrame, Message & aMessage, const Mac::Address &aMacSource, const Mac::Address &aMacDest, @@ -384,7 +384,7 @@ private: uint16_t aMeshSource = 0xffff, uint16_t aMeshDest = 0xffff); - void SendMesh(Message &aMessage, Mac::Frame &aFrame); + void SendMesh(Message &aMessage, Mac::TxFrame &aFrame); otError UpdateIp6Route(Message &aMessage); otError UpdateIp6RouteFtd(Ip6::Header &ip6Header); otError UpdateMeshRoute(Message &aMessage); @@ -399,10 +399,10 @@ private: void RemoveMessage(Message &aMessage); void HandleDiscoverComplete(void); - void HandleReceivedFrame(Mac::Frame &aFrame); - otError HandleFrameRequest(Mac::Frame &aFrame); - Neighbor *UpdateNeighborOnSentFrame(Mac::Frame &aFrame, otError aError, const Mac::Address &aMacDest); - void HandleSentFrame(Mac::Frame &aFrame, otError aError); + void HandleReceivedFrame(Mac::RxFrame &aFrame); + otError HandleFrameRequest(Mac::TxFrame &aFrame); + Neighbor *UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, otError aError, const Mac::Address &aMacDest); + void HandleSentFrame(Mac::TxFrame &aFrame, otError aError); static void HandleDiscoverTimer(Timer &aTimer); void HandleDiscoverTimer(void); diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 3c1ee74a7..46030e627 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -313,7 +313,7 @@ void MeshForwarder::RemoveDataResponseMessages(void) } } -void MeshForwarder::SendMesh(Message &aMessage, Mac::Frame &aFrame) +void MeshForwarder::SendMesh(Message &aMessage, Mac::TxFrame &aFrame) { uint16_t fcf; diff --git a/src/core/thread/panid_query_server.cpp b/src/core/thread/panid_query_server.cpp index 3d3e56fd9..0a1b36827 100644 --- a/src/core/thread/panid_query_server.cpp +++ b/src/core/thread/panid_query_server.cpp @@ -89,12 +89,12 @@ exit: return; } -void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::Frame *aFrame) +void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::RxFrame *aFrame) { aInstance.Get().HandleScanResult(aFrame); } -void PanIdQueryServer::HandleScanResult(Mac::Frame *aFrame) +void PanIdQueryServer::HandleScanResult(Mac::RxFrame *aFrame) { uint16_t panId; diff --git a/src/core/thread/panid_query_server.hpp b/src/core/thread/panid_query_server.hpp index a0dbbb708..3213a3ccd 100644 --- a/src/core/thread/panid_query_server.hpp +++ b/src/core/thread/panid_query_server.hpp @@ -66,8 +66,8 @@ private: static void HandleQuery(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleQuery(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleScanResult(Instance &aInstance, Mac::Frame *aFrame); - void HandleScanResult(Mac::Frame *aFrame); + static void HandleScanResult(Instance &aInstance, Mac::RxFrame *aFrame); + void HandleScanResult(Mac::RxFrame *aFrame); static void HandleTimer(Timer &aTimer); void HandleTimer(void); diff --git a/src/ncp/ncp_base_radio.cpp b/src/ncp/ncp_base_radio.cpp index 310a9591a..a6029b311 100644 --- a/src/ncp/ncp_base_radio.cpp +++ b/src/ncp/ncp_base_radio.cpp @@ -116,7 +116,7 @@ void NcpBase::LinkRawTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame, if (mCurTransmitTID) { uint8_t header = SPINEL_HEADER_FLAG | SPINEL_HEADER_IID_0 | mCurTransmitTID; - bool framePending = (aAckFrame != NULL && static_cast(aAckFrame)->GetFramePending()); + bool framePending = (aAckFrame != NULL && static_cast(aAckFrame)->GetFramePending()); // Clear cached transmit TID mCurTransmitTID = 0; diff --git a/tests/unit/test_mac_frame.cpp b/tests/unit/test_mac_frame.cpp index c9463ad76..2a5a7dafe 100644 --- a/tests/unit/test_mac_frame.cpp +++ b/tests/unit/test_mac_frame.cpp @@ -78,8 +78,8 @@ void TestMacHeader(void) for (unsigned i = 0; i < OT_ARRAY_LENGTH(tests); i++) { - uint8_t psdu[Mac::Frame::kMTU]; - Mac::Frame frame; + uint8_t psdu[Mac::Frame::kMTU]; + Mac::TxFrame frame; frame.mPsdu = psdu; diff --git a/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h b/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h index 5ac14f370..9f543725a 100644 --- a/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h +++ b/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h @@ -60,7 +60,7 @@ * used by Header IE related features. * */ -#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_HEADER_IE_SUPPORT +#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT #define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 1 #else #define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 0