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
simple-global-routing.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* This program is free software; you can redistribute it and/or modify
4
* it under the terms of the GNU General Public License version 2 as
5
* published by the Free Software Foundation;
6
*
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
11
*
12
* You should have received a copy of the GNU General Public License
13
* along with this program; if not, write to the Free Software
14
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
*
16
*/
17
18
//
19
// Network topology
20
//
21
// n0
22
// \ 5 Mb/s, 2ms
23
// \ 1.5Mb/s, 10ms
24
// n2 -------------------------n3
25
// /
26
// / 5 Mb/s, 2ms
27
// n1
28
//
29
// - all links are point-to-point links with indicated one-way BW/delay
30
// - CBR/UDP flows from n0 to n3, and from n3 to n1
31
// - FTP/TCP flow from n0 to n3, starting at time 1.2 to time 1.35 sec.
32
// - UDP packet size of 210 bytes, with per-packet interval 0.00375 sec.
33
// (i.e., DataRate of 448,000 bps)
34
// - DropTail queues
35
// - Tracing of queues and packet receptions to file "simple-global-routing.tr"
36
37
#include <iostream>
38
#include <fstream>
39
#include <string>
40
#include <cassert>
41
42
#include "ns3/core-module.h"
43
#include "ns3/network-module.h"
44
#include "ns3/internet-module.h"
45
#include "ns3/point-to-point-module.h"
46
#include "ns3/applications-module.h"
47
#include "ns3/flow-monitor-helper.h"
48
#include "ns3/ipv4-global-routing-helper.h"
49
50
using namespace
ns3;
51
52
NS_LOG_COMPONENT_DEFINE
(
"SimpleGlobalRoutingExample"
);
53
54
int
55
main
(
int
argc,
char
*argv[])
56
{
57
// Users may find it convenient to turn on explicit debugging
58
// for selected modules; the below lines suggest how to do this
59
#if 0
60
LogComponentEnable
(
"SimpleGlobalRoutingExample"
,
LOG_LEVEL_INFO
);
61
#endif
62
63
// Set up some default values for the simulation. Use the
64
Config::SetDefault
(
"ns3::OnOffApplication::PacketSize"
,
UintegerValue
(210));
65
Config::SetDefault
(
"ns3::OnOffApplication::DataRate"
,
StringValue
(
"448kb/s"
));
66
67
//DefaultValue::Bind ("DropTailQueue::m_maxPackets", 30);
68
69
// Allow the user to override any of the defaults and the above
70
// DefaultValue::Bind ()s at run-time, via command-line arguments
71
CommandLine
cmd;
72
bool
enableFlowMonitor =
false
;
73
cmd.
AddValue
(
"EnableMonitor"
,
"Enable Flow Monitor"
, enableFlowMonitor);
74
cmd.
Parse
(argc, argv);
75
76
// Here, we will explicitly create four nodes. In more sophisticated
77
// topologies, we could configure a node factory.
78
NS_LOG_INFO
(
"Create nodes."
);
79
NodeContainer
c;
80
c.
Create
(4);
81
NodeContainer
n0n2
=
NodeContainer
(c.
Get
(0), c.
Get
(2));
82
NodeContainer
n1n2
=
NodeContainer
(c.
Get
(1), c.
Get
(2));
83
NodeContainer
n3n2 =
NodeContainer
(c.
Get
(3), c.
Get
(2));
84
85
InternetStackHelper
internet;
86
internet.
Install
(c);
87
88
// We create the channels first without any IP addressing information
89
NS_LOG_INFO
(
"Create channels."
);
90
PointToPointHelper
p2p;
91
p2p.
SetDeviceAttribute
(
"DataRate"
,
StringValue
(
"5Mbps"
));
92
p2p.
SetChannelAttribute
(
"Delay"
,
StringValue
(
"2ms"
));
93
NetDeviceContainer
d0d2 = p2p.
Install
(n0n2);
94
95
NetDeviceContainer
d1d2 = p2p.
Install
(n1n2);
96
97
p2p.
SetDeviceAttribute
(
"DataRate"
,
StringValue
(
"1500kbps"
));
98
p2p.
SetChannelAttribute
(
"Delay"
,
StringValue
(
"10ms"
));
99
NetDeviceContainer
d3d2 = p2p.
Install
(n3n2);
100
101
// Later, we add IP addresses.
102
NS_LOG_INFO
(
"Assign IP Addresses."
);
103
Ipv4AddressHelper
ipv4;
104
ipv4.
SetBase
(
"10.1.1.0"
,
"255.255.255.0"
);
105
Ipv4InterfaceContainer
i0i2
= ipv4.
Assign
(d0d2);
106
107
ipv4.
SetBase
(
"10.1.2.0"
,
"255.255.255.0"
);
108
Ipv4InterfaceContainer
i1i2
= ipv4.
Assign
(d1d2);
109
110
ipv4.
SetBase
(
"10.1.3.0"
,
"255.255.255.0"
);
111
Ipv4InterfaceContainer
i3i2 = ipv4.
Assign
(d3d2);
112
113
// Create router nodes, initialize routing database and set up the routing
114
// tables in the nodes.
115
Ipv4GlobalRoutingHelper::PopulateRoutingTables
();
116
117
// Create the OnOff application to send UDP datagrams of size
118
// 210 bytes at a rate of 448 Kb/s
119
NS_LOG_INFO
(
"Create Applications."
);
120
uint16_t
port
= 9;
// Discard port (RFC 863)
121
OnOffHelper
onoff (
"ns3::UdpSocketFactory"
,
122
Address
(
InetSocketAddress
(i3i2.
GetAddress
(0),
port
)));
123
onoff.
SetConstantRate
(
DataRate
(
"448kb/s"
));
124
ApplicationContainer
apps = onoff.Install (c.
Get
(0));
125
apps.
Start
(Seconds (1.0));
126
apps.
Stop
(Seconds (10.0));
127
128
// Create a packet sink to receive these packets
129
PacketSinkHelper
sink (
"ns3::UdpSocketFactory"
,
130
Address
(
InetSocketAddress
(
Ipv4Address::GetAny
(), port)));
131
apps = sink.
Install
(c.
Get
(3));
132
apps.
Start
(Seconds (1.0));
133
apps.
Stop
(Seconds (10.0));
134
135
// Create a similar flow from n3 to n1, starting at time 1.1 seconds
136
onoff.SetAttribute (
"Remote"
,
137
AddressValue
(
InetSocketAddress
(i1i2.
GetAddress
(0),
port
)));
138
apps = onoff.Install (c.
Get
(3));
139
apps.
Start
(Seconds (1.1));
140
apps.
Stop
(Seconds (10.0));
141
142
// Create a packet sink to receive these packets
143
apps = sink.
Install
(c.
Get
(1));
144
apps.
Start
(Seconds (1.1));
145
apps.
Stop
(Seconds (10.0));
146
147
AsciiTraceHelper
ascii;
148
p2p.
EnableAsciiAll
(ascii.
CreateFileStream
(
"simple-global-routing.tr"
));
149
p2p.
EnablePcapAll
(
"simple-global-routing"
);
150
151
// Flow Monitor
152
Ptr<FlowMonitor>
flowmon;
153
FlowMonitorHelper
flowmonHelper;
154
if
(enableFlowMonitor)
155
{
156
flowmon = flowmonHelper.
InstallAll
();
157
}
158
159
NS_LOG_INFO
(
"Run Simulation."
);
160
Simulator::Stop
(Seconds (11));
161
Simulator::Run
();
162
NS_LOG_INFO
(
"Done."
);
163
164
if
(enableFlowMonitor)
165
{
166
flowmon->
SerializeToXmlFile
(
"simple-global-routing.flowmon"
,
false
,
false
);
167
}
168
169
Simulator::Destroy
();
170
return
0;
171
}
examples
routing
simple-global-routing.cc
Generated on Fri Aug 30 2013 01:42:44 for ns-3 by
1.8.1.2