9#include "ns3/packet-metadata.h" 
   10#include "ns3/packet.h" 
   12#include "ns3/trailer.h" 
   99    void Print(std::ostream& os) 
const override;
 
 
  115    std::ostringstream oss;
 
  116    oss << 
"ns3::HistoryHeader<" << N << 
">";
 
 
  154    for (
int i = 0; i < N; i++)
 
  156        if (start.ReadU8() != N)
 
 
  241    void Print(std::ostream& os) 
const override;
 
 
  256    std::ostringstream oss;
 
  257    oss << 
"ns3::HistoryTrailer<" << N << 
">";
 
 
  297    for (
int i = 0; i < N; i++)
 
  299        if (start.ReadU8() != N)
 
 
 
  327    void DoRun() 
override;
 
 
  350    std::list<int> expected;
 
  355        int v = va_arg(ap, 
int);
 
  356        expected.push_back(v);
 
  374            if (header == 
nullptr)
 
  390            if (trailer == 
nullptr)
 
  395            if (!trailer->IsOk())
 
  405    for (
auto i = got.begin(), j = expected.begin(); i != got.end(); i++, j++)
 
  415    std::ostringstream failure;
 
  416    failure << 
"PacketMetadata error. Got:\"";
 
  417    for (
auto i = got.begin(); i != got.end(); i++)
 
  419        failure << *i << 
", ";
 
  421    failure << 
"\", expected: \"";
 
  422    for (
auto j = expected.begin(); j != expected.end(); j++)
 
  424        failure << *j << 
", ";
 
 
  430#define ADD_HEADER(p, n)                                                                           \ 
  432        HistoryHeader<n> header;                                                                   \ 
  433        p->AddHeader(header);                                                                      \ 
 
  435#define ADD_TRAILER(p, n)                                                                          \ 
  437        HistoryTrailer<n> trailer;                                                                 \ 
  438        p->AddTrailer(trailer);                                                                    \ 
 
  440#define REM_HEADER(p, n)                                                                           \ 
  442        HistoryHeader<n> header;                                                                   \ 
  443        p->RemoveHeader(header);                                                                   \ 
 
  445#define REM_TRAILER(p, n)                                                                          \ 
  447        HistoryTrailer<n> trailer;                                                                 \ 
  448        p->RemoveTrailer(trailer);                                                                 \ 
 
  450#define CHECK_HISTORY(p, ...)                                                                      \ 
  452        CheckHistory(p, __VA_ARGS__);                                                              \ 
  453        uint32_t size = p->GetSerializedSize();                                                    \ 
  454        uint8_t* buffer = new uint8_t[size];                                                       \ 
  455        p->Serialize(buffer, size);                                                                \ 
  456        Ptr<Packet> otherPacket = Create<Packet>(buffer, size, true);                              \ 
  458        CheckHistory(otherPacket, __VA_ARGS__);                                                    \ 
 
  542    p1->RemoveAtStart(3);
 
  544    p1->RemoveAtStart(1);
 
  546    p1->RemoveAtStart(1);
 
  550    p1->RemoveAtStart(1);
 
  557    p->RemoveAtStart(8 + 10 + 8);
 
  577    p->RemoveAtStart(12);
 
  593    p1 = p->CreateFragment(0, 5);
 
  594    p2 = p->CreateFragment(5, 5);
 
  595    p3 = p->CreateFragment(10, 43);
 
  606    p1 = p->CreateFragment(0, 5);
 
  631    p1 = p3->CreateFragment(0, 5);
 
  632    p2 = p3->CreateFragment(5, 5);
 
  645    p1 = p3->CreateFragment(0, 4);
 
  646    p2 = p3->CreateFragment(9, 1);
 
  658    p1 = p->CreateFragment(0, 8);
 
  659    p2 = p->CreateFragment(8, 7);
 
  684    p->RemoveAtStart(8 + 10 + 8);
 
  750    p2 = p->CreateFragment(5, 5);
 
  751    p3 = p->CreateFragment(10, 30);
 
  772    p1 = p->CreateFragment(0, 1500);
 
  789    p1 = p->CreateFragment(0, 100);
 
  790    p2 = p->CreateFragment(100, 100);
 
  815    p->RemoveAtStart(10);
 
  825    p1 = p->CreateFragment(0, 6);
 
  826    p2 = p->CreateFragment(6, 535 - 6);
 
  831    p = 
Create<Packet>(
reinterpret_cast<const uint8_t*
>(
"hello world"), 11);
 
  834    p1 = p->CreateFragment(0, 5);
 
  836    p2 = p->CreateFragment(5, 8);
 
  864    auto buf = 
new uint8_t[p3->GetSize()];
 
  865    p3->CopyData(buf, p3->GetSize());
 
  866    std::string msg = std::string(
reinterpret_cast<const char*
>(buf), p3->GetSize());
 
  869                          std::string(
"hello world"),
 
  870                          "Could not find original data in received packet");
 
 
Base trailer-type class to check the proper trailer concatenation.
void ReportError()
Signal that an error has been found in deserialization.
bool m_ok
True if no error is signalled.
static TypeId GetTypeId()
Get the type ID.
bool IsOk() const
Checks if the header has deserialization errors.
Template trailer-type class to check the proper trailer concatenation.
uint32_t Deserialize(Buffer::Iterator start) override
static TypeId GetTypeId()
Get the type ID.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint32_t GetSerializedSize() const override
void Print(std::ostream &os) const override
void Serialize(Buffer::Iterator start) const override
iterator in a Buffer instance
Smart pointer class similar to boost::intrusive_ptr.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Protocol trailer serialization and deserialization.
uint32_t Deserialize(Buffer::Iterator end) override=0
a unique identifier for an interface.
Callback< ObjectBase * > GetConstructor() const
Get the constructor callback.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
#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.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Every class exported by the ns3 library is enclosed in the ns3 namespace.