A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 
60  //\{
61  static TypeId GetTypeId ();
62  TypeId GetInstanceTypeId () const;
63  uint32_t GetSerializedSize () const;
64  void Serialize (Buffer::Iterator start) const;
65  uint32_t Deserialize (Buffer::Iterator start);
66  void Print (std::ostream &os) const;
67  //\}
68 
70  MessageType Get () const { return m_type; }
72  bool IsValid () const { return m_valid; }
73  bool operator== (TypeHeader const & o) const;
74 private:
76  bool m_valid;
77 };
78 
79 std::ostream & operator<< (std::ostream & os, TypeHeader const & h);
80 
102 class RreqHeader : public Header
103 {
104 public:
106  RreqHeader (uint8_t flags = 0, uint8_t reserved = 0, uint8_t hopCount = 0,
107  uint32_t requestID = 0, Ipv4Address dst = Ipv4Address (),
108  uint32_t dstSeqNo = 0, Ipv4Address origin = Ipv4Address (),
109  uint32_t originSeqNo = 0);
110 
112  //\{
113  static TypeId GetTypeId ();
114  TypeId GetInstanceTypeId () const;
115  uint32_t GetSerializedSize () const;
116  void Serialize (Buffer::Iterator start) const;
117  uint32_t Deserialize (Buffer::Iterator start);
118  void Print (std::ostream &os) const;
119  //\}
120 
122  //\{
123  void SetHopCount (uint8_t count) { m_hopCount = count; }
124  uint8_t GetHopCount () const { return m_hopCount; }
125  void SetId (uint32_t id) { m_requestID = id; }
126  uint32_t GetId () const { return m_requestID; }
127  void SetDst (Ipv4Address a) { m_dst = a; }
128  Ipv4Address GetDst () const { return m_dst; }
129  void SetDstSeqno (uint32_t s) { m_dstSeqNo = s; }
130  uint32_t GetDstSeqno () const { return m_dstSeqNo; }
131  void SetOrigin (Ipv4Address a) { m_origin = a; }
132  Ipv4Address GetOrigin () const { return m_origin; }
133  void SetOriginSeqno (uint32_t s) { m_originSeqNo = s; }
134  uint32_t GetOriginSeqno () const { return m_originSeqNo; }
135  //\}
136 
138  //\{
139  void SetGratiousRrep (bool f);
140  bool GetGratiousRrep () const;
141  void SetDestinationOnly (bool f);
142  bool GetDestinationOnly () const;
143  void SetUnknownSeqno (bool f);
144  bool GetUnknownSeqno () const;
145  //\}
146 
147  bool operator== (RreqHeader const & o) const;
148 private:
149  uint8_t m_flags;
150  uint8_t m_reserved;
151  uint8_t m_hopCount;
152  uint32_t m_requestID;
154  uint32_t m_dstSeqNo;
156  uint32_t m_originSeqNo;
157 };
158 
159 std::ostream & operator<< (std::ostream & os, RreqHeader const &);
160 
180 class RrepHeader : public Header
181 {
182 public:
184  RrepHeader (uint8_t prefixSize = 0, uint8_t hopCount = 0, Ipv4Address dst =
185  Ipv4Address (), uint32_t dstSeqNo = 0, Ipv4Address origin =
186  Ipv4Address (), Time lifetime = MilliSeconds (0));
188  //\{
189  static TypeId GetTypeId ();
190  TypeId GetInstanceTypeId () const;
191  uint32_t GetSerializedSize () const;
192  void Serialize (Buffer::Iterator start) const;
193  uint32_t Deserialize (Buffer::Iterator start);
194  void Print (std::ostream &os) const;
195  //\}
196 
198  //\{
199  void SetHopCount (uint8_t count) { m_hopCount = count; }
200  uint8_t GetHopCount () const { return m_hopCount; }
201  void SetDst (Ipv4Address a) { m_dst = a; }
202  Ipv4Address GetDst () const { return m_dst; }
203  void SetDstSeqno (uint32_t s) { m_dstSeqNo = s; }
204  uint32_t GetDstSeqno () const { return m_dstSeqNo; }
205  void SetOrigin (Ipv4Address a) { m_origin = a; }
206  Ipv4Address GetOrigin () const { return m_origin; }
207  void SetLifeTime (Time t);
208  Time GetLifeTime () const;
209  //\}
210 
212  //\{
213  void SetAckRequired (bool f);
214  bool GetAckRequired () const;
215  void SetPrefixSize (uint8_t sz);
216  uint8_t GetPrefixSize () const;
217  //\}
218 
220  void SetHello (Ipv4Address src, uint32_t srcSeqNo, Time lifetime);
221 
222  bool operator== (RrepHeader const & o) const;
223 private:
224  uint8_t m_flags;
225  uint8_t m_prefixSize;
226  uint8_t m_hopCount;
228  uint32_t m_dstSeqNo;
230  uint32_t m_lifeTime;
231 };
232 
233 std::ostream & operator<< (std::ostream & os, RrepHeader const &);
234 
246 class RrepAckHeader : public Header
247 {
248 public:
250  RrepAckHeader ();
251 
253  //\{
254  static TypeId GetTypeId ();
255  TypeId GetInstanceTypeId () const;
256  uint32_t GetSerializedSize () const;
257  void Serialize (Buffer::Iterator start) const;
258  uint32_t Deserialize (Buffer::Iterator start);
259  void Print (std::ostream &os) const;
260  //\}
261 
262  bool operator== (RrepAckHeader const & o) const;
263 private:
264  uint8_t m_reserved;
265 };
266 std::ostream & operator<< (std::ostream & os, RrepAckHeader const &);
267 
268 
288 class RerrHeader : public Header
289 {
290 public:
292  RerrHeader ();
293 
295  //\{
296  static TypeId GetTypeId ();
297  TypeId GetInstanceTypeId () const;
298  uint32_t GetSerializedSize () const;
299  void Serialize (Buffer::Iterator i) const;
301  void Print (std::ostream &os) const;
302  //\}
303 
305  //\{
306  void SetNoDelete (bool f);
307  bool GetNoDelete () const;
308  //\}
309 
314  bool AddUnDestination (Ipv4Address dst, uint32_t seqNo);
318  bool RemoveUnDestination (std::pair<Ipv4Address, uint32_t> & un);
320  void Clear ();
322  uint8_t GetDestCount () const { return (uint8_t)m_unreachableDstSeqNo.size (); }
323  bool operator== (RerrHeader const & o) const;
324 private:
325  uint8_t m_flag;
326  uint8_t m_reserved;
327 
329  std::map<Ipv4Address, uint32_t> m_unreachableDstSeqNo;
330 };
331 
332 std::ostream & operator<< (std::ostream & os, RerrHeader const &);
333 }
334 }
335 #endif /* AODVPACKET_H */
Protocol header serialization and deserialization.
Definition: header.h:42
keep track of time values and allow control of global simulation resolution
Definition: nstime.h:81
static TypeId GetTypeId()
Definition: aodv-packet.cc:504
void SetOrigin(Ipv4Address a)
Definition: aodv-packet.h:205
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:56
bool GetUnknownSeqno() const
Definition: aodv-packet.cc:264
void SetId(uint32_t id)
Definition: aodv-packet.h:125
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:447
bool GetAckRequired() const
Definition: aodv-packet.cc:380
Route Error (RERR) Message Format.
Definition: aodv-packet.h:288
static TypeId GetTypeId()
Definition: aodv-packet.cc:154
void Serialize(Buffer::Iterator i) const
Definition: aodv-packet.cc:526
void SetNoDelete(bool f)
Definition: aodv-packet.cc:574
uint32_t m_requestID
RREQ ID.
Definition: aodv-packet.h:152
void SetDst(Ipv4Address a)
Definition: aodv-packet.h:127
uint32_t GetDstSeqno() const
Definition: aodv-packet.h:204
uint32_t m_lifeTime
Lifetime (in milliseconds)
Definition: aodv-packet.h:230
bool operator==(RrepHeader const &o) const
Definition: aodv-packet.cc:398
Route Request (RREQ) Message Format.
Definition: aodv-packet.h:102
AODVTYPE_RERR.
Definition: aodv-packet.h:45
void SetDstSeqno(uint32_t s)
Definition: aodv-packet.h:203
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:437
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:72
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:156
void SetHopCount(uint8_t count)
Definition: aodv-packet.h:199
Ipv4Address m_origin
Source IP Address.
Definition: aodv-packet.h:229
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:322
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:128
Ptr< SampleEmitter > s
uint8_t m_flag
No delete flag.
Definition: aodv-packet.h:325
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:133
Ipv4Address m_origin
Originator IP Address.
Definition: aodv-packet.h:155
uint8_t GetHopCount() const
Definition: aodv-packet.h:124
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:326
AODVTYPE_RREP.
Definition: aodv-packet.h:44
void SetDstSeqno(uint32_t s)
Definition: aodv-packet.h:129
Route Reply (RREP) Message Format.
Definition: aodv-packet.h:180
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:224
static TypeId GetTypeId()
Definition: aodv-packet.cc:294
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:227
void Serialize(Buffer::Iterator start) const
Definition: aodv-packet.cc:176
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:206
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:228
void SetOrigin(Ipv4Address a)
Definition: aodv-packet.h:131
TypeHeader(MessageType t=AODVTYPE_RREQ)
c-tor
Definition: aodv-packet.cc:40
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: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:202
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 GetDstSeqno() const
Definition: aodv-packet.h:130
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:75
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:38
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:170
Ipv4Address m_dst
Destination IP Address.
Definition: aodv-packet.h:153
uint32_t GetSerializedSize() const
Definition: aodv-packet.cc:62
static TypeId GetTypeId()
Definition: aodv-packet.cc:46
std::ostream & operator<<(std::ostream &os, TypeHeader const &h)
Definition: aodv-packet.cc:134
Ipv4Address GetOrigin() const
Definition: aodv-packet.h:132
void SetAckRequired(bool f)
Definition: aodv-packet.cc:371
uint32_t GetOriginSeqno() const
Definition: aodv-packet.h:134
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:226
uint8_t m_reserved
Not used.
Definition: aodv-packet.h:150
void SetGratiousRrep(bool f)
Definition: aodv-packet.cc:225
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:514
TypeId GetInstanceTypeId() const
Definition: aodv-packet.cc:164
bool operator==(RreqHeader const &o) const
Definition: aodv-packet.cc:270
uint32_t GetId() const
Definition: aodv-packet.h:126
a unique identifier for an interface.
Definition: type-id.h:49
MessageType Get() const
Return type.
Definition: aodv-packet.h:70
uint8_t GetHopCount() const
Definition: aodv-packet.h:200
void SetUnknownSeqno(bool f)
Definition: aodv-packet.cc:255
void SetDst(Ipv4Address a)
Definition: aodv-packet.h:201
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:583
void SetLifeTime(Time t)
Definition: aodv-packet.cc:358
void SetHopCount(uint8_t count)
Definition: aodv-packet.h:123
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:304