A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
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
41
enum
MessageType
42
{
43
AODVTYPE_RREQ
= 1,
44
AODVTYPE_RREP
= 2,
45
AODVTYPE_RERR
= 3,
46
AODVTYPE_RREP_ACK
= 4
47
};
48
53
class
TypeHeader
:
public
Header
54
{
55
public
:
57
TypeHeader
(
MessageType
t =
AODVTYPE_RREQ
);
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
:
75
MessageType
m_type
;
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
;
153
Ipv4Address
m_dst
;
154
uint32_t
m_dstSeqNo
;
155
Ipv4Address
m_origin
;
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
;
227
Ipv4Address
m_dst
;
228
uint32_t
m_dstSeqNo
;
229
Ipv4Address
m_origin
;
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
;
300
uint32_t
Deserialize
(
Buffer::Iterator
start
);
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 */
src
aodv
model
aodv-packet.h
Generated on Tue Nov 13 2012 10:32:08 for ns-3 by
1.8.1.2