A Discrete-Event Network Simulator
API
aodv-packet.h
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 #ifndef AODVPACKET_H
29 #define AODVPACKET_H
30 
31 #include <iostream>
32 #include "ns3/header.h"
33 #include "ns3/enum.h"
34 #include "ns3/ipv4-address.h"
35 #include <map>
36 #include "ns3/nstime.h"
37 
38 namespace ns3 {
39 namespace aodv {
40 
42 {
47 };
48 
53 class TypeHeader : public Header
54 {
55 public:
58 
59  // Header serialization/deserialization
60  static TypeId GetTypeId ();
61  TypeId GetInstanceTypeId () const;
62  uint32_t GetSerializedSize () const;
63  void Serialize (Buffer::Iterator start) const;
64  uint32_t Deserialize (Buffer::Iterator start);
65  void Print (std::ostream &os) const;
66 
68  MessageType Get () const { return m_type; }
70  bool IsValid () const { return m_valid; }
71  bool operator== (TypeHeader const & o) const;
72 private:
74  bool m_valid;
75 };
76 
77 std::ostream & operator<< (std::ostream & os, TypeHeader const & h);
78 
100 class RreqHeader : public Header
101 {
102 public:
104  RreqHeader (uint8_t flags = 0, uint8_t reserved = 0, uint8_t hopCount = 0,
105  uint32_t requestID = 0, Ipv4Address dst = Ipv4Address (),
106  uint32_t dstSeqNo = 0, Ipv4Address origin = Ipv4Address (),
107  uint32_t originSeqNo = 0);
108 
109  // Header serialization/deserialization
110  static TypeId GetTypeId ();
111  TypeId GetInstanceTypeId () const;
112  uint32_t GetSerializedSize () const;
113  void Serialize (Buffer::Iterator start) const;
114  uint32_t Deserialize (Buffer::Iterator start);
115  void Print (std::ostream &os) const;
116 
117  // Fields
118  void SetHopCount (uint8_t count) { m_hopCount = count; }
119  uint8_t GetHopCount () const { return m_hopCount; }
120  void SetId (uint32_t id) { m_requestID = id; }
121  uint32_t GetId () const { return m_requestID; }
122  void SetDst (Ipv4Address a) { m_dst = a; }
123  Ipv4Address GetDst () const { return m_dst; }
124  void SetDstSeqno (uint32_t s) { m_dstSeqNo = s; }
125  uint32_t GetDstSeqno () const { return m_dstSeqNo; }
126  void SetOrigin (Ipv4Address a) { m_origin = a; }
127  Ipv4Address GetOrigin () const { return m_origin; }
128  void SetOriginSeqno (uint32_t s) { m_originSeqNo = s; }
129  uint32_t GetOriginSeqno () const { return m_originSeqNo; }
130 
131  // Flags
132  void SetGratiousRrep (bool f);
133  bool GetGratiousRrep () const;
134  void SetDestinationOnly (bool f);
135  bool GetDestinationOnly () const;
136  void SetUnknownSeqno (bool f);
137  bool GetUnknownSeqno () const;
138 
139  bool operator== (RreqHeader const & o) const;
140 private:
141  uint8_t m_flags;
142  uint8_t m_reserved;
143  uint8_t m_hopCount;
144  uint32_t m_requestID;
146  uint32_t m_dstSeqNo;
148  uint32_t m_originSeqNo;
149 };
150 
151 std::ostream & operator<< (std::ostream & os, RreqHeader const &);
152 
172 class RrepHeader : public Header
173 {
174 public:
176  RrepHeader (uint8_t prefixSize = 0, uint8_t hopCount = 0, Ipv4Address dst =
177  Ipv4Address (), uint32_t dstSeqNo = 0, Ipv4Address origin =
178  Ipv4Address (), Time lifetime = MilliSeconds (0));
179  // Header serialization/deserialization
180  static TypeId GetTypeId ();
181  TypeId GetInstanceTypeId () const;
182  uint32_t GetSerializedSize () const;
183  void Serialize (Buffer::Iterator start) const;
184  uint32_t Deserialize (Buffer::Iterator start);
185  void Print (std::ostream &os) const;
186 
187  // Fields
188  void SetHopCount (uint8_t count) { m_hopCount = count; }
189  uint8_t GetHopCount () const { return m_hopCount; }
190  void SetDst (Ipv4Address a) { m_dst = a; }
191  Ipv4Address GetDst () const { return m_dst; }
192  void SetDstSeqno (uint32_t s) { m_dstSeqNo = s; }
193  uint32_t GetDstSeqno () const { return m_dstSeqNo; }
194  void SetOrigin (Ipv4Address a) { m_origin = a; }
195  Ipv4Address GetOrigin () const { return m_origin; }
196  void SetLifeTime (Time t);
197  Time GetLifeTime () const;
198 
199  // Flags
200  void SetAckRequired (bool f);
201  bool GetAckRequired () const;
202  void SetPrefixSize (uint8_t sz);
203  uint8_t GetPrefixSize () const;
204 
206  void SetHello (Ipv4Address src, uint32_t srcSeqNo, Time lifetime);
207 
208  bool operator== (RrepHeader const & o) const;
209 private:
210  uint8_t m_flags;
211  uint8_t m_prefixSize;
212  uint8_t m_hopCount;
214  uint32_t m_dstSeqNo;
216  uint32_t m_lifeTime;
217 };
218 
219 std::ostream & operator<< (std::ostream & os, RrepHeader const &);
220 
232 class RrepAckHeader : public Header
233 {
234 public:
236  RrepAckHeader ();
237 
238  // Header serialization/deserialization
239  static TypeId GetTypeId ();
240  TypeId GetInstanceTypeId () const;
241  uint32_t GetSerializedSize () const;
242  void Serialize (Buffer::Iterator start) const;
243  uint32_t Deserialize (Buffer::Iterator start);
244  void Print (std::ostream &os) const;
245 
246  bool operator== (RrepAckHeader const & o) const;
247 private:
248  uint8_t m_reserved;
249 };
250 std::ostream & operator<< (std::ostream & os, RrepAckHeader const &);
251 
252 
272 class RerrHeader : public Header
273 {
274 public:
276  RerrHeader ();
277 
278  // Header serialization/deserialization
279  static TypeId GetTypeId ();
280  TypeId GetInstanceTypeId () const;
281  uint32_t GetSerializedSize () const;
282  void Serialize (Buffer::Iterator i) const;
284  void Print (std::ostream &os) const;
285 
286  // No delete flag
287  void SetNoDelete (bool f);
288  bool GetNoDelete () const;
289 
294  bool AddUnDestination (Ipv4Address dst, uint32_t seqNo);
298  bool RemoveUnDestination (std::pair<Ipv4Address, uint32_t> & un);
300  void Clear ();
302  uint8_t GetDestCount () const { return (uint8_t)m_unreachableDstSeqNo.size (); }
303  bool operator== (RerrHeader const & o) const;
304 private:
305  uint8_t m_flag;
306  uint8_t m_reserved;
307 
309  std::map<Ipv4Address, uint32_t> m_unreachableDstSeqNo;
310 };
311 
312 std::ostream & operator<< (std::ostream & os, RerrHeader const &);
313 }
314 }
315 #endif /* AODVPACKET_H */
Protocol header serialization and deserialization.
Definition: header.h:42
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
static TypeId GetTypeId()
Definition: aodv-packet.cc:503
void SetOrigin(Ipv4Address a)
Definition: aodv-packet.h:194
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: aodv-packet.cc:56
bool GetUnknownSeqno() const
Definition: aodv-packet.cc:264
void SetId(uint32_t id)
Definition: aodv-packet.h:120
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: aodv-packet.cc:447
bool GetAckRequired() const
Definition: aodv-packet.cc:380
Route Error (RERR) Message Format.
Definition: aodv-packet.h:272
static TypeId GetTypeId()
Definition: aodv-packet.cc:153
void Serialize(Buffer::Iterator i) const
Definition: aodv-packet.cc:526
void SetNoDelete(bool f)
Definition: aodv-packet.cc:574
def start()
Definition: core.py:1482
uint32_t m_requestID
RREQ ID.
Definition: aodv-packet.h:144
void SetDst(Ipv4Address a)
Definition: aodv-packet.h:122
uint32_t GetDstSeqno() const
Definition: aodv-packet.h:193
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:903
uint32_t m_lifeTime
Lifetime (in milliseconds)
Definition: aodv-packet.h:216
bool operator==(RrepHeader const &o) const
Definition: aodv-packet.cc:398
Route Request (RREQ) Message Format.
Definition: aodv-packet.h:100
AODVTYPE_RERR.
Definition: aodv-packet.h:45
void SetDstSeqno(uint32_t s)
Definition: aodv-packet.h:192
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:465
iterator in a Buffer instance
Definition: buffer.h:98
static TypeId GetTypeId()
Definition: aodv-packet.cc:436
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:520
void Print(std::ostream &os) const
Definition: aodv-packet.cc:207
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:540
bool IsValid() const
Check that type if valid.
Definition: aodv-packet.h:70
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:68
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:282
void Clear()
Clear header.
Definition: aodv-packet.cc:611
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:74
uint32_t m_originSeqNo
Source Sequence Number.
Definition: aodv-packet.h:148
void SetHopCount(uint8_t count)
Definition: aodv-packet.h:188
Ipv4Address m_origin
Source IP Address.
Definition: aodv-packet.h:215
void SetPrefixSize(uint8_t sz)
Definition: aodv-packet.cc:386
bool GetGratiousRrep() const
Definition: aodv-packet.cc:234
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:328
uint8_t GetDestCount() const
Return number of unreachable destinations in RERR message.
Definition: aodv-packet.h:302
bool AddUnDestination(Ipv4Address dst, uint32_t seqNo)
Add unreachable node address and its sequence number in RERR header.
Definition: aodv-packet.cc:589
Ipv4Address GetDst() const
Definition: aodv-packet.h:123
uint8_t m_flag
No delete flag.
Definition: aodv-packet.h:305
void Print(std::ostream &os) const
Definition: aodv-packet.cc:346
void Print(std::ostream &os) const
Definition: aodv-packet.cc:98
void SetOriginSeqno(uint32_t s)
Definition: aodv-packet.h:128
Ipv4Address m_origin
Originator IP Address.
Definition: aodv-packet.h:147
uint8_t GetHopCount() const
Definition: aodv-packet.h:119
void SetDestinationOnly(bool f)
Definition: aodv-packet.cc:240
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:316
uint8_t m_reserved
Not used.
Definition: aodv-packet.h:306
AODVTYPE_RREP.
Definition: aodv-packet.h:44
void SetDstSeqno(uint32_t s)
Definition: aodv-packet.h:124
Route Reply (RREP) Message Format.
Definition: aodv-packet.h:172
uint8_t GetPrefixSize() const
Definition: aodv-packet.cc:392
bool operator==(RrepAckHeader const &o) const
Definition: aodv-packet.cc:480
uint8_t m_flags
A - acknowledgment required flag.
Definition: aodv-packet.h:210
static TypeId GetTypeId()
Definition: aodv-packet.cc:293
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:213
double f(double x, void *params)
Definition: 80211b.c:60
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:176
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SetHello(Ipv4Address src, uint32_t srcSeqNo, Time lifetime)
Configure RREP to be a Hello message.
Definition: aodv-packet.cc:406
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:143
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:459
Ipv4Address GetOrigin() const
Definition: aodv-packet.h:195
void Print(std::ostream &os) const
Definition: aodv-packet.cc:475
bool operator==(TypeHeader const &o) const
Definition: aodv-packet.cc:128
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:600
uint32_t m_dstSeqNo
Destination Sequence Number.
Definition: aodv-packet.h:214
void SetOrigin(Ipv4Address a)
Definition: aodv-packet.h:126
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:309
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:453
Time GetLifeTime() const
Definition: aodv-packet.cc:364
AODVTYPE_RREQ.
Definition: aodv-packet.h:43
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:310
Ipv4Address GetDst() const
Definition: aodv-packet.h:191
Route Reply Acknowledgment (RREP-ACK) Message Format.
Definition: aodv-packet.h:232
uint8_t m_hopCount
Hop Count.
Definition: aodv-packet.h:143
uint32_t GetDstSeqno() const
Definition: aodv-packet.h:125
uint32_t Deserialize(Buffer::Iterator start)
Definition: aodv-packet.cc:189
void Print(std::ostream &os) const
Definition: aodv-packet.cc:562
MessageType m_type
Definition: aodv-packet.h:73
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:170
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:145
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:62
static TypeId GetTypeId()
Definition: aodv-packet.cc:45
std::ostream & operator<<(std::ostream &os, TypeHeader const &h)
Definition: aodv-packet.cc:134
Ipv4Address GetOrigin() const
Definition: aodv-packet.h:127
void SetAckRequired(bool f)
Definition: aodv-packet.cc:371
uint32_t GetOriginSeqno() const
Definition: aodv-packet.h:129
bool GetDestinationOnly() const
Definition: aodv-packet.cc:249
bool operator==(RerrHeader const &o) const
Definition: aodv-packet.cc:619
uint8_t m_hopCount
Hop Count.
Definition: aodv-packet.h:212
uint8_t m_reserved
Not used.
Definition: aodv-packet.h:142
void SetGratiousRrep(bool f)
Definition: aodv-packet.cc:225
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: aodv-packet.cc:514
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: aodv-packet.cc:164
bool operator==(RreqHeader const &o) const
Definition: aodv-packet.cc:270
uint32_t GetId() const
Definition: aodv-packet.h:121
a unique identifier for an interface.
Definition: type-id.h:58
MessageType Get() const
Return type.
Definition: aodv-packet.h:68
uint8_t GetHopCount() const
Definition: aodv-packet.h:189
void SetUnknownSeqno(bool f)
Definition: aodv-packet.cc:255
void SetDst(Ipv4Address a)
Definition: aodv-packet.h:190
uint8_t m_flags
|J|R|G|D|U| bit flags, see RFC
Definition: aodv-packet.h:141
bool GetNoDelete() const
Definition: aodv-packet.cc:583
void SetLifeTime(Time t)
Definition: aodv-packet.cc:358
void SetHopCount(uint8_t count)
Definition: aodv-packet.h:118
uint8_t m_prefixSize
Prefix Size.
Definition: aodv-packet.h:211
uint32_t m_dstSeqNo
Destination Sequence Number.
Definition: aodv-packet.h:146
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: aodv-packet.cc:304