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
icmpv6-l4-protocol.h
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2007-2009 Strasbourg University
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: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19
* David Gross <gdavid.devel@gmail.com>
20
* Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
21
*/
22
23
#ifndef ICMPV6_L4_PROTOCOL_H
24
#define ICMPV6_L4_PROTOCOL_H
25
26
#include <list>
27
28
#include "ns3/ipv6-address.h"
29
#include "
icmpv6-header.h
"
30
#include "
ip-l4-protocol.h
"
31
32
namespace
ns3 {
33
34
class
NetDevice;
35
class
Node;
36
class
Packet;
37
class
TraceContext;
38
class
NdiscCache;
39
44
class
Icmpv6L4Protocol
:
public
IpL4Protocol
45
{
46
public
:
50
static
TypeId
GetTypeId
();
51
55
static
const
uint8_t
PROT_NUMBER
;
56
60
static
const
uint8_t
MAX_INITIAL_RTR_ADVERT_INTERVAL
;
61
65
static
const
uint8_t
MAX_INITIAL_RTR_ADVERTISEMENTS
;
66
70
static
const
uint8_t
MAX_FINAL_RTR_ADVERTISEMENTS
;
71
75
static
const
uint8_t
MIN_DELAY_BETWEEN_RAS
;
76
80
static
const
uint32_t
MAX_RA_DELAY_TIME
;
81
85
static
const
uint8_t
MAX_RTR_SOLICITATION_DELAY
;
86
90
static
const
uint8_t
RTR_SOLICITATION_INTERVAL
;
91
95
static
const
uint8_t
MAX_RTR_SOLICITATIONS
;
96
100
static
const
uint8_t
MAX_MULTICAST_SOLICIT
;
101
105
static
const
uint8_t
MAX_UNICAST_SOLICIT
;
106
110
static
const
uint8_t
MAX_ANYCAST_DELAY_TIME
;
111
115
static
const
uint8_t
MAX_NEIGHBOR_ADVERTISEMENT
;
116
120
static
const
uint32_t
REACHABLE_TIME
;
121
125
static
const
uint32_t
RETRANS_TIMER
;
126
130
static
const
uint8_t
DELAY_FIRST_PROBE_TIME
;
131
135
static
const
double
MIN_RANDOM_FACTOR
;
136
140
static
const
double
MAX_RANDOM_FACTOR
;
141
146
static
uint16_t
GetStaticProtocolNumber
();
147
151
Icmpv6L4Protocol
();
152
156
virtual
~Icmpv6L4Protocol
();
157
162
void
SetNode
(
Ptr<Node>
node);
163
169
void
NotifyNewAggregate
();
170
175
virtual
int
GetProtocolNumber
()
const
;
176
181
virtual
int
GetVersion
()
const
;
182
190
void
SendMessage
(
Ptr<Packet>
packet,
Ipv6Address
src,
Ipv6Address
dst, uint8_t ttl);
191
200
void
SendMessage
(
Ptr<Packet>
packet,
Ipv6Address
dst,
Icmpv6Header
& icmpv6Hdr, uint8_t ttl);
201
211
void
DoDAD
(
Ipv6Address
target,
Ptr<Ipv6Interface>
interface);
212
220
void
SendNA
(
Ipv6Address
src,
Ipv6Address
dst,
Address
* hardwareAddress, uint8_t flags);
221
230
void
SendEchoReply
(
Ipv6Address
src,
Ipv6Address
dst, uint16_t
id
, uint16_t seq,
Ptr<Packet>
data
);
231
239
void
SendNS
(
Ipv6Address
src,
Ipv6Address
dst,
Ipv6Address
target,
Address
hardwareAddress);
240
247
void
SendErrorDestinationUnreachable
(
Ptr<Packet>
malformedPacket,
Ipv6Address
dst, uint8_t code);
248
255
void
SendErrorTooBig
(
Ptr<Packet>
malformedPacket,
Ipv6Address
dst, uint32_t mtu);
256
263
void
SendErrorTimeExceeded
(
Ptr<Packet>
malformedPacket,
Ipv6Address
dst, uint8_t code);
264
272
void
SendErrorParameterError
(
Ptr<Packet>
malformedPacket,
Ipv6Address
dst, uint8_t code, uint32_t ptr);
273
282
void
SendRedirection
(
Ptr<Packet>
redirectedPacket,
Ipv6Address
dst,
Ipv6Address
redirTarget,
Ipv6Address
redirDestination,
Address
redirHardwareTarget);
283
292
Ptr<Packet>
ForgeNS
(
Ipv6Address
src,
Ipv6Address
dst,
Ipv6Address
target,
Address
hardwareAddress);
293
302
Ptr<Packet>
ForgeNA
(
Ipv6Address
src,
Ipv6Address
dst,
Address
* hardwareAddress, uint8_t flags);
303
311
Ptr<Packet>
ForgeRS
(
Ipv6Address
src,
Ipv6Address
dst,
Address
hardwareAddress);
312
322
Ptr<Packet>
ForgeEchoRequest
(
Ipv6Address
src,
Ipv6Address
dst, uint16_t
id
, uint16_t seq,
Ptr<Packet>
data
);
323
330
virtual
enum
IpL4Protocol::RxStatus
Receive
(
Ptr<Packet>
p,
331
Ipv4Header
const
&header,
332
Ptr<Ipv4Interface>
interface);
333
341
virtual
enum
IpL4Protocol::RxStatus
Receive
(
Ptr<Packet>
p,
342
Ipv6Header
const
&header,
343
Ptr<Ipv6Interface>
interface);
344
351
static
void
FunctionDadTimeout
(
Ptr<Icmpv6L4Protocol>
icmpv6,
Ipv6Interface
* interface,
Ipv6Address
addr);
352
361
bool
Lookup
(
Ipv6Address
dst,
Ptr<NetDevice>
device,
Ptr<NdiscCache>
cache,
Address
* hardwareDestination);
362
374
bool
Lookup
(
Ptr<Packet>
p,
Ipv6Address
dst,
Ptr<NetDevice>
device,
Ptr<NdiscCache>
cache,
Address
* hardwareDestination);
375
382
void
SendRS
(
Ipv6Address
src,
Ipv6Address
dst,
Address
hardwareAddress);
383
390
Ptr<NdiscCache>
CreateCache
(
Ptr<NetDevice>
device,
Ptr<Ipv6Interface>
interface);
391
396
bool
IsAlwaysDad
()
const
;
397
398
protected
:
402
virtual
void
DoDispose
();
403
404
private
:
405
typedef
std::list<Ptr<NdiscCache> >
CacheList
;
406
410
Ptr<Node>
m_node
;
411
415
CacheList
m_cacheList
;
416
420
bool
m_alwaysDad
;
421
430
void
Forward
(
Ipv6Address
source,
Icmpv6Header
icmp,
431
uint32_t info,
Ipv6Header
ipHeader,
432
const
uint8_t payload[8]);
433
441
void
HandleNS
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
442
450
void
HandleRS
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
451
459
void
HandleRA
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
460
468
void
HandleEchoRequest
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
469
477
void
HandleNA
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
478
486
void
HandleRedirection
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
487
495
void
HandleDestinationUnreachable
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
496
504
void
HandleTimeExceeded
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
505
513
void
HandlePacketTooBig
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
514
522
void
HandleParameterError
(
Ptr<Packet>
p,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
523
531
void
ReceiveLLA
(
Icmpv6OptionLinkLayerAddress
lla,
Ipv6Address
const
&src,
Ipv6Address
const
&dst,
Ptr<Ipv6Interface>
interface);
532
537
Ptr<NdiscCache>
FindCache
(
Ptr<NetDevice>
device);
538
539
// From IpL4Protocol
540
virtual
void
SetDownTarget
(
IpL4Protocol::DownTargetCallback
cb);
541
virtual
void
SetDownTarget6
(
IpL4Protocol::DownTargetCallback6
cb);
542
// From IpL4Protocol
543
virtual
IpL4Protocol::DownTargetCallback
GetDownTarget
(
void
)
const
;
544
virtual
IpL4Protocol::DownTargetCallback6
GetDownTarget6
(
void
)
const
;
545
546
IpL4Protocol::DownTargetCallback6
m_downTarget
;
547
548
};
549
550
}
/* namespace ns3 */
551
552
#endif
/* ICMPV6_L4_PROTOCOL_H */
553
src
internet
model
icmpv6-l4-protocol.h
Generated on Fri Dec 21 2012 19:00:36 for ns-3 by
1.8.1.2