A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ns3::UanMacCw Class Reference

CW-MAC protocol, similar in idea to the 802.11 DCF with constant backoff window. More...

#include <uan-mac-cw.h>

+ Inheritance diagram for ns3::UanMacCw:
+ Collaboration diagram for ns3::UanMacCw:

Public Member Functions

 UanMacCw ()
 Default constructor. More...
 
virtual ~UanMacCw ()
 Dummy destructor, DoDispose. More...
 
int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model. More...
 
virtual void AttachPhy (Ptr< UanPhy > phy)
 Attach PHY layer to this MAC. More...
 
virtual void Clear (void)
 Clears all pointer references. More...
 
virtual bool Enqueue (Ptr< Packet > pkt, const Address &dest, uint16_t protocolNumber)
 Enqueue packet to be transmitted. More...
 
virtual Address GetAddress ()
 Get the MAC Address. More...
 
virtual Address GetBroadcast (void) const
 Get the broadcast address. More...
 
virtual uint32_t GetCw (void)
 Get the contention window size. More...
 
virtual Time GetSlotTime (void)
 Get the slot time duration. More...
 
virtual void NotifyCcaEnd (void)
 Called when UanPhy stops sensing channel is busy. More...
 
virtual void NotifyCcaStart (void)
 Called when UanPhy begins sensing channel is busy. More...
 
virtual void NotifyRxEndError (void)
 Called when UanPhy finishes receiving packet in error. More...
 
virtual void NotifyRxEndOk (void)
 Called when UanPhy finishes receiving packet without error. More...
 
virtual void NotifyRxStart (void)
 Called when UanPhy begins receiving packet. More...
 
virtual void NotifyTxStart (Time duration)
 Called when transmission starts from Phy object. More...
 
virtual void SetAddress (UanAddress addr)
 Set the address. More...
 
virtual void SetCw (uint32_t cw)
 Set the contention window size. More...
 
virtual void SetForwardUpCb (Callback< void, Ptr< Packet >, const UanAddress & > cb)
 Set the callback to forward packets up to higher layers. More...
 
virtual void SetSlotTime (Time duration)
 Set the slot time duration. More...
 
- Public Member Functions inherited from ns3::Object
 Object ()
 
virtual ~Object ()
 
void AggregateObject (Ptr< Object > other)
 
void Dispose (void)
 Run the DoDispose methods of this object and all the objects aggregated to it. More...
 
AggregateIterator GetAggregateIterator (void) const
 
virtual TypeId GetInstanceTypeId (void) const
 
template<typename T >
Ptr< T > GetObject (void) const
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 
void Initialize (void)
 This method calls the virtual DoInitialize method on all the objects aggregated to this object. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment. 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
 
bool GetAttributeFailSafe (std::string name, AttributeValue &attribute) const
 
void SetAttribute (std::string name, const AttributeValue &value)
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 
- Public Member Functions inherited from ns3::UanPhyListener
virtual ~UanPhyListener ()
 Default destructor. More...
 

Static Public Member Functions

static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::UanMac
static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
static void Cleanup (void)
 Noop. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId (void)
 Get the type ID. More...
 

Protected Member Functions

virtual void DoDispose ()
 This method is called by Object::Dispose or by the object's destructor, whichever comes first. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 
virtual void DoInitialize (void)
 This method is called only once by Object::Initialize. More...
 
virtual void NotifyNewAggregate (void)
 This method is invoked whenever two sets of objects are aggregated together. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 
virtual void NotifyConstructionCompleted (void)
 This method is invoked once all member attributes have been initialized. More...
 

Private Types

enum  State { IDLE, CCABUSY, RUNNING, TX }
 Enum defining possible Phy states. More...
 

Private Member Functions

void EndTx (void)
 End TX state. More...
 
void PhyRxPacketError (Ptr< Packet > packet, double sinr)
 Packet received at lower layer in error. More...
 
void PhyRxPacketGood (Ptr< Packet > packet, double sinr, UanTxMode mode)
 Receive packet from lower layer (passed to PHY as callback). More...
 
void SaveTimer (void)
 Cancel SendEvent and save remaining delay. More...
 
void SendPacket (void)
 Send packet on PHY. More...
 
void StartTimer (void)
 Schedule SendPacket after delay. More...
 

Private Attributes

UanAddress m_address
 The MAC address. More...
 
bool m_cleared
 Flag when we've been cleared. More...
 
uint32_t m_cw
 Contention window size. More...
 
TracedCallback< Ptr< const
Packet >, uint16_t > 
m_dequeueLogger
 A packet was passed down to the PHY from the MAC. More...
 
TracedCallback< Ptr< const
Packet >, uint16_t > 
m_enqueueLogger
 A packet arrived at the MAC for transmission. More...
 
Callback< void, Ptr< Packet >
, const UanAddress & > 
m_forwardUpCb
 Forwarding up callback. More...
 
Ptr< UanPhym_phy
 PHY layer attached to this MAC. More...
 
Ptr< Packetm_pktTx
 Next packet to send. More...
 
uint16_t m_pktTxProt
 Next packet protocol number (usage varies by MAC). More...
 
Ptr< UniformRandomVariablem_rv
 Provides uniform random variable for contention window. More...
 
TracedCallback< Ptr< const
Packet >, UanTxMode
m_rxLogger
 A packet destined for this MAC was received. More...
 
Time m_savedDelayS
 Remaining delay until next send. More...
 
EventId m_sendEvent
 Scheduled SendPacket event. More...
 
Time m_sendTime
 Time to send next packet. More...
 
Time m_slotTime
 Slot time duration. More...
 
State m_state
 Current state. More...
 
EventId m_txEndEvent
 Scheduled EndTx event. More...
 

Detailed Description

CW-MAC protocol, similar in idea to the 802.11 DCF with constant backoff window.

Doxygen introspection did not find any typical Config paths.

For more information on this MAC protocol, see: Parrish, N.; Tracy, L.; Roy, S.; Arabshahi, P.; Fox, W., "System Design Considerations for Undersea Networks: Link and Multiple Access Protocols," Selected Areas in Communications, IEEE Journal on , vol.26, no.9, pp.1720-1730, December 2008


Attributes

  • CW: The MAC parameter CW.
  • SlotTime: Time slot duration for MAC backoff.
    • Set with class: ns3::TimeValue
    • Underlying type: Time -9223372036854775808.0ns:+9223372036854775807.0ns
    • Initial value: +20000000.0ns
    • Flags: construct write read

TraceSources

  • Enqueue: A packet arrived at the MAC for transmission.
  • Dequeue: A was passed down to the PHY from the MAC.
  • RX: A packet was destined for this MAC and was received.

Definition at line 46 of file uan-mac-cw.h.

Member Enumeration Documentation

enum ns3::UanMacCw::State
private

Enum defining possible Phy states.

Enumerator
IDLE 

Idle state.

CCABUSY 

Channel busy.

RUNNING 

Delay timer running.

TX 

Transmitting.

Definition at line 106 of file uan-mac-cw.h.

Constructor & Destructor Documentation

ns3::UanMacCw::UanMacCw ( )

Default constructor.

Definition at line 37 of file uan-mac-cw.cc.

References m_rv.

ns3::UanMacCw::~UanMacCw ( )
virtual

Dummy destructor, DoDispose.

Definition at line 48 of file uan-mac-cw.cc.

Member Function Documentation

int64_t ns3::UanMacCw::AssignStreams ( int64_t  stream)
virtual

Assign a fixed random variable stream number to the random variables used by this model.

Return the number of streams (possibly zero) that have been assigned.

Parameters
streamFirst stream index to use.
Returns
The number of stream indices assigned by this model.

Implements ns3::UanMac.

Definition at line 291 of file uan-mac-cw.cc.

References m_rv, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().

+ Here is the call graph for this function:

void ns3::UanMacCw::AttachPhy ( Ptr< UanPhy phy)
virtual

Attach PHY layer to this MAC.

Some MACs may be designed to work with multiple PHY layers. Others may only work with one.

Parameters
phyPhy layer to attach to this MAC.

Implements ns3::UanMac.

Definition at line 194 of file uan-mac-cw.cc.

References m_phy, ns3::MakeCallback(), PhyRxPacketError(), and PhyRxPacketGood().

+ Here is the call graph for this function:

void ns3::UanMacCw::Clear ( void  )
virtual

Clears all pointer references.

Implements ns3::UanMac.

Definition at line 53 of file uan-mac-cw.cc.

References ns3::EventId::Cancel(), m_cleared, m_phy, m_pktTx, m_sendEvent, and m_txEndEvent.

Referenced by DoDispose().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::UanMacCw::DoDispose ( void  )
protectedvirtual

This method is called by Object::Dispose or by the object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overriden 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 71 of file uan-mac-cw.cc.

References Clear(), and ns3::Object::DoDispose().

+ Here is the call graph for this function:

void ns3::UanMacCw::EndTx ( void  )
private

End TX state.

Definition at line 299 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), IDLE, m_phy, m_state, ns3::Simulator::Now(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, RUNNING, StartTimer(), and TX.

Referenced by NotifyTxStart().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool ns3::UanMacCw::Enqueue ( Ptr< Packet pkt,
const Address dest,
uint16_t  protocolNumber 
)
virtual

Enqueue packet to be transmitted.

Parameters
pktPacket to be transmitted.
destDestination address.
protocolNumberProtocol number. Usage varies by MAC.
Returns
True if packet was successfully enqueued.

Implements ns3::UanMac.

Definition at line 120 of file uan-mac-cw.cc.

References ns3::Packet::AddHeader(), CCABUSY, ns3::UanAddress::ConvertFrom(), GetAddress(), ns3::Time::GetSeconds(), ns3::Packet::GetSize(), ns3::UniformRandomVariable::GetValue(), IDLE, ns3::EventId::IsRunning(), m_address, m_cw, m_enqueueLogger, m_phy, m_pktTx, m_pktTxProt, m_rv, m_savedDelayS, m_sendTime, m_slotTime, m_state, m_txEndEvent, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, RUNNING, ns3::UanHeaderCommon::SetDest(), ns3::UanHeaderCommon::SetSrc(), ns3::UanHeaderCommon::SetType(), and TX.

+ Here is the call graph for this function:

Address ns3::UanMacCw::GetAddress ( )
virtual

Get the MAC Address.

Returns
MAC Address.

Implements ns3::UanMac.

Definition at line 108 of file uan-mac-cw.cc.

References m_address.

Referenced by EndTx(), Enqueue(), NotifyCcaEnd(), NotifyCcaStart(), NotifyRxEndError(), NotifyRxEndOk(), NotifyRxStart(), SaveTimer(), SendPacket(), and StartTimer().

+ Here is the caller graph for this function:

Address ns3::UanMacCw::GetBroadcast ( void  ) const
virtual

Get the broadcast address.

Returns
The broadcast address.

Implements ns3::UanMac.

Definition at line 203 of file uan-mac-cw.cc.

References ns3::UanAddress::GetBroadcast().

+ Here is the call graph for this function:

uint32_t ns3::UanMacCw::GetCw ( void  )
virtual

Get the contention window size.

Returns
Contention window size.

Definition at line 331 of file uan-mac-cw.cc.

References m_cw.

Time ns3::UanMacCw::GetSlotTime ( void  )
virtual

Get the slot time duration.

Returns
Slot time duration.

Definition at line 336 of file uan-mac-cw.cc.

References m_slotTime.

TypeId ns3::UanMacCw::GetTypeId ( void  )
static

Register this type.

Returns
The TypeId.

Definition at line 78 of file uan-mac-cw.cc.

References m_cw, m_dequeueLogger, m_enqueueLogger, m_rxLogger, m_slotTime, ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyCcaEnd ( void  )
virtual

Called when UanPhy stops sensing channel is busy.

Implements ns3::UanPhyListener.

Definition at line 258 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), m_state, ns3::Simulator::Now(), NS_LOG_DEBUG, RUNNING, and StartTimer().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyCcaStart ( void  )
virtual

Called when UanPhy begins sensing channel is busy.

Implements ns3::UanPhyListener.

Definition at line 246 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), m_state, ns3::Simulator::Now(), NS_LOG_DEBUG, RUNNING, and SaveTimer().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyRxEndError ( void  )
virtual

Called when UanPhy finishes receiving packet in error.

Implements ns3::UanPhyListener.

Definition at line 234 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), m_phy, m_state, ns3::Simulator::Now(), NS_LOG_DEBUG, RUNNING, and StartTimer().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyRxEndOk ( void  )
virtual

Called when UanPhy finishes receiving packet without error.

Implements ns3::UanPhyListener.

Definition at line 222 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), m_phy, m_state, ns3::Simulator::Now(), NS_LOG_DEBUG, RUNNING, and StartTimer().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyRxStart ( void  )
virtual

Called when UanPhy begins receiving packet.

Implements ns3::UanPhyListener.

Definition at line 210 of file uan-mac-cw.cc.

References CCABUSY, GetAddress(), m_state, ns3::Simulator::Now(), NS_LOG_DEBUG, RUNNING, and SaveTimer().

+ Here is the call graph for this function:

void ns3::UanMacCw::NotifyTxStart ( Time  duration)
virtual

Called when transmission starts from Phy object.

Parameters
durationDuration of transmission.

Implements ns3::UanPhyListener.

Definition at line 270 of file uan-mac-cw.cc.

References ns3::Simulator::Cancel(), CCABUSY, EndTx(), ns3::Time::GetSeconds(), ns3::EventId::IsRunning(), m_state, m_txEndEvent, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, RUNNING, SaveTimer(), and ns3::Simulator::Schedule().

+ Here is the call graph for this function:

void ns3::UanMacCw::PhyRxPacketError ( Ptr< Packet packet,
double  sinr 
)
private

Packet received at lower layer in error.

Parameters
packetPacket received in error.
sinrSINR of received packet.

Definition at line 352 of file uan-mac-cw.cc.

Referenced by AttachPhy().

+ Here is the caller graph for this function:

void ns3::UanMacCw::PhyRxPacketGood ( Ptr< Packet packet,
double  sinr,
UanTxMode  mode 
)
private

Receive packet from lower layer (passed to PHY as callback).

Parameters
packetPacket being received.
sinrSINR of received packet.
modeMode of received packet.

Definition at line 341 of file uan-mac-cw.cc.

References ns3::UanAddress::GetBroadcast(), ns3::UanHeaderCommon::GetDest(), ns3::UanHeaderCommon::GetSrc(), m_address, m_forwardUpCb, and ns3::Packet::RemoveHeader().

Referenced by AttachPhy().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::UanMacCw::SaveTimer ( void  )
private

Cancel SendEvent and save remaining delay.

Definition at line 357 of file uan-mac-cw.cc.

References ns3::Simulator::Cancel(), GetAddress(), m_pktTx, m_savedDelayS, m_sendEvent, m_sendTime, ns3::Simulator::Now(), NS_ASSERT, and NS_LOG_DEBUG.

Referenced by NotifyCcaStart(), NotifyRxStart(), and NotifyTxStart().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::UanMacCw::SendPacket ( void  )
private

Send packet on PHY.

Definition at line 384 of file uan-mac-cw.cc.

References GetAddress(), m_phy, m_pktTx, m_pktTxProt, m_savedDelayS, m_sendTime, m_state, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, RUNNING, and TX.

Referenced by StartTimer().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::UanMacCw::SetAddress ( UanAddress  addr)
virtual

Set the address.

Parameters
addrUanAddress for this MAC.

Implements ns3::UanMac.

Definition at line 114 of file uan-mac-cw.cc.

References m_address.

void ns3::UanMacCw::SetCw ( uint32_t  cw)
virtual

Set the contention window size.

Parameters
cwContention window size.

Definition at line 321 of file uan-mac-cw.cc.

References m_cw.

void ns3::UanMacCw::SetForwardUpCb ( Callback< void, Ptr< Packet >, const UanAddress & >  cb)
virtual

Set the callback to forward packets up to higher layers.

Parameters
cbThe callback. packet The packet. address The source address.

Implements ns3::UanMac.

Definition at line 188 of file uan-mac-cw.cc.

References m_forwardUpCb.

void ns3::UanMacCw::SetSlotTime ( Time  duration)
virtual

Set the slot time duration.

Parameters
durationSlot time duration.

Definition at line 326 of file uan-mac-cw.cc.

References m_slotTime.

void ns3::UanMacCw::StartTimer ( void  )
private

Schedule SendPacket after delay.

Definition at line 368 of file uan-mac-cw.cc.

References GetAddress(), ns3::Time::GetSeconds(), m_savedDelayS, m_sendEvent, m_sendTime, ns3::Simulator::Now(), NS_LOG_DEBUG, ns3::Simulator::Schedule(), and SendPacket().

Referenced by EndTx(), NotifyCcaEnd(), NotifyRxEndError(), and NotifyRxEndOk().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Member Data Documentation

UanAddress ns3::UanMacCw::m_address
private

The MAC address.

Definition at line 116 of file uan-mac-cw.h.

Referenced by Enqueue(), GetAddress(), PhyRxPacketGood(), and SetAddress().

bool ns3::UanMacCw::m_cleared
private

Flag when we've been cleared.

Definition at line 147 of file uan-mac-cw.h.

Referenced by Clear().

uint32_t ns3::UanMacCw::m_cw
private

Contention window size.

Definition at line 127 of file uan-mac-cw.h.

Referenced by Enqueue(), GetCw(), GetTypeId(), and SetCw().

TracedCallback<Ptr<const Packet>, uint16_t > ns3::UanMacCw::m_dequeueLogger
private

A packet was passed down to the PHY from the MAC.

Definition at line 124 of file uan-mac-cw.h.

Referenced by GetTypeId().

TracedCallback<Ptr<const Packet>, uint16_t > ns3::UanMacCw::m_enqueueLogger
private

A packet arrived at the MAC for transmission.

Definition at line 122 of file uan-mac-cw.h.

Referenced by Enqueue(), and GetTypeId().

Callback<void, Ptr<Packet>, const UanAddress& > ns3::UanMacCw::m_forwardUpCb
private

Forwarding up callback.

Definition at line 114 of file uan-mac-cw.h.

Referenced by PhyRxPacketGood(), and SetForwardUpCb().

Ptr<UanPhy> ns3::UanMacCw::m_phy
private

PHY layer attached to this MAC.

Definition at line 118 of file uan-mac-cw.h.

Referenced by AttachPhy(), Clear(), EndTx(), Enqueue(), NotifyRxEndError(), NotifyRxEndOk(), and SendPacket().

Ptr<Packet> ns3::UanMacCw::m_pktTx
private

Next packet to send.

Definition at line 136 of file uan-mac-cw.h.

Referenced by Clear(), Enqueue(), SaveTimer(), and SendPacket().

uint16_t ns3::UanMacCw::m_pktTxProt
private

Next packet protocol number (usage varies by MAC).

Definition at line 138 of file uan-mac-cw.h.

Referenced by Enqueue(), and SendPacket().

Ptr<UniformRandomVariable> ns3::UanMacCw::m_rv
private

Provides uniform random variable for contention window.

Definition at line 150 of file uan-mac-cw.h.

Referenced by AssignStreams(), Enqueue(), and UanMacCw().

TracedCallback<Ptr<const Packet>, UanTxMode > ns3::UanMacCw::m_rxLogger
private

A packet destined for this MAC was received.

Definition at line 120 of file uan-mac-cw.h.

Referenced by GetTypeId().

Time ns3::UanMacCw::m_savedDelayS
private

Remaining delay until next send.

Definition at line 134 of file uan-mac-cw.h.

Referenced by Enqueue(), SaveTimer(), SendPacket(), and StartTimer().

EventId ns3::UanMacCw::m_sendEvent
private

Scheduled SendPacket event.

Definition at line 140 of file uan-mac-cw.h.

Referenced by Clear(), SaveTimer(), and StartTimer().

Time ns3::UanMacCw::m_sendTime
private

Time to send next packet.

Definition at line 132 of file uan-mac-cw.h.

Referenced by Enqueue(), SaveTimer(), SendPacket(), and StartTimer().

Time ns3::UanMacCw::m_slotTime
private

Slot time duration.

Definition at line 128 of file uan-mac-cw.h.

Referenced by Enqueue(), GetSlotTime(), GetTypeId(), and SetSlotTime().

State ns3::UanMacCw::m_state
private
EventId ns3::UanMacCw::m_txEndEvent
private

Scheduled EndTx event.

Definition at line 142 of file uan-mac-cw.h.

Referenced by Clear(), Enqueue(), and NotifyTxStart().


The documentation for this class was generated from the following files: