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
queue.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2007 University of Washington
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
19
#include "ns3/log.h"
20
#include "ns3/trace-source-accessor.h"
21
#include "
queue.h
"
22
23
NS_LOG_COMPONENT_DEFINE
(
"Queue"
);
24
25
namespace
ns3 {
26
27
NS_OBJECT_ENSURE_REGISTERED
(Queue);
28
29
TypeId
30
Queue::GetTypeId
(
void
)
31
{
32
static
TypeId
tid =
TypeId
(
"ns3::Queue"
)
33
.
SetParent
<
Object
> ()
34
.AddTraceSource (
"Enqueue"
,
"Enqueue a packet in the queue."
,
35
MakeTraceSourceAccessor
(&
Queue::m_traceEnqueue
))
36
.AddTraceSource (
"Dequeue"
,
"Dequeue a packet from the queue."
,
37
MakeTraceSourceAccessor
(&
Queue::m_traceDequeue
))
38
.AddTraceSource (
"Drop"
,
"Drop a packet stored in the queue."
,
39
MakeTraceSourceAccessor
(&
Queue::m_traceDrop
))
40
;
41
return
tid;
42
}
43
44
Queue::Queue
() :
45
m_nBytes (0),
46
m_nTotalReceivedBytes (0),
47
m_nPackets (0),
48
m_nTotalReceivedPackets (0),
49
m_nTotalDroppedBytes (0),
50
m_nTotalDroppedPackets (0)
51
{
52
NS_LOG_FUNCTION
(
this
);
53
}
54
55
Queue::~Queue
()
56
{
57
NS_LOG_FUNCTION
(
this
);
58
}
59
60
61
bool
62
Queue::Enqueue
(
Ptr<Packet>
p)
63
{
64
NS_LOG_FUNCTION
(
this
<< p);
65
66
//
67
// If DoEnqueue fails, Queue::Drop is called by the subclass
68
//
69
bool
retval =
DoEnqueue
(p);
70
if
(retval)
71
{
72
NS_LOG_LOGIC
(
"m_traceEnqueue (p)"
);
73
m_traceEnqueue
(p);
74
75
uint32_t size = p->
GetSize
();
76
m_nBytes
+= size;
77
m_nTotalReceivedBytes
+= size;
78
79
m_nPackets
++;
80
m_nTotalReceivedPackets
++;
81
}
82
return
retval;
83
}
84
85
Ptr<Packet>
86
Queue::Dequeue
(
void
)
87
{
88
NS_LOG_FUNCTION
(
this
);
89
90
Ptr<Packet>
packet =
DoDequeue
();
91
92
if
(packet != 0)
93
{
94
NS_ASSERT
(
m_nBytes
>= packet->
GetSize
());
95
NS_ASSERT
(
m_nPackets
> 0);
96
97
m_nBytes
-= packet->
GetSize
();
98
m_nPackets
--;
99
100
NS_LOG_LOGIC
(
"m_traceDequeue (packet)"
);
101
m_traceDequeue
(packet);
102
}
103
return
packet;
104
}
105
106
void
107
Queue::DequeueAll
(
void
)
108
{
109
NS_LOG_FUNCTION
(
this
);
110
while
(!
IsEmpty
())
111
{
112
Dequeue
();
113
}
114
}
115
116
Ptr<const Packet>
117
Queue::Peek
(
void
)
const
118
{
119
NS_LOG_FUNCTION
(
this
);
120
return
DoPeek
();
121
}
122
123
124
uint32_t
125
Queue::GetNPackets
(
void
)
const
126
{
127
NS_LOG_FUNCTION
(
this
);
128
NS_LOG_LOGIC
(
"returns "
<<
m_nPackets
);
129
return
m_nPackets
;
130
}
131
132
uint32_t
133
Queue::GetNBytes
(
void
)
const
134
{
135
NS_LOG_FUNCTION
(
this
);
136
NS_LOG_LOGIC
(
" returns "
<<
m_nBytes
);
137
return
m_nBytes
;
138
}
139
140
bool
141
Queue::IsEmpty
(
void
)
const
142
{
143
NS_LOG_FUNCTION
(
this
);
144
NS_LOG_LOGIC
(
"returns "
<< (
m_nPackets
== 0));
145
return
m_nPackets
== 0;
146
}
147
148
uint32_t
149
Queue::GetTotalReceivedBytes
(
void
)
const
150
{
151
NS_LOG_FUNCTION
(
this
);
152
NS_LOG_LOGIC
(
"returns "
<<
m_nTotalReceivedBytes
);
153
return
m_nTotalReceivedBytes
;
154
}
155
156
uint32_t
157
Queue::GetTotalReceivedPackets
(
void
)
const
158
{
159
NS_LOG_FUNCTION
(
this
);
160
NS_LOG_LOGIC
(
"returns "
<<
m_nTotalReceivedPackets
);
161
return
m_nTotalReceivedPackets
;
162
}
163
164
uint32_t
165
Queue:: GetTotalDroppedBytes
(
void
)
const
166
{
167
NS_LOG_FUNCTION
(
this
);
168
NS_LOG_LOGIC
(
"returns "
<<
m_nTotalDroppedBytes
);
169
return
m_nTotalDroppedBytes
;
170
}
171
172
uint32_t
173
Queue::GetTotalDroppedPackets
(
void
)
const
174
{
175
NS_LOG_FUNCTION
(
this
);
176
NS_LOG_LOGIC
(
"returns "
<<
m_nTotalDroppedPackets
);
177
return
m_nTotalDroppedPackets
;
178
}
179
180
void
181
Queue::ResetStatistics
(
void
)
182
{
183
NS_LOG_FUNCTION
(
this
);
184
m_nTotalReceivedBytes
= 0;
185
m_nTotalReceivedPackets
= 0;
186
m_nTotalDroppedBytes
= 0;
187
m_nTotalDroppedPackets
= 0;
188
}
189
190
void
191
Queue::Drop
(
Ptr<Packet>
p)
192
{
193
NS_LOG_FUNCTION
(
this
<< p);
194
195
m_nTotalDroppedPackets
++;
196
m_nTotalDroppedBytes
+= p->
GetSize
();
197
198
NS_LOG_LOGIC
(
"m_traceDrop (p)"
);
199
m_traceDrop
(p);
200
}
201
202
}
// namespace ns3
ns3::Queue::Queue
Queue()
Definition:
queue.cc:44
ns3::Ptr< Packet >
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
Definition:
log.h:311
ns3::Queue::Enqueue
bool Enqueue(Ptr< Packet > p)
Definition:
queue.cc:62
ns3::Queue::m_nTotalDroppedBytes
uint32_t m_nTotalDroppedBytes
Definition:
queue.h:171
ns3::Queue::DoDequeue
virtual Ptr< Packet > DoDequeue(void)=0
ns3::Queue::IsEmpty
bool IsEmpty(void) const
Definition:
queue.cc:141
ns3::Queue::GetTotalDroppedPackets
uint32_t GetTotalDroppedPackets(void) const
Definition:
queue.cc:173
ns3::Queue::m_nTotalReceivedBytes
uint32_t m_nTotalReceivedBytes
Definition:
queue.h:168
NS_ASSERT
#define NS_ASSERT(condition)
Definition:
assert.h:64
ns3::Packet::GetSize
uint32_t GetSize(void) const
Definition:
packet.h:650
ns3::Queue::ResetStatistics
void ResetStatistics(void)
Definition:
queue.cc:181
ns3::Queue::m_nPackets
uint32_t m_nPackets
Definition:
queue.h:169
NS_LOG_COMPONENT_DEFINE
NS_LOG_COMPONENT_DEFINE("Queue")
ns3::Queue::GetTotalReceivedBytes
uint32_t GetTotalReceivedBytes(void) const
Definition:
queue.cc:149
ns3::Queue::GetTypeId
static TypeId GetTypeId(void)
Definition:
queue.cc:30
queue.h
ns3::NS_OBJECT_ENSURE_REGISTERED
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
ns3::Queue::DoEnqueue
virtual bool DoEnqueue(Ptr< Packet > p)=0
ns3::Queue::~Queue
virtual ~Queue()
Definition:
queue.cc:55
ns3::Queue::Dequeue
Ptr< Packet > Dequeue(void)
Definition:
queue.cc:86
ns3::Queue::GetNPackets
uint32_t GetNPackets(void) const
Definition:
queue.cc:125
NS_LOG_LOGIC
#define NS_LOG_LOGIC(msg)
Definition:
log.h:334
ns3::Queue::m_nBytes
uint32_t m_nBytes
Definition:
queue.h:167
ns3::Queue::m_traceDequeue
TracedCallback< Ptr< const Packet > > m_traceDequeue
Definition:
queue.h:164
ns3::MakeTraceSourceAccessor
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Definition:
trace-source-accessor.h:135
ns3::Queue::m_traceDrop
TracedCallback< Ptr< const Packet > > m_traceDrop
Definition:
queue.h:165
ns3::Queue::GetNBytes
uint32_t GetNBytes(void) const
Definition:
queue.cc:133
ns3::Queue::Peek
Ptr< const Packet > Peek(void) const
Definition:
queue.cc:117
ns3::Queue::GetTotalReceivedPackets
uint32_t GetTotalReceivedPackets(void) const
Definition:
queue.cc:157
ns3::Queue::m_nTotalReceivedPackets
uint32_t m_nTotalReceivedPackets
Definition:
queue.h:170
ns3::Queue::m_nTotalDroppedPackets
uint32_t m_nTotalDroppedPackets
Definition:
queue.h:172
ns3::Queue::DequeueAll
void DequeueAll(void)
Definition:
queue.cc:107
ns3::Queue::m_traceEnqueue
TracedCallback< Ptr< const Packet > > m_traceEnqueue
Definition:
queue.h:163
ns3::Queue::DoPeek
virtual Ptr< const Packet > DoPeek(void) const =0
ns3::Queue::GetTotalDroppedBytes
uint32_t GetTotalDroppedBytes(void) const
Definition:
queue.cc:165
ns3::Object
a base class which provides memory management and object aggregation
Definition:
object.h:63
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:49
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Definition:
type-id.cc:610
ns3::Queue::Drop
void Drop(Ptr< Packet > packet)
Definition:
queue.cc:191
src
network
utils
queue.cc
Generated on Sun Apr 20 2014 11:15:00 for ns-3 by
1.8.6