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
global-injection-slash32.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
// Test program for this 3-router scenario, using global routing
19
//
20
// (a.a.a.a/32)A<--x.x.x.0/30-->B<--y.y.y.0/30-->C(c.c.c.c/32)
21
22
#include <iostream>
23
#include <fstream>
24
#include <string>
25
#include <cassert>
26
27
#include "ns3/csma-net-device.h"
28
#include "ns3/core-module.h"
29
#include "ns3/network-module.h"
30
#include "ns3/internet-module.h"
31
#include "ns3/point-to-point-module.h"
32
#include "ns3/applications-module.h"
33
#include "ns3/ipv4-static-routing.h"
34
#include "ns3/ipv4-global-routing.h"
35
#include "ns3/ipv4-list-routing.h"
36
#include "ns3/ipv4-routing-table-entry.h"
37
#include "ns3/global-router-interface.h"
38
#include "ns3/ipv4-static-routing-helper.h"
39
#include "ns3/ipv4-list-routing-helper.h"
40
#include "ns3/ipv4-global-routing-helper.h"
41
42
using namespace
ns3;
43
using
std::cout;
44
45
NS_LOG_COMPONENT_DEFINE
(
"GlobalRouterInjectionTest"
);
46
47
int
48
main
(
int
argc,
char
*argv[])
49
{
50
51
// Allow the user to override any of the defaults and the above
52
// DefaultValue::Bind ()s at run-time, via command-line arguments
53
CommandLine
cmd;
54
cmd.
Parse
(argc, argv);
55
56
Ptr<Node>
nA = CreateObject<Node> ();
57
Ptr<Node>
nB = CreateObject<Node> ();
58
Ptr<Node>
nC = CreateObject<Node> ();
59
60
NodeContainer
c =
NodeContainer
(nA, nB, nC);
61
62
InternetStackHelper
internet;
63
64
// Point-to-point links
65
NodeContainer
nAnB =
NodeContainer
(nA, nB);
66
NodeContainer
nBnC =
NodeContainer
(nB, nC);
67
68
internet.
Install
(nAnB);
69
Ipv4ListRoutingHelper
staticonly;
70
Ipv4ListRoutingHelper
staticRouting;
71
staticonly.
Add
(staticRouting, 0);
72
internet.
SetRoutingHelper
(staticonly);
// has effect on the next Install ()
73
internet.
Install
(
NodeContainer
(nC));
74
75
// We create the channels first without any IP addressing information
76
PointToPointHelper
p2p;
77
p2p.
SetDeviceAttribute
(
"DataRate"
,
StringValue
(
"5Mbps"
));
78
p2p.
SetChannelAttribute
(
"Delay"
,
StringValue
(
"2ms"
));
79
NetDeviceContainer
dAdB = p2p.
Install
(nAnB);
80
81
NetDeviceContainer
dBdC = p2p.
Install
(nBnC);;
82
83
Ptr<CsmaNetDevice>
deviceA = CreateObject<CsmaNetDevice> ();
84
deviceA->
SetAddress
(
Mac48Address::Allocate
());
85
nA->
AddDevice
(deviceA);
86
87
Ptr<CsmaNetDevice>
deviceC = CreateObject<CsmaNetDevice> ();
88
deviceC->
SetAddress
(
Mac48Address::Allocate
());
89
nC->AddDevice (deviceC);
90
91
// Later, we add IP addresses.
92
Ipv4AddressHelper
ipv4;
93
ipv4.
SetBase
(
"10.1.1.0"
,
"255.255.255.252"
);
94
Ipv4InterfaceContainer
iAiB = ipv4.
Assign
(dAdB);
95
96
ipv4.
SetBase
(
"10.1.1.4"
,
"255.255.255.252"
);
97
Ipv4InterfaceContainer
iBiC = ipv4.
Assign
(dBdC);
98
99
Ptr<Ipv4>
ipv4A = nA->
GetObject
<
Ipv4
> ();
100
Ptr<Ipv4>
ipv4B = nB->
GetObject
<
Ipv4
> ();
101
Ptr<Ipv4>
ipv4C = nC->
GetObject
<
Ipv4
> ();
102
103
int32_t ifIndexA = ipv4A->
AddInterface
(deviceA);
104
int32_t ifIndexC = ipv4C->AddInterface (deviceC);
105
106
Ipv4InterfaceAddress
ifInAddrA =
Ipv4InterfaceAddress
(
Ipv4Address
(
"172.16.1.1"
),
Ipv4Mask
(
"255.255.255.255"
));
107
ipv4A->
AddAddress
(ifIndexA, ifInAddrA);
108
ipv4A->
SetMetric
(ifIndexA, 1);
109
ipv4A->
SetUp
(ifIndexA);
110
111
Ipv4InterfaceAddress
ifInAddrC =
Ipv4InterfaceAddress
(
Ipv4Address
(
"192.168.1.1"
),
Ipv4Mask
(
"255.255.255.255"
));
112
ipv4C->AddAddress (ifIndexC, ifInAddrC);
113
ipv4C->SetMetric (ifIndexC, 1);
114
ipv4C->SetUp (ifIndexC);
115
116
// Create router nodes, initialize routing database and set up the routing
117
// tables in the nodes.
118
119
// Populate routing tables for nodes nA and nB
120
Ipv4GlobalRoutingHelper::PopulateRoutingTables
();
121
// Inject global routes from Node B, including transit network...
122
Ptr<GlobalRouter>
globalRouterB = nB->GetObject<
GlobalRouter
> ();
123
globalRouterB->
InjectRoute
(
"10.1.1.4"
,
"255.255.255.252"
);
124
// ...and the host in network "C"
125
globalRouterB->
InjectRoute
(
"192.168.1.1"
,
"255.255.255.255"
);
126
127
Ipv4GlobalRoutingHelper::RecomputeRoutingTables
();
128
// In addition, nB needs a static route to nC so it knows what to do with stuff
129
// going to 192.168.1.1
130
Ipv4StaticRoutingHelper
ipv4RoutingHelper;
131
Ptr<Ipv4StaticRouting>
staticRoutingB = ipv4RoutingHelper.
GetStaticRouting
(ipv4B);
132
staticRoutingB->
AddHostRouteTo
(
Ipv4Address
(
"192.168.1.1"
),
Ipv4Address
(
"10.1.1.6"
),2);
133
134
// Create the OnOff application to send UDP datagrams of size
135
// 210 bytes at a rate of 448 Kb/s
136
uint16_t
port
= 9;
// Discard port (RFC 863)
137
OnOffHelper
onoff (
"ns3::UdpSocketFactory"
,
138
Address
(
InetSocketAddress
(ifInAddrC.
GetLocal
(),
port
)));
139
onoff.
SetConstantRate
(
DataRate
(6000));
140
ApplicationContainer
apps = onoff.Install (nA);
141
apps.
Start
(Seconds (1.0));
142
apps.
Stop
(Seconds (10.0));
143
144
// Create a packet sink to receive these packets
145
PacketSinkHelper
sink (
"ns3::UdpSocketFactory"
,
146
Address
(
InetSocketAddress
(
Ipv4Address::GetAny
(), port)));
147
apps = sink.
Install
(nC);
148
apps.
Start
(Seconds (1.0));
149
apps.
Stop
(Seconds (10.0));
150
151
AsciiTraceHelper
ascii;
152
p2p.
EnableAsciiAll
(ascii.
CreateFileStream
(
"global-routing-injection32.tr"
));
153
p2p.
EnablePcapAll
(
"global-routing-injection32"
);
154
155
Simulator::Run
();
156
Simulator::Destroy
();
157
158
return
0;
159
}
examples
routing
global-injection-slash32.cc
Generated on Fri Aug 30 2013 01:42:44 for ns-3 by
1.8.1.2