[mac] separate configs for macMaxCSMABackoffs and macMaxFrameRetries (#2881)

This commit aligns the MAC CSMA backoff and retransmit configuration more
closely with IEEE 802.15.4-2006.
This commit is contained in:
Jonathan Hui
2018-07-19 16:32:45 -05:00
committed by GitHub
parent 0645a3ae65
commit 7ba8f348dc
14 changed files with 178 additions and 75 deletions
+2 -1
View File
@@ -124,7 +124,8 @@ typedef struct otRadioFrame
*/
struct
{
uint8_t mMaxTxAttempts; ///< Max number of transmit attempts for an outbound frame.
uint8_t mMaxCsmaBackoffs; ///< Maximum number of backoffs attempts before declaring CCA failure.
uint8_t mMaxFrameRetries; ///< Maximum number of retries allowed after a transmission failure.
bool mIsARetx : 1; ///< True if this frame is a retransmission (ignored by radio driver).
bool mCsmaCaEnabled : 1; ///< Set to true to enable CSMA-CA for this packet, false otherwise.
const uint8_t *mAesKey; ///< The key used for AES-CCM frame security.
+1
View File
@@ -233,6 +233,7 @@ libopenthread_ftd_a_SOURCES = \
$(NULL)
HEADERS_COMMON = \
openthread-core-config-check.h \
openthread-core-config.h \
openthread-core-default-config.h \
api/link_raw.hpp \
+2 -2
View File
@@ -263,8 +263,8 @@ private:
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
uint8_t mTransmitAttempts;
uint8_t mCsmaAttempts;
uint8_t mTransmitRetries;
uint8_t mCsmaBackoffs;
#endif // OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
+13 -8
View File
@@ -53,6 +53,10 @@ LinkRaw::LinkRaw(Instance &aInstance)
, mTimerMicro(aInstance, &LinkRaw::HandleTimer, this)
#endif // OPENTHREAD_CONFIG_ENABLE_PLATFORM_USEC_TIMER
#endif // OPENTHREAD_LINKRAW_TIMER_REQUIRED
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
, mTransmitRetries(0)
, mCsmaBackoffs(0)
#endif // OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN
, mEnergyScanTask(aInstance, &LinkRaw::HandleEnergyScanTask, this)
#endif // OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN
@@ -225,8 +229,8 @@ otError LinkRaw::Transmit(otRadioFrame *aFrame, otLinkRawTransmitDone aCallback)
mTransmitDoneCallback = aCallback;
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
mTransmitAttempts = 0;
mCsmaAttempts = 0;
mTransmitRetries = 0;
mCsmaBackoffs = 0;
#endif // OPENTHREAD_CONFIG_ENABLE_SOFTWARE_RETRANSMIT
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_CSMA_BACKOFF
@@ -260,9 +264,10 @@ void LinkRaw::InvokeTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame,
if (aError == OT_ERROR_CHANNEL_ACCESS_FAILURE)
{
if (mCsmaAttempts < Mac::kMaxCSMABackoffs)
mCsmaBackoffs++;
if (mCsmaBackoffs < aFrame->mInfo.mTxInfo.mMaxCsmaBackoffs)
{
mCsmaAttempts++;
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_CSMA_BACKOFF
StartCsmaBackoff();
#else
@@ -279,14 +284,14 @@ void LinkRaw::InvokeTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame,
}
else
{
mCsmaAttempts = 0;
mCsmaBackoffs = 0;
}
if (aError == OT_ERROR_NO_ACK)
{
if (mTransmitAttempts < aFrame->mInfo.mTxInfo.mMaxTxAttempts)
if (mTransmitRetries < aFrame->mInfo.mTxInfo.mMaxFrameRetries)
{
mTransmitAttempts++;
mTransmitRetries++;
#if OPENTHREAD_CONFIG_ENABLE_SOFTWARE_CSMA_BACKOFF
StartCsmaBackoff();
#else
@@ -451,7 +456,7 @@ void LinkRaw::HandleTimer(void)
void LinkRaw::StartCsmaBackoff(void)
{
uint32_t backoffExponent = Mac::kMinBE + mTransmitAttempts + mCsmaAttempts;
uint32_t backoffExponent = Mac::kMinBE + mTransmitRetries + mCsmaBackoffs;
uint32_t backoff;
if (backoffExponent > Mac::kMaxBE)
+18 -17
View File
@@ -177,8 +177,8 @@ Mac::Mac(Instance &aInstance)
, mReceiveTail(NULL)
, mBeaconSequence(Random::GetUint8())
, mDataSequence(Random::GetUint8())
, mCsmaAttempts(0)
, mTransmitAttempts(0)
, mCsmaBackoffs(0)
, mTransmitRetries(0)
, mBroadcastTransmitCount(0)
, mScanChannelMask()
, mScanDuration(0)
@@ -1029,14 +1029,14 @@ void Mac::StartCsmaBackoff(void)
BeginTransmit();
}
#if OPENTHREAD_CONFIG_DISABLE_CSMA_CA_ON_LAST_ATTEMPT
else if (mTransmitAttempts == (sendFrame.GetMaxTxAttempts() - 1))
else if ((sendFrame.GetMaxFrameRetries() > 0) && (sendFrame.GetMaxFrameRetries() <= mTransmitRetries))
{
BeginTransmit();
}
#endif
else
{
uint32_t backoffExponent = kMinBE + mTransmitAttempts + mCsmaAttempts;
uint32_t backoffExponent = kMinBE + mTransmitRetries + mCsmaBackoffs;
uint32_t backoff;
bool shouldReceive;
@@ -1145,7 +1145,7 @@ void Mac::BeginTransmit(void)
VerifyOrExit(mEnabled, error = OT_ERROR_ABORT);
#if OPENTHREAD_CONFIG_DISABLE_CSMA_CA_ON_LAST_ATTEMPT
if (mTransmitAttempts == (sendFrame.GetMaxTxAttempts() - 1))
else if ((sendFrame.GetMaxFrameRetries() > 0) && (sendFrame.GetMaxFrameRetries() <= mTransmitRetries))
{
sendFrame.SetCsmaCaEnabled(false);
}
@@ -1155,7 +1155,7 @@ void Mac::BeginTransmit(void)
sendFrame.SetCsmaCaEnabled(true);
}
if (mCsmaAttempts == 0 && mTransmitAttempts == 0 && mBroadcastTransmitCount == 0)
if (mCsmaBackoffs == 0 && mTransmitRetries == 0 && mBroadcastTransmitCount == 0)
{
switch (mOperation)
{
@@ -1164,14 +1164,16 @@ void Mac::BeginTransmit(void)
sendFrame.SetChannel(mScanChannel);
SendBeaconRequest(sendFrame);
sendFrame.SetSequence(0);
sendFrame.SetMaxTxAttempts(kDirectFrameMacTxAttempts);
sendFrame.SetMaxCsmaBackoffs(kMaxCsmaBackoffsDirect);
sendFrame.SetMaxFrameRetries(kMaxFrameRetriesDirect);
break;
case kOperationTransmitBeacon:
sendFrame.SetChannel(mRadioChannel);
SendBeacon(sendFrame);
sendFrame.SetSequence(mBeaconSequence++);
sendFrame.SetMaxTxAttempts(kDirectFrameMacTxAttempts);
sendFrame.SetMaxCsmaBackoffs(kMaxCsmaBackoffsDirect);
sendFrame.SetMaxFrameRetries(kMaxFrameRetriesDirect);
break;
case kOperationTransmitData:
@@ -1332,15 +1334,15 @@ void Mac::HandleTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame, otEr
{
mCounters.mTxErrCca++;
if (!RadioSupportsCsmaBackoff() && mCsmaAttempts < kMaxCSMABackoffs)
if (!RadioSupportsCsmaBackoff() && mCsmaBackoffs < sendFrame.GetMaxCsmaBackoffs())
{
mCsmaAttempts++;
mCsmaBackoffs++;
StartCsmaBackoff();
ExitNow();
}
}
mCsmaAttempts = 0;
mCsmaBackoffs = 0;
sendFrame.GetDstAddr(dstAddr);
neighbor = GetNetif().GetMle().GetNeighbor(dstAddr);
@@ -1378,23 +1380,22 @@ void Mac::HandleTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame, otEr
// Determine whether to re-transmit the frame.
mTransmitAttempts++;
if (aError != OT_ERROR_NONE)
{
LogFrameTxFailure(sendFrame, aError);
otDumpDebgMac(GetInstance(), "TX ERR", sendFrame.GetHeader(), 16);
if (mEnabled && !RadioSupportsRetries() && mTransmitAttempts < sendFrame.GetMaxTxAttempts())
if (mEnabled && !RadioSupportsRetries() && mTransmitRetries < sendFrame.GetMaxFrameRetries())
{
mTransmitRetries++;
mCounters.mTxRetry++;
StartCsmaBackoff();
ExitNow();
}
}
mTransmitAttempts = 0;
mTransmitRetries = 0;
// Process the ack frame for "frame pending".
@@ -2331,8 +2332,8 @@ void Mac::LogFrameRxFailure(const Frame *aFrame, otError aError) const
void Mac::LogFrameTxFailure(const Frame &aFrame, otError aError) const
{
otLogInfoMac(GetInstance(), "Frame tx failed, error:%s, attempt:%d/%d, %s", otThreadErrorToString(aError),
mTransmitAttempts, aFrame.GetMaxTxAttempts(), aFrame.ToInfoString().AsCString());
otLogInfoMac(GetInstance(), "Frame tx failed, error:%s, retries:%d/%d, %s", otThreadErrorToString(aError),
mTransmitRetries, aFrame.GetMaxFrameRetries(), aFrame.ToInfoString().AsCString());
}
void Mac::LogBeacon(const char *aActionText, const BeaconPayload &aBeaconPayload) const
+11 -19
View File
@@ -71,7 +71,6 @@ enum
{
kMinBE = 3, ///< macMinBE (IEEE 802.15.4-2006).
kMaxBE = 5, ///< macMaxBE (IEEE 802.15.4-2006).
kMaxCSMABackoffs = 4, ///< macMaxCSMABackoffs (IEEE 802.15.4-2006).
kUnitBackoffPeriod = 20, ///< Number of symbols (IEEE 802.15.4-2006).
kMinBackoff = 1, ///< Minimum backoff (milliseconds).
@@ -84,24 +83,17 @@ enum
kScanChannelsAll = OT_CHANNEL_ALL, ///< All channels.
kScanDurationDefault = 300, ///< Default interval between channels (milliseconds).
/**
* Maximum number of MAC layer tx attempts for an outbound direct frame.
*
*/
kDirectFrameMacTxAttempts = OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_DIRECT,
kMaxCsmaBackoffsDirect =
OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT, ///< macMaxCsmaBackoffs for direct transmissions
kMaxCsmaBackoffsIndirect =
OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_INDIRECT, ///< macMaxCsmaBackoffs for indirect transmissions
/**
* Maximum number of MAC layer tx attempts for an outbound indirect frame (for a sleepy child) after receiving
* a data request command (data poll) from the child.
*
*/
kIndirectFrameMacTxAttempts = OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL,
kMaxFrameRetriesDirect =
OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_DIRECT, ///< macMaxFrameRetries for direct transmissions
kMaxFrameRetriesIndirect =
OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_INDIRECT, ///< macMaxFrameRetries for indirect transmissions
/**
* The transmit number of a broadcast frame in MAC layer.
*
*/
kTxNumBcast = OPENTHREAD_CONFIG_TX_NUM_BCAST,
kTxNumBcast = OPENTHREAD_CONFIG_TX_NUM_BCAST ///< Number of times each broadcast frame is transmitted
};
/**
@@ -1059,8 +1051,8 @@ private:
uint8_t mBeaconSequence;
uint8_t mDataSequence;
uint8_t mCsmaAttempts;
uint8_t mTransmitAttempts;
uint8_t mCsmaBackoffs;
uint8_t mTransmitRetries;
uint8_t mBroadcastTransmitCount;
ChannelMask mScanChannelMask;
+34 -6
View File
@@ -989,20 +989,48 @@ public:
void SetLqi(uint8_t aLqi) { mInfo.mRxInfo.mLqi = aLqi; }
/**
* This method returns the maximum number of transmit attempts for the frame.
* This method returns the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
* access failure.
*
* @returns The maximum number of transmit attempts.
* 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 GetMaxTxAttempts(void) const { return mInfo.mTxInfo.mMaxTxAttempts; }
uint8_t GetMaxCsmaBackoffs(void) const { return mInfo.mTxInfo.mMaxCsmaBackoffs; }
/**
* This method set the maximum number of transmit attempts for frame.
* This method sets the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
* access failure.
*
* @returns The maximum number of transmit attempts.
* 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 SetMaxTxAttempts(uint8_t aMaxTxAttempts) { mInfo.mTxInfo.mMaxTxAttempts = aMaxTxAttempts; }
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.
+42
View File
@@ -0,0 +1,42 @@
/*
* Copyright (c) 2018, The OpenThread Authors.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* Sanity checking for configuration options.
*/
#ifndef OPENTHREAD_CORE_CONFIG_CHECK_H_
#define OPENTHREAD_CORE_CONFIG_CHECK_H_
#ifdef OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL
#error \
"OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL was replaced by OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_INDIRECT."
#endif
#endif // OPENTHREAD_CORE_CONFIG_CHECK_H_
+2
View File
@@ -46,4 +46,6 @@
#undef OPENTHREAD_CORE_CONFIG_H_IN
#include "openthread-core-config-check.h"
#endif // OPENTHREAD_CORE_CONFIG_H_
+36 -10
View File
@@ -126,25 +126,51 @@
#endif
/**
* @def OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_DIRECT
* @def OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT
*
* Maximum number of MAC layer transmit attempts for an outbound direct frame.
* Per IEEE 802.15.4-2006, default value is set to (macMaxFrameRetries + 1) with macMaxFrameRetries = 3.
* 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, default value is 4.
*
*/
#ifndef OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_DIRECT
#define OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_DIRECT 4
#ifndef OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT
#define OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT 32
#endif
/**
* @def OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL
* @def OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_INDIRECT
*
* Maximum number of MAC layer transmit attempts for an outbound indirect frame (to a sleepy child) after receiving
* a data request command (data poll) from the child.
* 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, default value is 4.
*
*/
#ifndef OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL
#define OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_INDIRECT_PER_POLL 1
#ifndef OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_INDIRECT
#define OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_INDIRECT 4
#endif
/**
* @def OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_DIRECT
*
* The maximum number of retries allowed after a transmission failure for direct transmissions.
*
* Equivalent to macMaxFrameRetries, default value is 3.
*
*/
#ifndef OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_DIRECT
#define OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_DIRECT 3
#endif
/**
* @def OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_INDIRECT
*
* The maximum number of retries allowed after a transmission failure for indirect transmissions.
*
* Equivalent to macMaxFrameRetries, default value is 0.
*
*/
#ifndef OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_INDIRECT
#define OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_INDIRECT 0
#endif
/**
+10 -6
View File
@@ -65,7 +65,8 @@ MeshForwarder::MeshForwarder(Instance &aInstance)
, mMessageNextOffset(0)
, mSendMessage(NULL)
, mSendMessageIsARetransmission(false)
, mSendMessageMaxMacTxAttempts(Mac::kDirectFrameMacTxAttempts)
, mSendMessageMaxCsmaBackoffs(Mac::kMaxCsmaBackoffsDirect)
, mSendMessageMaxFrameRetries(Mac::kMaxFrameRetriesDirect)
, mMeshSource()
, mMeshDest()
, mAddMeshHeader(false)
@@ -184,7 +185,8 @@ void MeshForwarder::ScheduleTransmissionTask(void)
mSendMessage->SetTxSuccess(true);
}
mSendMessageMaxMacTxAttempts = Mac::kDirectFrameMacTxAttempts;
mSendMessageMaxCsmaBackoffs = Mac::kMaxCsmaBackoffsDirect;
mSendMessageMaxFrameRetries = Mac::kMaxFrameRetriesDirect;
GetNetif().GetMac().SendFrameRequest(mMacSender);
ExitNow();
}
@@ -469,7 +471,8 @@ otError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame)
{
SendEmptyFrame(aFrame, false);
aFrame.SetIsARetransmission(false);
aFrame.SetMaxTxAttempts(Mac::kDirectFrameMacTxAttempts);
aFrame.SetMaxCsmaBackoffs(Mac::kMaxCsmaBackoffsDirect);
aFrame.SetMaxFrameRetries(Mac::kMaxFrameRetriesDirect);
ExitNow();
}
@@ -534,7 +537,8 @@ otError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame)
assert(error == OT_ERROR_NONE);
aFrame.SetIsARetransmission(mSendMessageIsARetransmission);
aFrame.SetMaxTxAttempts(mSendMessageMaxMacTxAttempts);
aFrame.SetMaxCsmaBackoffs(mSendMessageMaxCsmaBackoffs);
aFrame.SetMaxFrameRetries(mSendMessageMaxFrameRetries);
#if OPENTHREAD_FTD
@@ -990,11 +994,11 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, otError aError)
HandleSentFrameToChild(aFrame, aError, macDest);
VerifyOrExit((mSendMessage != NULL) && ((aError == OT_ERROR_NONE) || (aError == OT_ERROR_NO_ACK)));
VerifyOrExit(mSendMessage != NULL);
if (mSendMessage->GetDirectTransmission())
{
if (aError == OT_ERROR_NO_ACK)
if (aError != OT_ERROR_NONE)
{
// If the transmission of any fragment frame fails,
// the overall message transmission is considered
+2 -1
View File
@@ -400,7 +400,8 @@ private:
Message *mSendMessage;
bool mSendMessageIsARetransmission;
uint8_t mSendMessageMaxMacTxAttempts;
uint8_t mSendMessageMaxCsmaBackoffs;
uint8_t mSendMessageMaxFrameRetries;
Mac::Address mMacSource;
Mac::Address mMacDest;
+3 -4
View File
@@ -385,8 +385,9 @@ otError MeshForwarder::GetIndirectTransmission(void)
continue;
}
mSendMessage = child.GetIndirectMessage();
mSendMessageMaxMacTxAttempts = Mac::kIndirectFrameMacTxAttempts;
mSendMessage = child.GetIndirectMessage();
mSendMessageMaxCsmaBackoffs = Mac::kMaxCsmaBackoffsIndirect;
mSendMessageMaxFrameRetries = Mac::kMaxFrameRetriesIndirect;
if (mSendMessage == NULL)
{
@@ -649,8 +650,6 @@ void MeshForwarder::HandleSentFrameToChild(const Mac::Frame &aFrame, otError aEr
}
}
VerifyOrExit((aError == OT_ERROR_NONE) || (aError == OT_ERROR_NO_ACK));
if (mMessageNextOffset < mSendMessage->GetLength())
{
if (mSendMessage == child->GetIndirectMessage())
+2 -1
View File
@@ -360,7 +360,8 @@ otError NcpBase::HandlePropertySet_SPINEL_PROP_STREAM_RAW(uint8_t aHeader)
memcpy(frame->mPsdu, frameBuffer, frame->mLength);
// TODO: This should be later added in the STREAM_RAW argument to allow user to directly specify it.
frame->mInfo.mTxInfo.mMaxTxAttempts = OPENTHREAD_CONFIG_MAX_TX_ATTEMPTS_DIRECT;
frame->mInfo.mTxInfo.mMaxCsmaBackoffs = OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT;
frame->mInfo.mTxInfo.mMaxFrameRetries = OPENTHREAD_CONFIG_MAC_MAX_FRAME_RETRIES_DIRECT;
// Pass frame to the radio layer. Note, this fails if we
// haven't enabled raw stream or are already transmitting.