A Discrete-Event Network Simulator
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 The Boeing Company
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author:
19  * kwong yin <kwong-sang.yin@boeing.com>
20  * Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
21  * Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
22  */
24 #ifndef LR_WPAN_CSMACA_H
25 #define LR_WPAN_CSMACA_H
27 #include <ns3/object.h>
28 #include <ns3/event-id.h>
29 #include <ns3/lr-wpan-mac.h>
31 namespace ns3 {
56 class LrWpanCsmaCa : public Object
57 {
59 public:
65  static TypeId GetTypeId (void);
69  LrWpanCsmaCa (void);
70  virtual ~LrWpanCsmaCa (void);
76  void SetMac (Ptr<LrWpanMac> mac);
82  Ptr<LrWpanMac> GetMac (void) const;
87  void SetSlottedCsmaCa (void);
91  void SetUnSlottedCsmaCa (void);
97  bool IsSlottedCsmaCa (void) const;
103  bool IsUnSlottedCsmaCa (void) const;
110  void SetMacMinBE (uint8_t macMinBE);
117  uint8_t GetMacMinBE (void) const;
124  void SetMacMaxBE (uint8_t macMaxBE);
131  uint8_t GetMacMaxBE (void) const;
138  void SetMacMaxCSMABackoffs (uint8_t macMaxCSMABackoffs);
146  uint8_t GetMacMaxCSMABackoffs (void) const;
154  void SetUnitBackoffPeriod (uint64_t unitBackoffPeriod);
162  uint64_t GetUnitBackoffPeriod (void) const;
169  Time GetTimeToNextSlot (void) const;
174  void Start (void);
178  void Cancel (void);
182  void RandomBackoffDelay (void);
190  void CanProceed (void);
194  void RequestCCA (void);
199  void DeferCsmaTimeout (void);
211  void PlmeCcaConfirm (LrWpanPhyEnumeration status);
233  void SetBatteryLifeExtension (bool batteryLifeExtension);
241  int64_t AssignStreams (int64_t stream);
247  uint8_t GetNB (void);
253  bool GetBatteryLifeExtension (void);
255 private:
256  // Disable implicit copy constructors
260  LrWpanCsmaCa (LrWpanCsmaCa const &);
267  virtual void DoDispose (void);
292  uint8_t m_NB;
296  uint8_t m_CW;
300  uint8_t m_BE;
308  uint8_t m_macMinBE; //
312  uint8_t m_macMaxBE;
358 };
360 }
362 // namespace ns-3
364 #endif /* LR_WPAN_CSMACA_H */
static TypeId GetTypeId(void)
Get the type ID.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
LrWpanCsmaCa & operator=(LrWpanCsmaCa const &)
Copy constructor - defined and not implemented.
void SetMacMinBE(uint8_t macMinBE)
Set the minimum backoff exponent value.
void PlmeCcaConfirm(LrWpanPhyEnumeration status)
IEEE 802.15.4-2006 section PLME-CCA.confirm status.
uint8_t m_CW
Contention window length (used in slotted ver only).
void SetMac(Ptr< LrWpanMac > mac)
Set the MAC to which this CSMA/CA implementation is attached to.
uint8_t GetMacMinBE(void) const
Get the minimum backoff exponent value.
uint8_t GetMacMaxBE(void) const
Get the maximum backoff exponent value.
uint8_t m_NB
Number of backoffs for the current transmission.
void SetLrWpanMacTransCostCallback(LrWpanMacTransCostCallback trans)
Set the callback function to report a transaction cost in slotted CSMA-CA.
uint8_t GetNB(void)
Get the number of CSMA retries.
bool m_macBattLifeExt
Battery Life Extension.
void SetUnitBackoffPeriod(uint64_t unitBackoffPeriod)
Set the number of symbols forming the basic time period used by the CSMA-CA algorithm.
Callback< void, LrWpanMacState > LrWpanMacStateCallback
This method informs the MAC whether the channel is idle or busy.
LrWpanMacTransCostCallback m_lrWpanMacTransCostCallback
The callback to inform the cost of a transaction in slotted CSMA-CA.
uint8_t m_macMinBE
Minimum backoff exponent.
Callback< void, uint32_t > LrWpanMacTransCostCallback
This method informs the transaction cost in a slotted CSMA-CA data transmission.
void SetBatteryLifeExtension(bool batteryLifeExtension)
Set the value of the Battery Life Extension.
void DeferCsmaTimeout(void)
The CSMA algorithm call this function at the end of the CAP to return the MAC state back to to IDLE a...
LrWpanMacStateCallback m_lrWpanMacStateCallback
The callback to inform the configured MAC of the CSMA/CA result.
uint8_t GetMacMaxCSMABackoffs(void) const
Get the maximum number of backoffs.
void SetMacMaxBE(uint8_t macMaxBE)
Set the maximum backoff exponent value.
void SetUnSlottedCsmaCa(void)
Configure for the use of the unslotted CSMA/CA version.
uint64_t m_randomBackoffPeriodsLeft
Count the number of remaining random backoff periods left to delay.
void RequestCCA(void)
Request the Phy to perform CCA (Step 3)
virtual void DoDispose(void)
Destructor implementation.
void RandomBackoffDelay(void)
In step 2 of the CSMA-CA, perform a random backoff in the range of 0 to 2^BE -1.
void Start(void)
Start CSMA-CA algorithm (step 1), initialize NB, BE for both slotted and unslotted CSMA-CA...
void Cancel(void)
Cancel CSMA-CA algorithm.
Definition: third.py:99
Time GetTimeLeftInCap()
Get the time left in the CAP portion of the Outgoing or Incoming superframe.
uint64_t m_aUnitBackoffPeriod
Number of symbols per CSMA/CA time unit, default 20 symbols.
Default constructor.
The uniform distribution Random Number Generator (RNG).
Ptr< LrWpanMac > m_mac
The MAC instance for which this CSMA/CA implemenation is configured.
uint64_t GetUnitBackoffPeriod(void) const
Get the number of symbols forming the basic time period used by the CSMA-CA algorithm.
bool m_ccaRequestRunning
Flag indicating that the PHY is currently running a CCA.
void SetLrWpanMacStateCallback(LrWpanMacStateCallback macState)
Set the callback function to the MAC.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< UniformRandomVariable > m_random
Uniform random variable stream.
Time GetTimeToNextSlot(void) const
Locates the time to the next backoff period boundary in the SUPERFRAME and returns the amount of time...
bool IsUnSlottedCsmaCa(void) const
Check if the unslotted CSMA/CA version is being used.
bool m_isSlotted
Beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA.
uint8_t m_macMaxBE
Maximum backoff exponent.
EventId m_randomBackoffEvent
Scheduler event for the start of the next random backoff/slot.
bool GetBatteryLifeExtension(void)
Get the value of the Battery Life Extension.
bool m_coorDest
Indicates whether the CSMA procedure is targeted for a message to be sent to the coordinator.
void SetSlottedCsmaCa(void)
Configure for the use of the slotted CSMA/CA version.
An identifier for simulation events.
Definition: event-id.h:53
void CanProceed(void)
In the slotted CSMA-CA, after random backoff, determine if the remaining CSMA-CA operation can procee...
virtual ~LrWpanCsmaCa(void)
uint8_t m_BE
Backoff exponent.
EventId m_canProceedEvent
Scheduler event for checking if we can complete the transmission before the end of the CAP...
This class is a helper for the LrWpanMac to manage the Csma/CA state machine according to IEEE 802...
void SetMacMaxCSMABackoffs(uint8_t macMaxCSMABackoffs)
Set the maximum number of backoffs.
bool IsSlottedCsmaCa(void) const
Check if the slotted CSMA/CA version is being used.
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3.
Definition: lr-wpan-phy.h:105
A base class which provides memory management and object aggregation.
Definition: object.h:87
EventId m_requestCcaEvent
Scheduler event when to start the CCA after a random backoff.
Ptr< LrWpanMac > GetMac(void) const
Get the MAC to which this CSMA/CA implementation is attached to.
a unique identifier for an interface.
Definition: type-id.h:58
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
EventId m_endCapEvent
Scheduler event for the end of the current CAP.
uint8_t m_macMaxCSMABackoffs
Maximum number of backoffs.