A Discrete-Event Network Simulator
API
wifi-tx-timer.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Stefano Avallone <stavallo@unina.it>
19  */
20 
21 #include "ns3/log.h"
22 #include "wifi-tx-timer.h"
23 #include "wifi-mac-queue-item.h"
24 #include "wifi-tx-vector.h"
25 #include "wifi-psdu.h"
26 
27 
28 namespace ns3 {
29 
30 NS_LOG_COMPONENT_DEFINE ("WifiTxTimer");
31 
33  : m_reason (NOT_RUNNING),
34  m_rescheduled (false)
35 {
36 }
37 
39 {
41  m_endRxEvent = 0;
42 }
43 
44 void
46 {
47  NS_LOG_FUNCTION (this << delay);
48 
50  {
51  NS_LOG_DEBUG ("Rescheduling " << GetReasonString (m_reason) << " timeout in "
52  << delay.As (Time::US));
55  m_rescheduled = true;
56  }
57 }
58 
61 {
62  NS_ASSERT (IsRunning ());
63  return m_reason;
64 }
65 
66 std::string
68 {
69 #define FOO(x) \
70 case WAIT_ ## x: \
71  return # x; \
72  break;
73 
74  switch (reason)
75  {
76  case NOT_RUNNING:
77  return "NOT_RUNNING";
78  break;
79  FOO (CTS);
80  FOO (NORMAL_ACK);
81  FOO (BLOCK_ACK);
82  FOO (NORMAL_ACK_AFTER_DL_MU_PPDU);
83  FOO (BLOCK_ACKS_IN_TB_PPDU);
84  FOO (TB_PPDU_AFTER_BASIC_TF);
85  FOO (QOS_NULL_AFTER_BSRP_TF);
86  FOO (BLOCK_ACK_AFTER_TB_PPDU);
87  default:
88  NS_ABORT_MSG ("Unknown reason");
89  }
90 #undef FOO
91 }
92 
93 bool
95 {
96  return m_timeoutEvent.IsRunning ();
97 }
98 
99 void
101 {
104  m_endRxEvent = 0;
105 }
106 
107 Time
109 {
111 }
112 
113 void
115 {
117 }
118 
119 void
121 {
123  {
124  m_mpduResponseTimeoutCallback (m_reason, item, txVector);
125  }
126 }
127 
128 void
130 {
132 }
133 
134 void
136 {
138  {
139  m_psduResponseTimeoutCallback (m_reason, psdu, txVector);
140  }
141 }
142 
143 void
145 {
147 }
148 
149 void
150 WifiTxTimer::FeedTraceSource (WifiPsduMap* psduMap, std::set<Mac48Address>* missingStations,
151  std::size_t nTotalStations)
152 {
154  {
155  m_psduMapResponseTimeoutCallback (m_reason, psduMap, missingStations, nTotalStations);
156  }
157 }
158 
159 } //namespace ns3
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
ns3::WifiTxTimer::GetReasonString
std::string GetReasonString(Reason reason) const
Get a string associated with the given reason.
Definition: wifi-tx-timer.cc:67
NS_ASSERT
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
ns3::WifiPsduMap
std::unordered_map< uint16_t, Ptr< WifiPsdu > > WifiPsduMap
Map of PSDUs indexed by STA-ID.
Definition: he-frame-exchange-manager.h:34
ns3::WifiTxTimer::m_endRxEvent
Ptr< EventImpl > m_endRxEvent
event to schedule upon RXSTART.indication
Definition: wifi-tx-timer.h:219
ns3::WifiTxTimer::~WifiTxTimer
virtual ~WifiTxTimer()
Definition: wifi-tx-timer.cc:38
ns3::Callback< void, uint8_t, Ptr< const WifiMacQueueItem >, const WifiTxVector & >
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::WifiTxTimer::GetDelayLeft
Time GetDelayLeft(void) const
Get the remaining time until the timer will expire.
Definition: wifi-tx-timer.cc:108
ns3::WifiTxTimer::m_psduResponseTimeoutCallback
PsduResponseTimeout m_psduResponseTimeoutCallback
the PSDU response timeout callback
Definition: wifi-tx-timer.h:225
ns3::Callback::IsNull
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1386
ns3::WifiTxTimer::SetPsduResponseTimeoutCallback
void SetPsduResponseTimeoutCallback(PsduResponseTimeout callback) const
Set the callback to invoke when the TX timer following the transmission of a PSDU expires.
Definition: wifi-tx-timer.cc:129
ns3::Simulator::GetDelayLeft
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute.
Definition: simulator.cc:204
ns3::WifiTxTimer::IsRunning
bool IsRunning(void) const
Return true if the timer is running.
Definition: wifi-tx-timer.cc:94
ns3::Time::US
@ US
microsecond
Definition: nstime.h:117
ns3::WifiTxTimer::FeedTraceSource
void FeedTraceSource(Ptr< WifiMacQueueItem > item, WifiTxVector txVector)
This method is called when the timer expires to feed the MPDU response timeout callback.
Definition: wifi-tx-timer.cc:120
ns3::WifiTxVector
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Definition: wifi-tx-vector.h:71
wifi-mac-queue-item.h
ns3::WifiTxTimer::m_mpduResponseTimeoutCallback
MpduResponseTimeout m_mpduResponseTimeoutCallback
the MPDU response timeout callback
Definition: wifi-tx-timer.h:223
ns3::Time::As
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
Definition: time.cc:429
ns3::WifiTxTimer::SetPsduMapResponseTimeoutCallback
void SetPsduMapResponseTimeoutCallback(PsduMapResponseTimeout callback) const
Set the callback to invoke when the TX timer following the transmission of a PSDU map expires.
Definition: wifi-tx-timer.cc:144
ns3::WifiTxTimer::SetMpduResponseTimeoutCallback
void SetMpduResponseTimeoutCallback(MpduResponseTimeout callback) const
Set the callback to invoke when the TX timer following the transmission of an MPDU expires.
Definition: wifi-tx-timer.cc:114
ns3::Simulator::Schedule
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:557
wifi-psdu.h
ns3::Ptr< WifiMacQueueItem >
ns3::EventId::IsRunning
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
Definition: event-id.cc:71
ns3::WifiTxTimer::Reschedule
void Reschedule(const Time &delay)
Reschedule the timer to time out the given amount of time from the moment this function is called.
Definition: wifi-tx-timer.cc:45
wifi-tx-vector.h
ns3::EventId::Cancel
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
Definition: event-id.cc:53
wifi-tx-timer.h
ns3::Time
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
ns3::WifiTxTimer::Reason
Reason
The reason why the timer was started.
Definition: wifi-tx-timer.h:55
ns3::WifiTxTimer::m_timeoutEvent
EventId m_timeoutEvent
the timeout event after a missing response
Definition: wifi-tx-timer.h:217
FOO
#define FOO(x)
ns3::WifiTxTimer::m_rescheduled
bool m_rescheduled
whether the timer has been already rescheduled
Definition: wifi-tx-timer.h:220
ns3::WifiTxTimer::WifiTxTimer
WifiTxTimer()
Default constructor.
Definition: wifi-tx-timer.cc:32
NS_LOG_DEBUG
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Definition: log-macros-enabled.h:244
ns3::WifiTxTimer::m_psduMapResponseTimeoutCallback
PsduMapResponseTimeout m_psduMapResponseTimeoutCallback
the PSDU map response timeout callback
Definition: wifi-tx-timer.h:227
ns3::WifiTxTimer::GetReason
Reason GetReason(void) const
Get the reason why the timer was started.
Definition: wifi-tx-timer.cc:60
ns3::WifiTxTimer::m_reason
Reason m_reason
the reason why the timer was started
Definition: wifi-tx-timer.h:218
ns3::WifiTxTimer::NOT_RUNNING
@ NOT_RUNNING
Definition: wifi-tx-timer.h:56
ns3::WifiTxTimer::Cancel
void Cancel(void)
Cancel the timer.
Definition: wifi-tx-timer.cc:100
NS_ABORT_MSG
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:50