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)
Record in this TypeId the fact that the default constructor is accessible. 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not. 
 
virtual void Serialize(Buffer::Iterator start) const 
 
#define NS_TEST_ASSERT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)
Test that an actual and expected (limit) value are equal and report and abort if not. 
 
iterator in a Buffer instance 
 
Callback< ObjectBase * > GetConstructor(void) const 
Get the constructor callback. 
 
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 AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite. 
 
void Prev(void)
go backward by one byte 
 
virtual uint32_t Deserialize(Buffer::Iterator start)
 
virtual TypeId GetInstanceTypeId(void) const 
Get the most derived TypeId for this Object. 
 
Protocol trailer serialization and deserialization. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
PacketMetadata::ItemIterator BeginItem(void) const 
Returns an iterator which points to the first 'item' stored in this buffer. 
 
virtual uint32_t GetSerializedSize(void) const 
 
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)
Set the parent TypeId. 
 
static TypeId GetTypeId(void)