A Discrete-Event Network Simulator
API
 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 
28 
29 TypeId
31 {
32  static TypeId tid = TypeId ("ns3::Queue")
33  .SetParent<Object> ()
34  .AddTraceSource ("Enqueue", "Enqueue a packet in the queue.",
36  .AddTraceSource ("Dequeue", "Dequeue a packet from the queue.",
38  .AddTraceSource ("Drop", "Drop a packet stored in the queue.",
40  ;
41  return tid;
42 }
43 
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 
56 {
57  NS_LOG_FUNCTION (this);
58 }
59 
60 
61 bool
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++;
81  }
82  return retval;
83 }
84 
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
108 {
109  NS_LOG_FUNCTION (this);
110  while (!IsEmpty ())
111  {
112  Dequeue ();
113  }
114 }
115 
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
150 {
151  NS_LOG_FUNCTION (this);
152  NS_LOG_LOGIC ("returns " << m_nTotalReceivedBytes);
153  return m_nTotalReceivedBytes;
154 }
155 
156 uint32_t
158 {
159  NS_LOG_FUNCTION (this);
160  NS_LOG_LOGIC ("returns " << m_nTotalReceivedPackets);
162 }
163 
164 uint32_t
166 {
167  NS_LOG_FUNCTION (this);
168  NS_LOG_LOGIC ("returns " << m_nTotalDroppedBytes);
169  return m_nTotalDroppedBytes;
170 }
171 
172 uint32_t
174 {
175  NS_LOG_FUNCTION (this);
176  NS_LOG_LOGIC ("returns " << m_nTotalDroppedPackets);
177  return m_nTotalDroppedPackets;
178 }
179 
180 void
182 {
183  NS_LOG_FUNCTION (this);
188 }
189 
190 void
192 {
193  NS_LOG_FUNCTION (this << p);
194 
196  m_nTotalDroppedBytes += p->GetSize ();
197 
198  NS_LOG_LOGIC ("m_traceDrop (p)");
199  m_traceDrop (p);
200 }
201 
202 } // namespace ns3
Queue()
Definition: queue.cc:44
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
bool Enqueue(Ptr< Packet > p)
Place a packet into the rear of the Queue.
Definition: queue.cc:62
uint32_t m_nTotalDroppedBytes
Total dropped bytes.
Definition: queue.h:195
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
Definition: object-base.h:38
virtual Ptr< Packet > DoDequeue(void)=0
Pull a packet from the queue.
bool IsEmpty(void) const
Definition: queue.cc:141
uint32_t GetTotalDroppedPackets(void) const
Definition: queue.cc:173
uint32_t m_nTotalReceivedBytes
Total received bytes.
Definition: queue.h:192
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:61
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:170
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Definition: packet.h:744
void ResetStatistics(void)
Resets the counts for dropped packets, dropped bytes, received packets, and received bytes...
Definition: queue.cc:181
uint32_t m_nPackets
Number of packets in the queue.
Definition: queue.h:193
uint32_t GetTotalReceivedBytes(void) const
Definition: queue.cc:149
static TypeId GetTypeId(void)
Get the type ID.
Definition: queue.cc:30
virtual bool DoEnqueue(Ptr< Packet > p)=0
Push a packet in the queue.
virtual ~Queue()
Definition: queue.cc:55
Ptr< Packet > Dequeue(void)
Remove a packet from the front of the Queue.
Definition: queue.cc:86
uint32_t GetNPackets(void) const
Definition: queue.cc:125
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:233
uint32_t m_nBytes
Number of bytes in the queue.
Definition: queue.h:191
TracedCallback< Ptr< const Packet > > m_traceDequeue
Traced callback: fired when a packet is dequeued.
Definition: queue.h:187
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
TracedCallback< Ptr< const Packet > > m_traceDrop
Traced callback: fired when a packet is dropped.
Definition: queue.h:189
uint32_t GetNBytes(void) const
Definition: queue.cc:133
Ptr< const Packet > Peek(void) const
Get a copy of the item at the front of the queue without removing it.
Definition: queue.cc:117
uint32_t GetTotalReceivedPackets(void) const
Definition: queue.cc:157
uint32_t m_nTotalReceivedPackets
Total received packets.
Definition: queue.h:194
uint32_t m_nTotalDroppedPackets
Total dropped packets.
Definition: queue.h:196
void DequeueAll(void)
Flush the queue.
Definition: queue.cc:107
TracedCallback< Ptr< const Packet > > m_traceEnqueue
Traced callback: fired when a packet is enqueued.
Definition: queue.h:185
virtual Ptr< const Packet > DoPeek(void) const =0
Peek the front packet in the queue.
uint32_t GetTotalDroppedBytes(void) const
Definition: queue.cc:165
a base class which provides memory management and object aggregation
Definition: object.h:64
a unique identifier for an interface.
Definition: type-id.h:49
TypeId SetParent(TypeId tid)
Definition: type-id.cc:610
void Drop(Ptr< Packet > packet)
Drop a packet.
Definition: queue.cc:191