This class is a helper for the LrWpanMac to manage the Csma/CA state machine according to IEEE 802.15.4-2006, section 7.5.1.4. More...
#include "lr-wpan-csmaca.h"
Public Member Functions | |
LrWpanCsmaCa (void) | |
Default constructor. More... | |
virtual | ~LrWpanCsmaCa (void) |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. More... | |
void | Cancel (void) |
Cancel CSMA-CA algorithm. More... | |
void | CanProceed (void) |
In the slotted CSMA-CA, after random backoff, determine if the remaining CSMA-CA operation can proceed, i.e. More... | |
Ptr< LrWpanMac > | GetMac (void) const |
Get the MAC to which this CSMA/CA implementation is attached to. More... | |
uint8_t | GetMacMaxBE (void) const |
Get the maximum backoff exponent value. More... | |
uint8_t | GetMacMaxCSMABackoffs (void) const |
Get the maximum number of backoffs. More... | |
uint8_t | GetMacMinBE (void) const |
Get the minimum backoff exponent value. More... | |
uint8_t | GetNB (void) |
Get the number of CSMA retries. More... | |
Time | GetTimeToNextSlot (void) const |
Get the amount of time from now to the beginning of the next slot. More... | |
uint64_t | GetUnitBackoffPeriod (void) const |
Get the number of symbols forming the basic time period used by the CSMA-CA algorithm. More... | |
bool | IsSlottedCsmaCa (void) const |
Check if the slotted CSMA/CA version is being used. More... | |
bool | IsUnSlottedCsmaCa (void) const |
Check if the unslotted CSMA/CA version is being used. More... | |
void | PlmeCcaConfirm (LrWpanPhyEnumeration status) |
IEEE 802.15.4-2006 section 6.2.2.2 PLME-CCA.confirm status. More... | |
void | RandomBackoffDelay (void) |
In step 2 of the CSMA-CA, perform a random backoff in the range of 0 to 2^BE -1. More... | |
void | RequestCCA (void) |
Request the Phy to perform CCA (Step 3) More... | |
void | SetLrWpanMacStateCallback (LrWpanMacStateCallback macState) |
Set the callback function to the MAC. More... | |
void | SetMac (Ptr< LrWpanMac > mac) |
Set the MAC to which this CSMA/CA implementation is attached to. More... | |
void | SetMacMaxBE (uint8_t macMaxBE) |
Set the maximum backoff exponent value. More... | |
void | SetMacMaxCSMABackoffs (uint8_t macMaxCSMABackoffs) |
Set the maximum number of backoffs. More... | |
void | SetMacMinBE (uint8_t macMinBE) |
Set the minimum backoff exponent value. More... | |
void | SetSlottedCsmaCa (void) |
Configure for the use of the slotted CSMA/CA version. More... | |
void | SetUnitBackoffPeriod (uint64_t unitBackoffPeriod) |
Set the number of symbols forming the basic time period used by the CSMA-CA algorithm. More... | |
void | SetUnSlottedCsmaCa (void) |
Configure for the use of the unslotted CSMA/CA version. More... | |
void | Start (void) |
Start CSMA-CA algorithm (step 1), initialize NB, BE for both slotted and unslotted CSMA-CA. More... | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
virtual | ~Object () |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose (void) |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator (void) const |
Get an iterator to the Objects aggregated to this one. More... | |
virtual TypeId | GetInstanceTypeId (void) const |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (void) const |
Get a pointer to the requested aggregated Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
void | Initialize (void) |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized (void) const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount (void) const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. More... | |
void | Ref (void) const |
Increment the reference count. More... | |
void | Unref (void) const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising erros. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId (void) |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Private Member Functions | |
LrWpanCsmaCa (LrWpanCsmaCa const &) | |
Copy constructor - defined and not implemented. More... | |
virtual void | DoDispose (void) |
Destructor implementation. More... | |
LrWpanCsmaCa & | operator= (LrWpanCsmaCa const &) |
Copy constructor - defined and not implemented. More... | |
Private Attributes | |
uint64_t | m_aUnitBackoffPeriod |
Number of symbols per CSMA/CA time unit, default 20 symbols. More... | |
uint8_t | m_BE |
Backoff exponent. More... | |
bool | m_BLE |
Battery Life Extension. More... | |
EventId | m_canProceedEvent |
Scheduler event for checking if we can complete the transmission before the end of the CAP. More... | |
bool | m_ccaRequestRunning |
Flag indicating that the PHY is currently running a CCA. More... | |
uint8_t | m_CW |
Contention window length (used in slotted ver only). More... | |
bool | m_isSlotted |
Beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA. More... | |
LrWpanMacStateCallback | m_lrWpanMacStateCallback |
The callback to inform the configured MAC of the CSMA/CA result. More... | |
Ptr< LrWpanMac > | m_mac |
The MAC instance for which this CSMAÄ/CA implementation is configured. More... | |
uint8_t | m_macMaxBE |
Maximum backoff exponent. More... | |
uint8_t | m_macMaxCSMABackoffs |
Maximum number of backoffs. More... | |
uint8_t | m_macMinBE |
Minimum backoff exponent. More... | |
uint8_t | m_NB |
Number of backoffs for the current transmission. More... | |
Ptr< UniformRandomVariable > | m_random |
Uniform random variable stream. More... | |
EventId | m_randomBackoffEvent |
Scheduler event for the start of the next random backoff/slot. More... | |
EventId | m_requestCcaEvent |
Scheduler event when to start the CCA after a random backoff. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoInitialize (void) |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate (void) |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted (void) |
Notifier called once the ObjectBase is fully constructed. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid (void) |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
This class is a helper for the LrWpanMac to manage the Csma/CA state machine according to IEEE 802.15.4-2006, section 7.5.1.4.
Introspection did not find any typical Config paths.
No Attributes are defined for this type.
No TraceSources are defined for this type.
Size of this type is 160 bytes (on a 64-bit architecture).
Definition at line 47 of file lr-wpan-csmaca.h.
ns3::LrWpanCsmaCa::LrWpanCsmaCa | ( | void | ) |
Default constructor.
Definition at line 46 of file lr-wpan-csmaca.cc.
References m_aUnitBackoffPeriod, m_BE, m_BLE, m_ccaRequestRunning, m_CW, m_isSlotted, m_macMaxBE, m_macMaxCSMABackoffs, m_macMinBE, m_NB, and m_random.
|
virtual |
Definition at line 63 of file lr-wpan-csmaca.cc.
References m_mac.
|
private |
Copy constructor - defined and not implemented.
int64_t ns3::LrWpanCsmaCa::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
Return the number of streams that have been assigned.
stream | first stream index to use |
Definition at line 375 of file lr-wpan-csmaca.cc.
References m_random, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
void ns3::LrWpanCsmaCa::Cancel | ( | void | ) |
Cancel CSMA-CA algorithm.
Definition at line 219 of file lr-wpan-csmaca.cc.
References ns3::EventId::Cancel(), m_canProceedEvent, m_randomBackoffEvent, and m_requestCcaEvent.
Referenced by DoDispose().
void ns3::LrWpanCsmaCa::CanProceed | ( | void | ) |
In the slotted CSMA-CA, after random backoff, determine if the remaining CSMA-CA operation can proceed, i.e.
can the entire transactions can be transmitted before the end of the CAP. This step is performed between step 2 and 3. This step is NOT performed for the unslotted CSMA-CA. If it can proceed function RequestCCA() is called.
Definition at line 261 of file lr-wpan-csmaca.cc.
References GetTimeToNextSlot(), m_BLE, m_randomBackoffEvent, m_requestCcaEvent, NS_LOG_FUNCTION, RandomBackoffDelay(), RequestCCA(), ns3::Simulator::Schedule(), and ns3::Seconds().
Referenced by RandomBackoffDelay().
|
privatevirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 69 of file lr-wpan-csmaca.cc.
References Cancel(), m_lrWpanMacStateCallback, and m_mac.
Get the MAC to which this CSMA/CA implementation is attached to.
Definition at line 83 of file lr-wpan-csmaca.cc.
References m_mac.
uint8_t ns3::LrWpanCsmaCa::GetMacMaxBE | ( | void | ) | const |
Get the maximum backoff exponent value.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
Definition at line 138 of file lr-wpan-csmaca.cc.
References m_macMaxBE, and NS_LOG_FUNCTION.
uint8_t ns3::LrWpanCsmaCa::GetMacMaxCSMABackoffs | ( | void | ) | const |
Get the maximum number of backoffs.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
Definition at line 152 of file lr-wpan-csmaca.cc.
References m_macMaxCSMABackoffs, and NS_LOG_FUNCTION.
uint8_t ns3::LrWpanCsmaCa::GetMacMinBE | ( | void | ) | const |
Get the minimum backoff exponent value.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
Definition at line 124 of file lr-wpan-csmaca.cc.
References m_macMinBE, and NS_LOG_FUNCTION.
uint8_t ns3::LrWpanCsmaCa::GetNB | ( | void | ) |
Get the number of CSMA retries.
Definition at line 383 of file lr-wpan-csmaca.cc.
References m_NB.
Time ns3::LrWpanCsmaCa::GetTimeToNextSlot | ( | void | ) | const |
Get the amount of time from now to the beginning of the next slot.
Definition at line 173 of file lr-wpan-csmaca.cc.
References NS_LOG_FUNCTION, and ns3::Seconds().
Referenced by CanProceed(), and Start().
|
static |
Get the type ID.
Definition at line 36 of file lr-wpan-csmaca.cc.
References ns3::TypeId::SetParent().
uint64_t ns3::LrWpanCsmaCa::GetUnitBackoffPeriod | ( | void | ) | const |
Get the number of symbols forming the basic time period used by the CSMA-CA algorithm.
See IEEE 802.15.4-2006, section 7.4.1, Table 85.
Definition at line 166 of file lr-wpan-csmaca.cc.
References m_aUnitBackoffPeriod, and NS_LOG_FUNCTION.
Referenced by RandomBackoffDelay().
bool ns3::LrWpanCsmaCa::IsSlottedCsmaCa | ( | void | ) | const |
Check if the slotted CSMA/CA version is being used.
Definition at line 103 of file lr-wpan-csmaca.cc.
References m_isSlotted, and NS_LOG_FUNCTION.
Referenced by PlmeCcaConfirm(), and Start().
bool ns3::LrWpanCsmaCa::IsUnSlottedCsmaCa | ( | void | ) | const |
Check if the unslotted CSMA/CA version is being used.
Definition at line 110 of file lr-wpan-csmaca.cc.
References m_isSlotted, and NS_LOG_FUNCTION.
Referenced by RandomBackoffDelay().
|
private |
Copy constructor - defined and not implemented.
void ns3::LrWpanCsmaCa::PlmeCcaConfirm | ( | LrWpanPhyEnumeration | status | ) |
IEEE 802.15.4-2006 section 6.2.2.2 PLME-CCA.confirm status.
status | TRX_OFF, BUSY or IDLE |
When Phy has completed CCA, it calls back here which in turn execute the final steps of the CSMA-CA algorithm. It checks to see if the Channel is idle, if so check the Contention window before permitting transmission (step 5). If channel is busy, either backoff and perform CCA again or treat as channel access failure (step 4).
Definition at line 299 of file lr-wpan-csmaca.cc.
References ns3::CHANNEL_ACCESS_FAILURE, ns3::CHANNEL_IDLE, ns3::IEEE_802_15_4_PHY_IDLE, ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), IsSlottedCsmaCa(), m_BE, m_ccaRequestRunning, m_CW, m_lrWpanMacStateCallback, m_macMaxBE, m_macMaxCSMABackoffs, m_NB, m_randomBackoffEvent, m_requestCcaEvent, min, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC(), RandomBackoffDelay(), RequestCCA(), and ns3::Simulator::ScheduleNow().
Referenced by ns3::LrWpanNetDevice::CompleteConfig().
void ns3::LrWpanCsmaCa::RandomBackoffDelay | ( | void | ) |
In step 2 of the CSMA-CA, perform a random backoff in the range of 0 to 2^BE -1.
Definition at line 231 of file lr-wpan-csmaca.cc.
References CanProceed(), ns3::Time::GetMicroSeconds(), GetUnitBackoffPeriod(), ns3::UniformRandomVariable::GetValue(), IsUnSlottedCsmaCa(), m_BE, m_canProceedEvent, m_mac, m_random, m_requestCcaEvent, ns3::MicroSeconds(), NS_LOG_FUNCTION, NS_LOG_LOGIC(), RequestCCA(), and ns3::Simulator::Schedule().
Referenced by CanProceed(), PlmeCcaConfirm(), and Start().
void ns3::LrWpanCsmaCa::RequestCCA | ( | void | ) |
Request the Phy to perform CCA (Step 3)
Definition at line 288 of file lr-wpan-csmaca.cc.
References m_ccaRequestRunning, m_mac, and NS_LOG_FUNCTION.
Referenced by CanProceed(), PlmeCcaConfirm(), and RandomBackoffDelay().
void ns3::LrWpanCsmaCa::SetLrWpanMacStateCallback | ( | LrWpanMacStateCallback | macState | ) |
Set the callback function to the MAC.
Used at the end of a Channel Assessment, as part of the interconnections between the CSMA-CA and the MAC. The callback lets MAC know a channel is either idle or busy.
macState | the mac state callback |
Definition at line 368 of file lr-wpan-csmaca.cc.
References m_lrWpanMacStateCallback, and NS_LOG_FUNCTION.
Set the MAC to which this CSMA/CA implementation is attached to.
mac | the used MAC |
Definition at line 77 of file lr-wpan-csmaca.cc.
References m_mac, and third::mac.
void ns3::LrWpanCsmaCa::SetMacMaxBE | ( | uint8_t | macMaxBE | ) |
Set the maximum backoff exponent value.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
macMaxBE | the maximum backoff exponent value |
Definition at line 131 of file lr-wpan-csmaca.cc.
References m_macMinBE, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::SetMacMaxCSMABackoffs | ( | uint8_t | macMaxCSMABackoffs | ) |
Set the maximum number of backoffs.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
macMaxCSMABackoffs | the maximum number of backoffs |
Definition at line 145 of file lr-wpan-csmaca.cc.
References m_macMaxCSMABackoffs, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::SetMacMinBE | ( | uint8_t | macMinBE | ) |
Set the minimum backoff exponent value.
See IEEE 802.15.4-2006, section 7.4.2, Table 86.
macMinBE | the minimum backoff exponent value |
Definition at line 117 of file lr-wpan-csmaca.cc.
References m_macMinBE, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::SetSlottedCsmaCa | ( | void | ) |
Configure for the use of the slotted CSMA/CA version.
Definition at line 89 of file lr-wpan-csmaca.cc.
References m_isSlotted, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::SetUnitBackoffPeriod | ( | uint64_t | unitBackoffPeriod | ) |
Set the number of symbols forming the basic time period used by the CSMA-CA algorithm.
See IEEE 802.15.4-2006, section 7.4.1, Table 85.
unitBackoffPeriod | the period length in symbols |
Definition at line 159 of file lr-wpan-csmaca.cc.
References m_aUnitBackoffPeriod, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::SetUnSlottedCsmaCa | ( | void | ) |
Configure for the use of the unslotted CSMA/CA version.
Definition at line 96 of file lr-wpan-csmaca.cc.
References m_isSlotted, and NS_LOG_FUNCTION.
void ns3::LrWpanCsmaCa::Start | ( | void | ) |
Start CSMA-CA algorithm (step 1), initialize NB, BE for both slotted and unslotted CSMA-CA.
For the slotted initialize CW plus also start on the backoff boundary
Definition at line 183 of file lr-wpan-csmaca.cc.
References GetTimeToNextSlot(), IsSlottedCsmaCa(), m_BE, m_BLE, m_CW, m_macMinBE, m_NB, m_randomBackoffEvent, min, NS_LOG_FUNCTION, RandomBackoffDelay(), ns3::Simulator::Schedule(), and ns3::Simulator::ScheduleNow().
|
private |
Number of symbols per CSMA/CA time unit, default 20 symbols.
Definition at line 310 of file lr-wpan-csmaca.h.
Referenced by GetUnitBackoffPeriod(), LrWpanCsmaCa(), and SetUnitBackoffPeriod().
|
private |
Backoff exponent.
Definition at line 285 of file lr-wpan-csmaca.h.
Referenced by LrWpanCsmaCa(), PlmeCcaConfirm(), RandomBackoffDelay(), and Start().
|
private |
Battery Life Extension.
Definition at line 290 of file lr-wpan-csmaca.h.
Referenced by CanProceed(), LrWpanCsmaCa(), and Start().
|
private |
Scheduler event for checking if we can complete the transmission before the end of the CAP.
Definition at line 331 of file lr-wpan-csmaca.h.
Referenced by Cancel(), and RandomBackoffDelay().
|
private |
Flag indicating that the PHY is currently running a CCA.
Used to prevent reporting the channel status to the MAC while canceling the CSMA algorithm.
Definition at line 337 of file lr-wpan-csmaca.h.
Referenced by LrWpanCsmaCa(), PlmeCcaConfirm(), and RequestCCA().
|
private |
Contention window length (used in slotted ver only).
Definition at line 280 of file lr-wpan-csmaca.h.
Referenced by LrWpanCsmaCa(), PlmeCcaConfirm(), and Start().
|
private |
Beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA.
Definition at line 265 of file lr-wpan-csmaca.h.
Referenced by IsSlottedCsmaCa(), IsUnSlottedCsmaCa(), LrWpanCsmaCa(), SetSlottedCsmaCa(), and SetUnSlottedCsmaCa().
|
private |
The callback to inform the configured MAC of the CSMA/CA result.
Definition at line 260 of file lr-wpan-csmaca.h.
Referenced by DoDispose(), PlmeCcaConfirm(), and SetLrWpanMacStateCallback().
The MAC instance for which this CSMAÄ/CA implementation is configured.
Definition at line 270 of file lr-wpan-csmaca.h.
Referenced by DoDispose(), GetMac(), RandomBackoffDelay(), RequestCCA(), SetMac(), and ~LrWpanCsmaCa().
|
private |
Maximum backoff exponent.
3 - 8, default 5
Definition at line 300 of file lr-wpan-csmaca.h.
Referenced by GetMacMaxBE(), LrWpanCsmaCa(), and PlmeCcaConfirm().
|
private |
Maximum number of backoffs.
0 - 5, default 4
Definition at line 305 of file lr-wpan-csmaca.h.
Referenced by GetMacMaxCSMABackoffs(), LrWpanCsmaCa(), PlmeCcaConfirm(), and SetMacMaxCSMABackoffs().
|
private |
Minimum backoff exponent.
0 - macMaxBE, default 3
Definition at line 295 of file lr-wpan-csmaca.h.
Referenced by GetMacMinBE(), LrWpanCsmaCa(), SetMacMaxBE(), SetMacMinBE(), and Start().
|
private |
Number of backoffs for the current transmission.
Definition at line 275 of file lr-wpan-csmaca.h.
Referenced by GetNB(), LrWpanCsmaCa(), PlmeCcaConfirm(), and Start().
|
private |
Uniform random variable stream.
Definition at line 315 of file lr-wpan-csmaca.h.
Referenced by AssignStreams(), LrWpanCsmaCa(), and RandomBackoffDelay().
|
private |
Scheduler event for the start of the next random backoff/slot.
Definition at line 320 of file lr-wpan-csmaca.h.
Referenced by Cancel(), CanProceed(), PlmeCcaConfirm(), and Start().
|
private |
Scheduler event when to start the CCA after a random backoff.
Definition at line 325 of file lr-wpan-csmaca.h.
Referenced by Cancel(), CanProceed(), PlmeCcaConfirm(), and RandomBackoffDelay().