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
fragmentation-ipv6.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2008-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: David Gross <gdavid.devel@gmail.com>
19
* Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
20
*/
21
22
// Network topology
23
// //
24
// // n0 r n1
25
// // | _ |
26
// // ====|_|====
27
// // router
28
// //
29
// // - Tracing of queues and packet receptions to file "fragmentation-ipv6.tr"
30
31
#include <fstream>
32
#include "ns3/core-module.h"
33
#include "ns3/internet-module.h"
34
#include "ns3/csma-module.h"
35
#include "ns3/applications-module.h"
36
#include "ns3/ipv6-static-routing-helper.h"
37
38
#include "ns3/ipv6-routing-table-entry.h"
39
40
using namespace
ns3;
41
42
NS_LOG_COMPONENT_DEFINE
(
"FragmentationIpv6Example"
);
43
44
45
int
main
(
int
argc,
char
** argv)
46
{
47
bool
verbose
=
false
;
48
49
CommandLine
cmd;
50
cmd.
AddValue
(
"verbose"
,
"turn on log components"
, verbose);
51
cmd.
Parse
(argc, argv);
52
53
if
(verbose)
54
{
55
LogComponentEnable
(
"Ipv6L3Protocol"
,
LOG_LEVEL_ALL
);
56
LogComponentEnable
(
"Icmpv6L4Protocol"
,
LOG_LEVEL_ALL
);
57
LogComponentEnable
(
"Ipv6StaticRouting"
,
LOG_LEVEL_ALL
);
58
LogComponentEnable
(
"Ipv6Interface"
,
LOG_LEVEL_ALL
);
59
LogComponentEnable
(
"Ping6Application"
,
LOG_LEVEL_ALL
);
60
}
61
62
NS_LOG_INFO
(
"Create nodes."
);
63
Ptr<Node>
n0 = CreateObject<Node> ();
64
Ptr<Node>
r = CreateObject<Node> ();
65
Ptr<Node>
n1 = CreateObject<Node> ();
66
67
NodeContainer
net1 (n0, r);
68
NodeContainer
net2 (r, n1);
69
NodeContainer
all (n0, r, n1);
70
71
NS_LOG_INFO
(
"Create IPv6 Internet Stack"
);
72
InternetStackHelper
internetv6;
73
internetv6.
Install
(all);
74
75
NS_LOG_INFO
(
"Create channels."
);
76
CsmaHelper
csma;
77
csma.
SetChannelAttribute
(
"DataRate"
,
DataRateValue
(5000000));
78
csma.
SetChannelAttribute
(
"Delay"
,
TimeValue
(MilliSeconds (2)));
79
NetDeviceContainer
d1 = csma.
Install
(net1);
80
NetDeviceContainer
d2 = csma.
Install
(net2);
81
82
NS_LOG_INFO
(
"Create networks and assign IPv6 Addresses."
);
83
Ipv6AddressHelper
ipv6;
84
ipv6.
SetBase
(
Ipv6Address
(
"2001:1::"
),
Ipv6Prefix
(64));
85
Ipv6InterfaceContainer
i1 = ipv6.
Assign
(d1);
86
i1.
SetForwarding
(1,
true
);
87
i1.
SetDefaultRouteInAllNodes
(1);
88
ipv6.
SetBase
(
Ipv6Address
(
"2001:2::"
),
Ipv6Prefix
(64));
89
Ipv6InterfaceContainer
i2 = ipv6.
Assign
(d2);
90
i2.
SetForwarding
(0,
true
);
91
i2.
SetDefaultRouteInAllNodes
(0);
92
93
Ipv6StaticRoutingHelper
routingHelper;
94
Ptr<OutputStreamWrapper>
routingStream = Create<OutputStreamWrapper> (&std::cout);
95
routingHelper.
PrintRoutingTableAt
(Seconds (0), n0, routingStream);
96
97
/* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r */
98
uint32_t packetSize = 4096;
99
uint32_t maxPacketCount = 5;
100
Time
interPacketInterval = Seconds (1.0);
101
Ping6Helper
ping6;
102
103
ping6.
SetLocal
(i1.
GetAddress
(0, 1));
104
ping6.
SetRemote
(i2.
GetAddress
(1, 1));
105
106
ping6.
SetAttribute
(
"MaxPackets"
,
UintegerValue
(maxPacketCount));
107
ping6.
SetAttribute
(
"Interval"
,
TimeValue
(interPacketInterval));
108
ping6.
SetAttribute
(
"PacketSize"
,
UintegerValue
(packetSize));
109
ApplicationContainer
apps = ping6.
Install
(net1.Get (0));
110
apps.
Start
(Seconds (2.0));
111
apps.
Stop
(Seconds (20.0));
112
113
AsciiTraceHelper
ascii;
114
csma.
EnableAsciiAll
(ascii.
CreateFileStream
(
"fragmentation-ipv6.tr"
));
115
csma.
EnablePcapAll
(std::string (
"fragmentation-ipv6"
),
true
);
116
117
NS_LOG_INFO
(
"Run Simulation."
);
118
Simulator::Run
();
119
Simulator::Destroy
();
120
NS_LOG_INFO
(
"Done."
);
121
}
122
examples
ipv6
fragmentation-ipv6.cc
Generated on Fri Aug 30 2013 01:42:44 for ns-3 by
1.8.1.2