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
dsr-option-header.h
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
#ifndef DSR_OPTION_HEADER_H
33
#define DSR_OPTION_HEADER_H
34
35
#include <ostream>
36
#include <algorithm>
37
38
#include "ns3/header.h"
39
#include "ns3/ipv4-address.h"
40
#include "ns3/simulator.h"
41
42
namespace
ns3 {
43
44
class
Time;
45
namespace
dsr {
50
class
DsrOptionHeader
:
public
Header
51
{
52
public
:
57
struct
Alignment
58
{
59
uint8_t
factor
;
60
uint8_t
offset
;
61
};
66
static
TypeId
GetTypeId
();
71
virtual
TypeId
GetInstanceTypeId
()
const
;
75
DsrOptionHeader
();
79
virtual
~DsrOptionHeader
();
84
void
SetType
(uint8_t type);
89
uint8_t
GetType
()
const
;
94
void
SetLength
(uint8_t length);
99
uint8_t
GetLength
()
const
;
105
virtual
void
Print
(std::ostream &os)
const
;
110
virtual
uint32_t
GetSerializedSize
()
const
;
115
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
121
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start
);
129
virtual
Alignment
GetAlignment
()
const
;
130
131
private
:
135
uint8_t
m_type
;
139
uint8_t
m_length
;
143
Buffer
m_data
;
144
};
145
150
class
DsrOptionPad1Header
:
public
DsrOptionHeader
151
{
152
public
:
157
static
TypeId
GetTypeId
();
162
virtual
TypeId
GetInstanceTypeId
()
const
;
166
DsrOptionPad1Header
();
170
virtual
~DsrOptionPad1Header
();
176
virtual
void
Print
(std::ostream &os)
const
;
181
virtual
uint32_t
GetSerializedSize
()
const
;
186
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
192
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
193
};
194
199
class
DsrOptionPadnHeader
:
public
DsrOptionHeader
200
{
201
public
:
206
static
TypeId
GetTypeId
();
211
virtual
TypeId
GetInstanceTypeId
()
const
;
216
DsrOptionPadnHeader
(uint32_t pad = 2);
220
virtual
~DsrOptionPadnHeader
();
226
virtual
void
Print
(std::ostream &os)
const
;
231
virtual
uint32_t
GetSerializedSize
()
const
;
236
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
242
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
243
};
244
272
class
DsrOptionRreqHeader
:
public
DsrOptionHeader
273
{
274
public
:
279
static
TypeId
GetTypeId
();
284
virtual
TypeId
GetInstanceTypeId
()
const
;
288
DsrOptionRreqHeader
();
292
virtual
~DsrOptionRreqHeader
();
297
void
SetNumberAddress
(uint8_t n);
302
Ipv4Address
GetTarget
();
307
void
SetTarget
(
Ipv4Address
target);
312
void
SetNodesAddress
(std::vector<Ipv4Address> ipv4Address);
317
std::vector<Ipv4Address>
GetNodesAddresses
()
const
;
322
uint32_t
GetNodesNumber
()
const
;
327
void
AddNodeAddress
(
Ipv4Address
ipv4);
333
void
SetNodeAddress
(uint8_t index,
Ipv4Address
addr);
339
Ipv4Address
GetNodeAddress
(uint8_t index)
const
;
344
void
SetDataLength
(uint32_t dataLength);
349
uint32_t
GetDataLength
()
const
;
354
void
SetId
(uint16_t identification);
359
uint16_t
GetId
()
const
;
365
virtual
void
Print
(std::ostream &os)
const
;
370
virtual
uint32_t
GetSerializedSize
()
const
;
375
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
381
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
386
virtual
Alignment
GetAlignment
()
const
;
387
388
private
:
392
uint32_t
m_dataLength
;
396
uint16_t
m_identification
;
397
/*
398
* Ipv4 address of target node
399
*/
400
Ipv4Address
m_target
;
401
/*
402
* Ipv4 address to write when desearizing the packet
403
*/
404
Ipv4Address
m_address
;
408
typedef
std::vector<Ipv4Address>
VectorIpv4Address_t
;
412
VectorIpv4Address_t
m_ipv4Address
;
413
};
414
440
// The Route Reply header modified for ns-3 implementation
462
class
DsrOptionRrepHeader
:
public
DsrOptionHeader
463
{
464
public
:
469
static
TypeId
GetTypeId
();
474
virtual
TypeId
GetInstanceTypeId
()
const
;
478
DsrOptionRrepHeader
();
482
virtual
~DsrOptionRrepHeader
();
487
void
SetNumberAddress
(uint8_t n);
492
void
SetNodesAddress
(std::vector<Ipv4Address> ipv4Address);
497
std::vector<Ipv4Address>
GetNodesAddress
()
const
;
498
/*
499
* \brief Get the target node Ip address
500
* \return the target address
501
*/
502
Ipv4Address
GetTargetAddress
(std::vector<Ipv4Address> ipv4Address)
const
;
508
void
SetNodeAddress
(uint8_t index,
Ipv4Address
addr);
514
Ipv4Address
GetNodeAddress
(uint8_t index)
const
;
515
/*
516
* \brief Search the next hop Ipv4 address
517
* \param Our own IP address
518
* \return The next hop address of the route
519
*/
520
Ipv4Address
SearchNextHop
(
Ipv4Address
ipv4Address);
526
virtual
void
Print
(std::ostream &os)
const
;
531
virtual
uint32_t
GetSerializedSize
()
const
;
536
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
542
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
547
virtual
Alignment
GetAlignment
()
const
;
548
549
private
:
550
/*
551
* The Ip address to write to when deserialize the packet
552
*/
553
Ipv4Address
m_address
;
557
typedef
std::vector<Ipv4Address>
VectorIpv4Address_t
;
561
VectorIpv4Address_t
m_ipv4Address
;
562
};
563
589
class
DsrOptionSRHeader
:
public
DsrOptionHeader
590
{
591
public
:
596
static
TypeId
GetTypeId
();
601
virtual
TypeId
GetInstanceTypeId
()
const
;
605
DsrOptionSRHeader
();
609
virtual
~DsrOptionSRHeader
();
610
/*
611
* \brief Set the number of segments left to send
612
* \param The segments left
613
*/
614
void
SetSegmentsLeft
(uint8_t segmentsLeft);
615
/*
616
* \brief Get the number of segments left to send
617
* \return The segments left
618
*/
619
uint8_t
GetSegmentsLeft
()
const
;
624
void
SetNumberAddress
(uint8_t n);
629
void
SetNodesAddress
(std::vector<Ipv4Address> ipv4Address);
634
std::vector<Ipv4Address>
GetNodesAddress
()
const
;
635
/*
636
* \brief Get the node list size which is the number of ip address of the route
637
* \return the node list size
638
*/
639
uint8_t
GetNodeListSize
()
const
;
645
void
SetNodeAddress
(uint8_t index,
Ipv4Address
addr);
651
Ipv4Address
GetNodeAddress
(uint8_t index)
const
;
652
/*
653
* \brief Set the salvage value for a packet
654
* \param The salvage value of the packet
655
*/
656
void
SetSalvage
(uint8_t salvage);
657
/*
658
* \brief Get the salvage value for a packet
659
* \return The salvage value of the packet
660
*/
661
uint8_t
GetSalvage
()
const
;
667
virtual
void
Print
(std::ostream &os)
const
;
672
virtual
uint32_t
GetSerializedSize
()
const
;
677
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
683
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
688
virtual
Alignment
GetAlignment
()
const
;
689
690
private
:
694
Ipv4Address
m_address
;
698
uint8_t
m_segmentsLeft
;
702
uint8_t
m_salvage
;
706
typedef
std::vector<Ipv4Address>
VectorIpv4Address_t
;
710
VectorIpv4Address_t
m_ipv4Address
;
711
};
712
738
// / Error type
739
enum
ErrorType
740
{
741
NODE_UNREACHABLE
= 1,
// !< NODE_UNREACHABLE
742
FLOW_STATE_NOT_SUPPORTED
= 2,
// !< FLOW_STATE_NOT_SUPPORTED
743
OPTION_NOT_SUPPORTED
= 3,
// !< OPTION_NOT_SUPPORTED
744
};
745
746
class
DsrOptionRerrHeader
:
public
DsrOptionHeader
747
{
748
public
:
753
static
TypeId
GetTypeId
();
758
virtual
TypeId
GetInstanceTypeId
()
const
;
762
DsrOptionRerrHeader
();
766
virtual
~DsrOptionRerrHeader
();
771
void
SetErrorType
(uint8_t errorType);
776
uint8_t
GetErrorType
()
const
;
781
virtual
void
SetErrorSrc
(
Ipv4Address
errorSrcAddress);
786
virtual
Ipv4Address
GetErrorSrc
()
const
;
790
virtual
void
SetSalvage
(uint8_t salvage);
795
virtual
uint8_t
GetSalvage
()
const
;
800
virtual
void
SetErrorDst
(
Ipv4Address
errorDstAddress);
805
virtual
Ipv4Address
GetErrorDst
()
const
;
811
virtual
void
Print
(std::ostream &os)
const
;
816
virtual
uint32_t
GetSerializedSize
()
const
;
821
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
827
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
832
virtual
Alignment
GetAlignment
()
const
;
833
834
private
:
838
uint8_t
m_optDataLen
;
842
uint8_t
m_errorType
;
846
uint8_t
m_reserved
;
850
uint8_t
m_salvage
;
854
uint16_t
m_errorLength
;
858
Ipv4Address
m_errorSrcAddress
;
862
Ipv4Address
m_errorDstAddress
;
866
Buffer
m_errorData
;
867
};
868
888
/*
889
* \brief The type-specific info field
890
* \verbatim
891
| 0 | 1 | 2 | 3 |
892
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
893
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
894
| Unreachable Node Address |
895
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
896
\endverbatim
897
*/
898
899
class
DsrOptionRerrUnreachHeader
:
public
DsrOptionRerrHeader
900
{
901
public
:
906
static
TypeId
GetTypeId
();
911
virtual
TypeId
GetInstanceTypeId
()
const
;
915
DsrOptionRerrUnreachHeader
();
919
virtual
~DsrOptionRerrUnreachHeader
();
924
virtual
void
SetErrorSrc
(
Ipv4Address
errorSrcAddress);
929
virtual
Ipv4Address
GetErrorSrc
()
const
;
933
virtual
void
SetSalvage
(uint8_t salvage);
938
virtual
uint8_t
GetSalvage
()
const
;
943
virtual
void
SetErrorDst
(
Ipv4Address
errorDstAddress);
948
virtual
Ipv4Address
GetErrorDst
()
const
;
953
void
SetUnreachNode
(
Ipv4Address
unreachNode);
958
Ipv4Address
GetUnreachNode
()
const
;
963
void
SetOriginalDst
(
Ipv4Address
originalDst);
968
Ipv4Address
GetOriginalDst
()
const
;
974
virtual
void
Print
(std::ostream &os)
const
;
979
virtual
uint32_t
GetSerializedSize
()
const
;
984
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
990
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
995
virtual
Alignment
GetAlignment
()
const
;
996
997
private
:
1001
uint8_t
m_optDataLen
;
1005
uint8_t
m_errorType
;
1009
uint8_t
m_reserved
;
1013
uint8_t
m_salvage
;
1017
Ipv4Address
m_errorSrcAddress
;
1021
Ipv4Address
m_errorDstAddress
;
1025
Ipv4Address
m_unreachNode
;
1029
Ipv4Address
m_originalDst
;
1033
uint16_t
m_typeSpecific
;
1034
};
1035
1055
/*
1056
* \brief The type-specific info field
1057
* \unsupported option
1058
* \verbatim
1059
| 0 |
1060
0 1 2 3 4 5 6 7
1061
+-+-+-+-+-+-+-+-+
1062
|Unsupported Opt|
1063
+-+-+-+-+-+-+-+-+
1064
\endverbatim
1065
*/
1066
1067
class
DsrOptionRerrUnsupportHeader
:
public
DsrOptionRerrHeader
1068
{
1069
public
:
1074
static
TypeId
GetTypeId
();
1079
virtual
TypeId
GetInstanceTypeId
()
const
;
1083
DsrOptionRerrUnsupportHeader
();
1087
virtual
~DsrOptionRerrUnsupportHeader
();
1092
virtual
void
SetErrorSrc
(
Ipv4Address
errorSrcAddress);
1097
virtual
Ipv4Address
GetErrorSrc
()
const
;
1101
virtual
void
SetSalvage
(uint8_t salvage);
1106
virtual
uint8_t
GetSalvage
()
const
;
1111
virtual
void
SetErrorDst
(
Ipv4Address
errorDstAddress);
1116
virtual
Ipv4Address
GetErrorDst
()
const
;
1121
void
SetUnsupported
(uint16_t optionType);
1126
uint16_t
GetUnsupported
()
const
;
1132
virtual
void
Print
(std::ostream &os)
const
;
1137
virtual
uint32_t
GetSerializedSize
()
const
;
1142
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
1148
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
1153
virtual
Alignment
GetAlignment
()
const
;
1154
1155
private
:
1159
uint8_t
m_optDataLen
;
1163
uint8_t
m_errorType
;
1167
uint8_t
m_reserved
;
1171
uint8_t
m_salvage
;
1175
Ipv4Address
m_errorSrcAddress
;
1179
Ipv4Address
m_errorDstAddress
;
1183
uint16_t
m_unsupport
;
1184
};
1185
1203
class
DsrOptionAckReqHeader
:
public
DsrOptionHeader
1204
{
1205
public
:
1210
static
TypeId
GetTypeId
();
1215
virtual
TypeId
GetInstanceTypeId
()
const
;
1219
DsrOptionAckReqHeader
();
1223
virtual
~DsrOptionAckReqHeader
();
1228
void
SetAckId
(uint16_t identification);
1233
uint16_t
GetAckId
()
const
;
1239
virtual
void
Print
(std::ostream &os)
const
;
1244
virtual
uint32_t
GetSerializedSize
()
const
;
1249
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
1255
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
1260
virtual
Alignment
GetAlignment
()
const
;
1261
1262
private
:
1263
/*
1264
* The option data length
1265
*/
1266
uint8_t
m_optDataLen
;
1267
/*
1268
* The identification field
1269
*/
1270
uint16_t
m_identification
;
1271
};
1272
1294
class
DsrOptionAckHeader
:
public
DsrOptionHeader
1295
{
1296
public
:
1301
static
TypeId
GetTypeId
();
1306
virtual
TypeId
GetInstanceTypeId
()
const
;
1310
DsrOptionAckHeader
();
1314
virtual
~DsrOptionAckHeader
();
1319
void
SetAckId
(uint16_t identification);
1324
uint16_t
GetAckId
()
const
;
1329
void
SetRealSrc
(
Ipv4Address
realSrcAddress);
1334
Ipv4Address
GetRealSrc
()
const
;
1339
void
SetRealDst
(
Ipv4Address
realDstAddress);
1344
Ipv4Address
GetRealDst
()
const
;
1350
virtual
void
Print
(std::ostream &os)
const
;
1355
virtual
uint32_t
GetSerializedSize
()
const
;
1360
virtual
void
Serialize
(
Buffer::Iterator
start
)
const
;
1366
virtual
uint32_t
Deserialize
(
Buffer::Iterator
start);
1371
virtual
Alignment
GetAlignment
()
const
;
1372
1373
private
:
1377
uint8_t
m_optDataLen
;
1381
uint16_t
m_identification
;
1385
Ipv4Address
m_realSrcAddress
;
1389
Ipv4Address
m_realDstAddress
;
1390
};
1391
1392
static
inline
std::ostream &
operator<<
(std::ostream& os,
const
DsrOptionSRHeader
& sr)
1393
{
1394
sr.
Print
(os);
1395
return
os;
1396
}
1397
1398
}
// namespace dsr
1399
}
// namespace ns3
1400
1401
#endif
/* DSR_OPTION_HEADER_H */
src
dsr
model
dsr-option-header.h
Generated on Tue Oct 9 2012 16:45:36 for ns-3 by
1.8.1.2