25 #ifndef QUEUE_H |
25 #ifndef QUEUE_H |
26 #define QUEUE_H |
26 #define QUEUE_H |
27 |
27 |
28 #include <string> |
28 #include <string> |
29 #include "ns3/packet.h" |
29 #include "ns3/packet.h" |
30 #include "ns3/callback-tracer.h" |
30 #include "ns3/callback-trace-source.h" |
31 #include "ns3/trace-container.h" |
31 #include "ns3/trace-resolver.h" |
32 |
32 |
33 namespace ns3 { |
33 namespace ns3 { |
34 |
34 |
35 class Queue |
35 class Queue |
36 { |
36 { |
37 public: |
37 public: |
38 Queue (std::string const &name); |
38 enum TraceType { |
|
39 ENQUEUE, |
|
40 DEQUEUE, |
|
41 DROP, |
|
42 }; |
|
43 Queue (); |
39 virtual ~Queue (); |
44 virtual ~Queue (); |
40 |
45 |
|
46 TraceResolver *CreateTraceResolver (TraceContext const &context); |
|
47 |
|
48 bool IsEmpty (void); |
41 bool Enqueue (const Packet& p); |
49 bool Enqueue (const Packet& p); |
42 bool Dequeue (Packet &p); |
50 bool Dequeue (Packet &p); |
43 |
51 |
44 void DequeueAll (void); |
52 void DequeueAll (void); |
45 uint32_t GetNPackets (void); |
53 uint32_t GetNPackets (void); |
46 uint32_t GetNBytes (void); |
54 uint32_t GetNBytes (void); |
47 |
|
48 bool IsEmpty (void); |
|
49 |
55 |
50 uint32_t GetTotalReceivedBytes (void); |
56 uint32_t GetTotalReceivedBytes (void); |
51 uint32_t GetTotalReceivedPackets (void); |
57 uint32_t GetTotalReceivedPackets (void); |
52 uint32_t GetTotalDroppedBytes (void); |
58 uint32_t GetTotalDroppedBytes (void); |
53 uint32_t GetTotalDroppedPackets (void); |
59 uint32_t GetTotalDroppedPackets (void); |
83 virtual bool DoDequeue (Packet &p) = 0; |
89 virtual bool DoDequeue (Packet &p) = 0; |
84 |
90 |
85 protected: |
91 protected: |
86 // called by subclasses to notify parent of packet drops. |
92 // called by subclasses to notify parent of packet drops. |
87 void Drop (const Packet& p); |
93 void Drop (const Packet& p); |
88 void QueueRegisterTraces (TraceContainer &container); |
|
89 |
94 |
90 private: |
95 private: |
91 CallbackTracer<std::string const &, const Packet &> m_traceEnqueue; |
96 CallbackTraceSource<const Packet &> m_traceEnqueue; |
92 CallbackTracer<std::string const &, const Packet &> m_traceDequeue; |
97 CallbackTraceSource<const Packet &> m_traceDequeue; |
93 CallbackTracer<std::string const &, const Packet &> m_traceDrop; |
98 CallbackTraceSource<const Packet &> m_traceDrop; |
94 |
99 |
95 uint32_t m_nBytes; |
100 uint32_t m_nBytes; |
96 uint32_t m_nTotalReceivedBytes; |
101 uint32_t m_nTotalReceivedBytes; |
97 uint32_t m_nPackets; |
102 uint32_t m_nPackets; |
98 uint32_t m_nTotalReceivedPackets; |
103 uint32_t m_nTotalReceivedPackets; |
99 uint32_t m_nTotalDroppedBytes; |
104 uint32_t m_nTotalDroppedBytes; |
100 uint32_t m_nTotalDroppedPackets; |
105 uint32_t m_nTotalDroppedPackets; |
101 |
|
102 std::string m_name; |
|
103 |
|
104 |
106 |
105 #if 0 |
107 #if 0 |
106 // Static methods to manage queue default |
108 // Static methods to manage queue default |
107 // Set desired queue default |
109 // Set desired queue default |
108 static void Default(const Queue& q); |
110 static void Default(const Queue& q); |