Class implementing the device packet queue. More...
#include "wimax-mac-queue.h"
Classes | |
struct | QueueElement |
QueueElement structure. More... | |
Public Member Functions | |
WimaxMacQueue () | |
WimaxMacQueue (uint32_t maxSize) | |
Constructor. More... | |
~WimaxMacQueue () override | |
bool | CheckForFragmentation (MacHeaderType::HeaderType packetType) |
Check for fragmentation of the first packet of the specified type. More... | |
Ptr< Packet > | Dequeue (MacHeaderType::HeaderType packetType) |
Dequeue a packet of type packetType from the queue. More... | |
Ptr< Packet > | Dequeue (MacHeaderType::HeaderType packetType, uint32_t availableByte) |
Dequeue a fragment of size availableByte from the queue. More... | |
bool | Enqueue (Ptr< Packet > packet, const MacHeaderType &hdrType, const GenericMacHeader &hdr) |
Enqueue a packet. More... | |
uint32_t | GetFirstPacketHdrSize (MacHeaderType::HeaderType packetType) |
Get first packet header size of the specified type. More... | |
uint32_t | GetFirstPacketPayloadSize (MacHeaderType::HeaderType packetType) |
Get first packet payload size of the specified type. More... | |
uint32_t | GetFirstPacketRequiredByte (MacHeaderType::HeaderType packetType) |
Get required number of bytes to hold first packet of packetType. More... | |
uint32_t | GetMaxSize () const |
uint32_t | GetNBytes () const |
Get number of bytes in queue. More... | |
const WimaxMacQueue::PacketQueue & | GetPacketQueue () const |
Get packet queue function. More... | |
uint32_t | GetQueueLengthWithMACOverhead () |
Get queue length considering also the MAC overhead. More... | |
uint32_t | GetSize () const |
Get size of queue. More... | |
bool | IsEmpty () const |
Check if queue is empty. More... | |
bool | IsEmpty (MacHeaderType::HeaderType packetType) const |
Exclusively for SS. More... | |
Ptr< Packet > | Peek (GenericMacHeader &hdr) const |
Exclusively for BS. More... | |
Ptr< Packet > | Peek (GenericMacHeader &hdr, Time &timeStamp) const |
Exclusively for BS. More... | |
Ptr< Packet > | Peek (MacHeaderType::HeaderType packetType) const |
Two versions for SS without Generic MAC Header parameter, as SS's scheduler does not require to know the CID in Generic MAC Header. More... | |
Ptr< Packet > | Peek (MacHeaderType::HeaderType packetType, Time &timeStamp) const |
Two versions for SS without Generic MAC Header parameter, as SS's scheduler does not require to know the CID in Generic MAC Header. More... | |
void | SetFragmentation (MacHeaderType::HeaderType packetType) |
Set fragmentation function. More... | |
void | SetFragmentNumber (MacHeaderType::HeaderType packetType) |
Set fragment number for first packet of type packetType. More... | |
void | SetFragmentOffset (MacHeaderType::HeaderType packetType, uint32_t offset) |
Set fragment offset for first packet of type packetType. More... | |
void | SetMaxSize (uint32_t maxSize) |
set the maximum queue size More... | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
~Object () override | |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose () |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. More... | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. More... | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. More... | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized () 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[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () 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 errors. 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 () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Private Types | |
typedef std::deque< QueueElement > | PacketQueue |
PacketQueue typedef. More... | |
Private Member Functions | |
WimaxMacQueue::QueueElement | Front (MacHeaderType::HeaderType packetType) const |
In the case of non-UGS service flows at the SS side the queue will store both data packets and bandwidth request packets. More... | |
void | Pop (MacHeaderType::HeaderType packetType) |
Pop function. More... | |
Private Attributes | |
uint32_t | m_bytes |
bytes More... | |
uint32_t | m_maxSize |
maximum size More... | |
uint32_t | m_nrDataPackets |
number data packets More... | |
uint32_t | m_nrRequestPackets |
number request packets More... | |
PacketQueue | m_queue |
the queue More... | |
TracedCallback< Ptr< const Packet > > | m_traceDequeue |
dequeue trace callback More... | |
TracedCallback< Ptr< const Packet > > | m_traceDrop |
drop trace callback More... | |
TracedCallback< Ptr< const Packet > > | m_traceEnqueue |
enqueue trace callback More... | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoDispose () |
Destructor implementation. More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate () |
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 () |
Notifier called once the ObjectBase is fully constructed. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
Class implementing the device packet queue.
Definition at line 40 of file wimax-mac-queue.h.
|
private |
PacketQueue typedef.
Definition at line 258 of file wimax-mac-queue.h.
ns3::WimaxMacQueue::WimaxMacQueue | ( | ) |
Definition at line 106 of file wimax-mac-queue.cc.
ns3::WimaxMacQueue::WimaxMacQueue | ( | uint32_t | maxSize | ) |
Constructor.
maxSize | maximum size of queue |
Definition at line 114 of file wimax-mac-queue.cc.
|
override |
Definition at line 122 of file wimax-mac-queue.cc.
bool ns3::WimaxMacQueue::CheckForFragmentation | ( | MacHeaderType::HeaderType | packetType | ) |
Check for fragmentation of the first packet of the specified type.
packetType | the packet type |
Definition at line 497 of file wimax-mac-queue.cc.
References ns3::MacHeaderType::GetType(), ns3::WimaxMacQueue::QueueElement::m_fragmentation, ns3::WimaxMacQueue::QueueElement::m_hdrType, m_queue, and NS_LOG_INFO.
Referenced by GetFirstPacketHdrSize(), GetFirstPacketPayloadSize(), and GetQueueLengthWithMACOverhead().
Ptr< Packet > ns3::WimaxMacQueue::Dequeue | ( | MacHeaderType::HeaderType | packetType | ) |
Dequeue a packet of type packetType from the queue.
packetType | the type of the packet |
Definition at line 167 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::CreateFragment(), Front(), ns3::GenericMacHeader::GetSerializedSize(), ns3::FragmentationSubheader::GetSerializedSize(), ns3::Packet::GetSize(), ns3::WimaxMacQueue::QueueElement::GetSize(), ns3::MacHeaderType::GetType(), ns3::GenericMacHeader::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, IsEmpty(), m_bytes, ns3::WimaxMacQueue::QueueElement::m_fragmentation, ns3::WimaxMacQueue::QueueElement::m_fragmentNumber, ns3::WimaxMacQueue::QueueElement::m_fragmentOffset, ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_hdrType, m_nrDataPackets, m_nrRequestPackets, ns3::WimaxMacQueue::QueueElement::m_packet, m_traceDequeue, NS_ASSERT_MSG, NS_LOG_INFO, Pop(), ns3::FragmentationSubheader::SetFc(), ns3::FragmentationSubheader::SetFsn(), ns3::GenericMacHeader::SetLen(), and ns3::GenericMacHeader::SetType().
Ptr< Packet > ns3::WimaxMacQueue::Dequeue | ( | MacHeaderType::HeaderType | packetType, |
uint32_t | availableByte | ||
) |
Dequeue a fragment of size availableByte from the queue.
packetType | the type of the packet |
availableByte | the size of the fragment |
Definition at line 262 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), ns3::Packet::CreateFragment(), Front(), ns3::MacHeaderType::GetSerializedSize(), ns3::GenericMacHeader::GetSerializedSize(), ns3::FragmentationSubheader::GetSerializedSize(), ns3::Packet::GetSize(), ns3::MacHeaderType::GetType(), ns3::GenericMacHeader::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, IsEmpty(), m_bytes, ns3::WimaxMacQueue::QueueElement::m_fragmentation, ns3::WimaxMacQueue::QueueElement::m_fragmentNumber, ns3::WimaxMacQueue::QueueElement::m_fragmentOffset, ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_hdrType, ns3::WimaxMacQueue::QueueElement::m_packet, m_traceDequeue, NS_LOG_INFO, ns3::FragmentationSubheader::SetFc(), SetFragmentation(), SetFragmentNumber(), SetFragmentOffset(), ns3::FragmentationSubheader::SetFsn(), ns3::GenericMacHeader::SetLen(), and ns3::GenericMacHeader::SetType().
bool ns3::WimaxMacQueue::Enqueue | ( | Ptr< Packet > | packet, |
const MacHeaderType & | hdrType, | ||
const GenericMacHeader & | hdr | ||
) |
Enqueue a packet.
packet | the packet to enqueue |
hdrType | the mac header type of the packet |
hdr | the header of the packet |
Definition at line 139 of file wimax-mac-queue.cc.
References ns3::WimaxMacQueue::QueueElement::GetSize(), ns3::MacHeaderType::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, m_bytes, m_maxSize, m_nrDataPackets, m_nrRequestPackets, m_queue, m_traceDrop, m_traceEnqueue, and ns3::Simulator::Now().
|
private |
In the case of non-UGS service flows at the SS side the queue will store both data packets and bandwidth request packets.
The two are distinguished by their headers. The below two functions are for this purpose exclusively. The Front function returns the first packet of a specific packet type from the queue (which may not necessarily be at the front of the queue), and the Pop function pops that elements.
packetType | the type of the packet |
Definition at line 437 of file wimax-mac-queue.cc.
References ns3::MacHeaderType::GetType(), ns3::WimaxMacQueue::QueueElement::m_hdrType, and m_queue.
Referenced by Dequeue(), and Peek().
uint32_t ns3::WimaxMacQueue::GetFirstPacketHdrSize | ( | MacHeaderType::HeaderType | packetType | ) |
Get first packet header size of the specified type.
packetType | the packet type |
Definition at line 520 of file wimax-mac-queue.cc.
References CheckForFragmentation(), ns3::MacHeaderType::GetSerializedSize(), ns3::GenericMacHeader::GetSerializedSize(), ns3::MacHeaderType::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_hdrType, m_queue, and NS_LOG_INFO.
Referenced by GetFirstPacketRequiredByte().
uint32_t ns3::WimaxMacQueue::GetFirstPacketPayloadSize | ( | MacHeaderType::HeaderType | packetType | ) |
Get first packet payload size of the specified type.
packetType | the packet type |
Definition at line 556 of file wimax-mac-queue.cc.
References CheckForFragmentation(), ns3::Packet::GetSize(), ns3::MacHeaderType::GetType(), ns3::WimaxMacQueue::QueueElement::m_fragmentOffset, ns3::WimaxMacQueue::QueueElement::m_hdrType, ns3::WimaxMacQueue::QueueElement::m_packet, m_queue, and NS_LOG_INFO.
Referenced by GetFirstPacketRequiredByte().
uint32_t ns3::WimaxMacQueue::GetFirstPacketRequiredByte | ( | MacHeaderType::HeaderType | packetType | ) |
Get required number of bytes to hold first packet of packetType.
packetType | the packet type |
Definition at line 585 of file wimax-mac-queue.cc.
References GetFirstPacketHdrSize(), GetFirstPacketPayloadSize(), and NS_LOG_INFO.
uint32_t ns3::WimaxMacQueue::GetMaxSize | ( | ) | const |
Definition at line 133 of file wimax-mac-queue.cc.
References m_maxSize.
Referenced by GetTypeId().
uint32_t ns3::WimaxMacQueue::GetNBytes | ( | ) | const |
Get number of bytes in queue.
Definition at line 417 of file wimax-mac-queue.cc.
References m_bytes.
Referenced by GetQueueLengthWithMACOverhead().
const WimaxMacQueue::PacketQueue & ns3::WimaxMacQueue::GetPacketQueue | ( | ) | const |
Get packet queue function.
Definition at line 491 of file wimax-mac-queue.cc.
References m_queue.
uint32_t ns3::WimaxMacQueue::GetQueueLengthWithMACOverhead | ( | ) |
Get queue length considering also the MAC overhead.
Definition at line 423 of file wimax-mac-queue.cc.
References CheckForFragmentation(), GetNBytes(), GetSize(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, and queueSize.
uint32_t ns3::WimaxMacQueue::GetSize | ( | void | ) | const |
Get size of queue.
Definition at line 411 of file wimax-mac-queue.cc.
References m_queue.
Referenced by GetQueueLengthWithMACOverhead().
|
static |
Get the type ID.
Definition at line 80 of file wimax-mac-queue.cc.
References GetMaxSize(), m_traceDequeue, m_traceDrop, m_traceEnqueue, ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), SetMaxSize(), and ns3::TypeId::SetParent().
bool ns3::WimaxMacQueue::IsEmpty | ( | ) | const |
Check if queue is empty.
Definition at line 470 of file wimax-mac-queue.cc.
References m_queue.
Referenced by Dequeue(), and Peek().
bool ns3::WimaxMacQueue::IsEmpty | ( | MacHeaderType::HeaderType | packetType | ) | const |
Exclusively for SS.
packetType | packet type to check |
Definition at line 476 of file wimax-mac-queue.cc.
References ns3::MacHeaderType::HEADER_TYPE_GENERIC, m_nrDataPackets, and m_nrRequestPackets.
Ptr< Packet > ns3::WimaxMacQueue::Peek | ( | GenericMacHeader & | hdr | ) | const |
Exclusively for BS.
Two versions of Peek function (with Generic MAC Header as parameter) only for BS, as BS's scheduler needs to know the CID in Generic MAC Header.
hdr | the header of the packet |
Definition at line 331 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), IsEmpty(), ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_packet, and m_queue.
Ptr< Packet > ns3::WimaxMacQueue::Peek | ( | GenericMacHeader & | hdr, |
Time & | timeStamp | ||
) | const |
Exclusively for BS.
Two versions of Peek function (with Generic MAC Header as parameter) only for BS, as BS's scheduler needs to know the CID in Generic MAC Header.
hdr | the header of the packet |
timeStamp | the timestamp of the packet |
Definition at line 348 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), IsEmpty(), ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_packet, m_queue, and ns3::WimaxMacQueue::QueueElement::m_timeStamp.
Ptr< Packet > ns3::WimaxMacQueue::Peek | ( | MacHeaderType::HeaderType | packetType | ) | const |
Two versions for SS without Generic MAC Header parameter, as SS's scheduler does not require to know the CID in Generic MAC Header.
packetType | the type of the packet |
Definition at line 366 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), Front(), ns3::MacHeaderType::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, IsEmpty(), ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_hdrType, and ns3::WimaxMacQueue::QueueElement::m_packet.
Ptr< Packet > ns3::WimaxMacQueue::Peek | ( | MacHeaderType::HeaderType | packetType, |
Time & | timeStamp | ||
) | const |
Two versions for SS without Generic MAC Header parameter, as SS's scheduler does not require to know the CID in Generic MAC Header.
packetType | the type of the packet |
timeStamp | the timestamp of the packet |
Definition at line 388 of file wimax-mac-queue.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), Front(), ns3::MacHeaderType::GetType(), ns3::MacHeaderType::HEADER_TYPE_GENERIC, IsEmpty(), ns3::WimaxMacQueue::QueueElement::m_hdr, ns3::WimaxMacQueue::QueueElement::m_hdrType, ns3::WimaxMacQueue::QueueElement::m_packet, and ns3::WimaxMacQueue::QueueElement::m_timeStamp.
|
private |
Pop function.
packetType | the packet type |
Definition at line 454 of file wimax-mac-queue.cc.
References ns3::MacHeaderType::GetType(), ns3::WimaxMacQueue::QueueElement::m_hdrType, and m_queue.
Referenced by Dequeue().
void ns3::WimaxMacQueue::SetFragmentation | ( | MacHeaderType::HeaderType | packetType | ) |
Set fragmentation function.
Set fragmentation state for first packet of type packetType
packetType | packetType to check |
Definition at line 598 of file wimax-mac-queue.cc.
References m_queue.
Referenced by Dequeue().
void ns3::WimaxMacQueue::SetFragmentNumber | ( | MacHeaderType::HeaderType | packetType | ) |
Set fragment number for first packet of type packetType.
packetType | packetType to check |
Definition at line 611 of file wimax-mac-queue.cc.
References m_queue.
Referenced by Dequeue().
void ns3::WimaxMacQueue::SetFragmentOffset | ( | MacHeaderType::HeaderType | packetType, |
uint32_t | offset | ||
) |
Set fragment offset for first packet of type packetType.
packetType | packetType to check |
offset | offset value to set |
Definition at line 624 of file wimax-mac-queue.cc.
References m_queue.
Referenced by Dequeue().
void ns3::WimaxMacQueue::SetMaxSize | ( | uint32_t | maxSize | ) |
set the maximum queue size
maxSize | the max queue size |
Definition at line 127 of file wimax-mac-queue.cc.
References m_maxSize.
Referenced by GetTypeId().
|
private |
bytes
Definition at line 261 of file wimax-mac-queue.h.
Referenced by Dequeue(), Enqueue(), and GetNBytes().
|
private |
maximum size
Definition at line 260 of file wimax-mac-queue.h.
Referenced by Enqueue(), GetMaxSize(), and SetMaxSize().
|
private |
number data packets
Definition at line 262 of file wimax-mac-queue.h.
|
private |
number request packets
Definition at line 263 of file wimax-mac-queue.h.
|
private |
the queue
Definition at line 259 of file wimax-mac-queue.h.
Referenced by CheckForFragmentation(), Enqueue(), Front(), GetFirstPacketHdrSize(), GetFirstPacketPayloadSize(), GetPacketQueue(), GetSize(), IsEmpty(), Peek(), Pop(), SetFragmentation(), SetFragmentNumber(), and SetFragmentOffset().
|
private |
dequeue trace callback
Definition at line 266 of file wimax-mac-queue.h.
Referenced by Dequeue(), and GetTypeId().
|
private |
drop trace callback
Definition at line 267 of file wimax-mac-queue.h.
Referenced by Enqueue(), and GetTypeId().
|
private |
enqueue trace callback
Definition at line 265 of file wimax-mac-queue.h.
Referenced by Enqueue(), and GetTypeId().