[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.
This commit is contained in:
Yakun Xu
2019-08-01 15:28:19 -07:00
committed by Jonathan Hui
parent 8782bf8b3e
commit 6c6aad2a01
33 changed files with 392 additions and 371 deletions
+1 -1
View File
@@ -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)
@@ -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
@@ -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
+5 -5
View File
@@ -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;
@@ -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
/*
@@ -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
+5 -5
View File
@@ -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;
+4 -4
View File
@@ -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;
+1 -1
View File
@@ -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.
+2 -2
View File
@@ -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<Mac::Mac>().IsActiveScanInProgress();
}
void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame)
void HandleActiveScanResult(Instance &aInstance, Mac::RxFrame *aFrame)
{
if (aFrame == NULL)
{
+8 -6
View File
@@ -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<IndirectSender>().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<IndirectSender>().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())
{
+6 -6
View File
@@ -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;
+2 -2
View File
@@ -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);
+2 -2
View File
@@ -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.
+7 -7
View File
@@ -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);
+9 -9
View File
@@ -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:
+25 -25
View File
@@ -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<Frame *>(aOobFrame);
mOobFrame = static_cast<TxFrame *>(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<KeyManager>();
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<KeyManager>();
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();
+20 -21
View File
@@ -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;
+1 -1
View File
@@ -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;
+220 -200
View File
@@ -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<int64_t>(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<int64_t>(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:
+9 -9
View File
@@ -55,7 +55,7 @@ SubMac::SubMac(Instance &aInstance)
, mRxOnWhenBackoff(true)
, mEnergyScanMaxRssi(kInvalidRssiValue)
, mEnergyScanEndTime(0)
, mTransmitFrame(*static_cast<Frame *>(otPlatRadioGetTransmitBuffer(&aInstance)))
, mTransmitFrame(*static_cast<TxFrame *>(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<SubMac>().HandleReceiveDone(static_cast<Frame *>(aFrame), aError);
instance->Get<SubMac>().HandleReceiveDone(static_cast<RxFrame *>(aFrame), aError);
}
}
@@ -626,7 +626,7 @@ extern "C" void otPlatRadioTxStarted(otInstance *aInstance, otRadioFrame *aFrame
if (instance->IsInitialized())
{
instance->Get<SubMac>().HandleTransmitStarted(*static_cast<Frame *>(aFrame));
instance->Get<SubMac>().HandleTransmitStarted(*static_cast<TxFrame *>(aFrame));
}
}
@@ -636,7 +636,7 @@ extern "C" void otPlatRadioTxDone(otInstance *aInstance, otRadioFrame *aFrame, o
if (instance->IsInitialized())
{
instance->Get<SubMac>().HandleTransmitDone(*static_cast<Frame *>(aFrame), static_cast<Frame *>(aAckFrame),
instance->Get<SubMac>().HandleTransmitDone(*static_cast<TxFrame *>(aFrame), static_cast<RxFrame *>(aAckFrame),
aError);
}
}
@@ -658,7 +658,7 @@ extern "C" void otPlatRadioFrameUpdated(otInstance *aInstance, otRadioFrame *aFr
if (instance->IsInitialized())
{
instance->Get<SubMac>().HandleFrameUpdated(*static_cast<Frame *>(aFrame));
instance->Get<SubMac>().HandleFrameUpdated(*static_cast<TxFrame *>(aFrame));
}
}
#endif
+14 -14
View File
@@ -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;
+16 -16
View File
@@ -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<LinkRaw>().IsEnabled())
@@ -67,16 +67,16 @@ void SubMac::Callbacks::RecordCcaStatus(bool aCcaSuccess, uint8_t aChannel)
Get<Mac>().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<Mac>().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<LinkRaw>().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<LinkRaw>().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<LinkRaw>().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<LinkRaw>().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
+4 -4
View File
@@ -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();
+4 -4
View File
@@ -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;
+5 -5
View File
@@ -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;
+6 -6
View File
@@ -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);
+1 -1
View File
@@ -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;
+2 -2
View File
@@ -89,12 +89,12 @@ exit:
return;
}
void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::Frame *aFrame)
void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::RxFrame *aFrame)
{
aInstance.Get<PanIdQueryServer>().HandleScanResult(aFrame);
}
void PanIdQueryServer::HandleScanResult(Mac::Frame *aFrame)
void PanIdQueryServer::HandleScanResult(Mac::RxFrame *aFrame)
{
uint16_t panId;
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -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<Mac::Frame *>(aAckFrame)->GetFramePending());
bool framePending = (aAckFrame != NULL && static_cast<Mac::RxFrame *>(aAckFrame)->GetFramePending());
// Clear cached transmit TID
mCurTransmitTID = 0;
+2 -2
View File
@@ -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;
@@ -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