00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef MAC_RX_MIDDLE_H
00022 #define MAC_RX_MIDDLE_H
00023
00024 #include <map>
00025 #include <utility>
00026 #include "ns3/callback.h"
00027 #include "ns3/mac48-address.h"
00028 #include "ns3/packet.h"
00029
00030 namespace ns3 {
00031
00032 class WifiMacHeader;
00033 class OriginatorRxStatus;
00034
00035 class MacRxMiddle
00036 {
00037 public:
00038 typedef Callback<void, Ptr<Packet> , WifiMacHeader const *> ForwardUpCallback;
00039
00040 MacRxMiddle ();
00041 ~MacRxMiddle ();
00042
00043 void SetForwardCallback (ForwardUpCallback callback);
00044
00045 void Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
00046 private:
00047 OriginatorRxStatus *Lookup (WifiMacHeader const*hdr);
00048 bool IsDuplicate (WifiMacHeader const *hdr, OriginatorRxStatus *originator) const;
00049 Ptr<Packet> HandleFragments (Ptr<Packet> packet, WifiMacHeader const*hdr,
00050 OriginatorRxStatus *originator);
00051 bool SequenceControlSmaller (int seqa, int seqb);
00052
00053 typedef std::map <Mac48Address, OriginatorRxStatus *, std::less<Mac48Address> > Originators;
00054 typedef std::map <std::pair<Mac48Address, uint8_t>, OriginatorRxStatus *, std::less<std::pair<Mac48Address,uint8_t> > > QosOriginators;
00055 typedef std::map <Mac48Address, OriginatorRxStatus *, std::less<Mac48Address> >::iterator OriginatorsI;
00056 typedef std::map <std::pair<Mac48Address, uint8_t>, OriginatorRxStatus *, std::less<std::pair<Mac48Address,uint8_t> > >::iterator QosOriginatorsI;
00057 Originators m_originatorStatus;
00058 QosOriginators m_qosOriginatorStatus;
00059 ForwardUpCallback m_callback;
00060 };
00061
00062 }
00063
00064
00065 #endif