21 #include "ns3/simulator.h"
22 #include "ns3/pfifo-fast-queue-disc.h"
23 #include "ns3/drop-tail-queue.h"
24 #include "ns3/ipv4-queue-disc-item.h"
25 #include "ns3/ipv6-queue-disc-item.h"
27 #include "ns3/string.h"
28 #include "ns3/pointer.h"
29 #include "ns3/object-factory.h"
30 #include "ns3/socket.h"
44 virtual void DoRun (
void);
49 :
TestCase (
"Test TOS-based prioritization")
66 priorityTag.
SetPriority (Socket::IpTos2Priority (tos));
70 queue->Enqueue (item);
71 NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 1,
"enqueued to unexpected band");
80 for (uint16_t i = 0; i < 3; i++)
83 bool ok = queue->SetAttributeFailSafe (
"MaxSize",
StringValue (
"1000p"));
85 queueDisc->AddInternalQueue (queue);
108 Simulator::Destroy ();
121 virtual void DoRun (
void);
126 :
TestCase (
"Test DSCP-based prioritization")
147 queue->Enqueue (item);
148 NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 1,
"enqueued to unexpected band");
157 for (uint16_t i = 0; i < 3; i++)
160 bool ok = queue->SetAttributeFailSafe (
"MaxSize",
StringValue (
"1000p"));
162 queueDisc->AddInternalQueue (queue);
190 Simulator::Destroy ();
203 virtual void DoRun (
void);
229 queue->Enqueue (item);
239 queueDisc->AddInternalQueue (band0);
240 queueDisc->AddInternalQueue (band1);
241 queueDisc->AddInternalQueue (band2);
244 AddPacket (queueDisc, Ipv4Header::DSCP_AF42);
245 AddPacket (queueDisc, Ipv4Header::DSCP_AF42);
246 AddPacket (queueDisc, Ipv4Header::DSCP_AF13);
247 AddPacket (queueDisc, Ipv4Header::DSCP_AF13);
248 AddPacket (queueDisc, Ipv4Header::DSCP_AF11);
249 AddPacket (queueDisc, Ipv4Header::DSCP_AF11);
250 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 2,
"unexpected queue depth");
251 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2,
"unexpected queue depth");
252 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 2,
"unexpected queue depth");
255 AddPacket (queueDisc, Ipv4Header::DSCP_AF42);
256 AddPacket (queueDisc, Ipv4Header::DSCP_AF13);
257 AddPacket (queueDisc, Ipv4Header::DSCP_AF11);
259 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 2,
"unexpected queue depth");
260 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2,
"unexpected queue depth");
261 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 2,
"unexpected queue depth");
263 Simulator::Destroy ();
277 virtual void DoRun (
void);
281 :
TestCase (
"Test queue with no priority tag")
294 for (uint16_t i = 0; i < 3; i++)
297 bool ok = queue->SetAttributeFailSafe (
"MaxSize",
StringValue (
"1000p"));
299 queueDisc->AddInternalQueue (queue);
301 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 0,
"unexpected queue depth");
303 p = Create<Packet> ();
307 item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
308 queueDisc->Enqueue (item);
309 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 1,
"unexpected queue depth");
310 p = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
"hello, world"), 12);
311 item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
312 queueDisc->Enqueue (item);
313 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2,
"unexpected queue depth");
314 p = Create<Packet> (100);
315 uint8_t *buf =
new uint8_t[100];
317 for (uint32_t i = 0; i < 100; i++)
322 item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
323 queueDisc->Enqueue (item);
324 NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 3,
"unexpected queue depth");
326 Simulator::Destroy ();
336 :
TestSuite (
"pfifo-fast-queue-disc", UNIT)
This class tests that each possible DSCP is enqueued in the right band.
PfifoFastQueueDiscDscpPrioritization()
void TestDscpValue(Ptr< PfifoFastQueueDisc > queue, Ipv4Header::DscpType dscp, uint32_t band)
virtual void DoRun(void)
Implementation to actually run this TestCase.
virtual ~PfifoFastQueueDiscDscpPrioritization()
This class tests that packets without a priority tag are handled by placing them into band 1.
virtual void DoRun(void)
Implementation to actually run this TestCase.
PfifoFastQueueDiscNoPriority()
virtual ~PfifoFastQueueDiscNoPriority()
This class tests that each band is txqueuelen deep.
virtual ~PfifoFastQueueDiscOverflow()
PfifoFastQueueDiscOverflow()
virtual void DoRun(void)
Implementation to actually run this TestCase.
void AddPacket(Ptr< PfifoFastQueueDisc > queue, Ipv4Header::DscpType dscp)
PfifoFastQueueDiscTestSuite()
This class tests that each possible TOS is enqueued in the right band.
PfifoFastQueueDiscTosPrioritization()
virtual void DoRun(void)
Implementation to actually run this TestCase.
virtual ~PfifoFastQueueDiscTosPrioritization()
void TestTosValue(Ptr< PfifoFastQueueDisc > queue, uint8_t tos, uint32_t band)
a polymophic address class
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
void AddPacketTag(const Tag &tag) const
Add a packet tag.
Smart pointer class similar to boost::intrusive_ptr.
indicates whether the socket has a priority set.
void SetPriority(uint8_t priority)
Set the tag's priority.
Hold variables of type string.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static PfifoFastQueueDiscTestSuite pfifoFastQueueTestSuite