A Discrete-Event Network Simulator
API
ns3::MacRxMiddle Class Reference

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

#include "mac-rx-middle.h"

+ Inheritance diagram for ns3::MacRxMiddle:
+ Collaboration 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...
 
- 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 interator 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 interator 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...
 
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 38 of file mac-rx-middle.h.

Member Typedef Documentation

typedef for callback

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

typedef for a map between address and OriginatorRxStatus

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

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

typedef for an interator for Originators

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

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 114 of file mac-rx-middle.h.

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

typedef for an interator for QosOriginators

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

Constructor & Destructor Documentation

ns3::MacRxMiddle::MacRxMiddle ( )

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

References NS_LOG_FUNCTION_NOARGS.

ns3::MacRxMiddle::~MacRxMiddle ( )

Member Function Documentation

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 239 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().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 226 of file mac-rx-middle.cc.

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

Referenced by Receive().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 192 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().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Receive a packet.

Parameters
packetthe packet
hdrMAC header

The check below is really uneeded 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 298 of file mac-rx-middle.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetFragmentNumber(), ns3::WifiMacHeader::GetSequenceControl(), ns3::WifiMacHeader::GetSequenceNumber(), HandleFragments(), ns3::WifiMacHeader::IsData(), IsDuplicate(), ns3::Mac48Address::IsGroup(), ns3::WifiMacHeader::IsMgt(), Lookup(), m_callback, NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

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

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Set a callback to forward the packet up.

Parameters
callback

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

References m_callback, and NS_LOG_FUNCTION_NOARGS.

Friends And Related Function Documentation

friend class MacRxMiddleTest
friend

allow MacRxMiddleTest associated class access

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

Member Data Documentation

ForwardUpCallback ns3::MacRxMiddle::m_callback
private

forward up callback

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

Referenced by Receive(), and SetForwardCallback().

Originators ns3::MacRxMiddle::m_originatorStatus
private

originator status

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

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

QosOriginators ns3::MacRxMiddle::m_qosOriginatorStatus
private

QOS originator status.

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

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


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