A Discrete-Event Network Simulator
API
dsr-test-suite.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 Yufei Cheng
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Yufei Cheng <yfcheng@ittc.ku.edu>
19  *
20  * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
21  * ResiliNets Research Group http://wiki.ittc.ku.edu/resilinets
22  * Information and Telecommunication Technology Center (ITTC)
23  * and Department of Electrical Engineering and Computer Science
24  * The University of Kansas Lawrence, KS USA.
25  *
26  * Work supported in part by NSF FIND (Future Internet Design) Program
27  * under grant CNS-0626918 (Postmodern Internet Architecture),
28  * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
29  * US Department of Defense (DoD), and ITTC at The University of Kansas.
30  */
31 
32 #include <vector>
33 #include "ns3/ptr.h"
34 #include "ns3/boolean.h"
35 #include "ns3/test.h"
36 #include "ns3/ipv4-route.h"
37 #include "ns3/mesh-helper.h"
38 #include "ns3/simulator.h"
39 #include "ns3/double.h"
40 #include "ns3/uinteger.h"
41 #include "ns3/string.h"
42 #include "ns3/ipv4-address-helper.h"
43 
44 #include "ns3/dsr-fs-header.h"
45 #include "ns3/dsr-option-header.h"
46 #include "ns3/dsr-rreq-table.h"
47 #include "ns3/dsr-rcache.h"
48 #include "ns3/dsr-rsendbuff.h"
49 #include "ns3/dsr-main-helper.h"
50 #include "ns3/dsr-helper.h"
51 
52 using namespace ns3;
53 using namespace dsr;
54 
55 // -----------------------------------------------------------------------------
69 class DsrFsHeaderTest : public TestCase
70 {
71 public:
72  DsrFsHeaderTest ();
73  ~DsrFsHeaderTest ();
74  virtual void
75  DoRun (void);
76 };
78  : TestCase ("DSR Fixed size Header")
79 {
80 }
82 {
83 }
84 void
86 {
87  dsr::DsrRoutingHeader header;
88  dsr::DsrOptionRreqHeader rreqHeader;
89  header.AddDsrOption (rreqHeader); // has an alignment of 4n+0
90 
91  NS_TEST_EXPECT_MSG_EQ (header.GetSerializedSize () % 2, 0, "length of routing header is not a multiple of 4");
92  Buffer buf;
93  buf.AddAtStart (header.GetSerializedSize ());
94  header.Serialize (buf.Begin ());
95 
96  const uint8_t* data = buf.PeekData ();
97  NS_TEST_EXPECT_MSG_EQ (*(data + 8), rreqHeader.GetType (), "expect the rreqHeader after fixed size header");
98 }
99 // -----------------------------------------------------------------------------
108 {
109 public:
112  virtual void
113  DoRun (void);
114 };
116  : TestCase ("DSR RREQ")
117 {
118 }
120 {
121 }
122 void
124 {
126  std::vector<Ipv4Address> nodeList;
127  nodeList.push_back (Ipv4Address ("1.1.1.0"));
128  nodeList.push_back (Ipv4Address ("1.1.1.1"));
129  nodeList.push_back (Ipv4Address ("1.1.1.2"));
130 
131  h.SetTarget (Ipv4Address ("1.1.1.3"));
132  NS_TEST_EXPECT_MSG_EQ (h.GetTarget (), Ipv4Address ("1.1.1.3"), "trivial");
133  h.SetNodesAddress (nodeList);
134  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (0), Ipv4Address ("1.1.1.0"), "trivial");
135  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (1), Ipv4Address ("1.1.1.1"), "trivial");
136  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (2), Ipv4Address ("1.1.1.2"), "trivial");
137  h.SetId (1);
138  NS_TEST_EXPECT_MSG_EQ (h.GetId (), 1, "trivial");
139 
140  Ptr<Packet> p = Create<Packet> ();
141  dsr::DsrRoutingHeader header;
142  header.AddDsrOption (h);
143  p->AddHeader (header);
144  p->RemoveAtStart (8);
146  h2.SetNumberAddress (3);
147  uint32_t bytes = p->RemoveHeader (h2);
148  NS_TEST_EXPECT_MSG_EQ (bytes, 20, "Total RREP is 20 bytes long");
149 }
150 // -----------------------------------------------------------------------------
159 {
160 public:
163  virtual void
164  DoRun (void);
165 };
167  : TestCase ("DSR RREP")
168 {
169 }
171 {
172 }
173 void
175 {
177 
178  std::vector<Ipv4Address> nodeList;
179  nodeList.push_back (Ipv4Address ("1.1.1.0"));
180  nodeList.push_back (Ipv4Address ("1.1.1.1"));
181  nodeList.push_back (Ipv4Address ("1.1.1.2"));
182  h.SetNodesAddress (nodeList);
183  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (0), Ipv4Address ("1.1.1.0"), "trivial");
184  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (1), Ipv4Address ("1.1.1.1"), "trivial");
185  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (2), Ipv4Address ("1.1.1.2"), "trivial");
186 
187  Ptr<Packet> p = Create<Packet> ();
188  dsr::DsrRoutingHeader header;
189  header.AddDsrOption (h);
190  p->AddHeader (header);
191  p->RemoveAtStart (8);
193  h2.SetNumberAddress (3);
194  uint32_t bytes = p->RemoveHeader (h2);
195  NS_TEST_EXPECT_MSG_EQ (bytes, 16, "Total RREP is 16 bytes long");
196 }
197 // -----------------------------------------------------------------------------
205 class DsrSRHeaderTest : public TestCase
206 {
207 public:
208  DsrSRHeaderTest ();
209  ~DsrSRHeaderTest ();
210  virtual void
211  DoRun (void);
212 };
214  : TestCase ("DSR Source Route")
215 {
216 }
218 {
219 }
220 void
222 {
224  std::vector<Ipv4Address> nodeList;
225  nodeList.push_back (Ipv4Address ("1.1.1.0"));
226  nodeList.push_back (Ipv4Address ("1.1.1.1"));
227  nodeList.push_back (Ipv4Address ("1.1.1.2"));
228  h.SetNodesAddress (nodeList);
229  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (0), Ipv4Address ("1.1.1.0"), "trivial");
230  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (1), Ipv4Address ("1.1.1.1"), "trivial");
231  NS_TEST_EXPECT_MSG_EQ (h.GetNodeAddress (2), Ipv4Address ("1.1.1.2"), "trivial");
232 
233  h.SetSalvage (1);
234  NS_TEST_EXPECT_MSG_EQ (h.GetSalvage (), 1, "trivial");
235  h.SetSegmentsLeft (2);
236  NS_TEST_EXPECT_MSG_EQ (h.GetSegmentsLeft (), 2, "trivial");
237 
238  Ptr<Packet> p = Create<Packet> ();
239  dsr::DsrRoutingHeader header;
240  header.AddDsrOption (h);
241  p->AddHeader (header);
242  p->RemoveAtStart (8);
244  h2.SetNumberAddress (3);
245  uint32_t bytes = p->RemoveHeader (h2);
246  NS_TEST_EXPECT_MSG_EQ (bytes, 16, "Total RREP is 16 bytes long");
247 }
248 // -----------------------------------------------------------------------------
257 {
258 public:
261  virtual void
262  DoRun (void);
263 };
265  : TestCase ("DSR RERR")
266 {
267 }
269 {
270 }
271 void
273 {
275  h.SetErrorSrc (Ipv4Address ("1.1.1.0"));
276  NS_TEST_EXPECT_MSG_EQ (h.GetErrorSrc (), Ipv4Address ("1.1.1.0"), "trivial");
277  h.SetErrorDst (Ipv4Address ("1.1.1.1"));
278  NS_TEST_EXPECT_MSG_EQ (h.GetErrorDst (), Ipv4Address ("1.1.1.1"), "trivial");
279  h.SetSalvage (1);
280  NS_TEST_EXPECT_MSG_EQ (h.GetSalvage (), 1, "trivial");
281  h.SetUnreachNode (Ipv4Address ("1.1.1.2"));
282  NS_TEST_EXPECT_MSG_EQ (h.GetUnreachNode (), Ipv4Address ("1.1.1.2"), "trivial");
283 
284  Ptr<Packet> p = Create<Packet> ();
285  dsr::DsrRoutingHeader header;
286  header.AddDsrOption (h);
287  p->AddHeader (header);
288  p->RemoveAtStart (8);
290  uint32_t bytes = p->RemoveHeader (h2);
291  NS_TEST_EXPECT_MSG_EQ (bytes, 20, "Total RREP is 20 bytes long");
292 }
293 // -----------------------------------------------------------------------------
302 {
303 public:
306  virtual void
307  DoRun (void);
308 };
310  : TestCase ("DSR Ack Req")
311 {
312 }
314 {
315 }
316 void
318 {
320 
321  h.SetAckId (1);
322  NS_TEST_EXPECT_MSG_EQ (h.GetAckId (), 1, "trivial");
323 
324  Ptr<Packet> p = Create<Packet> ();
325  dsr::DsrRoutingHeader header;
326  header.AddDsrOption (h);
327  p->AddHeader (header);
328  p->RemoveAtStart (8);
329  p->AddHeader (header);
331  p->RemoveAtStart (8);
332  uint32_t bytes = p->RemoveHeader (h2);
333  NS_TEST_EXPECT_MSG_EQ (bytes, 4, "Total RREP is 4 bytes long");
334 }
335 // -----------------------------------------------------------------------------
344 {
345 public:
346  DsrAckHeaderTest ();
348  virtual void
349  DoRun (void);
350 };
352  : TestCase ("DSR ACK")
353 {
354 }
356 {
357 }
358 void
360 {
362 
363  h.SetRealSrc (Ipv4Address ("1.1.1.0"));
364  NS_TEST_EXPECT_MSG_EQ (h.GetRealSrc (), Ipv4Address ("1.1.1.0"), "trivial");
365  h.SetRealDst (Ipv4Address ("1.1.1.1"));
366  NS_TEST_EXPECT_MSG_EQ (h.GetRealDst (), Ipv4Address ("1.1.1.1"), "trivial");
367  h.SetAckId (1);
368  NS_TEST_EXPECT_MSG_EQ (h.GetAckId (), 1, "trivial");
369 
370  Ptr<Packet> p = Create<Packet> ();
371  dsr::DsrRoutingHeader header;
372  header.AddDsrOption (h);
373  p->AddHeader (header);
374  p->RemoveAtStart (8);
375  p->AddHeader (header);
377  p->RemoveAtStart (8);
378  uint32_t bytes = p->RemoveHeader (h2);
379  NS_TEST_EXPECT_MSG_EQ (bytes, 12, "Total RREP is 12 bytes long");
380 }
381 // -----------------------------------------------------------------------------
390 {
391 public:
394  virtual void
395  DoRun (void);
396 };
398  : TestCase ("DSR ACK")
399 {
400 }
402 {
403 }
404 void
406 {
407  Ptr<dsr::DsrRouteCache> rcache = CreateObject<dsr::DsrRouteCache> ();
408  std::vector<Ipv4Address> ip;
409  ip.push_back (Ipv4Address ("0.0.0.0"));
410  ip.push_back (Ipv4Address ("0.0.0.1"));
411  Ipv4Address dst = Ipv4Address ("0.0.0.1");
412  dsr::DsrRouteCacheEntry entry (ip, dst, Seconds (1));
413  NS_TEST_EXPECT_MSG_EQ (entry.GetVector ().size (), 2, "trivial");
414  NS_TEST_EXPECT_MSG_EQ (entry.GetDestination (), Ipv4Address ("0.0.0.1"), "trivial");
415  NS_TEST_EXPECT_MSG_EQ (entry.GetExpireTime (), Seconds (1), "trivial");
416 
417  entry.SetExpireTime (Seconds (3));
418  NS_TEST_EXPECT_MSG_EQ (entry.GetExpireTime (), Seconds (3), "trivial");
419  entry.SetDestination (Ipv4Address ("1.1.1.1"));
420  NS_TEST_EXPECT_MSG_EQ (entry.GetDestination (), Ipv4Address ("1.1.1.1"), "trivial");
421  ip.push_back (Ipv4Address ("0.0.0.2"));
422  entry.SetVector (ip);
423  NS_TEST_EXPECT_MSG_EQ (entry.GetVector ().size (), 3, "trivial");
424 
425  NS_TEST_EXPECT_MSG_EQ (rcache->AddRoute (entry), true, "trivial");
426 
427  std::vector<Ipv4Address> ip2;
428  ip2.push_back (Ipv4Address ("1.1.1.0"));
429  ip2.push_back (Ipv4Address ("1.1.1.1"));
430  Ipv4Address dst2 = Ipv4Address ("1.1.1.1");
431  dsr::DsrRouteCacheEntry entry2 (ip2, dst2, Seconds (2));
432  dsr::DsrRouteCacheEntry newEntry;
433  NS_TEST_EXPECT_MSG_EQ (rcache->AddRoute (entry2), true, "trivial");
434  NS_TEST_EXPECT_MSG_EQ (rcache->LookupRoute (dst2, newEntry), true, "trivial");
435  NS_TEST_EXPECT_MSG_EQ (rcache->DeleteRoute (Ipv4Address ("2.2.2.2")), false, "trivial");
436 
437  NS_TEST_EXPECT_MSG_EQ (rcache->DeleteRoute (Ipv4Address ("1.1.1.1")), true, "trivial");
438  NS_TEST_EXPECT_MSG_EQ (rcache->DeleteRoute (Ipv4Address ("1.1.1.1")), false, "trivial");
439 }
440 // -----------------------------------------------------------------------------
448 class DsrSendBuffTest : public TestCase
449 {
450 public:
451  DsrSendBuffTest ();
452  ~DsrSendBuffTest ();
453  virtual void
454  DoRun (void);
456  void CheckSizeLimit ();
458  void CheckTimeout ();
459 
461 };
463  : TestCase ("DSR SendBuff"),
464  q ()
465 {
466 }
468 {
469 }
470 void
472 {
473  q.SetMaxQueueLen (32);
474  NS_TEST_EXPECT_MSG_EQ (q.GetMaxQueueLen (), 32, "trivial");
476  NS_TEST_EXPECT_MSG_EQ (q.GetSendBufferTimeout (), Seconds (10), "trivial");
477 
478  Ptr<const Packet> packet = Create<Packet> ();
479  Ipv4Address dst1 = Ipv4Address ("0.0.0.1");
480  dsr::DsrSendBuffEntry e1 (packet, dst1, Seconds (1));
481  q.Enqueue (e1);
482  q.Enqueue (e1);
483  q.Enqueue (e1);
484  NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("0.0.0.1")), true, "trivial");
485  NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("1.1.1.1")), false, "trivial");
486  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 1, "trivial");
487  q.DropPacketWithDst (Ipv4Address ("0.0.0.1"));
488  NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("0.0.0.1")), false, "trivial");
489  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 0, "trivial");
490 
491  Ipv4Address dst2 = Ipv4Address ("0.0.0.2");
492  dsr::DsrSendBuffEntry e2 (packet, dst2, Seconds (1));
493  q.Enqueue (e1);
494  q.Enqueue (e2);
495  Ptr<Packet> packet2 = Create<Packet> ();
496  dsr::DsrSendBuffEntry e3 (packet2, dst2, Seconds (1));
497  NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address ("0.0.0.3"), e3), false, "trivial");
498  NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address ("0.0.0.2"), e3), true, "trivial");
499  NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("0.0.0.2")), false, "trivial");
500  q.Enqueue (e2);
501  q.Enqueue (e3);
502  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial");
503  Ptr<Packet> packet4 = Create<Packet> ();
504  Ipv4Address dst4 = Ipv4Address ("0.0.0.4");
505  dsr::DsrSendBuffEntry e4 (packet4, dst4, Seconds (20));
506  q.Enqueue (e4);
507  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 3, "trivial");
508  q.DropPacketWithDst (Ipv4Address ("0.0.0.4"));
509  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial");
510 
511  CheckSizeLimit ();
512 
513  Simulator::Schedule (q.GetSendBufferTimeout () + Seconds (1), &DsrSendBuffTest::CheckTimeout, this);
514 
515  Simulator::Run ();
516  Simulator::Destroy ();
517 }
518 void
520 {
521  Ptr<Packet> packet = Create<Packet> ();
522  Ipv4Address dst;
523  dsr::DsrSendBuffEntry e1 (packet, dst, Seconds (1));
524 
525  for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i)
526  {
527  q.Enqueue (e1);
528  }
529  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 3, "trivial");
530 
531  for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i)
532  {
533  q.Enqueue (e1);
534  }
535  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 3, "trivial");
536 }
537 void
539 {
540  NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 0, "Must be empty now");
541 }
542 // -----------------------------------------------------------------------------
551 {
552 public:
553  DsrRreqTableTest ();
555  virtual void
556  DoRun (void);
557 };
559  : TestCase ("DSR RreqTable")
560 {
561 }
563 {
564 }
565 void
567 {
569 
570  rt.m_reqNo = 2;
571  NS_TEST_EXPECT_MSG_EQ (rt.m_reqNo, 2, "trivial");
572 }
573 // -----------------------------------------------------------------------------
581 class DsrTestSuite : public TestSuite
582 {
583 public:
584  DsrTestSuite () : TestSuite ("routing-dsr", UNIT)
585  {
586  AddTestCase (new DsrFsHeaderTest, TestCase::QUICK);
587  AddTestCase (new DsrRreqHeaderTest, TestCase::QUICK);
588  AddTestCase (new DsrRrepHeaderTest, TestCase::QUICK);
589  AddTestCase (new DsrSRHeaderTest, TestCase::QUICK);
590  AddTestCase (new DsrRerrHeaderTest, TestCase::QUICK);
591  AddTestCase (new DsrAckReqHeaderTest, TestCase::QUICK);
592  AddTestCase (new DsrAckHeaderTest, TestCase::QUICK);
593  AddTestCase (new DsrCacheEntryTest, TestCase::QUICK);
594  AddTestCase (new DsrSendBuffTest, TestCase::QUICK);
595  }
Unit test for ACK.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for ACK-REQ.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for DSR route cache entry.
~DsrCacheEntryTest()
virtual void DoRun(void)
Implementation to actually run this TestCase.
DsrCacheEntryTest()
Unit test for DSR Fixed Size Header.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for RERR.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for RREP.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for RREQ.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for DSR routing table entry.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for Source Route.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Unit test for Send Buffer.
void CheckSizeLimit()
Check size limit function.
void CheckTimeout()
Check timeout function.
dsr::DsrSendBuffer q
send buffer
virtual void DoRun(void)
Implementation to actually run this TestCase.
DSR test suite.
automatically resized byte buffer
Definition: buffer.h:93
void AddAtStart(uint32_t start)
Definition: buffer.cc:309
uint8_t const * PeekData(void) const
Definition: buffer.cc:710
Buffer::Iterator Begin(void) const
Definition: buffer.h:1069
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
void RemoveAtStart(uint32_t size)
Remove size bytes from the start of the current packet.
Definition: packet.cc:362
encapsulates test code
Definition: test.h:994
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
A suite of tests to run.
Definition: test.h:1188
@ UNIT
This test suite implements a Unit Test.
Definition: test.h:1197
Acknowledgement (ACK) Message Format.
void SetAckId(uint16_t identification)
Set the Ack id number.
uint16_t GetAckId() const
Set the Ack id number.
void SetRealSrc(Ipv4Address realSrcAddress)
Set Error source ip address.
void SetRealDst(Ipv4Address realDstAddress)
Set Error source ip address.
Ipv4Address GetRealDst() const
Get Error source ip address.
Ipv4Address GetRealSrc() const
Get Error source ip address.
Acknowledgement Request (ACK_RREQ) Message Format.
void SetAckId(uint16_t identification)
Set the Ack request id number.
uint16_t GetAckId() const
Set the Ack request id number.
void AddDsrOption(DsrOptionHeader const &option)
Serialize the option, prepending pad1 or padn option as necessary.
uint8_t GetType() const
Get the type of the option.
Route Error (RERR) Unreachable node address option Message Format.
virtual void SetErrorSrc(Ipv4Address errorSrcAddress)
Set the route error source address.
void SetUnreachNode(Ipv4Address unreachNode)
Set the unreachable node ip address.
virtual void SetErrorDst(Ipv4Address errorDstAddress)
Set the error destination ip address.
virtual Ipv4Address GetErrorSrc() const
Get the route error source address.
virtual uint8_t GetSalvage() const
Get the salvage value of the packet.
virtual void SetSalvage(uint8_t salvage)
Set the salvage value of the packet.
virtual Ipv4Address GetErrorDst() const
Get the error destination ip address.
Ipv4Address GetUnreachNode() const
Get the unreachable node ip address.
Route Reply (RREP) Message Format.
void SetNumberAddress(uint8_t n)
Set the number of ipv4 address.
Ipv4Address GetNodeAddress(uint8_t index) const
Get a Node IPv4 Address.
void SetNodesAddress(std::vector< Ipv4Address > ipv4Address)
Set the vector of ipv4 address.
Route Request (RREQ) Message Format.
void SetNodesAddress(std::vector< Ipv4Address > ipv4Address)
Set the vector of ipv4 address.
void SetNumberAddress(uint8_t n)
Set the number of ipv4 address.
Ipv4Address GetNodeAddress(uint8_t index) const
Get a Node IPv4 Address.
void SetTarget(Ipv4Address target)
Set the target ipv4 address.
Ipv4Address GetTarget()
Get the target ipv4 address.
uint16_t GetId() const
Set the request id number.
void SetId(uint16_t identification)
Set the request id number.
Source Route (SR) Message Format.
Ipv4Address GetNodeAddress(uint8_t index) const
Get a Node IPv4 Address.
void SetNumberAddress(uint8_t n)
Set the number of ipv4 address.
void SetSalvage(uint8_t salvage)
Set the salvage value for a packet.
void SetSegmentsLeft(uint8_t segmentsLeft)
Set the number of segments left to send.
uint8_t GetSalvage() const
Get the salvage value for a packet.
void SetNodesAddress(std::vector< Ipv4Address > ipv4Address)
Set the vector of ipv4 address.
uint8_t GetSegmentsLeft() const
Get the number of segments left to send.
DsrRouteCacheEntry class for entries in the route cache.
Definition: dsr-rcache.h:221
IP_VECTOR GetVector() const
Get the IP vector.
Definition: dsr-rcache.h:293
void SetDestination(Ipv4Address d)
Set destination address.
Definition: dsr-rcache.h:285
Ipv4Address GetDestination() const
Get destination address.
Definition: dsr-rcache.h:277
Time GetExpireTime() const
Get expire time.
Definition: dsr-rcache.h:317
void SetExpireTime(Time exp)
Set expire time.
Definition: dsr-rcache.h:309
void SetVector(IP_VECTOR v)
Sets the IP vector.
Definition: dsr-rcache.h:301
Header of Dsr Routing.
virtual uint32_t GetSerializedSize() const
Get the serialized size of the packet.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
DSR Send Buffer Entry.
Definition: dsr-rsendbuff.h:46
DSR send buffer.
void SetMaxQueueLen(uint32_t len)
Set the maximum queue length.
Time GetSendBufferTimeout() const
Return the entry lifetime in the queue.
uint32_t GetSize()
Number of entries.
bool Dequeue(Ipv4Address dst, DsrSendBuffEntry &entry)
Return first found (the earliest) entry for the given destination.
uint32_t GetMaxQueueLen() const
Return the maximum queue length.
void SetSendBufferTimeout(Time t)
Set the entry lifetime in the queue.
bool Enqueue(DsrSendBuffEntry &entry)
Push entry in queue, if there is no entry with the same packet and destination address in queue.
bool Find(Ipv4Address dst)
Check if a packet with destination dst exists in the queue.
void DropPacketWithDst(Ipv4Address dst)
Remove all packets with destination IP address dst.
DsrTestSuite g_dsrTestSuite
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Definition: test.h:240
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t data[writeSize]
The route request table entries.
uint32_t m_reqNo
Route request number.