A Discrete-Event Network Simulator
API
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
ns3::UanMacRc Class Reference

Non-gateway node MAC for reservation channel MAC protocol. More...

#include "uan-mac-rc.h"

+ Inheritance diagram for ns3::UanMacRc:

Public Types

enum  {
  TYPE_DATA, TYPE_GWPING, TYPE_RTS, TYPE_CTS,
  TYPE_ACK
}
 Packet types. More...
 
typedef void(* QueueTracedCallback) (Ptr< const Packet > packet, uint32_t proto)
 TracedCallback signature for dequeue of a packet. More...
 
- Public Types inherited from ns3::UanMac
typedef void(* PacketModeTracedCallback) (Ptr< const Packet > packet, UanTxMode mode)
 TracedCallback signature for packet reception/enqueue/dequeue events. More...
 

Public Member Functions

 UanMacRc ()
 Default constructor. More...
 
virtual ~UanMacRc ()
 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, uint16_t protocolNumber, const Address &dest)
 Enqueue packet to be transmitted. More...
 
virtual void SetForwardUpCb (Callback< void, Ptr< Packet >, uint16_t, const Mac8Address &> cb)
 Set the callback to forward packets up to higher layers. More...
 
- Public Member Functions inherited from ns3::UanMac
 UanMac ()
 Default constructor. More...
 
virtual Address GetAddress (void)
 Get the MAC Address. More...
 
virtual Address GetBroadcast (void) const
 Get the broadcast address. More...
 
uint32_t GetTxModeIndex ()
 
virtual void SetAddress (Mac8Address addr)
 Set the address. More...
 
void SetTxModeIndex (uint32_t txModeIndex)
 
- 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...
 
SimpleRefCountoperator= (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)
 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::ObjectBase
static TypeId GetTypeId (void)
 Get the type ID. More...
 

Protected Member Functions

void DoDispose ()
 Destructor implementation. More...
 
- 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...
 

Private Types

enum  State {
  UNASSOCIATED, GWPSENT, IDLE, RTSSENT,
  DATATX
}
 MAC state. More...
 

Private Member Functions

void Associate (void)
 Associate with a gateway by sending the first GWPING. More...
 
void AssociateTimeout (void)
 Periodically retry association. More...
 
void BlockRtsing (void)
 Callback to block RST. More...
 
UanHeaderRcRts CreateRtsHeader (const Reservation &res)
 Create the RTS header from a Reservation. More...
 
bool IsPhy1Ok (void)
 Check that PHY is ok: not CTS or ACK not to my address. More...
 
void ProcessAck (Ptr< Packet > ack)
 Process a received ACK. More...
 
void ReceiveOkFromPhy (Ptr< Packet > pkt, double sinr, UanTxMode mode)
 PHY receive ok Callback. More...
 
void RtsTimeout (void)
 Retry RTS. More...
 
void ScheduleData (const UanHeaderRcCts &ctsh, const UanHeaderRcCtsGlobal &ctsg, uint32_t ctsBytes)
 Schedule Packet sends. More...
 
void SendPacket (Ptr< Packet > pkt, uint32_t rate)
 Send on packet on the PHY. More...
 
void SendRts (void)
 Send RTS packet. More...
 

Private Attributes

Mac8Address m_address
 My addrese.s. More...
 
Mac8Address m_assocAddr
 Next hop address. More...
 
bool m_cleared
 Flag when we've been cleared. More...
 
uint32_t m_ctsSizeG
 Size of UanHeaderCommon and UanHeaderRcCtsGlobal. More...
 
uint32_t m_ctsSizeN
 Size of UanHeaderRcCts. More...
 
uint32_t m_currentRate
 Rate number corresponding to data rate of current cycle. More...
 
TracedCallback< Ptr< const Packet >, uint32_t > m_dequeueLogger
 A was passed down to the PHY from the MAC. More...
 
TracedCallback< Ptr< const Packet >, uint32_t > m_enqueueLogger
 A packet arrived at the MAC for transmission. More...
 
Ptr< ExponentialRandomVariablem_ev
 Provides exponential random variables. More...
 
Callback< void, Ptr< Packet >, uint16_t, const Mac8Address & > m_forwardUpCb
 The callback to forward a packet up to higher layer. More...
 
uint8_t m_frameNo
 Current frame number. More...
 
Time m_learnedProp
 Propagation delay to gateway. More...
 
uint32_t m_maxFrames
 Maximum number of frames to include in a single RTS. More...
 
double m_minRetryRate
 Smallest allowed RTS retry rate. More...
 
uint32_t m_numRates
 Number of rates per Phy layer. More...
 
Ptr< UanPhym_phy
 PHY layer attached to this MAC. More...
 
std::list< std::pair< Ptr< Packet >, Mac8Address > > m_pktQueue
 Pending packets. More...
 
uint32_t m_queueLimit
 Maximum packets to queue at MAC. More...
 
std::list< Reservationm_resList
 List of scheduled reservations. More...
 
double m_retryRate
 Number of retry attempts per second (of RTS/GWPING. More...
 
double m_retryStep
 Retry rate increment. More...
 
bool m_rtsBlocked
 RTS blocked while processing ACK. More...
 
EventId m_rtsEvent
 The RTS event. More...
 
TracedCallback< Ptr< const Packet >, UanTxModem_rxLogger
 A packet was destined for and received at this MAC layer. More...
 
Time m_sifs
 Spacing between frames to account for timing error and processing delay. More...
 
EventId m_startAgain
 (Unused). More...
 
State m_state
 MAC state. More...
 

Static Private Attributes

static uint32_t m_cntrlSends = 0
 Global count of calls to Associate, AssociateTimeout, SendRts, and RtsTimeout. More...
 

Additional Inherited Members

Detailed Description

Non-gateway node MAC for reservation channel MAC protocol.


This MAC protocol assumes a network topology where all traffic is destined for a set of GW nodes which are connected via some out of band (RF?) means. This particular implementation assumes that there is only a single gateway.

For more information on class operation email lentr.nosp@m.acy@.nosp@m.u.was.nosp@m.hing.nosp@m.ton.e.nosp@m.du (This work is, as of yet, unpublished)

Config Paths

ns3::UanMacRc is accessible through the following paths with Config::Set and Config::Connect:

Attributes

TraceSources

Size of this type is 360 bytes (on a 64-bit architecture).

Definition at line 163 of file uan-mac-rc.h.

Member Typedef Documentation

◆ QueueTracedCallback

typedef void(* ns3::UanMacRc::QueueTracedCallback) (Ptr< const Packet > packet, uint32_t proto)

TracedCallback signature for dequeue of a packet.

Parameters
[in]packetThe Packet being received.
[in]protoThe protocol number.

Definition at line 199 of file uan-mac-rc.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Packet types.

Enumerator
TYPE_DATA 

Data.

TYPE_GWPING 

Gateway ping.

TYPE_RTS 

RTS.

TYPE_CTS 

CTS.

TYPE_ACK 

ACK.

Definition at line 167 of file uan-mac-rc.h.

◆ State

enum ns3::UanMacRc::State
private

MAC state.

Enumerator
UNASSOCIATED 

Initial state.

GWPSENT 

Associated with gateway.

IDLE 

Finished scheduling packet sends.

RTSSENT 

RTS just sent.

DATATX 

(Unused).

Definition at line 203 of file uan-mac-rc.h.

Constructor & Destructor Documentation

◆ UanMacRc()

ns3::UanMacRc::UanMacRc ( )

◆ ~UanMacRc()

ns3::UanMacRc::~UanMacRc ( )
virtual

Dummy destructor, DoDispose.

Definition at line 173 of file uan-mac-rc.cc.

Member Function Documentation

◆ AssignStreams()

int64_t ns3::UanMacRc::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 272 of file uan-mac-rc.cc.

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

◆ Associate()

void ns3::UanMacRc::Associate ( void  )
private

◆ AssociateTimeout()

void ns3::UanMacRc::AssociateTimeout ( void  )
private

◆ AttachPhy()

void ns3::UanMacRc::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 322 of file uan-mac-rc.cc.

References m_phy, ns3::MakeCallback(), third::phy, and ReceiveOkFromPhy().

◆ BlockRtsing()

void ns3::UanMacRc::BlockRtsing ( void  )
private

Callback to block RST.

Definition at line 759 of file uan-mac-rc.cc.

References m_rtsBlocked.

Referenced by ReceiveOkFromPhy().

◆ Clear()

void ns3::UanMacRc::Clear ( void  )
virtual

Clears all pointer references.

Implements ns3::UanMac.

Definition at line 178 of file uan-mac-rc.cc.

References ns3::EventId::Cancel(), m_cleared, m_phy, m_pktQueue, m_resList, m_rtsEvent, and m_startAgain.

Referenced by DoDispose().

◆ CreateRtsHeader()

UanHeaderRcRts ns3::UanMacRc::CreateRtsHeader ( const Reservation res)
private

◆ DoDispose()

void ns3::UanMacRc::DoDispose ( void  )
protectedvirtual

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 202 of file uan-mac-rc.cc.

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

◆ Enqueue()

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

Enqueue packet to be transmitted.

Parameters
pktPacket to be transmitted.
destDestination address.
protocolNumberThe type of the packet.
Returns
True if packet was successfully enqueued.

Implements ns3::UanMac.

Definition at line 280 of file uan-mac-rc.cc.

References Associate(), ns3::Mac8Address::ConvertFrom(), DATATX, GWPSENT, IDLE, ns3::EventId::IsRunning(), m_pktQueue, m_queueLimit, m_rtsEvent, m_state, NS_LOG_WARN, RTSSENT, SendRts(), and UNASSOCIATED.

◆ GetTypeId()

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

◆ IsPhy1Ok()

bool ns3::UanMacRc::IsPhy1Ok ( void  )
private

Check that PHY is ok: not CTS or ACK not to my address.

Returns
True if PHY is ok.

Definition at line 697 of file uan-mac-rc.cc.

References ns3::UanHeaderCommon::GetDest(), ns3::UanHeaderCommon::GetType(), m_address, m_phy, ns3::Packet::PeekHeader(), TYPE_ACK, and TYPE_CTS.

Referenced by Associate(), AssociateTimeout(), RtsTimeout(), and SendRts().

◆ ProcessAck()

void ns3::UanMacRc::ProcessAck ( Ptr< Packet ack)
private

◆ ReceiveOkFromPhy()

void ns3::UanMacRc::ReceiveOkFromPhy ( Ptr< Packet pkt,
double  sinr,
UanTxMode  mode 
)
private

◆ RtsTimeout()

void ns3::UanMacRc::RtsTimeout ( void  )
private

◆ ScheduleData()

void ns3::UanMacRc::ScheduleData ( const UanHeaderRcCts ctsh,
const UanHeaderRcCtsGlobal ctsg,
uint32_t  ctsBytes 
)
private

◆ SendPacket()

void ns3::UanMacRc::SendPacket ( Ptr< Packet pkt,
uint32_t  rate 
)
private

◆ SendRts()

void ns3::UanMacRc::SendRts ( void  )
private

◆ SetForwardUpCb()

void ns3::UanMacRc::SetForwardUpCb ( Callback< void, Ptr< Packet >, uint16_t, const Mac8Address &>  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 316 of file uan-mac-rc.cc.

References m_forwardUpCb.

Member Data Documentation

◆ m_address

Mac8Address ns3::UanMacRc::m_address
private

◆ m_assocAddr

Mac8Address ns3::UanMacRc::m_assocAddr
private

Next hop address.

Definition at line 217 of file uan-mac-rc.h.

Referenced by ReceiveOkFromPhy(), and ScheduleData().

◆ m_cleared

bool ns3::UanMacRc::m_cleared
private

Flag when we've been cleared.

Definition at line 233 of file uan-mac-rc.h.

Referenced by Clear().

◆ m_cntrlSends

uint32_t ns3::UanMacRc::m_cntrlSends = 0
staticprivate

Global count of calls to Associate, AssociateTimeout, SendRts, and RtsTimeout.

Definition at line 310 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), RtsTimeout(), and SendRts().

◆ m_ctsSizeG

uint32_t ns3::UanMacRc::m_ctsSizeG
private

Size of UanHeaderCommon and UanHeaderRcCtsGlobal.

Definition at line 231 of file uan-mac-rc.h.

Referenced by UanMacRc().

◆ m_ctsSizeN

uint32_t ns3::UanMacRc::m_ctsSizeN
private

Size of UanHeaderRcCts.

Definition at line 230 of file uan-mac-rc.h.

Referenced by UanMacRc().

◆ m_currentRate

uint32_t ns3::UanMacRc::m_currentRate
private

Rate number corresponding to data rate of current cycle.

Definition at line 220 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), ReceiveOkFromPhy(), RtsTimeout(), ScheduleData(), and SendRts().

◆ m_dequeueLogger

TracedCallback<Ptr<const Packet>, uint32_t > ns3::UanMacRc::m_dequeueLogger
private

A was passed down to the PHY from the MAC.

Definition at line 248 of file uan-mac-rc.h.

Referenced by GetTypeId(), and SendPacket().

◆ m_enqueueLogger

TracedCallback<Ptr<const Packet>, uint32_t > ns3::UanMacRc::m_enqueueLogger
private

A packet arrived at the MAC for transmission.

Definition at line 246 of file uan-mac-rc.h.

Referenced by GetTypeId().

◆ m_ev

Ptr<ExponentialRandomVariable> ns3::UanMacRc::m_ev
private

Provides exponential random variables.

Definition at line 313 of file uan-mac-rc.h.

Referenced by AssignStreams(), Associate(), AssociateTimeout(), RtsTimeout(), ScheduleData(), SendRts(), and UanMacRc().

◆ m_forwardUpCb

Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> ns3::UanMacRc::m_forwardUpCb
private

The callback to forward a packet up to higher layer.

Definition at line 241 of file uan-mac-rc.h.

Referenced by ReceiveOkFromPhy(), and SetForwardUpCb().

◆ m_frameNo

uint8_t ns3::UanMacRc::m_frameNo
private

Current frame number.

Definition at line 223 of file uan-mac-rc.h.

Referenced by Associate(), and SendRts().

◆ m_learnedProp

Time ns3::UanMacRc::m_learnedProp
private

Propagation delay to gateway.

Definition at line 225 of file uan-mac-rc.h.

Referenced by GetTypeId(), and ScheduleData().

◆ m_maxFrames

uint32_t ns3::UanMacRc::m_maxFrames
private

Maximum number of frames to include in a single RTS.

Definition at line 221 of file uan-mac-rc.h.

Referenced by Associate(), GetTypeId(), and SendRts().

◆ m_minRetryRate

double ns3::UanMacRc::m_minRetryRate
private

Smallest allowed RTS retry rate.

Definition at line 227 of file uan-mac-rc.h.

Referenced by GetTypeId(), and ReceiveOkFromPhy().

◆ m_numRates

uint32_t ns3::UanMacRc::m_numRates
private

Number of rates per Phy layer.

Definition at line 219 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), GetTypeId(), RtsTimeout(), and SendRts().

◆ m_phy

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

PHY layer attached to this MAC.

Definition at line 218 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), AttachPhy(), Clear(), IsPhy1Ok(), RtsTimeout(), ScheduleData(), SendPacket(), and SendRts().

◆ m_pktQueue

std::list<std::pair <Ptr<Packet>, Mac8Address > > ns3::UanMacRc::m_pktQueue
private

Pending packets.

Definition at line 236 of file uan-mac-rc.h.

Referenced by Associate(), Clear(), Enqueue(), ProcessAck(), ScheduleData(), and SendRts().

◆ m_queueLimit

uint32_t ns3::UanMacRc::m_queueLimit
private

Maximum packets to queue at MAC.

Definition at line 222 of file uan-mac-rc.h.

Referenced by Enqueue(), and GetTypeId().

◆ m_resList

std::list<Reservation> ns3::UanMacRc::m_resList
private

List of scheduled reservations.

Definition at line 238 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), Clear(), ProcessAck(), RtsTimeout(), ScheduleData(), and SendRts().

◆ m_retryRate

double ns3::UanMacRc::m_retryRate
private

Number of retry attempts per second (of RTS/GWPING.

Definition at line 216 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), GetTypeId(), ReceiveOkFromPhy(), RtsTimeout(), ScheduleData(), and SendRts().

◆ m_retryStep

double ns3::UanMacRc::m_retryStep
private

Retry rate increment.

Definition at line 228 of file uan-mac-rc.h.

Referenced by GetTypeId(), and ReceiveOkFromPhy().

◆ m_rtsBlocked

bool ns3::UanMacRc::m_rtsBlocked
private

RTS blocked while processing ACK.

Definition at line 212 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), BlockRtsing(), ReceiveOkFromPhy(), RtsTimeout(), and SendRts().

◆ m_rtsEvent

EventId ns3::UanMacRc::m_rtsEvent
private

The RTS event.

Definition at line 251 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), Clear(), Enqueue(), RtsTimeout(), ScheduleData(), and SendRts().

◆ m_rxLogger

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

A packet was destined for and received at this MAC layer.

Definition at line 244 of file uan-mac-rc.h.

Referenced by GetTypeId(), and ReceiveOkFromPhy().

◆ m_sifs

Time ns3::UanMacRc::m_sifs
private

Spacing between frames to account for timing error and processing delay.

Definition at line 224 of file uan-mac-rc.h.

Referenced by GetTypeId(), and ScheduleData().

◆ m_startAgain

EventId ns3::UanMacRc::m_startAgain
private

(Unused).

Definition at line 214 of file uan-mac-rc.h.

Referenced by Clear().

◆ m_state

State ns3::UanMacRc::m_state
private

MAC state.

Definition at line 211 of file uan-mac-rc.h.

Referenced by Associate(), AssociateTimeout(), Enqueue(), ReceiveOkFromPhy(), RtsTimeout(), ScheduleData(), and SendRts().


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