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
lena-simple-epc.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
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: Jaume Nin <jaume.nin@cttc.cat>
19
*/
20
21
#include "ns3/lte-helper.h"
22
#include "ns3/epc-helper.h"
23
#include "ns3/core-module.h"
24
#include "ns3/network-module.h"
25
#include "ns3/ipv4-global-routing-helper.h"
26
#include "ns3/internet-module.h"
27
#include "ns3/mobility-module.h"
28
#include "ns3/lte-module.h"
29
#include "ns3/applications-module.h"
30
#include "ns3/point-to-point-helper.h"
31
#include "ns3/config-store.h"
32
//#include "ns3/gtk-config-store.h"
33
34
using namespace
ns3;
35
41
NS_LOG_COMPONENT_DEFINE
(
"EpcFirstExample"
);
42
int
43
main
(
int
argc,
char
*argv[])
44
{
45
46
uint16_t numberOfNodes = 2;
47
double
simTime = 5.0;
48
double
distance = 60.0;
49
double
interPacketInterval = 100;
50
51
// Command line arguments
52
CommandLine
cmd;
53
cmd.
AddValue
(
"numberOfNodes"
,
"Number of eNodeBs + UE pairs"
, numberOfNodes);
54
cmd.
AddValue
(
"simTime"
,
"Total duration of the simulation [s])"
, simTime);
55
cmd.
AddValue
(
"distance"
,
"Distance between eNBs [m]"
, distance);
56
cmd.
AddValue
(
"interPacketInterval"
,
"Inter packet interval [ms])"
, interPacketInterval);
57
cmd.
Parse
(argc, argv);
58
59
Ptr<LteHelper>
lteHelper = CreateObject<LteHelper> ();
60
Ptr<EpcHelper>
epcHelper = CreateObject<EpcHelper> ();
61
lteHelper->
SetEpcHelper
(epcHelper);
62
63
ConfigStore
inputConfig;
64
inputConfig.
ConfigureDefaults
();
65
66
// parse again so you can override default values from the command line
67
cmd.
Parse
(argc, argv);
68
69
Ptr<Node>
pgw = epcHelper->GetPgwNode ();
70
71
// Create a single RemoteHost
72
NodeContainer
remoteHostContainer;
73
remoteHostContainer.
Create
(1);
74
Ptr<Node>
remoteHost = remoteHostContainer.
Get
(0);
75
InternetStackHelper
internet;
76
internet.
Install
(remoteHostContainer);
77
78
// Create the Internet
79
PointToPointHelper
p2ph;
80
p2ph.
SetDeviceAttribute
(
"DataRate"
,
DataRateValue
(
DataRate
(
"100Gb/s"
)));
81
p2ph.
SetDeviceAttribute
(
"Mtu"
,
UintegerValue
(1500));
82
p2ph.
SetChannelAttribute
(
"Delay"
,
TimeValue
(
Seconds
(0.010)));
83
NetDeviceContainer
internetDevices = p2ph.
Install
(pgw, remoteHost);
84
Ipv4AddressHelper
ipv4h;
85
ipv4h.
SetBase
(
"1.0.0.0"
,
"255.0.0.0"
);
86
Ipv4InterfaceContainer
internetIpIfaces = ipv4h.
Assign
(internetDevices);
87
// interface 0 is localhost, 1 is the p2p device
88
Ipv4Address
remoteHostAddr = internetIpIfaces.
GetAddress
(1);
89
90
Ipv4StaticRoutingHelper
ipv4RoutingHelper;
91
Ptr<Ipv4StaticRouting>
remoteHostStaticRouting = ipv4RoutingHelper.
GetStaticRouting
(remoteHost->
GetObject
<
Ipv4
> ());
92
remoteHostStaticRouting->
AddNetworkRouteTo
(
Ipv4Address
(
"7.0.0.0"
),
Ipv4Mask
(
"255.0.0.0"
), 1);
93
94
NodeContainer
ueNodes;
95
NodeContainer
enbNodes;
96
enbNodes.
Create
(numberOfNodes);
97
ueNodes.
Create
(numberOfNodes);
98
99
// Install Mobility Model
100
Ptr<ListPositionAllocator>
positionAlloc = CreateObject<ListPositionAllocator> ();
101
for
(uint16_t i = 0; i < numberOfNodes; i++)
102
{
103
positionAlloc->
Add
(
Vector
(distance * i, 0, 0));
104
}
105
MobilityHelper
mobility;
106
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
107
mobility.
SetPositionAllocator
(positionAlloc);
108
mobility.
Install
(enbNodes);
109
mobility.
Install
(ueNodes);
110
111
// Install LTE Devices to the nodes
112
NetDeviceContainer
enbLteDevs = lteHelper->
InstallEnbDevice
(enbNodes);
113
NetDeviceContainer
ueLteDevs = lteHelper->
InstallUeDevice
(ueNodes);
114
115
// Install the IP stack on the UEs
116
internet.
Install
(ueNodes);
117
Ipv4InterfaceContainer
ueIpIface;
118
ueIpIface = epcHelper->AssignUeIpv4Address (
NetDeviceContainer
(ueLteDevs));
119
// Assign IP address to UEs, and install applications
120
for
(uint32_t u = 0; u < ueNodes.
GetN
(); ++u)
121
{
122
Ptr<Node>
ueNode = ueNodes.
Get
(u);
123
// Set the default gateway for the UE
124
Ptr<Ipv4StaticRouting>
ueStaticRouting = ipv4RoutingHelper.
GetStaticRouting
(ueNode->
GetObject
<
Ipv4
> ());
125
ueStaticRouting->
SetDefaultRoute
(epcHelper->GetUeDefaultGatewayAddress (), 1);
126
}
127
128
// Attach one UE per eNodeB
129
for
(uint16_t i = 0; i < numberOfNodes; i++)
130
{
131
lteHelper->
Attach
(ueLteDevs.
Get
(i), enbLteDevs.
Get
(i));
132
// side effect: the default EPS bearer will be activated
133
}
134
135
136
// Install and start applications on UEs and remote host
137
uint16_t dlPort = 1234;
138
uint16_t ulPort = 2000;
139
uint16_t otherPort = 3000;
140
ApplicationContainer
clientApps;
141
ApplicationContainer
serverApps;
142
for
(uint32_t u = 0; u < ueNodes.
GetN
(); ++u)
143
{
144
++ulPort;
145
++otherPort;
146
PacketSinkHelper
dlPacketSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), dlPort));
147
PacketSinkHelper
ulPacketSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), ulPort));
148
PacketSinkHelper
packetSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), otherPort));
149
serverApps.
Add
(dlPacketSinkHelper.
Install
(ueNodes.
Get
(u)));
150
serverApps.
Add
(ulPacketSinkHelper.
Install
(remoteHost));
151
serverApps.
Add
(packetSinkHelper.
Install
(ueNodes.
Get
(u)));
152
153
UdpClientHelper
dlClient (ueIpIface.
GetAddress
(u), dlPort);
154
dlClient.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
155
dlClient.SetAttribute (
"MaxPackets"
,
UintegerValue
(1000000));
156
157
UdpClientHelper
ulClient (remoteHostAddr, ulPort);
158
ulClient.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
159
ulClient.
SetAttribute
(
"MaxPackets"
,
UintegerValue
(1000000));
160
161
UdpClientHelper
client (ueIpIface.
GetAddress
(u), otherPort);
162
client.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
163
client.SetAttribute (
"MaxPackets"
,
UintegerValue
(1000000));
164
165
clientApps.
Add
(dlClient.Install (remoteHost));
166
clientApps.
Add
(ulClient.
Install
(ueNodes.
Get
(u)));
167
if
(u+1 < ueNodes.
GetN
())
168
{
169
clientApps.
Add
(client.Install (ueNodes.
Get
(u+1)));
170
}
171
else
172
{
173
clientApps.
Add
(client.Install (ueNodes.
Get
(0)));
174
}
175
}
176
serverApps.
Start
(
Seconds
(0.01));
177
clientApps.
Start
(
Seconds
(0.01));
178
lteHelper->
EnableTraces
();
179
// Uncomment to enable PCAP tracing
180
//p2ph.EnablePcapAll("lena-epc-first");
181
182
Simulator::Stop
(
Seconds
(simTime));
183
Simulator::Run
();
184
185
/*GtkConfigStore config;
186
config.ConfigureAttributes();*/
187
188
Simulator::Destroy
();
189
return
0;
190
191
}
192
src
lte
examples
lena-simple-epc.cc
Generated on Tue May 14 2013 11:08:24 for ns-3 by
1.8.1.2