Aggregator used to construct A-MSDUs. More...
#include "msdu-aggregator.h"
Public Types | |
typedef std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > > | DeaggregatedMsdus |
DeaggregatedMsdus typedef. More... | |
typedef std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > >::const_iterator | DeaggregatedMsdusCI |
DeaggregatedMsdusCI typedef. More... | |
typedef std::map< AcIndex, Ptr< QosTxop > > | EdcaQueues |
EDCA queues typedef. More... | |
Public Member Functions | |
MsduAggregator () | |
virtual | ~MsduAggregator () |
void | Aggregate (Ptr< const Packet > msdu, Ptr< Packet > amsdu, Mac48Address src, Mac48Address dest) const |
Aggregate an MSDU to an A-MSDU. More... | |
uint16_t | GetMaxAmsduSize (Mac48Address recipient, uint8_t tid, WifiModulationClass modulation) const |
Determine the maximum size for an A-MSDU of the given TID that can be sent to the given receiver when using the given modulation class. More... | |
Ptr< WifiMacQueueItem > | GetNextAmsdu (Mac48Address recipient, uint8_t tid, WifiTxVector txVector, uint32_t ampduSize=0, Time ppduDurationLimit=Seconds(0)) const |
Dequeue MSDUs to be transmitted to a given station and belonging to a given TID from the corresponding EDCA queue and aggregate them to form an A-MSDU that meets the following constraints: More... | |
void | SetEdcaQueues (EdcaQueues map) |
Set the map of EDCA queues. More... | |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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 DeaggregatedMsdus | Deaggregate (Ptr< Packet > aggregatedPacket) |
static uint16_t | GetSizeIfAggregated (uint16_t msduSize, uint16_t amsduSize) |
Compute the size of the A-MSDU resulting from the aggregation of an MSDU of size msduSize and an A-MSDU of size amsduSize. More... | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Register this type. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Static Private Member Functions | |
static uint8_t | CalculatePadding (uint16_t amsduSize) |
Calculate how much padding must be added to the end of an A-MSDU of the given size if a new MSDU is added. More... | |
Private Attributes | |
EdcaQueues | m_edca |
the map of EDCA queues More... | |
Additional Inherited Members | |
![]() | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoDispose (void) |
Destructor implementation. 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... | |
![]() | |
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... | |
![]() | |
static TypeId | GetObjectIid (void) |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
Aggregator used to construct A-MSDUs.
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 80 bytes (on a 64-bit architecture).
Definition at line 41 of file msdu-aggregator.h.
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > ns3::MsduAggregator::DeaggregatedMsdus |
DeaggregatedMsdus typedef.
Definition at line 45 of file msdu-aggregator.h.
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator ns3::MsduAggregator::DeaggregatedMsdusCI |
DeaggregatedMsdusCI typedef.
Definition at line 47 of file msdu-aggregator.h.
typedef std::map<AcIndex, Ptr<QosTxop> > ns3::MsduAggregator::EdcaQueues |
EDCA queues typedef.
Definition at line 49 of file msdu-aggregator.h.
ns3::MsduAggregator::MsduAggregator | ( | ) |
Definition at line 55 of file msdu-aggregator.cc.
|
virtual |
Definition at line 59 of file msdu-aggregator.cc.
void ns3::MsduAggregator::Aggregate | ( | Ptr< const Packet > | msdu, |
Ptr< Packet > | amsdu, | ||
Mac48Address | src, | ||
Mac48Address | dest | ||
) | const |
Aggregate an MSDU to an A-MSDU.
msdu | the MSDU. |
amsdu | the A-MSDU. |
src | the source address. |
dest | the destination address |
Definition at line 79 of file msdu-aggregator.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), CalculatePadding(), ns3::Packet::Copy(), ns3::Packet::GetSize(), NS_ASSERT, NS_LOG_FUNCTION, ns3::AmsduSubframeHeader::SetDestinationAddr(), ns3::AmsduSubframeHeader::SetLength(), and ns3::AmsduSubframeHeader::SetSourceAddr().
Referenced by GetNextAmsdu().
|
staticprivate |
Calculate how much padding must be added to the end of an A-MSDU of the given size if a new MSDU is added.
Each A-MSDU subframe is padded so that its length is multiple of 4 octets.
amsduSize | the size of the A-MSDU |
Definition at line 224 of file msdu-aggregator.cc.
Referenced by Aggregate(), and GetSizeIfAggregated().
|
static |
aggregatedPacket | the aggregated packet. |
Definition at line 318 of file msdu-aggregator.cc.
References ns3::Packet::CreateFragment(), ns3::AmsduSubframeHeader::GetLength(), ns3::Packet::GetSize(), NS_LOG_FUNCTION_NOARGS, NS_LOG_INFO, ns3::Packet::RemoveAtStart(), and ns3::Packet::RemoveHeader().
Referenced by ns3::ApWifiMac::DeaggregateAmsduAndForward(), and ns3::RegularWifiMac::DeaggregateAmsduAndForward().
uint16_t ns3::MsduAggregator::GetMaxAmsduSize | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
WifiModulationClass | modulation | ||
) | const |
Determine the maximum size for an A-MSDU of the given TID that can be sent to the given receiver when using the given modulation class.
recipient | the receiver station address. |
tid | the TID. |
modulation | the modulation class. |
Definition at line 230 of file msdu-aggregator.cc.
References ns3::AC_BE, ns3::AC_BK, ns3::AC_VI, ns3::AC_VO, ns3::UintegerValue::Get(), ns3::Txop::GetLow(), ns3::WifiNetDevice::GetMac(), ns3::WifiNetDevice::GetRemoteStationManager(), ns3::WifiRemoteStationManager::GetStationHtCapabilities(), ns3::WifiRemoteStationManager::GetStationVhtCapabilities(), m_edca, min, NS_ABORT_MSG, NS_ABORT_MSG_IF, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QosUtilsMapTidToAc(), ns3::WIFI_MOD_CLASS_HE, ns3::WIFI_MOD_CLASS_HT, and ns3::WIFI_MOD_CLASS_VHT.
Referenced by GetNextAmsdu().
Ptr< WifiMacQueueItem > ns3::MsduAggregator::GetNextAmsdu | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
WifiTxVector | txVector, | ||
uint32_t | ampduSize = 0 , |
||
Time | ppduDurationLimit = Seconds (0) |
||
) | const |
Dequeue MSDUs to be transmitted to a given station and belonging to a given TID from the corresponding EDCA queue and aggregate them to form an A-MSDU that meets the following constraints:
If it is not possible to aggregate at least two MSDUs, no MSDU is dequeued from the EDCA queue and a null pointer is returned.
recipient | the receiver station address. |
tid | the TID. |
txVector | the TxVector used to transmit the frame |
ampduSize | the size of the existing A-MPDU |
ppduDurationLimit | the limit on the PPDU duration |
Definition at line 109 of file msdu-aggregator.cc.
References Aggregate(), GetMaxAmsduSize(), ns3::WifiTxVector::GetMode(), ns3::WifiMode::GetModulationClass(), ns3::Packet::GetSize(), ns3::WifiMacHeader::GetSize(), GetSizeIfAggregated(), ns3::Mac48Address::IsBroadcast(), m_edca, ns3::Max(), NS_ABORT_MSG_IF, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QosUtilsMapTidToAc(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetQosAmsdu(), and ns3::WIFI_MAC_FCS_LENGTH.
|
static |
Compute the size of the A-MSDU resulting from the aggregation of an MSDU of size msduSize and an A-MSDU of size amsduSize.
Note that only the basic A-MSDU subframe format (section 9.3.2.2.2 of IEEE 802.11-2016) is supported.
msduSize | the MSDU size. |
amsduSize | the A-MSDU size. |
Definition at line 70 of file msdu-aggregator.cc.
References CalculatePadding(), and NS_LOG_FUNCTION.
Referenced by GetNextAmsdu().
|
static |
Get the type ID.
Definition at line 45 of file msdu-aggregator.cc.
References ns3::TypeId::SetParent().
void ns3::MsduAggregator::SetEdcaQueues | ( | EdcaQueues | map | ) |
Set the map of EDCA queues.
map | the map of EDCA queues. |
Definition at line 64 of file msdu-aggregator.cc.
References m_edca.
|
private |
the map of EDCA queues
Definition at line 152 of file msdu-aggregator.h.
Referenced by GetMaxAmsduSize(), GetNextAmsdu(), and SetEdcaQueues().