20 #include "ns3/packet.h"
44 std::ostringstream oss;
45 oss <<
"anon::ATestTag<" << N <<
">";
49 .HideFromDocumentation ()
60 for (uint32_t i = 0; i < N; ++i)
66 for (uint32_t i = 0; i < N; ++i)
75 virtual void Print (std::ostream &os)
const {
94 std::ostringstream oss;
95 oss <<
"anon::ATestHeader<" << N <<
">";
99 .HideFromDocumentation ()
110 for (uint32_t i = 0; i < N; ++i)
116 for (uint32_t i = 0; i < N; ++i)
118 uint8_t v = iter.
ReadU8 ();
126 virtual void Print (std::ostream &os)
const {
145 std::ostringstream oss;
146 oss <<
"anon::ATestTrailer<" << N <<
">";
148 .SetParent<Header> ()
150 .HideFromDocumentation ()
162 for (uint32_t i = 0; i < N; ++i)
169 for (uint32_t i = 0; i < N; ++i)
171 uint8_t v = iter.
ReadU8 ();
179 virtual void Print (std::ostream &os)
const {
189 Expected (uint32_t n_, uint32_t start_, uint32_t end_)
190 : n (n_),
start (start_), end (end_) {}
200 #define E(a,b,c) a,b,c
202 #define CHECK(p, n, ...) \
203 DoCheck (p, __FILE__, __LINE__, n, __VA_ARGS__)
209 virtual void DoRun (
void);
222 std::vector<struct Expected> expected;
225 for (uint32_t k = 0; k < n; ++k)
227 uint32_t N = va_arg (ap, uint32_t);
228 uint32_t
start = va_arg (ap, uint32_t);
229 uint32_t end = va_arg (ap, uint32_t);
230 expected.push_back (Expected (N, start, end));
236 while (i.
HasNext () && j < expected.size ())
239 struct Expected e = expected[j];
240 std::ostringstream oss;
241 oss <<
"anon::ATestTag<" << e.n <<
">";
259 Ptr<Packet> pkt1 = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
"hello"), 5);
260 Ptr<Packet> pkt2 = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
" world"), 6);
267 uint8_t *buf =
new uint8_t[packet->
GetSize ()];
270 std::string msg = std::string (reinterpret_cast<const char *>(buf),
280 CHECK (p, 1,
E (1, 0, 1000));
282 CHECK (copy, 1,
E (1, 0, 1000));
285 CHECK (p, 2,
E (1, 0, 1000),
E (2, 0, 1000));
286 CHECK (copy, 1,
E (1, 0, 1000));
292 CHECK (&c0, 1,
E (1, 0, 1000));
293 CHECK (&c1, 1,
E (1, 0, 1000));
294 CHECK (copy, 1,
E (1, 0, 1000));
296 CHECK (&c0, 2,
E (1, 0, 1000),
E (10, 0, 1000));
297 CHECK (&c1, 1,
E (1, 0, 1000));
298 CHECK (copy, 1,
E (1, 0, 1000));
305 CHECK (frag0, 3,
E (1, 0, 10),
E (2, 0, 10),
E (3, 0, 10));
307 CHECK (frag1, 3,
E (1, 0, 90),
E (2, 0, 90),
E (4, 0, 90));
309 CHECK (frag2, 3,
E (1, 0, 900),
E (2, 0, 900),
E (5, 0, 900));
312 CHECK (frag1, 6,
E (1, 0, 90),
E (2, 0, 90),
E (4, 0, 90),
E (1, 90, 990),
E (2, 90, 990),
E (5, 90, 990));
314 CHECK (frag0, 3,
E (1, 0, 10),
E (2, 0, 10),
E (3, 0, 10));
317 E (1, 0, 10),
E (2, 0, 10),
E (3, 0, 10),
318 E (1, 10, 100),
E (2, 10, 100),
E (4, 10, 100),
319 E (1, 100, 1000),
E (2, 100, 1000),
E (5, 100, 1000));
323 frag0 = Create<Packet> (1000);
327 p = Create<Packet> (1000);
329 CHECK (p, 1,
E (20, 0, 1000));
331 CHECK (p, 1,
E (20, 0, 1000));
332 CHECK (frag0, 1,
E (20, 0, 90));
335 CHECK (frag0, 1,
E (20, 10, 100));
340 CHECK (tmp, 1,
E (20, 0, 100));
342 CHECK (tmp, 1,
E (20, 10, 110));
345 CHECK (tmp, 1,
E (20, 0, 100));
347 CHECK (tmp, 1,
E (20, 10, 110));
349 tmp = Create<Packet> (100);
351 CHECK (tmp, 1,
E (20, 0, 100));
353 CHECK (tmp, 1,
E (20, 0, 100));
356 CHECK (tmp, 1,
E (20, 0, 100));
358 CHECK (tmp, 1,
E (20, 0, 100));
366 CHECK (tmp, 1,
E (20, 0, 156));
368 CHECK (tmp, 1,
E (20, 0, 36));
371 CHECK (a, 1,
E (20, 0, 36));
377 CHECK (tmp, 0,
E (20, 0, 0));
382 CHECK (tmp, 1,
E (20, 0, 1000));
384 CHECK (tmp, 0,
E (0,0,0));
387 CHECK (a, 1,
E (10, 0, 10));
389 CHECK (tmp, 1,
E (10, 0, 10));
406 copy.AddPacketTag (c);
411 copy.RemovePacketTag (b);
427 CHECK (tmp, 1,
E (20, 0, 1000));
429 CHECK (tmp, 1,
E (20, 2, 1002));
431 CHECK (tmp, 1,
E (20, 1, 1001));
434 CHECK (tmp, 1,
E (20, 1, 1001));