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
lteHelper->
SetSchedulerType
(
"ns3::PfFfMacScheduler"
);
63
64
ConfigStore
inputConfig;
65
inputConfig.
ConfigureDefaults
();
66
67
// parse again so you can override default values from the command line
68
cmd.
Parse
(argc, argv);
69
70
Ptr<Node>
pgw = epcHelper->GetPgwNode ();
71
72
// Create a single RemoteHost
73
NodeContainer
remoteHostContainer;
74
remoteHostContainer.
Create
(1);
75
Ptr<Node>
remoteHost = remoteHostContainer.
Get
(0);
76
InternetStackHelper
internet;
77
internet.
Install
(remoteHostContainer);
78
79
// Create the Internet
80
PointToPointHelper
p2ph;
81
p2ph.
SetDeviceAttribute
(
"DataRate"
,
DataRateValue
(
DataRate
(
"100Gb/s"
)));
82
p2ph.
SetDeviceAttribute
(
"Mtu"
,
UintegerValue
(1500));
83
p2ph.
SetChannelAttribute
(
"Delay"
,
TimeValue
(
Seconds
(0.010)));
84
NetDeviceContainer
internetDevices = p2ph.
Install
(pgw, remoteHost);
85
Ipv4AddressHelper
ipv4h;
86
ipv4h.
SetBase
(
"1.0.0.0"
,
"255.0.0.0"
);
87
Ipv4InterfaceContainer
internetIpIfaces = ipv4h.
Assign
(internetDevices);
88
// interface 0 is localhost, 1 is the p2p device
89
Ipv4Address
remoteHostAddr = internetIpIfaces.
GetAddress
(1);
90
91
Ipv4StaticRoutingHelper
ipv4RoutingHelper;
92
Ptr<Ipv4StaticRouting>
remoteHostStaticRouting = ipv4RoutingHelper.
GetStaticRouting
(remoteHost->
GetObject
<
Ipv4
> ());
93
remoteHostStaticRouting->
AddNetworkRouteTo
(
Ipv4Address
(
"7.0.0.0"
),
Ipv4Mask
(
"255.0.0.0"
), 1);
94
95
NodeContainer
ueNodes;
96
NodeContainer
enbNodes;
97
enbNodes.
Create
(numberOfNodes);
98
ueNodes.
Create
(numberOfNodes);
99
100
// Install Mobility Model
101
Ptr<ListPositionAllocator>
positionAlloc = CreateObject<ListPositionAllocator> ();
102
for
(uint16_t i = 0; i < numberOfNodes; i++)
103
{
104
positionAlloc->
Add
(
Vector
(distance * i, 0, 0));
105
}
106
MobilityHelper
mobility;
107
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
108
mobility.
SetPositionAllocator
(positionAlloc);
109
mobility.
Install
(enbNodes);
110
mobility.
Install
(ueNodes);
111
112
// Install LTE Devices to the nodes
113
NetDeviceContainer
enbLteDevs = lteHelper->
InstallEnbDevice
(enbNodes);
114
NetDeviceContainer
ueLteDevs = lteHelper->
InstallUeDevice
(ueNodes);
115
116
// Attach one UE per eNodeB
117
for
(uint16_t i = 0; i < numberOfNodes; i++)
118
{
119
lteHelper->
Attach
(ueLteDevs.
Get
(i), enbLteDevs.
Get
(i));
120
}
121
122
// Install the IP stack on the UEs
123
internet.
Install
(ueNodes);
124
Ipv4InterfaceContainer
ueIpIface;
125
ueIpIface = epcHelper->AssignUeIpv4Address (
NetDeviceContainer
(ueLteDevs));
126
// Assign IP address to UEs, and install applications
127
for
(uint32_t u = 0; u < ueNodes.
GetN
(); ++u)
128
{
129
Ptr<Node>
ueNode = ueNodes.
Get
(u);
130
// Set the default gateway for the UE
131
Ptr<Ipv4StaticRouting>
ueStaticRouting = ipv4RoutingHelper.
GetStaticRouting
(ueNode->
GetObject
<
Ipv4
> ());
132
ueStaticRouting->
SetDefaultRoute
(epcHelper->GetUeDefaultGatewayAddress (), 1);
133
}
134
lteHelper->
ActivateEpsBearer
(ueLteDevs,
EpsBearer
(
EpsBearer::NGBR_VIDEO_TCP_DEFAULT
),
EpcTft::Default
());
135
136
137
// Install and start applications on UEs and remote host
138
uint16_t dlPort = 1234;
139
uint16_t ulPort = 2000;
140
uint16_t otherPort = 3000;
141
PacketSinkHelper
dlPacketSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), dlPort));
142
PacketSinkHelper
ulPacketSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), ulPort));
143
PacketSinkHelper
packetSinkHelper (
"ns3::UdpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(), otherPort));
144
ApplicationContainer
clientApps;
145
ApplicationContainer
serverApps;
146
for
(uint32_t u = 0; u < ueNodes.
GetN
(); ++u)
147
{
148
++ulPort;
149
++otherPort;
150
serverApps.
Add
(dlPacketSinkHelper.
Install
(ueNodes.
Get
(u)));
151
serverApps.
Add
(ulPacketSinkHelper.
Install
(remoteHost));
152
serverApps.
Add
(packetSinkHelper.
Install
(ueNodes.
Get
(u)));
153
154
UdpClientHelper
dlClient (ueIpIface.
GetAddress
(u), dlPort);
155
dlClient.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
156
dlClient.SetAttribute (
"MaxPackets"
,
UintegerValue
(1000000));
157
158
UdpClientHelper
ulClient (remoteHostAddr, ulPort);
159
ulClient.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
160
ulClient.
SetAttribute
(
"MaxPackets"
,
UintegerValue
(1000000));
161
162
UdpClientHelper
client (ueIpIface.
GetAddress
(u), otherPort);
163
client.
SetAttribute
(
"Interval"
,
TimeValue
(
MilliSeconds
(interPacketInterval)));
164
client.SetAttribute (
"MaxPackets"
,
UintegerValue
(1000000));
165
166
clientApps.
Add
(dlClient.Install (remoteHost));
167
clientApps.
Add
(ulClient.
Install
(ueNodes.
Get
(u)));
168
if
(u+1 < ueNodes.
GetN
())
169
{
170
clientApps.
Add
(client.Install (ueNodes.
Get
(u+1)));
171
}
172
else
173
{
174
clientApps.
Add
(client.Install (ueNodes.
Get
(0)));
175
}
176
}
177
serverApps.
Start
(
Seconds
(0.01));
178
clientApps.
Start
(
Seconds
(0.01));
179
lteHelper->
EnableTraces
();
180
// Uncomment to enable PCAP tracing
181
//p2ph.EnablePcapAll("lena-epc-first");
182
183
Simulator::Stop
(
Seconds
(simTime));
184
Simulator::Run
();
185
186
/*GtkConfigStore config;
187
config.ConfigureAttributes();*/
188
189
Simulator::Destroy
();
190
return
0;
191
192
}
193
src
lte
examples
lena-simple-epc.cc
Generated on Tue Nov 13 2012 10:32:16 for ns-3 by
1.8.1.2