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++)
257 void CheckHistory (
Ptr<Packet> p,
const char *file,
int line, uint32_t n, ...);
258 virtual void DoRun (
void);
275 std::list<int> expected;
278 for (uint32_t j = 0; j < n; j++)
280 int v = va_arg (ap,
int);
281 expected.push_back (v);
290 if (item.
isFragment || item.
type == PacketMetadata::Item::PAYLOAD)
295 if (item.
type == PacketMetadata::Item::HEADER)
298 HistoryHeaderBase *header =
dynamic_cast<HistoryHeaderBase *
> (constructor ());
303 header->Deserialize (item.
current);
304 if (!header->IsOk ())
311 else if (item.
type == PacketMetadata::Item::TRAILER)
314 HistoryTrailerBase *trailer =
dynamic_cast<HistoryTrailerBase *
> (constructor ());
319 trailer->Deserialize (item.
current);
320 if (!trailer->IsOk ())
330 for (std::list<int>::iterator i = got.begin (),
331 j = expected.begin ();
332 i != got.end (); i++, j++)
342 std::ostringstream failure;
343 failure <<
"PacketMetadata error. Got:\"";
344 for (std::list<int>::iterator i = got.begin ();
345 i != got.end (); i++)
347 failure << *i <<
", ";
349 failure <<
"\", expected: \"";
350 for (std::list<int>::iterator j = expected.begin ();
351 j != expected.end (); j++)
353 failure << *j <<
", ";
359 #define ADD_HEADER(p, n) \
361 HistoryHeader<n> header; \
362 p->AddHeader (header); \
364 #define ADD_TRAILER(p, n) \
366 HistoryTrailer<n> trailer; \
367 p->AddTrailer (trailer); \
369 #define REM_HEADER(p, n) \
371 HistoryHeader<n> header; \
372 p->RemoveHeader (header); \
374 #define REM_TRAILER(p, n) \
376 HistoryTrailer<n> trailer; \
377 p->RemoveTrailer (trailer); \
379 #define CHECK_HISTORY(p, ...) \
381 CheckHistory (p, __FILE__, __LINE__, __VA_ARGS__); \
382 uint32_t size = p->GetSerializedSize (); \
383 uint8_t* buffer = new uint8_t[size]; \
384 p->Serialize (buffer, size); \
385 Ptr<Packet> otherPacket = Create<Packet> (buffer, size, true); \
387 CheckHistory (otherPacket, __FILE__, __LINE__, __VA_ARGS__); \
401 PacketMetadata::Enable ();
406 p = Create<Packet> (10);
411 p = Create<Packet> (10);
424 p = Create<Packet> (10);
432 p = Create<Packet> (10);
441 p = Create<Packet> (10);
450 p = Create<Packet> (10);
475 3, 3, 2, 1, 10, 4, 5);
488 p1->RemoveAtStart (3);
491 p1->RemoveAtStart (1);
494 p1->RemoveAtStart (1);
500 p1->RemoveAtStart (1);
503 p = Create<Packet> (10);
507 p->RemoveAtStart (8+10+8);
510 p = Create<Packet> (10);
516 p->RemoveAtStart (5);
520 p = Create<Packet> (10);
527 p->RemoveAtStart (12);
539 p = Create<Packet> (40);
543 p1 = p->CreateFragment (0, 5);
556 p1 = p->CreateFragment (0, 5);
559 p3 = Create<Packet> (50);
571 p1->RemoveAtEnd (60);
577 p3 = Create<Packet> (40);
581 p1 = p3->CreateFragment (0, 5);
588 p = Create<Packet> (0);
591 p3 = Create<Packet> (0);
595 p1 = p3->CreateFragment (0, 4);
603 p = Create<Packet> (2000);
606 p = Create<Packet> ();
609 p1 = p->CreateFragment (0, 8);
614 p = Create<Packet> ();
620 p = Create<Packet> ();
626 p = Create<Packet> ();
631 p = Create<Packet> (10);
635 p->RemoveAtStart (8+10+8);
638 p = Create<Packet> (0);
643 p = Create<Packet> (0);
648 p = Create<Packet> (0);
650 p->RemoveAtStart (8);
653 p = Create<Packet> (0);
660 p = Create<Packet> (0);
667 p = Create<Packet> (0);
671 p->RemoveAtStart (8);
674 p = Create<Packet> (0);
681 p = Create<Packet> (0);
688 p = Create<Packet> (0);
692 p->RemoveAtStart (8);
695 p = Create<Packet> (16383);
696 p = Create<Packet> (16384);
701 p = Create<Packet> (40);
711 p = Create<Packet> (1000);
721 p = Create<Packet> (1510);
726 p1 = p->CreateFragment (0, 1500);
731 p = Create<Packet> (1000);
741 p = Create<Packet> (200);
743 p1 = p->CreateFragment (0, 100);
744 p2 = p->CreateFragment (100, 100);
747 p = Create<Packet> ();
749 p1 = Create<Packet> ();
754 p = Create<Packet> (500);
763 p = Create<Packet> (500);
769 p->RemoveAtStart (10);
774 p = Create<Packet> (500);
779 p1 = p->CreateFragment (0,6);
780 p2 = p->CreateFragment (6,535-6);
785 p = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
"hello world"), 11);
788 p1 = p->CreateFragment (0, 5);
790 p2 = p->CreateFragment (5, 8);
818 uint8_t *buf =
new uint8_t[p3->GetSize ()];
819 p3->CopyData (buf, p3->GetSize ());
820 std::string msg = std::string (reinterpret_cast<const char *>(buf),
823 NS_TEST_EXPECT_MSG_EQ (msg, std::string (
"hello world"),
"Could not find original data in received packet");
TypeId AddConstructor(void)
#define NS_TEST_ASSERT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)
#define NS_ASSERT(condition)
virtual void Serialize(Buffer::Iterator start) const
iterator in a Buffer instance
Callback< ObjectBase * > GetConstructor(void) const
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const
Create a new packet which contains a fragment of the original packet.
void AddAtEnd(Ptr< const Packet > packet)
Concatenate the input packet at the end of the current packet.
void Prev(void)
go backward by one byte
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual TypeId GetInstanceTypeId(void) const
Protocol trailer serialization and deserialization.
PacketMetadata::ItemIterator BeginItem(void) const
virtual uint32_t GetSerializedSize(void) const
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
void WriteU8(uint8_t data)
virtual void Print(std::ostream &os) const
static TypeId GetTypeId(void)
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
static TypeId GetTypeId(void)