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"

+ 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)
 
void SetForwardCallback (ForwardUpCallback callback)
 Set a callback to forward the packet up. 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
 
Originators m_originatorStatus
 
QosOriginators m_qosOriginatorStatus
 

Friends

class MacRxMiddleTest
 

Detailed Description

This class handles duplicate detection and recomposition of fragments.

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

Member Typedef Documentation

typedef for callback

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

typedef for a map between address and OriginatorRxStatus

Definition at line 105 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 113 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 109 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 117 of file mac-rx-middle.h.

Constructor & Destructor Documentation

ns3::MacRxMiddle::MacRxMiddle ( )

Definition at line 164 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 243 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 230 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 196 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 
)

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

References m_callback, and NS_LOG_FUNCTION_NOARGS.

Referenced by ns3::RegularWifiMac::RegularWifiMac().

+ Here is the caller graph for this function:

Friends And Related Function Documentation

friend class MacRxMiddleTest
friend

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

Member Data Documentation

ForwardUpCallback ns3::MacRxMiddle::m_callback
private

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

Referenced by Receive(), and SetForwardCallback().

Originators ns3::MacRxMiddle::m_originatorStatus
private

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

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

QosOriginators ns3::MacRxMiddle::m_qosOriginatorStatus
private

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

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


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