A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
mac-low-transmission-parameters.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2005,2006 INRIA
4
* Copyright (c) 2009 MIRKO BANCHI
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation;
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
*
19
* Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20
* Mirko Banchi <mk.banchi@gmail.com>
21
*/
22
23
#include "
mac-low-transmission-parameters.h
"
24
25
namespace
ns3
{
26
27
MacLowTransmissionParameters::MacLowTransmissionParameters
()
28
: m_nextSize (0),
29
m_waitAck (ACK_NONE),
30
m_sendBar (BLOCK_ACK_REQUEST_NONE),
31
m_sendRts (false)
32
{
33
}
34
35
void
36
MacLowTransmissionParameters::EnableNextData
(uint32_t size)
37
{
38
m_nextSize
= size;
39
}
40
41
void
42
MacLowTransmissionParameters::DisableNextData
(
void
)
43
{
44
m_nextSize
= 0;
45
}
46
47
void
48
MacLowTransmissionParameters::EnableBlockAck
(
BlockAckType
type)
49
{
50
switch
(type)
51
{
52
case
BlockAckType::BASIC_BLOCK_ACK
:
53
m_waitAck
=
BLOCK_ACK_BASIC
;
54
break
;
55
case
BlockAckType::COMPRESSED_BLOCK_ACK
:
56
m_waitAck
=
BLOCK_ACK_COMPRESSED
;
57
break
;
58
case
BlockAckType::EXTENDED_COMPRESSED_BLOCK_ACK
:
59
m_waitAck
=
BLOCK_ACK_EXTENDED_COMPRESSED
;
60
break
;
61
case
BlockAckType::MULTI_TID_BLOCK_ACK
:
62
m_waitAck
=
BLOCK_ACK_MULTI_TID
;
63
break
;
64
default
:
65
NS_FATAL_ERROR
(
"Unknown Block ack type"
);
66
break
;
67
}
68
69
// Reset m_sendBar
70
m_sendBar
=
BLOCK_ACK_REQUEST_NONE
;
71
}
72
73
void
74
MacLowTransmissionParameters::EnableBlockAckRequest
(
BlockAckType
type)
75
{
76
switch
(type)
77
{
78
case
BlockAckType::BASIC_BLOCK_ACK
:
79
m_sendBar
=
BLOCK_ACK_REQUEST_BASIC
;
80
break
;
81
case
BlockAckType::COMPRESSED_BLOCK_ACK
:
82
m_sendBar
=
BLOCK_ACK_REQUEST_COMPRESSED
;
83
break
;
84
case
BlockAckType::EXTENDED_COMPRESSED_BLOCK_ACK
:
85
m_sendBar
=
BLOCK_ACK_REQUEST_EXTENDED_COMPRESSED
;
86
break
;
87
case
BlockAckType::MULTI_TID_BLOCK_ACK
:
88
m_sendBar
=
BLOCK_ACK_REQUEST_MULTI_TID
;
89
break
;
90
default
:
91
NS_FATAL_ERROR
(
"Unknown Block Ack Request type"
);
92
break
;
93
}
94
95
// Reset m_waitAck
96
m_waitAck
=
ACK_NONE
;
97
}
98
99
void
100
MacLowTransmissionParameters::EnableAck
(
void
)
101
{
102
m_waitAck
=
ACK_NORMAL
;
103
// Reset m_sendBar
104
m_sendBar
=
BLOCK_ACK_REQUEST_NONE
;
105
}
106
107
void
108
MacLowTransmissionParameters::DisableAck
(
void
)
109
{
110
m_waitAck
=
ACK_NONE
;
111
}
112
113
void
114
MacLowTransmissionParameters::DisableBlockAckRequest
(
void
)
115
{
116
m_sendBar
=
BLOCK_ACK_REQUEST_NONE
;
117
}
118
119
void
120
MacLowTransmissionParameters::EnableRts
(
void
)
121
{
122
m_sendRts
=
true
;
123
}
124
125
void
126
MacLowTransmissionParameters::DisableRts
(
void
)
127
{
128
m_sendRts
=
false
;
129
}
130
131
bool
132
MacLowTransmissionParameters::MustWaitNormalAck
(
void
)
const
133
{
134
return
(
m_waitAck
==
ACK_NORMAL
);
135
}
136
137
bool
138
MacLowTransmissionParameters::MustWaitBlockAck
(
void
)
const
139
{
140
bool
ret;
141
switch
(
m_waitAck
)
142
{
143
case
BLOCK_ACK_BASIC
:
144
case
BLOCK_ACK_COMPRESSED
:
145
case
BLOCK_ACK_EXTENDED_COMPRESSED
:
146
case
BLOCK_ACK_MULTI_TID
:
147
ret =
true
;
148
break
;
149
default
:
150
ret =
false
;
151
break
;
152
}
153
return
ret;
154
}
155
156
BlockAckType
157
MacLowTransmissionParameters::GetBlockAckType
(
void
)
const
158
{
159
BlockAckType
type;
160
switch
(
m_waitAck
)
161
{
162
case
BLOCK_ACK_BASIC
:
163
type =
BlockAckType::BASIC_BLOCK_ACK
;
164
break
;
165
case
BLOCK_ACK_COMPRESSED
:
166
type =
BlockAckType::COMPRESSED_BLOCK_ACK
;
167
break
;
168
case
BLOCK_ACK_EXTENDED_COMPRESSED
:
169
type =
BlockAckType::EXTENDED_COMPRESSED_BLOCK_ACK
;
170
break
;
171
case
BLOCK_ACK_MULTI_TID
:
172
type =
BlockAckType::MULTI_TID_BLOCK_ACK
;
173
break
;
174
default
:
175
NS_FATAL_ERROR
(
"Block ack is not used"
);
176
break
;
177
}
178
return
type;
179
}
180
181
bool
182
MacLowTransmissionParameters::MustSendBlockAckRequest
(
void
)
const
183
{
184
bool
ret;
185
switch
(
m_sendBar
)
186
{
187
case
BLOCK_ACK_REQUEST_BASIC
:
188
case
BLOCK_ACK_REQUEST_COMPRESSED
:
189
case
BLOCK_ACK_REQUEST_EXTENDED_COMPRESSED
:
190
case
BLOCK_ACK_REQUEST_MULTI_TID
:
191
ret =
true
;
192
break
;
193
default
:
194
ret =
false
;
195
break
;
196
}
197
return
ret;
198
}
199
200
BlockAckType
201
MacLowTransmissionParameters::GetBlockAckRequestType
(
void
)
const
202
{
203
BlockAckType
type;
204
switch
(
m_sendBar
)
205
{
206
case
BLOCK_ACK_REQUEST_BASIC
:
207
type =
BlockAckType::BASIC_BLOCK_ACK
;
208
break
;
209
case
BLOCK_ACK_REQUEST_COMPRESSED
:
210
type =
BlockAckType::COMPRESSED_BLOCK_ACK
;
211
break
;
212
case
BLOCK_ACK_REQUEST_EXTENDED_COMPRESSED
:
213
type =
BlockAckType::EXTENDED_COMPRESSED_BLOCK_ACK
;
214
break
;
215
case
BLOCK_ACK_REQUEST_MULTI_TID
:
216
type =
BlockAckType::MULTI_TID_BLOCK_ACK
;
217
break
;
218
default
:
219
NS_FATAL_ERROR
(
"Block ack request must not be sent"
);
220
break
;
221
}
222
return
type;
223
}
224
225
bool
226
MacLowTransmissionParameters::MustSendRts
(
void
)
const
227
{
228
return
m_sendRts
;
229
}
230
231
bool
232
MacLowTransmissionParameters::HasNextPacket
(
void
)
const
233
{
234
return
(
m_nextSize
!= 0);
235
}
236
237
uint32_t
238
MacLowTransmissionParameters::GetNextPacketSize
(
void
)
const
239
{
240
NS_ASSERT
(
HasNextPacket
());
241
return
m_nextSize
;
242
}
243
244
std::ostream &
operator <<
(std::ostream &os,
const
MacLowTransmissionParameters
¶ms)
245
{
246
os <<
"["
247
<<
"send rts="
<< params.
m_sendRts
<<
", "
248
<<
"next size="
<< params.
m_nextSize
<<
", "
249
<<
"ack="
;
250
switch
(params.
m_waitAck
)
251
{
252
case
MacLowTransmissionParameters::ACK_NONE
:
253
os <<
"none, "
;
254
break
;
255
case
MacLowTransmissionParameters::ACK_NORMAL
:
256
os <<
"normal, "
;
257
break
;
258
case
MacLowTransmissionParameters::BLOCK_ACK_BASIC
:
259
os <<
"basic-block-ack, "
;
260
break
;
261
case
MacLowTransmissionParameters::BLOCK_ACK_COMPRESSED
:
262
os <<
"compressed-block-ack, "
;
263
break
;
264
case
MacLowTransmissionParameters::BLOCK_ACK_EXTENDED_COMPRESSED
:
265
os <<
"extended-compressed-block-ack, "
;
266
break
;
267
case
MacLowTransmissionParameters::BLOCK_ACK_MULTI_TID
:
268
os <<
"multi-tid-block-ack, "
;
269
break
;
270
}
271
os <<
"bar="
;
272
switch
(params.
m_sendBar
)
273
{
274
case
MacLowTransmissionParameters::BLOCK_ACK_REQUEST_NONE
:
275
os <<
"none"
;
276
break
;
277
case
MacLowTransmissionParameters::BLOCK_ACK_REQUEST_BASIC
:
278
os <<
"basic"
;
279
break
;
280
case
MacLowTransmissionParameters::BLOCK_ACK_REQUEST_COMPRESSED
:
281
os <<
"compressed"
;
282
break
;
283
case
MacLowTransmissionParameters::BLOCK_ACK_REQUEST_EXTENDED_COMPRESSED
:
284
os <<
"extended-compressed"
;
285
break
;
286
case
MacLowTransmissionParameters::BLOCK_ACK_REQUEST_MULTI_TID
:
287
os <<
"multi-tid"
;
288
break
;
289
}
290
os <<
"]"
;
291
return
os;
292
}
293
294
}
//namespace ns3
ns3::MacLowTransmissionParameters::BLOCK_ACK_BASIC
Definition:
mac-low-transmission-parameters.h:149
ns3::MULTI_TID_BLOCK_ACK
Definition:
block-ack-type.h:35
ns3::MacLowTransmissionParameters::m_nextSize
uint32_t m_nextSize
the next size
Definition:
mac-low-transmission-parameters.h:143
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
NS_FATAL_ERROR
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition:
fatal-error.h:165
ns3::MacLowTransmissionParameters::MustWaitBlockAck
bool MustWaitBlockAck(void) const
Definition:
mac-low-transmission-parameters.cc:138
ns3::MacLowTransmissionParameters::MustSendRts
bool MustSendRts(void) const
Definition:
mac-low-transmission-parameters.cc:226
ns3::MacLowTransmissionParameters
control how a packet is transmitted.
Definition:
mac-low-transmission-parameters.h:39
ns3::MacLowTransmissionParameters::MacLowTransmissionParameters
MacLowTransmissionParameters()
Definition:
mac-low-transmission-parameters.cc:27
mac-low-transmission-parameters.h
ns3::MacLowTransmissionParameters::GetNextPacketSize
uint32_t GetNextPacketSize(void) const
Definition:
mac-low-transmission-parameters.cc:238
ns3::MacLowTransmissionParameters::BLOCK_ACK_EXTENDED_COMPRESSED
Definition:
mac-low-transmission-parameters.h:151
ns3::MacLowTransmissionParameters::BLOCK_ACK_REQUEST_COMPRESSED
Definition:
mac-low-transmission-parameters.h:159
ns3::MacLowTransmissionParameters::MustWaitNormalAck
bool MustWaitNormalAck(void) const
Definition:
mac-low-transmission-parameters.cc:132
ns3::EXTENDED_COMPRESSED_BLOCK_ACK
Definition:
block-ack-type.h:34
ns3::MacLowTransmissionParameters::HasNextPacket
bool HasNextPacket(void) const
Definition:
mac-low-transmission-parameters.cc:232
ns3::MacLowTransmissionParameters::BLOCK_ACK_COMPRESSED
Definition:
mac-low-transmission-parameters.h:150
ns3::MacLowTransmissionParameters::GetBlockAckRequestType
BlockAckType GetBlockAckRequestType(void) const
Definition:
mac-low-transmission-parameters.cc:201
ns3::operator<<
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition:
angles.cc:42
ns3::MacLowTransmissionParameters::BLOCK_ACK_REQUEST_EXTENDED_COMPRESSED
Definition:
mac-low-transmission-parameters.h:160
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::COMPRESSED_BLOCK_ACK
Definition:
block-ack-type.h:33
ns3::MacLowTransmissionParameters::EnableAck
void EnableAck(void)
Wait ACKTimeout for an Ack.
Definition:
mac-low-transmission-parameters.cc:100
ns3::MacLowTransmissionParameters::BLOCK_ACK_MULTI_TID
Definition:
mac-low-transmission-parameters.h:152
ns3::MacLowTransmissionParameters::m_sendRts
bool m_sendRts
send an RTS?
Definition:
mac-low-transmission-parameters.h:163
ns3::MacLowTransmissionParameters::MustSendBlockAckRequest
bool MustSendBlockAckRequest(void) const
Definition:
mac-low-transmission-parameters.cc:182
ns3::MacLowTransmissionParameters::BLOCK_ACK_REQUEST_NONE
Definition:
mac-low-transmission-parameters.h:157
ns3::MacLowTransmissionParameters::DisableRts
void DisableRts(void)
Do not send RTS and wait for CTS before sending data.
Definition:
mac-low-transmission-parameters.cc:126
ns3::MacLowTransmissionParameters::ACK_NORMAL
Definition:
mac-low-transmission-parameters.h:148
ns3::MacLowTransmissionParameters::m_waitAck
enum ns3::MacLowTransmissionParameters::@73 m_waitAck
wait Ack enumerated type
ns3::MacLowTransmissionParameters::m_sendBar
enum ns3::MacLowTransmissionParameters::@74 m_sendBar
send BAR enumerated type
ns3::BASIC_BLOCK_ACK
Definition:
block-ack-type.h:32
ns3::MacLowTransmissionParameters::BLOCK_ACK_REQUEST_BASIC
Definition:
mac-low-transmission-parameters.h:158
ns3::MacLowTransmissionParameters::BLOCK_ACK_REQUEST_MULTI_TID
Definition:
mac-low-transmission-parameters.h:161
ns3::MacLowTransmissionParameters::EnableRts
void EnableRts(void)
Send a RTS, and wait CTSTimeout for a CTS.
Definition:
mac-low-transmission-parameters.cc:120
ns3::MacLowTransmissionParameters::EnableNextData
void EnableNextData(uint32_t size)
Definition:
mac-low-transmission-parameters.cc:36
ns3::MacLowTransmissionParameters::DisableNextData
void DisableNextData(void)
Do not attempt to send data burst after current transmission.
Definition:
mac-low-transmission-parameters.cc:42
ns3::MacLowTransmissionParameters::DisableBlockAckRequest
void DisableBlockAckRequest(void)
Do not send BlockAckRequest after data transmission.
Definition:
mac-low-transmission-parameters.cc:114
ns3::MacLowTransmissionParameters::ACK_NONE
Definition:
mac-low-transmission-parameters.h:147
ns3::MacLowTransmissionParameters::EnableBlockAck
void EnableBlockAck(BlockAckType type)
Wait the timeout corresponding to the given BlockAck response type.
Definition:
mac-low-transmission-parameters.cc:48
ns3::MacLowTransmissionParameters::EnableBlockAckRequest
void EnableBlockAckRequest(BlockAckType type)
Schedule the transmission of a BlockAckRequest of the given type.
Definition:
mac-low-transmission-parameters.cc:74
ns3::MacLowTransmissionParameters::GetBlockAckType
BlockAckType GetBlockAckType(void) const
Definition:
mac-low-transmission-parameters.cc:157
ns3::MacLowTransmissionParameters::DisableAck
void DisableAck(void)
Do not wait for Ack after data transmission.
Definition:
mac-low-transmission-parameters.cc:108
ns3::BlockAckType
BlockAckType
The different block ack policies.
Definition:
block-ack-type.h:30
src
wifi
model
mac-low-transmission-parameters.cc
Generated on Wed Oct 7 2020 01:18:56 for ns-3 by
1.8.14