24 #include "ns3/header.h"
25 #include "ns3/trailer.h"
26 #include "ns3/packet.h"
27 #include "ns3/packet-metadata.h"
36 static TypeId GetTypeId (
void);
38 bool IsOk (
void)
const;
40 void ReportError (
void);
46 HistoryHeaderBase::GetTypeId (
void)
54 HistoryHeaderBase::HistoryHeaderBase ()
78 virtual void Print (std::ostream &os)
const;
94 std::ostringstream oss;
95 oss <<
"ns3::HistoryHeader<"<<N<<
">";
97 .SetParent<HistoryHeaderBase> ()
131 for (
int i = 0; i < N; i++)
146 bool IsOk (
void)
const;
185 virtual void Print (std::ostream &os)
const;
202 std::ostringstream oss;
203 oss <<
"ns3::HistoryTrailer<"<<N<<
">";
205 .SetParent<HistoryTrailerBase> ()
241 for (
int i = 0; i < N; i++)
259 void CheckHistory (
Ptr<Packet> p,
const char *file,
int line, uint32_t n, ...);
260 virtual void DoRun (
void);
265 PacketMetadataTest::PacketMetadataTest ()
277 std::list<int> expected;
280 for (uint32_t j = 0; j < n; j++)
282 int v = va_arg (ap,
int);
283 expected.push_back (v);
300 HistoryHeaderBase *header =
dynamic_cast<HistoryHeaderBase *
> (constructor ());
305 header->Deserialize (item.
current);
306 if (!header->IsOk ())
316 HistoryTrailerBase *trailer =
dynamic_cast<HistoryTrailerBase *
> (constructor ());
321 trailer->Deserialize (item.
current);
322 if (!trailer->IsOk ())
332 for (std::list<int>::iterator i = got.begin (),
333 j = expected.begin ();
334 i != got.end (); i++, j++)
344 std::ostringstream failure;
345 failure <<
"PacketMetadata error. Got:\"";
346 for (std::list<int>::iterator i = got.begin ();
347 i != got.end (); i++)
349 failure << *i <<
", ";
351 failure <<
"\", expected: \"";
352 for (std::list<int>::iterator j = expected.begin ();
353 j != expected.end (); j++)
355 failure << *j <<
", ";
361 #define ADD_HEADER(p, n) \
363 HistoryHeader<n> header; \
364 p->AddHeader (header); \
366 #define ADD_TRAILER(p, n) \
368 HistoryTrailer<n> trailer; \
369 p->AddTrailer (trailer); \
371 #define REM_HEADER(p, n) \
373 HistoryHeader<n> header; \
374 p->RemoveHeader (header); \
376 #define REM_TRAILER(p, n) \
378 HistoryTrailer<n> trailer; \
379 p->RemoveTrailer (trailer); \
381 #define CHECK_HISTORY(p, ...) \
383 CheckHistory (p, __FILE__, __LINE__, __VA_ARGS__); \
384 uint32_t size = p->GetSerializedSize (); \
385 uint8_t* buffer = new uint8_t[size]; \
386 p->Serialize (buffer, size); \
387 Ptr<Packet> otherPacket = Create<Packet> (buffer, size, true); \
389 CheckHistory (otherPacket, __FILE__, __LINE__, __VA_ARGS__); \
408 p = Create<Packet> (10);
413 p = Create<Packet> (10);
426 p = Create<Packet> (10);
434 p = Create<Packet> (10);
443 p = Create<Packet> (10);
452 p = Create<Packet> (10);
477 3, 3, 2, 1, 10, 4, 5);
490 p1->RemoveAtStart (3);
493 p1->RemoveAtStart (1);
496 p1->RemoveAtStart (1);
502 p1->RemoveAtStart (1);
505 p = Create<Packet> (10);
509 p->RemoveAtStart (8+10+8);
512 p = Create<Packet> (10);
518 p->RemoveAtStart (5);
522 p = Create<Packet> (10);
529 p->RemoveAtStart (12);
541 p = Create<Packet> (40);
545 p1 = p->CreateFragment (0, 5);
558 p1 = p->CreateFragment (0, 5);
561 p3 = Create<Packet> (50);
573 p1->RemoveAtEnd (60);
579 p3 = Create<Packet> (40);
583 p1 = p3->CreateFragment (0, 5);
590 p = Create<Packet> (0);
593 p3 = Create<Packet> (0);
597 p1 = p3->CreateFragment (0, 4);
605 p = Create<Packet> (2000);
608 p = Create<Packet> ();
611 p1 = p->CreateFragment (0, 8);
616 p = Create<Packet> ();
622 p = Create<Packet> ();
628 p = Create<Packet> ();
633 p = Create<Packet> (10);
637 p->RemoveAtStart (8+10+8);
640 p = Create<Packet> (0);
645 p = Create<Packet> (0);
650 p = Create<Packet> (0);
652 p->RemoveAtStart (8);
655 p = Create<Packet> (0);
662 p = Create<Packet> (0);
669 p = Create<Packet> (0);
673 p->RemoveAtStart (8);
676 p = Create<Packet> (0);
683 p = Create<Packet> (0);
690 p = Create<Packet> (0);
694 p->RemoveAtStart (8);
697 p = Create<Packet> (16383);
698 p = Create<Packet> (16384);
702 p = Create<Packet> (40);
712 p = Create<Packet> (1000);
722 p = Create<Packet> (1510);
727 p1 = p->CreateFragment (0, 1500);
732 p = Create<Packet> (1000);
742 p = Create<Packet> (200);
744 p1 = p->CreateFragment (0, 100);
745 p2 = p->CreateFragment (100, 100);
748 p = Create<Packet> ();
750 p1 = Create<Packet> ();
755 p = Create<Packet> (500);
764 p = Create<Packet> (500);
770 p->RemoveAtStart (10);
774 p = Create<Packet> (500);
779 p1 = p->CreateFragment (0,6);
780 p2 = p->CreateFragment (6,535-6);
784 p = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
"hello world"), 11);
787 p1 = p->CreateFragment (0, 5);
789 p2 = p->CreateFragment (5, 8);
817 uint8_t *buf =
new uint8_t[p3->GetSize ()];
818 p3->CopyData (buf, p3->GetSize ());
819 std::string msg = std::string (reinterpret_cast<const char *>(buf),
822 NS_TEST_EXPECT_MSG_EQ (msg, std::string (
"hello world"),
"Could not find original data in received packet");