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

This class handles duplicate detection and recomposition of fragments. More...

#include "mac-rx-middle.h"

+ Inheritance diagram for ns3::MacRxMiddle:

Public Types

typedef Callback< void, Ptr< Packet >, const WifiMacHeader * > ForwardUpCallback
 typedef for callback More...
 

Public Member Functions

 MacRxMiddle ()
 
 ~MacRxMiddle ()
 
void Receive (Ptr< Packet > packet, const WifiMacHeader *hdr)
 Receive a packet. More...
 
void SetForwardCallback (ForwardUpCallback callback)
 Set a callback to forward the packet up. More...
 
void SetPcfCallback (Callback< void > callback)
 Set a callback to trigger the next PCF frame. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< MacRxMiddle >
 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...
 

Private Types

typedef std::map< Mac48Address, OriginatorRxStatus *, std::less< Mac48Address > > Originators
 typedef for a map between address and OriginatorRxStatus More...
 
typedef std::map< Mac48Address, OriginatorRxStatus *, std::less< Mac48Address > >::iterator OriginatorsI
 typedef for an iterator for Originators More...
 
typedef std::map< std::pair< Mac48Address, uint8_t >, OriginatorRxStatus *, std::less< std::pair< Mac48Address, uint8_t > > > QosOriginators
 typedef for a map between address, OriginatorRxStatus, and Traffic ID More...
 
typedef std::map< std::pair< Mac48Address, uint8_t >, OriginatorRxStatus *, std::less< std::pair< Mac48Address, uint8_t > > >::iterator QosOriginatorsI
 typedef for an iterator for QosOriginators More...
 

Private Member Functions

Ptr< PacketHandleFragments (Ptr< Packet > packet, const WifiMacHeader *hdr, OriginatorRxStatus *originator)
 Check if the received packet is a fragment and handle it appropriately. More...
 
bool IsDuplicate (const WifiMacHeader *hdr, OriginatorRxStatus *originator) const
 Check if we have already received the packet from the sender before (by looking at the sequence control field). More...
 
OriginatorRxStatusLookup (const WifiMacHeader *hdr)
 Look up for OriginatorRxStatus associated with the sender address (by looking at ADDR2 field in the header). More...
 

Private Attributes

ForwardUpCallback m_callback
 forward up callback More...
 
Originators m_originatorStatus
 originator status More...
 
Callback< void > m_pcfCallback
 PCF callback. More...
 
QosOriginators m_qosOriginatorStatus
 QOS originator status. More...
 

Friends

class MacRxMiddleTest
 allow MacRxMiddleTest associated class access More...
 

Detailed Description

This class handles duplicate detection and recomposition of fragments.

Definition at line 40 of file mac-rx-middle.h.

Member Typedef Documentation

◆ ForwardUpCallback

typedef for callback

Definition at line 46 of file mac-rx-middle.h.

◆ Originators

typedef for a map between address and OriginatorRxStatus

Definition at line 119 of file mac-rx-middle.h.

◆ OriginatorsI

typedef std::map<Mac48Address, OriginatorRxStatus *, std::less<Mac48Address> >::iterator ns3::MacRxMiddle::OriginatorsI
private

typedef for an iterator for Originators

Definition at line 127 of file mac-rx-middle.h.

◆ QosOriginators

typedef std::map<std::pair<Mac48Address, uint8_t>, OriginatorRxStatus *, std::less<std::pair<Mac48Address,uint8_t> > > ns3::MacRxMiddle::QosOriginators
private

typedef for a map between address, OriginatorRxStatus, and Traffic ID

Definition at line 123 of file mac-rx-middle.h.

◆ QosOriginatorsI

typedef std::map<std::pair<Mac48Address, uint8_t>, OriginatorRxStatus *, std::less<std::pair<Mac48Address,uint8_t> > >::iterator ns3::MacRxMiddle::QosOriginatorsI
private

typedef for an iterator for QosOriginators

Definition at line 131 of file mac-rx-middle.h.

Constructor & Destructor Documentation

◆ MacRxMiddle()

ns3::MacRxMiddle::MacRxMiddle ( )

Definition at line 161 of file mac-rx-middle.cc.

References NS_LOG_FUNCTION_NOARGS.

◆ ~MacRxMiddle()

ns3::MacRxMiddle::~MacRxMiddle ( )

Member Function Documentation

◆ HandleFragments()

Ptr< Packet > ns3::MacRxMiddle::HandleFragments ( Ptr< Packet packet,
const WifiMacHeader hdr,
OriginatorRxStatus originator 
)
private

Check if the received packet is a fragment and handle it appropriately.

If the packet is not a fragment, the method returns the packet. If the packet is a fragment (not the last fragment), the method initiates de-fragmentation process and return 0. If the packet is the last fragment, the method tries to re-construct the full packet and return the packet if success.

Parameters
packet
hdr
originator
Returns
a packet if the packet is successfully reassembled (or not a fragment), 0 if we failed to reassemble the packet (e.g. missing fragments/out-of-order).

Definition at line 240 of file mac-rx-middle.cc.

References ns3::OriginatorRxStatus::AccumulateFirstFragment(), ns3::OriginatorRxStatus::AccumulateFragment(), ns3::OriginatorRxStatus::AccumulateLastFragment(), ns3::WifiMacHeader::GetFragmentNumber(), ns3::WifiMacHeader::GetSequenceControl(), ns3::WifiMacHeader::GetSequenceNumber(), ns3::Packet::GetSize(), ns3::WifiMacHeader::GetSize(), ns3::OriginatorRxStatus::IsDeFragmenting(), ns3::WifiMacHeader::IsMoreFragments(), ns3::OriginatorRxStatus::IsNextFragment(), NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::OriginatorRxStatus::SetSequenceControl().

Referenced by Receive().

◆ IsDuplicate()

bool ns3::MacRxMiddle::IsDuplicate ( const WifiMacHeader hdr,
OriginatorRxStatus originator 
) const
private

Check if we have already received the packet from the sender before (by looking at the sequence control field).

Parameters
hdr
originator
Returns
true if we already received the packet previously, false otherwise

Definition at line 227 of file mac-rx-middle.cc.

References ns3::OriginatorRxStatus::GetLastSequenceControl(), ns3::WifiMacHeader::GetSequenceControl(), ns3::WifiMacHeader::IsRetry(), and NS_LOG_FUNCTION.

Referenced by Receive().

◆ Lookup()

OriginatorRxStatus * ns3::MacRxMiddle::Lookup ( const WifiMacHeader hdr)
private

Look up for OriginatorRxStatus associated with the sender address (by looking at ADDR2 field in the header).

The method creates a new OriginatorRxStatus if one is not already presented.

Parameters
hdr
Returns
OriginatorRxStatus

Definition at line 193 of file mac-rx-middle.cc.

References ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetQosTid(), ns3::Mac48Address::IsGroup(), ns3::WifiMacHeader::IsQosData(), m_originatorStatus, m_qosOriginatorStatus, and NS_LOG_FUNCTION.

Referenced by Receive().

◆ Receive()

void ns3::MacRxMiddle::Receive ( Ptr< Packet packet,
const WifiMacHeader hdr 
)

Receive a packet.

Parameters
packetthe packet
hdrMAC header

The check below is really unneeded because it can fail in a lot of normal cases. Specifically, it is possible for sequence numbers to loop back to zero once they reach 0xfff0 and to go up to 0xf7f0 in which case the check below will report the two sequence numbers to not have the correct order relationship. So, this check cannot be used to discard old duplicate frames. It is thus here only for documentation purposes.

Definition at line 299 of file mac-rx-middle.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetFragmentNumber(), ns3::OriginatorRxStatus::GetLastSequenceControl(), ns3::WifiMacHeader::GetSequenceControl(), ns3::WifiMacHeader::GetSequenceNumber(), HandleFragments(), ns3::WifiMacHeader::IsData(), IsDuplicate(), ns3::Mac48Address::IsGroup(), ns3::WifiMacHeader::IsMgt(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), Lookup(), m_callback, m_pcfCallback, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::OriginatorRxStatus::SetSequenceControl().

Referenced by ns3::OcbWifiMac::EnableForWave(), and ns3::RegularWifiMac::RegularWifiMac().

◆ SetForwardCallback()

void ns3::MacRxMiddle::SetForwardCallback ( ForwardUpCallback  callback)

Set a callback to forward the packet up.

Parameters
callback

Definition at line 186 of file mac-rx-middle.cc.

References m_callback, and NS_LOG_FUNCTION_NOARGS.

◆ SetPcfCallback()

void ns3::MacRxMiddle::SetPcfCallback ( Callback< void >  callback)

Set a callback to trigger the next PCF frame.

Parameters
callback

Definition at line 346 of file mac-rx-middle.cc.

References m_pcfCallback.

Friends And Related Function Documentation

◆ MacRxMiddleTest

friend class MacRxMiddleTest
friend

allow MacRxMiddleTest associated class access

Definition at line 76 of file mac-rx-middle.h.

Member Data Documentation

◆ m_callback

ForwardUpCallback ns3::MacRxMiddle::m_callback
private

forward up callback

Definition at line 135 of file mac-rx-middle.h.

Referenced by Receive(), and SetForwardCallback().

◆ m_originatorStatus

Originators ns3::MacRxMiddle::m_originatorStatus
private

originator status

Definition at line 133 of file mac-rx-middle.h.

Referenced by Lookup(), and ~MacRxMiddle().

◆ m_pcfCallback

Callback<void> ns3::MacRxMiddle::m_pcfCallback
private

PCF callback.

Definition at line 137 of file mac-rx-middle.h.

Referenced by Receive(), and SetPcfCallback().

◆ m_qosOriginatorStatus

QosOriginators ns3::MacRxMiddle::m_qosOriginatorStatus
private

QOS originator status.

Definition at line 134 of file mac-rx-middle.h.

Referenced by Lookup(), and ~MacRxMiddle().


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