22 #include "ns3/uinteger.h"
23 #include "ns3/trace-source-accessor.h"
27 NS_OBJECT_ENSURE_REGISTERED (WifiMac);
30 WifiMac::GetDefaultMaxPropagationDelay (
void)
33 return Seconds (1000.0 / 300000000.0);
36 WifiMac::GetDefaultSlot (
void)
42 WifiMac::GetDefaultSifs (
void)
48 WifiMac::GetDefaultEifsNoDifs (
void)
50 return GetDefaultSifs () + GetDefaultCtsAckDelay ();
53 WifiMac::GetDefaultCtsAckDelay (
void)
59 WifiMac::GetDefaultCtsAckTimeout (
void)
65 Time ctsTimeout = GetDefaultSifs ();
66 ctsTimeout += GetDefaultCtsAckDelay ();
67 ctsTimeout +=
MicroSeconds (GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2);
68 ctsTimeout += GetDefaultSlot ();
73 WifiMac::GetDefaultBasicBlockAckDelay (
void)
79 WifiMac::GetDefaultCompressedBlockAckDelay (
void)
85 WifiMac::GetDefaultBasicBlockAckTimeout (
void)
87 Time blockAckTimeout = GetDefaultSifs ();
88 blockAckTimeout += GetDefaultBasicBlockAckDelay ();
89 blockAckTimeout +=
MicroSeconds (GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2);
90 blockAckTimeout += GetDefaultSlot ();
91 return blockAckTimeout;
94 WifiMac::GetDefaultCompressedBlockAckTimeout (
void)
96 Time blockAckTimeout = GetDefaultSifs ();
97 blockAckTimeout += GetDefaultCompressedBlockAckDelay ();
98 blockAckTimeout +=
MicroSeconds (GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2);
99 blockAckTimeout += GetDefaultSlot ();
100 return blockAckTimeout;
104 WifiMac::SetBasicBlockAckTimeout (Time blockAckTimeout)
110 WifiMac::GetBasicBlockAckTimeout (
void)
const
117 WifiMac::SetCompressedBlockAckTimeout (Time blockAckTimeout)
123 WifiMac::GetCompressedBlockAckTimeout (
void)
const
130 WifiMac::GetTypeId (
void)
132 static TypeId tid = TypeId (
"ns3::WifiMac")
133 .SetParent<Object> ()
134 .AddAttribute (
"CtsTimeout",
"When this timeout expires, the RTS/CTS handshake has failed.",
135 TimeValue (GetDefaultCtsAckTimeout ()),
139 .AddAttribute (
"AckTimeout",
"When this timeout expires, the DATA/ACK handshake has failed.",
140 TimeValue (GetDefaultCtsAckTimeout ()),
144 .AddAttribute (
"BasicBlockAckTimeout",
"When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.",
145 TimeValue (GetDefaultBasicBlockAckTimeout ()),
146 MakeTimeAccessor (&WifiMac::GetBasicBlockAckTimeout,
147 &WifiMac::SetBasicBlockAckTimeout),
149 .AddAttribute (
"CompressedBlockAckTimeout",
"When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.",
150 TimeValue (GetDefaultCompressedBlockAckTimeout ()),
151 MakeTimeAccessor (&WifiMac::GetCompressedBlockAckTimeout,
152 &WifiMac::SetCompressedBlockAckTimeout),
154 .AddAttribute (
"Sifs",
"The value of the SIFS constant.",
155 TimeValue (GetDefaultSifs ()),
159 .AddAttribute (
"EifsNoDifs",
"The value of EIFS-DIFS",
160 TimeValue (GetDefaultEifsNoDifs ()),
164 .AddAttribute (
"Slot",
"The duration of a Slot.",
165 TimeValue (GetDefaultSlot ()),
169 .AddAttribute (
"Pifs",
"The value of the PIFS constant.",
170 TimeValue (GetDefaultSifs () + GetDefaultSlot ()),
174 .AddAttribute (
"MaxPropagationDelay",
"The maximum propagation delay. Unused for now.",
175 TimeValue (GetDefaultMaxPropagationDelay ()),
176 MakeTimeAccessor (&WifiMac::m_maxPropagationDelay),
178 .AddAttribute (
"Ssid",
"The ssid we want to belong to.",
179 SsidValue (Ssid (
"default")),
183 .AddTraceSource (
"MacTx",
184 "A packet has been received from higher layers and is being processed in preparation for "
185 "queueing for transmission.",
187 .AddTraceSource (
"MacTxDrop",
188 "A packet has been dropped in the MAC layer before being queued for transmission.",
190 .AddTraceSource (
"MacPromiscRx",
191 "A packet has been received by this device, has been passed up from the physical layer "
192 "and is being forwarded up the local protocol stack. This is a promiscuous trace,",
194 .AddTraceSource (
"MacRx",
195 "A packet has been received by this device, has been passed up from the physical layer "
196 "and is being forwarded up the local protocol stack. This is a non-promiscuous trace,",
198 .AddTraceSource (
"MacRxDrop",
199 "A packet has been dropped in the MAC layer after it has been passed up from the physical "
204 .AddTraceSource (
"Sniffer",
205 "Trace source simulating a non-promiscuous packet sniffer attached to the device",
216 m_maxPropagationDelay = delay;
227 return m_maxPropagationDelay;
275 Configure80211_10Mhz ();
278 Configure80211_5Mhz ();
284 Configure80211p_CCH ();
287 Configure80211p_SCH ();
297 WifiMac::Configure80211a (
void)
308 WifiMac::Configure80211b (
void)
319 WifiMac::Configure80211g (
void)
331 WifiMac::Configure80211_10Mhz (
void)
342 WifiMac::Configure80211_5Mhz (
void)
353 WifiMac::Configure80211p_CCH (
void)
355 Configure80211_10Mhz ();
359 WifiMac::Configure80211p_SCH (
void)
361 Configure80211_10Mhz ();
365 WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax,
enum AcIndex ac)
371 dcf->SetMinCw ((cwmin + 1) / 4 - 1);
372 dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
376 dcf->SetMinCw ((cwmin + 1) / 2 - 1);
377 dcf->SetMaxCw (cwmin);
381 dcf->SetMinCw (cwmin);
382 dcf->SetMaxCw (cwmax);
386 dcf->SetMinCw (cwmin);
387 dcf->SetMaxCw (cwmax);
391 dcf->SetMinCw (cwmin);
392 dcf->SetMaxCw (cwmax);
402 WifiMac::ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax,
enum AcIndex ac)
408 dcf->SetMinCw ((cwmin + 1) / 4 - 1);
409 dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
413 dcf->SetMinCw ((cwmin + 1) / 4 - 1);
414 dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
418 dcf->SetMinCw ((cwmin + 1) / 2 - 1);
419 dcf->SetMaxCw (cwmin);
423 dcf->SetMinCw (cwmin);
424 dcf->SetMaxCw (cwmax);
428 dcf->SetMinCw (cwmin);
429 dcf->SetMaxCw (cwmax);
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)=0
virtual Time GetPifs(void) const =0
virtual void SetPifs(Time pifs)=0
virtual void SetAckTimeout(Time ackTimeout)=0
#define NS_ASSERT(condition)
void ConfigureStandard(enum WifiPhyStandard standard)
TracedCallback< Ptr< const Packet > > m_macRxDropTrace
virtual Time GetAckTimeout(void) const =0
TracedCallback< Ptr< const Packet > > m_macTxDropTrace
void NotifyRxDrop(Ptr< const Packet > packet)
TracedCallback< Ptr< const Packet > > m_macPromiscRxTrace
virtual void SetSsid(Ssid ssid)=0
#define NS_FATAL_ERROR(msg)
fatal error handling
virtual Ssid GetSsid(void) const =0
TracedCallback< Ptr< const Packet > > m_macTxTrace
void NotifyTxDrop(Ptr< const Packet > packet)
virtual Time GetSlot(void) const =0
void NotifyPromiscRx(Ptr< const Packet > packet)
void NotifyTx(Ptr< const Packet > packet)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
virtual void SetEifsNoDifs(Time eifsNoDifs)=0
virtual void SetCtsTimeout(Time ctsTimeout)=0
Time GetMaxPropagationDelay(void) const
void NotifyRx(Ptr< const Packet > packet)
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
TracedCallback< Ptr< const Packet > > m_macRxTrace
void SetMaxPropagationDelay(Time delay)
virtual void SetSifs(Time sifs)=0
virtual Time GetSifs(void) const =0
Time GetMsduLifetime(void) const
virtual Time GetCtsTimeout(void) const =0
Time MicroSeconds(uint64_t us)
create ns3::Time instances in units of microseconds.
virtual Time GetEifsNoDifs(void) const =0
virtual void SetSlot(Time slotTime)=0