A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
aodv-packet.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 IITP RAS
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  * Based on
19  * NS-2 AODV model developed by the CMU/MONARCH group and optimized and
20  * tuned by Samir Das and Mahesh Marina, University of Cincinnati;
21  *
22  * AODV-UU implementation by Erik Nordström of Uppsala University
23  * http://core.it.uu.se/core/index.php/AODV-UU
24  *
25  * Authors: Elena Buchatskaia <borovkovaes@iitp.ru>
26  * Pavel Boyko <boyko@iitp.ru>
27  */
28 #include "aodv-packet.h"
29 #include "ns3/address-utils.h"
30 #include "ns3/packet.h"
31 
32 namespace ns3
33 {
34 namespace aodv
35 {
36 
37 NS_OBJECT_ENSURE_REGISTERED (TypeHeader);
38 
40  m_type (t), m_valid (true)
41 {
42 }
43 
44 TypeId
46 {
47  static TypeId tid = TypeId ("ns3::aodv::TypeHeader")
48  .SetParent<Header> ()
49  .AddConstructor<TypeHeader> ()
50  ;
51  return tid;
52 }
53 
54 TypeId
56 {
57  return GetTypeId ();
58 }
59 
60 uint32_t
62 {
63  return 1;
64 }
65 
66 void
68 {
69  i.WriteU8 ((uint8_t) m_type);
70 }
71 
72 uint32_t
74 {
76  uint8_t type = i.ReadU8 ();
77  m_valid = true;
78  switch (type)
79  {
80  case AODVTYPE_RREQ:
81  case AODVTYPE_RREP:
82  case AODVTYPE_RERR:
83  case AODVTYPE_RREP_ACK:
84  {
85  m_type = (MessageType) type;
86  break;
87  }
88  default:
89  m_valid = false;
90  }
91  uint32_t dist = i.GetDistanceFrom (start);
92  NS_ASSERT (dist == GetSerializedSize ());
93  return dist;
94 }
95 
96 void
97 TypeHeader::Print (std::ostream &os) const
98 {
99  switch (m_type)
100  {
101  case AODVTYPE_RREQ:
102  {
103  os << "RREQ";
104  break;
105  }
106  case AODVTYPE_RREP:
107  {
108  os << "RREP";
109  break;
110  }
111  case AODVTYPE_RERR:
112  {
113  os << "RERR";
114  break;
115  }
116  case AODVTYPE_RREP_ACK:
117  {
118  os << "RREP_ACK";
119  break;
120  }
121  default:
122  os << "UNKNOWN_TYPE";
123  }
124 }
125 
126 bool
128 {
129  return (m_type == o.m_type && m_valid == o.m_valid);
130 }
131 
132 std::ostream &
133 operator<< (std::ostream & os, TypeHeader const & h)
134 {
135  h.Print (os);
136  return os;
137 }
138 
139 //-----------------------------------------------------------------------------
140 // RREQ
141 //-----------------------------------------------------------------------------
142 RreqHeader::RreqHeader (uint8_t flags, uint8_t reserved, uint8_t hopCount, uint32_t requestID, Ipv4Address dst,
143  uint32_t dstSeqNo, Ipv4Address origin, uint32_t originSeqNo) :
144  m_flags (flags), m_reserved (reserved), m_hopCount (hopCount), m_requestID (requestID), m_dst (dst),
145  m_dstSeqNo (dstSeqNo), m_origin (origin), m_originSeqNo (originSeqNo)
146 {
147 }
148 
150 
151 TypeId
153 {
154  static TypeId tid = TypeId ("ns3::aodv::RreqHeader")
155  .SetParent<Header> ()
156  .AddConstructor<RreqHeader> ()
157  ;
158  return tid;
159 }
160 
161 TypeId
163 {
164  return GetTypeId ();
165 }
166 
167 uint32_t
169 {
170  return 23;
171 }
172 
173 void
175 {
176  i.WriteU8 (m_flags);
177  i.WriteU8 (m_reserved);
178  i.WriteU8 (m_hopCount);
180  WriteTo (i, m_dst);
182  WriteTo (i, m_origin);
184 }
185 
186 uint32_t
188 {
190  m_flags = i.ReadU8 ();
191  m_reserved = i.ReadU8 ();
192  m_hopCount = i.ReadU8 ();
193  m_requestID = i.ReadNtohU32 ();
194  ReadFrom (i, m_dst);
195  m_dstSeqNo = i.ReadNtohU32 ();
196  ReadFrom (i, m_origin);
197  m_originSeqNo = i.ReadNtohU32 ();
198 
199  uint32_t dist = i.GetDistanceFrom (start);
200  NS_ASSERT (dist == GetSerializedSize ());
201  return dist;
202 }
203 
204 void
205 RreqHeader::Print (std::ostream &os) const
206 {
207  os << "RREQ ID " << m_requestID << " destination: ipv4 " << m_dst
208  << " sequence number " << m_dstSeqNo << " source: ipv4 "
209  << m_origin << " sequence number " << m_originSeqNo
210  << " flags:" << " Gratuitous RREP " << (*this).GetGratiousRrep ()
211  << " Destination only " << (*this).GetDestinationOnly ()
212  << " Unknown sequence number " << (*this).GetUnknownSeqno ();
213 }
214 
215 std::ostream &
216 operator<< (std::ostream & os, RreqHeader const & h)
217 {
218  h.Print (os);
219  return os;
220 }
221 
222 void
224 {
225  if (f)
226  m_flags |= (1 << 5);
227  else
228  m_flags &= ~(1 << 5);
229 }
230 
231 bool
233 {
234  return (m_flags & (1 << 5));
235 }
236 
237 void
239 {
240  if (f)
241  m_flags |= (1 << 4);
242  else
243  m_flags &= ~(1 << 4);
244 }
245 
246 bool
248 {
249  return (m_flags & (1 << 4));
250 }
251 
252 void
254 {
255  if (f)
256  m_flags |= (1 << 3);
257  else
258  m_flags &= ~(1 << 3);
259 }
260 
261 bool
263 {
264  return (m_flags & (1 << 3));
265 }
266 
267 bool
269 {
270  return (m_flags == o.m_flags && m_reserved == o.m_reserved &&
272  m_dst == o.m_dst && m_dstSeqNo == o.m_dstSeqNo &&
274 }
275 
276 //-----------------------------------------------------------------------------
277 // RREP
278 //-----------------------------------------------------------------------------
279 
280 RrepHeader::RrepHeader (uint8_t prefixSize, uint8_t hopCount, Ipv4Address dst,
281  uint32_t dstSeqNo, Ipv4Address origin, Time lifeTime) :
282  m_flags (0), m_prefixSize (prefixSize), m_hopCount (hopCount),
283  m_dst (dst), m_dstSeqNo (dstSeqNo), m_origin (origin)
284 {
285  m_lifeTime = uint32_t (lifeTime.GetMilliSeconds ());
286 }
287 
289 
290 TypeId
292 {
293  static TypeId tid = TypeId ("ns3::aodv::RrepHeader")
294  .SetParent<Header> ()
295  .AddConstructor<RrepHeader> ()
296  ;
297  return tid;
298 }
299 
300 TypeId
302 {
303  return GetTypeId ();
304 }
305 
306 uint32_t
308 {
309  return 19;
310 }
311 
312 void
314 {
315  i.WriteU8 (m_flags);
316  i.WriteU8 (m_prefixSize);
317  i.WriteU8 (m_hopCount);
318  WriteTo (i, m_dst);
320  WriteTo (i, m_origin);
322 }
323 
324 uint32_t
326 {
328 
329  m_flags = i.ReadU8 ();
330  m_prefixSize = i.ReadU8 ();
331  m_hopCount = i.ReadU8 ();
332  ReadFrom (i, m_dst);
333  m_dstSeqNo = i.ReadNtohU32 ();
334  ReadFrom (i, m_origin);
335  m_lifeTime = i.ReadNtohU32 ();
336 
337  uint32_t dist = i.GetDistanceFrom (start);
338  NS_ASSERT (dist == GetSerializedSize ());
339  return dist;
340 }
341 
342 void
343 RrepHeader::Print (std::ostream &os) const
344 {
345  os << "destination: ipv4 " << m_dst << " sequence number " << m_dstSeqNo;
346  if (m_prefixSize != 0)
347  {
348  os << " prefix size " << m_prefixSize;
349  }
350  os << " source ipv4 " << m_origin << " lifetime " << m_lifeTime
351  << " acknowledgment required flag " << (*this).GetAckRequired ();
352 }
353 
354 void
356 {
358 }
359 
360 Time
362 {
364  return t;
365 }
366 
367 void
369 {
370  if (f)
371  m_flags |= (1 << 6);
372  else
373  m_flags &= ~(1 << 6);
374 }
375 
376 bool
378 {
379  return (m_flags & (1 << 6));
380 }
381 
382 void
384 {
385  m_prefixSize = sz;
386 }
387 
388 uint8_t
390 {
391  return m_prefixSize;
392 }
393 
394 bool
396 {
397  return (m_flags == o.m_flags && m_prefixSize == o.m_prefixSize &&
398  m_hopCount == o.m_hopCount && m_dst == o.m_dst && m_dstSeqNo == o.m_dstSeqNo &&
399  m_origin == o.m_origin && m_lifeTime == o.m_lifeTime);
400 }
401 
402 void
403 RrepHeader::SetHello (Ipv4Address origin, uint32_t srcSeqNo, Time lifetime)
404 {
405  m_flags = 0;
406  m_prefixSize = 0;
407  m_hopCount = 0;
408  m_dst = origin;
409  m_dstSeqNo = srcSeqNo;
410  m_origin = origin;
411  m_lifeTime = lifetime.GetMilliSeconds ();
412 }
413 
414 std::ostream &
415 operator<< (std::ostream & os, RrepHeader const & h)
416 {
417  h.Print (os);
418  return os;
419 }
420 
421 //-----------------------------------------------------------------------------
422 // RREP-ACK
423 //-----------------------------------------------------------------------------
424 
426  m_reserved (0)
427 {
428 }
429 
431 
432 TypeId
434 {
435  static TypeId tid = TypeId ("ns3::aodv::RrepAckHeader")
436  .SetParent<Header> ()
437  .AddConstructor<RrepAckHeader> ()
438  ;
439  return tid;
440 }
441 
442 TypeId
444 {
445  return GetTypeId ();
446 }
447 
448 uint32_t
450 {
451  return 1;
452 }
453 
454 void
456 {
457  i.WriteU8 (m_reserved);
458 }
459 
460 uint32_t
462 {
464  m_reserved = i.ReadU8 ();
465  uint32_t dist = i.GetDistanceFrom (start);
466  NS_ASSERT (dist == GetSerializedSize ());
467  return dist;
468 }
469 
470 void
471 RrepAckHeader::Print (std::ostream &os ) const
472 {
473 }
474 
475 bool
477 {
478  return m_reserved == o.m_reserved;
479 }
480 
481 std::ostream &
482 operator<< (std::ostream & os, RrepAckHeader const & h )
483 {
484  h.Print (os);
485  return os;
486 }
487 
488 //-----------------------------------------------------------------------------
489 // RERR
490 //-----------------------------------------------------------------------------
492  m_flag (0), m_reserved (0)
493 {
494 }
495 
497 
498 TypeId
500 {
501  static TypeId tid = TypeId ("ns3::aodv::RerrHeader")
502  .SetParent<Header> ()
503  .AddConstructor<RerrHeader> ()
504  ;
505  return tid;
506 }
507 
508 TypeId
510 {
511  return GetTypeId ();
512 }
513 
514 uint32_t
516 {
517  return (3 + 8 * GetDestCount ());
518 }
519 
520 void
522 {
523  i.WriteU8 (m_flag);
524  i.WriteU8 (m_reserved);
525  i.WriteU8 (GetDestCount ());
526  std::map<Ipv4Address, uint32_t>::const_iterator j;
527  for (j = m_unreachableDstSeqNo.begin (); j != m_unreachableDstSeqNo.end (); ++j)
528  {
529  WriteTo (i, (*j).first);
530  i.WriteHtonU32 ((*j).second);
531  }
532 }
533 
534 uint32_t
536 {
538  m_flag = i.ReadU8 ();
539  m_reserved = i.ReadU8 ();
540  uint8_t dest = i.ReadU8 ();
541  m_unreachableDstSeqNo.clear ();
543  uint32_t seqNo;
544  for (uint8_t k = 0; k < dest; ++k)
545  {
546  ReadFrom (i, address);
547  seqNo = i.ReadNtohU32 ();
548  m_unreachableDstSeqNo.insert (std::make_pair (address, seqNo));
549  }
550 
551  uint32_t dist = i.GetDistanceFrom (start);
552  NS_ASSERT (dist == GetSerializedSize ());
553  return dist;
554 }
555 
556 void
557 RerrHeader::Print (std::ostream &os ) const
558 {
559  os << "Unreachable destination (ipv4 address, seq. number):";
560  std::map<Ipv4Address, uint32_t>::const_iterator j;
561  for (j = m_unreachableDstSeqNo.begin (); j != m_unreachableDstSeqNo.end (); ++j)
562  {
563  os << (*j).first << ", " << (*j).second;
564  }
565  os << "No delete flag " << (*this).GetNoDelete ();
566 }
567 
568 void
570 {
571  if (f)
572  m_flag |= (1 << 0);
573  else
574  m_flag &= ~(1 << 0);
575 }
576 
577 bool
579 {
580  return (m_flag & (1 << 0));
581 }
582 
583 bool
585 {
586  if (m_unreachableDstSeqNo.find (dst) != m_unreachableDstSeqNo.end ())
587  return true;
588 
589  NS_ASSERT (GetDestCount () < 255); // can't support more than 255 destinations in single RERR
590  m_unreachableDstSeqNo.insert (std::make_pair (dst, seqNo));
591  return true;
592 }
593 
594 bool
595 RerrHeader::RemoveUnDestination (std::pair<Ipv4Address, uint32_t> & un )
596 {
597  if (m_unreachableDstSeqNo.empty ())
598  return false;
599  std::map<Ipv4Address, uint32_t>::iterator i = m_unreachableDstSeqNo.begin ();
600  un = *i;
601  m_unreachableDstSeqNo.erase (i);
602  return true;
603 }
604 
605 void
607 {
608  m_unreachableDstSeqNo.clear ();
609  m_flag = 0;
610  m_reserved = 0;
611 }
612 
613 bool
615 {
616  if (m_flag != o.m_flag || m_reserved != o.m_reserved || GetDestCount () != o.GetDestCount ())
617  return false;
618 
619  std::map<Ipv4Address, uint32_t>::const_iterator j = m_unreachableDstSeqNo.begin ();
620  std::map<Ipv4Address, uint32_t>::const_iterator k = o.m_unreachableDstSeqNo.begin ();
621  for (uint8_t i = 0; i < GetDestCount (); ++i)
622  {
623  if ((j->first != k->first) || (j->second != k->second))
624  return false;
625 
626  j++;
627  k++;
628  }
629  return true;
630 }
631 
632 std::ostream &
633 operator<< (std::ostream & os, RerrHeader const & h )
634 {
635  h.Print (os);
636  return os;
637 }
638 }
639 }
Protocol header serialization and deserialization.
Definition: header.h:42
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:95
static TypeId GetTypeId()
Definition: aodv-packet.cc:499
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:55
bool GetUnknownSeqno() const
Definition: aodv-packet.cc:262
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
Definition: object-base.h:38
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:443
bool GetAckRequired() const
Definition: aodv-packet.cc:377
Route Error (RERR) Message Format.
Definition: aodv-packet.h:288
static TypeId GetTypeId()
Definition: aodv-packet.cc:152
void Serialize(Buffer::Iterator i) const
Definition: aodv-packet.cc:521
void SetNoDelete(bool f)
Definition: aodv-packet.cc:569
void ReadFrom(Buffer::Iterator &i, Ipv4Address &ad)
Read an Ipv4Address from a Buffer.
uint32_t m_requestID
RREQ ID.
Definition: aodv-packet.h:152
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:61
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:853
uint32_t m_lifeTime
Lifetime (in milliseconds)
Definition: aodv-packet.h:230
bool operator==(RrepHeader const &o) const
Definition: aodv-packet.cc:395
Route Request (RREQ) Message Format.
Definition: aodv-packet.h:102
AODVTYPE_RERR.
Definition: aodv-packet.h:45
uint32_t ReadNtohU32(void)
Definition: buffer.h:977
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:461
uint32_t GetDistanceFrom(Iterator const &o) const
Definition: buffer.cc:811
iterator in a Buffer instance
Definition: buffer.h:98
static TypeId GetTypeId()
Definition: aodv-packet.cc:433
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:515
void Print(std::ostream &os) const
Definition: aodv-packet.cc:205
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:535
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:67
RrepHeader(uint8_t prefixSize=0, uint8_t hopCount=0, Ipv4Address dst=Ipv4Address(), uint32_t dstSeqNo=0, Ipv4Address origin=Ipv4Address(), Time lifetime=MilliSeconds(0))
c-tor
Definition: aodv-packet.cc:280
void Clear()
Clear header.
Definition: aodv-packet.cc:606
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:73
uint32_t m_originSeqNo
Source Sequence Number.
Definition: aodv-packet.h:156
Ipv4Address m_origin
Source IP Address.
Definition: aodv-packet.h:229
void SetPrefixSize(uint8_t sz)
Definition: aodv-packet.cc:383
bool GetGratiousRrep() const
Definition: aodv-packet.cc:232
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:325
uint8_t GetDestCount() const
Return number of unreachable destinations in RERR message.
Definition: aodv-packet.h:322
bool AddUnDestination(Ipv4Address dst, uint32_t seqNo)
Add unreachable node address and its sequence number in RERR header.
Definition: aodv-packet.cc:584
uint8_t m_flag
No delete flag.
Definition: aodv-packet.h:325
void Print(std::ostream &os) const
Definition: aodv-packet.cc:343
void Print(std::ostream &os) const
Definition: aodv-packet.cc:97
Ipv4Address m_origin
Originator IP Address.
Definition: aodv-packet.h:155
void SetDestinationOnly(bool f)
Definition: aodv-packet.cc:238
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:313
uint8_t m_reserved
Not used.
Definition: aodv-packet.h:326
AODVTYPE_RREP.
Definition: aodv-packet.h:44
Route Reply (RREP) Message Format.
Definition: aodv-packet.h:180
uint8_t GetPrefixSize() const
Definition: aodv-packet.cc:389
bool operator==(RrepAckHeader const &o) const
Definition: aodv-packet.cc:476
uint8_t m_flags
A - acknowledgment required flag.
Definition: aodv-packet.h:224
static TypeId GetTypeId()
Definition: aodv-packet.cc:291
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:227
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:174
void SetHello(Ipv4Address src, uint32_t srcSeqNo, Time lifetime)
Configure RREP to be a Hello message.
Definition: aodv-packet.cc:403
RreqHeader(uint8_t flags=0, uint8_t reserved=0, uint8_t hopCount=0, uint32_t requestID=0, Ipv4Address dst=Ipv4Address(), uint32_t dstSeqNo=0, Ipv4Address origin=Ipv4Address(), uint32_t originSeqNo=0)
c-tor
Definition: aodv-packet.cc:142
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:455
void Print(std::ostream &os) const
Definition: aodv-packet.cc:471
bool operator==(TypeHeader const &o) const
Definition: aodv-packet.cc:127
AODVTYPE_RREP_ACK.
Definition: aodv-packet.h:46
bool RemoveUnDestination(std::pair< Ipv4Address, uint32_t > &un)
Delete pair (address + sequence number) from REER header, if the number of unreachable destinations >...
Definition: aodv-packet.cc:595
uint32_t m_dstSeqNo
Destination Sequence Number.
Definition: aodv-packet.h:228
TypeHeader(MessageType t=AODVTYPE_RREQ)
c-tor
Definition: aodv-packet.cc:39
std::map< Ipv4Address, uint32_t > m_unreachableDstSeqNo
List of Unreachable destination: IP addresses and sequence numbers.
Definition: aodv-packet.h:329
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:449
void WriteHtonU32(uint32_t data)
Definition: buffer.h:931
Time GetLifeTime() const
Definition: aodv-packet.cc:361
AODVTYPE_RREQ.
Definition: aodv-packet.h:43
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:307
Route Reply Acknowledgment (RREP-ACK) Message Format.
Definition: aodv-packet.h:246
uint8_t m_hopCount
Hop Count.
Definition: aodv-packet.h:151
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:187
void Print(std::ostream &os) const
Definition: aodv-packet.cc:557
MessageType m_type
Definition: aodv-packet.h:75
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:38
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:168
void WriteU8(uint8_t data)
Definition: buffer.h:876
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:153
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:61
static TypeId GetTypeId()
Definition: aodv-packet.cc:45
std::ostream & operator<<(std::ostream &os, TypeHeader const &h)
Definition: aodv-packet.cc:133
void SetAckRequired(bool f)
Definition: aodv-packet.cc:368
uint8_t ReadU8(void)
Definition: buffer.h:1028
bool GetDestinationOnly() const
Definition: aodv-packet.cc:247
bool operator==(RerrHeader const &o) const
Definition: aodv-packet.cc:614
uint8_t m_hopCount
Hop Count.
Definition: aodv-packet.h:226
uint8_t m_reserved
Not used.
Definition: aodv-packet.h:150
void SetGratiousRrep(bool f)
Definition: aodv-packet.cc:223
tuple address
Definition: first.py:37
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:509
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:162
bool operator==(RreqHeader const &o) const
Definition: aodv-packet.cc:268
a unique identifier for an interface.
Definition: type-id.h:49
int64_t GetMilliSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:326
TypeId SetParent(TypeId tid)
Definition: type-id.cc:610
void SetUnknownSeqno(bool f)
Definition: aodv-packet.cc:253
uint8_t m_flags
|J|R|G|D|U| bit flags, see RFC
Definition: aodv-packet.h:149
bool GetNoDelete() const
Definition: aodv-packet.cc:578
void SetLifeTime(Time t)
Definition: aodv-packet.cc:355
uint8_t m_prefixSize
Prefix Size.
Definition: aodv-packet.h:225
uint32_t m_dstSeqNo
Destination Sequence Number.
Definition: aodv-packet.h:154
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:301