A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
edca-txop-n.h
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2006, 2009 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
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20
* Author: Mirko Banchi <mk.banchi@gmail.com>
21
*/
22
#ifndef EDCA_TXOP_N_H
23
#define EDCA_TXOP_N_H
24
25
#include "ns3/object.h"
26
#include "ns3/mac48-address.h"
27
#include "ns3/packet.h"
28
29
#include "
wifi-mode.h
"
30
#include "
wifi-mac-header.h
"
31
#include "
wifi-remote-station-manager.h
"
32
#include "
qos-utils.h
"
33
#include "
dcf.h
"
34
#include "
ctrl-headers.h
"
35
#include "
block-ack-manager.h
"
36
37
#include <map>
38
#include <list>
39
40
namespace
ns3 {
41
42
class
DcfState;
43
class
DcfManager;
44
class
MacLow;
45
class
MacTxMiddle;
46
class
WifiMac;
47
class
WifiMacParameters;
48
class
WifiMacQueue;
49
class
RandomStream;
50
class
QosBlockedDestinations;
51
class
MsduAggregator;
52
class
MgtAddBaResponseHeader;
53
class
BlockAckManager;
54
class
MgtDelBaHeader;
55
56
enum
TypeOfStation
57
{
58
STA
,
59
AP
,
60
ADHOC_STA
,
61
MESH
,
62
HT_STA
,
63
HT_AP
,
64
HT_ADHOC_STA
65
};
66
67
80
class
EdcaTxopN
:
public
Dcf
81
{
82
public
:
83
typedef
Callback <void, const WifiMacHeader&>
TxOk
;
84
typedef
Callback <void, const WifiMacHeader&>
TxFailed
;
85
86
static
TypeId
GetTypeId
(
void
);
87
EdcaTxopN
();
88
virtual
~EdcaTxopN
();
89
void
DoDispose
();
90
91
void
SetLow
(
Ptr<MacLow>
low);
92
void
SetTxMiddle
(
MacTxMiddle
*txMiddle);
93
void
SetManager
(
DcfManager
*manager);
94
void
SetTxOkCallback
(
TxOk
callback);
95
void
SetTxFailedCallback
(
TxFailed
callback);
96
void
SetWifiRemoteStationManager
(
Ptr<WifiRemoteStationManager>
remoteManager);
97
void
SetTypeOfStation
(
enum
TypeOfStation
type);
98
enum
TypeOfStation
GetTypeOfStation
(
void
)
const
;
99
100
Ptr<WifiMacQueue >
GetQueue
()
const
;
101
virtual
void
SetMinCw
(uint32_t minCw);
102
virtual
void
SetMaxCw
(uint32_t maxCw);
103
virtual
void
SetAifsn
(uint32_t aifsn);
104
virtual
uint32_t
GetMinCw
(
void
)
const
;
105
virtual
uint32_t
GetMaxCw
(
void
)
const
;
106
virtual
uint32_t
GetAifsn
(
void
)
const
;
107
108
Ptr<MacLow>
Low
(
void
);
109
Ptr<MsduAggregator>
GetMsduAggregator
(
void
)
const
;
110
111
/* dcf notifications forwarded here */
112
bool
NeedsAccess
(
void
)
const
;
113
void
NotifyAccessGranted
(
void
);
114
void
NotifyInternalCollision
(
void
);
115
void
NotifyCollision
(
void
);
119
void
NotifyChannelSwitching
(
void
);
120
121
/*event handlers*/
122
void
GotCts
(
double
snr,
WifiMode
txMode);
123
void
MissedCts
(
void
);
124
void
GotAck
(
double
snr,
WifiMode
txMode);
125
void
GotBlockAck
(
const
CtrlBAckResponseHeader
*blockAck,
Mac48Address
recipient);
126
void
MissedBlockAck
(
void
);
127
void
GotAddBaResponse
(
const
MgtAddBaResponseHeader
*respHdr,
Mac48Address
recipient);
128
void
GotDelBaFrame
(
const
MgtDelBaHeader
*delBaHdr,
Mac48Address
recipient);
129
void
MissedAck
(
void
);
130
void
StartNext
(
void
);
131
void
Cancel
(
void
);
132
void
EndTxNoAck
(
void
);
133
134
void
RestartAccessIfNeeded
(
void
);
135
void
StartAccessIfNeeded
(
void
);
136
bool
NeedRts
(
void
);
137
bool
NeedRtsRetransmission
(
void
);
138
bool
NeedDataRetransmission
(
void
);
139
bool
NeedFragmentation
(
void
)
const
;
140
uint32_t
GetNextFragmentSize
(
void
);
141
uint32_t
GetFragmentSize
(
void
);
142
uint32_t
GetFragmentOffset
(
void
);
143
bool
IsLastFragment
(
void
)
const
;
144
void
NextFragment
(
void
);
145
Ptr<Packet>
GetFragmentPacket
(
WifiMacHeader
*hdr);
146
147
void
SetAccessCategory
(
enum
AcIndex
ac);
148
void
Queue
(
Ptr<const Packet>
packet,
const
WifiMacHeader
&hdr);
149
void
SetMsduAggregator
(
Ptr<MsduAggregator>
aggr);
150
void
PushFront
(
Ptr<const Packet>
packet,
const
WifiMacHeader
&hdr);
151
void
CompleteConfig
(
void
);
152
void
SetBlockAckThreshold
(uint8_t threshold);
153
uint8_t
GetBlockAckThreshold
(
void
)
const
;
154
void
SetBlockAckInactivityTimeout
(uint16_t
timeout
);
155
void
SendDelbaFrame
(
Mac48Address
addr, uint8_t tid,
bool
byOriginator);
156
165
int64_t
AssignStreams
(int64_t stream);
166
167
private
:
168
void
DoInitialize
();
178
Mac48Address
MapSrcAddressForAggregation
(
const
WifiMacHeader
&hdr);
179
Mac48Address
MapDestAddressForAggregation
(
const
WifiMacHeader
&hdr);
180
EdcaTxopN
&
operator =
(
const
EdcaTxopN
&);
181
EdcaTxopN
(
const
EdcaTxopN
&);
182
183
/* If number of packets in the queue reaches m_blockAckThreshold value, an ADDBARequest frame
184
* is sent to destination in order to setup a block ack.
185
*/
186
bool
SetupBlockAckIfNeeded
();
187
/* Sends an ADDBARequest to establish a block ack agreement with sta
188
* addressed by <i>recipient</i> for tid <i>tid</i>.
189
*/
190
void
SendAddBaRequest
(
Mac48Address
recipient, uint8_t tid, uint16_t startSeq,
191
uint16_t
timeout
,
bool
immediateBAck);
192
/* After that all packets, for which a block ack agreement was established, have been
193
* transmitted, we have to send a block ack request.
194
*/
195
void
SendBlockAckRequest
(
const
struct
Bar
&bar);
196
/* For now is typically invoked to complete transmission of a packets sent with ack policy
197
* Block Ack: the packet is buffered and dcf is reset.
198
*/
199
void
CompleteTx
(
void
);
200
/* Verifies if dequeued packet has to be transmitted with ack policy Block Ack. This happens
201
* if an established block ack agreement exists with the receiver.
202
*/
203
void
VerifyBlockAck
(
void
);
204
205
AcIndex
m_ac
;
206
class
Dcf
;
207
class
TransmissionListener
;
208
class
BlockAckEventListener
;
209
friend
class
Dcf
;
210
friend
class
TransmissionListener
;
211
Dcf
*
m_dcf
;
212
DcfManager
*
m_manager
;
213
Ptr<WifiMacQueue>
m_queue
;
214
TxOk
m_txOkCallback
;
215
TxFailed
m_txFailedCallback
;
216
Ptr<MacLow>
m_low
;
217
MacTxMiddle
*
m_txMiddle
;
218
TransmissionListener
*
m_transmissionListener
;
219
BlockAckEventListener
*
m_blockAckListener
;
220
RandomStream
*
m_rng
;
221
Ptr<WifiRemoteStationManager>
m_stationManager
;
222
uint8_t
m_fragmentNumber
;
223
224
/* current packet could be a simple MSDU or, if an aggregator for this queue is
225
present, could be an A-MSDU.
226
*/
227
Ptr<const Packet>
m_currentPacket
;
228
229
WifiMacHeader
m_currentHdr
;
230
Ptr<MsduAggregator>
m_aggregator
;
231
TypeOfStation
m_typeOfStation
;
232
QosBlockedDestinations
*
m_qosBlockedDestinations
;
233
BlockAckManager
*
m_baManager
;
234
/*
235
* Represents the minimum number of packets for use of block ack.
236
*/
237
uint8_t
m_blockAckThreshold
;
238
enum
BlockAckType
m_blockAckType
;
239
Time
m_currentPacketTimestamp
;
240
uint16_t
m_blockAckInactivityTimeout
;
241
struct
Bar
m_currentBar
;
242
};
243
244
}
// namespace ns3
245
246
#endif
/* EDCA_TXOP_N_H */
src
wifi
model
edca-txop-n.h
Generated on Fri Aug 30 2013 01:43:04 for ns-3 by
1.8.1.2