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
ipv6-l3-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
*/
20
21
#ifndef IPV6_L3_PROTOCOL_H
22
#define IPV6_L3_PROTOCOL_H
23
24
#include <list>
25
26
#include "ns3/traced-callback.h"
27
#include "ns3/net-device.h"
28
#include "ns3/ipv6.h"
29
#include "ns3/ipv6-address.h"
30
#include "ns3/ipv6-header.h"
31
32
namespace
ns3
33
{
34
35
class
Node;
36
class
Ipv6Interface;
37
class
IpL4Protocol;
38
class
Ipv6Route;
39
class
Ipv6MulticastRoute;
40
class
Ipv6RawSocketImpl;
41
class
Icmpv6L4Protocol;
42
class
Ipv6AutoconfiguredPrefix;
43
58
class
Ipv6L3Protocol
:
public
Ipv6
59
{
60
public
:
65
static
TypeId
GetTypeId
();
66
70
static
const
uint16_t
PROT_NUMBER
;
71
76
enum
DropReason
77
{
78
DROP_TTL_EXPIRED
= 1,
79
DROP_NO_ROUTE
,
80
DROP_INTERFACE_DOWN
,
81
DROP_ROUTE_ERROR
,
82
DROP_UNKNOWN_PROTOCOL
,
83
};
84
88
Ipv6L3Protocol
();
89
93
virtual
~Ipv6L3Protocol
();
94
99
void
SetNode
(
Ptr<Node>
node);
100
105
void
Insert
(
Ptr<IpL4Protocol>
protocol);
106
111
void
Remove
(
Ptr<IpL4Protocol>
protocol);
112
118
Ptr<IpL4Protocol>
GetProtocol
(
int
protocolNumber)
const
;
119
124
Ptr<Socket>
CreateRawSocket
();
125
130
void
DeleteRawSocket
(
Ptr<Socket>
socket);
131
136
void
SetDefaultTtl
(uint8_t ttl);
137
142
void
SetDefaultTclass
(uint8_t tclass);
143
155
void
Receive
(
Ptr<NetDevice>
device,
Ptr<const Packet>
p, uint16_t protocol,
const
Address
&from,
const
Address
&to,
NetDevice::PacketType
packetType);
156
167
void
Send
(
Ptr<Packet>
packet,
Ipv6Address
source,
Ipv6Address
destination, uint8_t protocol,
Ptr<Ipv6Route>
route);
168
173
void
SetRoutingProtocol
(
Ptr<Ipv6RoutingProtocol>
routingProtocol);
174
179
Ptr<Ipv6RoutingProtocol>
GetRoutingProtocol
()
const
;
180
186
uint32_t
AddInterface
(
Ptr<NetDevice>
device);
187
193
Ptr<Ipv6Interface>
GetInterface
(uint32_t i)
const
;
194
199
uint32_t
GetNInterfaces
()
const
;
200
206
int32_t
GetInterfaceForAddress
(
Ipv6Address
addr)
const
;
207
214
int32_t
GetInterfaceForPrefix
(
Ipv6Address
addr,
Ipv6Prefix
mask)
const
;
215
220
int32_t
GetInterfaceForDevice
(
Ptr<const NetDevice>
device)
const
;
221
227
bool
AddAddress
(uint32_t i,
Ipv6InterfaceAddress
address);
228
235
Ipv6InterfaceAddress
GetAddress
(uint32_t interfaceIndex, uint32_t addressIndex)
const
;
236
242
uint32_t
GetNAddresses
(uint32_t interface)
const
;
243
249
bool
RemoveAddress
(uint32_t interfaceIndex, uint32_t addressIndex);
250
256
void
SetMetric
(uint32_t i, uint16_t metric);
257
263
uint16_t
GetMetric
(uint32_t i)
const
;
264
270
uint16_t
GetMtu
(uint32_t i)
const
;
271
276
bool
IsUp
(uint32_t i)
const
;
277
282
void
SetUp
(uint32_t i);
283
288
void
SetDown
(uint32_t i);
289
294
bool
IsForwarding
(uint32_t i)
const
;
295
301
void
SetForwarding
(uint32_t i,
bool
val);
302
308
Ptr<NetDevice>
GetNetDevice
(uint32_t i);
309
314
Ptr<Icmpv6L4Protocol>
GetIcmpv6
()
const
;
315
326
void
AddAutoconfiguredAddress
(uint32_t interface,
Ipv6Address
network,
Ipv6Prefix
mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime,
Ipv6Address
defaultRouter =
Ipv6Address::GetZero
());
327
337
void
RemoveAutoconfiguredAddress
(uint32_t interface,
Ipv6Address
network,
Ipv6Prefix
mask,
Ipv6Address
defaultRouter);
338
342
virtual
void
RegisterExtensions
();
343
347
virtual
void
RegisterOptions
();
348
349
protected
:
353
virtual
void
DoDispose
();
354
360
virtual
void
NotifyNewAggregate
();
361
362
private
:
363
/* for unit-tests */
364
friend
class
Ipv6L3ProtocolTestCase
;
365
friend
class
Ipv6ExtensionLooseRouting
;
366
367
typedef
std::list<Ptr<Ipv6Interface> >
Ipv6InterfaceList
;
368
typedef
std::list<Ptr<Ipv6RawSocketImpl> >
SocketList
;
369
typedef
std::list<Ptr<IpL4Protocol> >
L4List_t
;
370
371
typedef
std::list< Ptr<Ipv6AutoconfiguredPrefix> >
Ipv6AutoconfiguredPrefixList
;
372
typedef
std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator
Ipv6AutoconfiguredPrefixListI
;
373
377
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv6>
, uint32_t>
m_txTrace
;
378
382
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv6>
, uint32_t>
m_rxTrace
;
383
387
TracedCallback<const Ipv6Header &, Ptr<const Packet>
,
DropReason
,
Ptr<Ipv6>
, uint32_t>
m_dropTrace
;
388
393
Ipv6L3Protocol
(
const
Ipv6L3Protocol
& o);
394
399
Ipv6L3Protocol
&
operator =
(
const
Ipv6L3Protocol
& o);
400
410
Ipv6Header
BuildHeader
(
Ipv6Address
src,
Ipv6Address
dst, uint8_t protocol,
411
uint16_t payloadSize, uint8_t hopLimit, uint8_t tclass);
412
419
void
SendRealOut
(
Ptr<Ipv6Route>
route,
Ptr<Packet>
packet,
Ipv6Header
const
& ipHeader);
420
427
void
IpForward
(
Ptr<Ipv6Route>
rtentry,
Ptr<const Packet>
p,
const
Ipv6Header
& header);
428
435
void
IpMulticastForward
(
Ptr<Ipv6MulticastRoute>
mrtentry,
Ptr<const Packet>
p,
const
Ipv6Header
& header);
436
443
void
LocalDeliver
(
Ptr<const Packet>
p,
Ipv6Header
const
& ip, uint32_t iif);
444
451
void
RouteInputError
(
Ptr<const Packet>
p,
const
Ipv6Header
& ipHeader,
Socket::SocketErrno
sockErrno);
452
458
uint32_t
AddIpv6Interface
(
Ptr<Ipv6Interface>
interface);
459
463
void
SetupLoopback
();
464
469
virtual
void
SetIpForward
(
bool
forward);
470
475
virtual
bool
GetIpForward
()
const
;
476
481
virtual
void
SetSendIcmpv6Redirect
(
bool
sendIcmpv6Redirect);
482
487
virtual
bool
GetSendIcmpv6Redirect
()
const
;
488
492
Ptr<Node>
m_node
;
493
497
bool
m_ipForward
;
498
502
L4List_t
m_protocols
;
503
507
Ipv6InterfaceList
m_interfaces
;
508
512
uint32_t
m_nInterfaces
;
513
517
uint8_t
m_defaultTtl
;
518
522
uint8_t
m_defaultTclass
;
523
527
Ptr<Ipv6RoutingProtocol>
m_routingProtocol
;
528
532
SocketList
m_sockets
;
533
537
Ipv6AutoconfiguredPrefixList
m_prefixes
;
538
542
bool
m_sendIcmpv6Redirect
;
543
};
544
545
}
/* namespace ns3 */
546
547
#endif
/* IPV6_L3_PROTOCOL_H */
548
src
internet
model
ipv6-l3-protocol.h
Generated on Tue May 14 2013 11:08:22 for ns-3 by
1.8.1.2