00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "ns3/log.h"
00020 #include "ns3/trace-source-accessor.h"
00021 #include "queue.h"
00022
00023 NS_LOG_COMPONENT_DEFINE ("Queue");
00024
00025 namespace ns3 {
00026
00027 NS_OBJECT_ENSURE_REGISTERED (Queue);
00028
00029 TypeId
00030 Queue::GetTypeId (void)
00031 {
00032 static TypeId tid = TypeId ("ns3::Queue")
00033 .SetParent<Object> ()
00034 .AddTraceSource ("Enqueue", "Enqueue a packet in the queue.",
00035 MakeTraceSourceAccessor (&Queue::m_traceEnqueue))
00036 .AddTraceSource ("Dequeue", "Dequeue a packet from the queue.",
00037 MakeTraceSourceAccessor (&Queue::m_traceDequeue))
00038 .AddTraceSource ("Drop", "Drop a packet stored in the queue.",
00039 MakeTraceSourceAccessor (&Queue::m_traceDrop))
00040 ;
00041 return tid;
00042 }
00043
00044 Queue::Queue() :
00045 m_nBytes(0),
00046 m_nTotalReceivedBytes(0),
00047 m_nPackets(0),
00048 m_nTotalReceivedPackets(0),
00049 m_nTotalDroppedBytes(0),
00050 m_nTotalDroppedPackets(0)
00051 {
00052 NS_LOG_FUNCTION_NOARGS ();
00053 }
00054
00055 Queue::~Queue()
00056 {
00057 NS_LOG_FUNCTION_NOARGS ();
00058 }
00059
00060
00061 bool
00062 Queue::Enqueue (Ptr<Packet> p)
00063 {
00064 NS_LOG_FUNCTION (this << p);
00065 NS_LOG_LOGIC ("m_traceEnqueue (p)");
00066
00067 m_traceEnqueue (p);
00068
00069 bool retval = DoEnqueue (p);
00070 if (retval)
00071 {
00072 m_nBytes += p->GetSize ();
00073 m_nPackets++;
00074 }
00075 return retval;
00076 }
00077
00078 Ptr<Packet>
00079 Queue::Dequeue (void)
00080 {
00081 NS_LOG_FUNCTION (this);
00082
00083 Ptr<Packet> packet = DoDequeue ();
00084
00085 if (packet != 0)
00086 {
00087 m_nBytes -= packet->GetSize ();
00088 m_nPackets--;
00089
00090 NS_ASSERT (m_nBytes >= 0);
00091 NS_ASSERT (m_nPackets >= 0);
00092
00093 NS_LOG_LOGIC("m_traceDequeue (packet)");
00094
00095 m_traceDequeue (packet);
00096 }
00097 return packet;
00098 }
00099
00100 void
00101 Queue::DequeueAll (void)
00102 {
00103 NS_LOG_FUNCTION (this);
00104 while (!IsEmpty ())
00105 {
00106 Dequeue ();
00107 }
00108 }
00109
00110 Ptr<const Packet>
00111 Queue::Peek (void) const
00112 {
00113 NS_LOG_FUNCTION (this);
00114 return DoPeek ();
00115 }
00116
00117
00118 uint32_t
00119 Queue::GetNPackets (void) const
00120 {
00121 NS_LOG_FUNCTION_NOARGS ();
00122 NS_LOG_LOGIC ("returns " << m_nPackets);
00123 return m_nPackets;
00124 }
00125
00126 uint32_t
00127 Queue::GetNBytes (void) const
00128 {
00129 NS_LOG_FUNCTION_NOARGS ();
00130 NS_LOG_LOGIC (" returns " << m_nBytes);
00131 return m_nBytes;
00132 }
00133
00134 bool
00135 Queue::IsEmpty (void) const
00136 {
00137 NS_LOG_FUNCTION_NOARGS ();
00138 NS_LOG_LOGIC ("returns " << (m_nPackets == 0));
00139 return m_nPackets == 0;
00140 }
00141
00142 uint32_t
00143 Queue::GetTotalReceivedBytes (void) const
00144 {
00145 NS_LOG_FUNCTION_NOARGS ();
00146 NS_LOG_LOGIC("returns " << m_nTotalReceivedBytes);
00147 return m_nTotalReceivedBytes;
00148 }
00149
00150 uint32_t
00151 Queue::GetTotalReceivedPackets (void) const
00152 {
00153 NS_LOG_FUNCTION_NOARGS ();
00154 NS_LOG_LOGIC ("returns " << m_nTotalReceivedPackets);
00155 return m_nTotalReceivedPackets;
00156 }
00157
00158 uint32_t
00159 Queue:: GetTotalDroppedBytes (void) const
00160 {
00161 NS_LOG_FUNCTION_NOARGS ();
00162 NS_LOG_LOGIC ("returns " << m_nTotalDroppedBytes);
00163 return m_nTotalDroppedBytes;
00164 }
00165
00166 uint32_t
00167 Queue::GetTotalDroppedPackets (void) const
00168 {
00169 NS_LOG_FUNCTION_NOARGS ();
00170 NS_LOG_LOGIC("returns " << m_nTotalDroppedPackets);
00171 return m_nTotalDroppedPackets;
00172 }
00173
00174 void
00175 Queue::ResetStatistics (void)
00176 {
00177 NS_LOG_FUNCTION_NOARGS ();
00178 m_nTotalReceivedBytes = 0;
00179 m_nTotalReceivedPackets = 0;
00180 m_nTotalDroppedBytes = 0;
00181 m_nTotalDroppedPackets = 0;
00182 }
00183
00184 void
00185 Queue::Drop (Ptr<Packet> p)
00186 {
00187 NS_LOG_FUNCTION (this << p);
00188
00189 m_nTotalDroppedPackets++;
00190 m_nTotalDroppedBytes += p->GetSize ();
00191
00192 NS_LOG_LOGIC ("m_traceDrop (p)");
00193 m_traceDrop (p);
00194 }
00195
00196 }