23 #include "ns3/boolean.h"
24 #include "ns3/pointer.h"
25 #include "ns3/uinteger.h"
26 #include "ns3/trace-source-accessor.h"
51 m_low = CreateObject<MacLow> ();
57 m_dca = CreateObject<DcaTxop> ();
84 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
86 i->second->Initialize ();
112 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
124 m_low->SetWifiRemoteStationManager (stationManager);
126 m_dca->SetWifiRemoteStationManager (stationManager);
128 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
130 i->second->SetWifiRemoteStationManager (stationManager);
155 edca->SetAccessCategory (ac);
156 edca->CompleteConfig ();
157 m_edca.insert (std::make_pair (ac, edca));
164 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
166 i->second->SetTypeOfStation (type);
264 m_low->SetCtsToSelfSupported (enable);
270 return m_low->GetCtsToSelfSupported ();
278 m_low->SetSlotTime (slotTime);
284 return m_low->GetSlotTime ();
292 m_low->SetSifs (sifs);
298 return m_low->GetSifs ();
317 m_low->SetRifs (rifs);
323 return m_low->GetRifs();
330 m_low->SetPifs (pifs);
336 return m_low->GetPifs ();
343 m_low->SetAckTimeout (ackTimeout);
349 return m_low->GetAckTimeout ();
356 m_low->SetCtsTimeout (ctsTimeout);
362 return m_low->GetCtsTimeout ();
369 m_low->SetBasicBlockAckTimeout (blockAckTimeout);
375 return m_low->GetBasicBlockAckTimeout ();
382 m_low->SetCompressedBlockAckTimeout (blockAckTimeout);
388 return m_low->GetCompressedBlockAckTimeout ();
395 m_low->SetAddress (address);
401 return m_low->GetAddress ();
421 m_low->SetBssid (bssid);
427 return m_low->GetBssid ();
433 m_low->SetPromisc ();
445 <<
") does not support Enqueue() with from address");
520 m_edca[ac]->GotAddBaResponse (&respHdr, from);
536 m_low->DestroyBlockAckAgreement (from, delBaHdr.
GetTid ());
544 m_edca[ac]->GotDelBaFrame (&delBaHdr, from);
551 NS_FATAL_ERROR (
"Unsupported Action field in Block Ack Action frame");
572 i != packets.end (); ++i)
574 ForwardUp ((*i).first, (*i).second.GetSourceAddr (),
575 (*i).second.GetDestinationAddr ());
629 m_low->CreateBlockAckAgreement (&respHdr, originator,
643 .AddAttribute (
"QosSupported",
644 "This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA",
648 MakeBooleanChecker ())
649 .AddAttribute (
"HtSupported",
650 "This Boolean attribute is set to enable 802.11n support at this STA",
654 MakeBooleanChecker ())
655 .AddAttribute (
"CtsToSelfSupported",
656 "Use CTS to Self when using a rate that is not in the basic set rate",
660 MakeBooleanChecker ())
661 .AddAttribute (
"DcaTxop",
"The DcaTxop object",
664 MakePointerChecker<DcaTxop> ())
665 .AddAttribute (
"VO_EdcaTxopN",
666 "Queue that manages packets belonging to AC_VO access class",
669 MakePointerChecker<EdcaTxopN> ())
670 .AddAttribute (
"VI_EdcaTxopN",
671 "Queue that manages packets belonging to AC_VI access class",
674 MakePointerChecker<EdcaTxopN> ())
675 .AddAttribute (
"BE_EdcaTxopN",
676 "Queue that manages packets belonging to AC_BE access class",
679 MakePointerChecker<EdcaTxopN> ())
680 .AddAttribute (
"BK_EdcaTxopN",
681 "Queue that manages packets belonging to AC_BK access class",
684 MakePointerChecker<EdcaTxopN> ())
685 .AddTraceSource (
"TxOkHeader",
686 "The header of successfully transmitted packet",
688 .AddTraceSource (
"TxErrHeader",
689 "The header of unsuccessfully transmitted packet",
721 NS_FATAL_ERROR (
"Unsupported WifiPhyStandard in RegularWifiMac::FinishConfigureStandard ()");
729 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
void SetQosSupported(bool enable)
uint32_t RemoveHeader(Header &header)
keep track of time values and allow control of global simulation resolution
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
virtual void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > stationManager)
ForwardUpCallback m_forwardUp
void SetForwardCallback(ForwardUpCallback callback)
bool GetCtsToSelfSupported() const
static TypeId GetTypeId(void)
virtual void SetCompressedBlockAckTimeout(Time blockAckTimeout)
void SetupLowListener(Ptr< MacLow > low)
#define NS_ASSERT(condition)
Callback< void > m_linkUp
#define NS_LOG_COMPONENT_DEFINE(name)
std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > >::const_iterator DeaggregatedMsdusCI
virtual void SetSsid(Ssid ssid)
void SetSlot(Time slotTime)
virtual Time GetCompressedBlockAckTimeout(void) const
static DeaggregatedMsdus Deaggregate(Ptr< Packet > aggregatedPacket)
bool GetQosSupported() const
virtual void DeaggregateAmsduAndForward(Ptr< Packet > aggregatedPacket, const WifiMacHeader *hdr)
virtual void SetLinkDownCallback(Callback< void > linkDown)
void SetHtSupported(bool enable)
virtual Ssid GetSsid(void) const
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to, Mac48Address from)
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
#define NS_FATAL_ERROR(msg)
fatal error handling
void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
TracedCallback< const WifiMacHeader & > m_txErrCallback
virtual Ptr< WifiRemoteStationManager > GetWifiRemoteStationManager() const
virtual void SetBssid(Mac48Address bssid)
Ptr< EdcaTxopN > GetVOQueue(void) const
void SetLow(Ptr< MacLow > low)
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Time GetCtsTimeout(void) const
virtual void SetForwardUpCallback(ForwardUpCallback upCallback)
void SetEifsNoDifs(Time eifsNoDifs)
virtual void SetBasicBlockAckTimeout(Time blockAckTimeout)
virtual void SetWifiPhy(Ptr< WifiPhy > phy)
void SetTypeOfStation(TypeOfStation type)
Ptr< EdcaTxopN > GetBEQueue(void) const
Ptr< DcaTxop > GetDcaTxop(void) const
base class for all MAC-level wifi objects.This class encapsulates all the low-level MAC functionality...
void ConfigureDcf(Ptr< Dcf > dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac)
Time GetAckTimeout(void) const
void SetupPhyListener(Ptr< WifiPhy > phy)
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
Manage a set of ns3::DcfStateHandle a set of independent ns3::DcfState, each of which represents a si...
AcIndex QosUtilsMapTidToAc(uint8_t tid)
virtual void SetAddress(Mac48Address address)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
virtual void SendAddBaResponse(const MgtAddBaRequestHeader *reqHdr, Mac48Address originator)
Callback< void > m_linkDown
TracedCallback< const WifiMacHeader & > m_txOkCallback
Ptr< EdcaTxopN > GetVIQueue(void) const
virtual void SetLinkUpCallback(Callback< void > linkUp)
std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > > DeaggregatedMsdus
hold objects of type Ptr<T>
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
DcfManager * m_dcfManager
void SetEifsNoDifs(Time eifsNoDifs)
void SetCtsTimeout(Time ctsTimeout)
virtual ~RegularWifiMac()
virtual bool SupportsSendFrom(void) const
virtual Ptr< WifiPhy > GetWifiPhy() const
virtual Mac48Address GetBssid(void) const
void SetSlot(Time slotTime)
Ptr< EdcaTxopN > GetBKQueue(void) const
virtual Time GetBasicBlockAckTimeout(void) const
virtual Mac48Address GetAddress(void) const
Time GetEifsNoDifs() const
virtual void DoInitialize()
bool GetHtSupported() const
virtual void TxOk(const WifiMacHeader &hdr)
void SetCtsToSelfSupported(bool enable)
Ptr< WifiRemoteStationManager > m_stationManager
virtual void SetPromisc(void)
Sets the interface in promiscuous mode.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
void SetAckTimeout(Time ackTimeout)
void AddHeader(const Header &header)
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)
virtual void TxFailed(const WifiMacHeader &hdr)
Time GetEifsNoDifs(void) const
void SetupEdcaQueue(enum AcIndex ac)