This class handles duplicate detection and recomposition of fragments. More...
#include <mac-rx-middle.h>
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< Packet > | HandleFragments (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... | |
OriginatorRxStatus * | Lookup (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 |
This class handles duplicate detection and recomposition of fragments.
Definition at line 40 of file mac-rx-middle.h.
typedef Callback<void, Ptr<Packet>, const WifiMacHeader*> ns3::MacRxMiddle::ForwardUpCallback |
typedef for callback
Definition at line 46 of file mac-rx-middle.h.
|
private |
typedef for a map between address and OriginatorRxStatus
Definition at line 100 of file mac-rx-middle.h.
|
private |
typedef for an interator for Originators
Definition at line 108 of file mac-rx-middle.h.
|
private |
typedef for a map between address, OriginatorRxStatus, and Traffic ID
Definition at line 104 of file mac-rx-middle.h.
|
private |
typedef for an interator for QosOriginators
Definition at line 112 of file mac-rx-middle.h.
ns3::MacRxMiddle::MacRxMiddle | ( | ) |
Definition at line 163 of file mac-rx-middle.cc.
References NS_LOG_FUNCTION_NOARGS.
ns3::MacRxMiddle::~MacRxMiddle | ( | ) |
Definition at line 168 of file mac-rx-middle.cc.
References m_originatorStatus, m_qosOriginatorStatus, and NS_LOG_FUNCTION_NOARGS.
|
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.
packet | |
hdr | |
originator |
Definition at line 242 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().
|
private |
Check if we have already received the packet from the sender before (by looking at the sequence control field).
hdr | |
originator |
Definition at line 229 of file mac-rx-middle.cc.
References ns3::OriginatorRxStatus::GetLastSequenceControl(), ns3::WifiMacHeader::GetSequenceControl(), ns3::WifiMacHeader::IsRetry(), and NS_LOG_FUNCTION.
Referenced by Receive().
|
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.
hdr |
Definition at line 195 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().
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 301 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::OcbWifiMac(), and ns3::RegularWifiMac::RegularWifiMac().
void ns3::MacRxMiddle::SetForwardCallback | ( | ForwardUpCallback | callback | ) |
Set a callback to forward the packet up.
callback |
Definition at line 188 of file mac-rx-middle.cc.
References m_callback, and NS_LOG_FUNCTION_NOARGS.
Referenced by ns3::RegularWifiMac::RegularWifiMac().
|
friend |
Definition at line 60 of file mac-rx-middle.h.
|
private |
Definition at line 115 of file mac-rx-middle.h.
Referenced by Receive(), and SetForwardCallback().
|
private |
Definition at line 113 of file mac-rx-middle.h.
Referenced by Lookup(), and ~MacRxMiddle().
|
private |
Definition at line 114 of file mac-rx-middle.h.
Referenced by Lookup(), and ~MacRxMiddle().