A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lena-cqi-threshold.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: Manuel Requena <manuel.requena@cttc.es>
19  */
20 
21 
22 #include "ns3/core-module.h"
23 #include "ns3/network-module.h"
24 #include "ns3/mobility-module.h"
25 #include "ns3/lte-module.h"
26 #include "ns3/config-store.h"
27 #include <ns3/buildings-helper.h>
28 //#include "ns3/gtk-config-store.h"
29 
30 using namespace ns3;
31 
32 // position functions insipred by /examples/wireless/wifi-ap.cc
33 static void
34 SetPosition (Ptr<Node> node, Vector position)
35 {
36  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
37  mobility->SetPosition (position);
38 }
39 
40 static Vector
42 {
43  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
44  return mobility->GetPosition ();
45 }
46 
47 static void
49 {
50  Vector pos = GetPosition (node);
51 
52  if (pos.x <= 10.0)
53  {
54  pos.x = 100000.0; // force CQI to 0
55  }
56  else
57  {
58  pos.x = 5.0;
59  }
60  SetPosition (node, pos);
61 
62 }
63 
64 int main (int argc, char *argv[])
65 {
66  CommandLine cmd;
67  cmd.Parse (argc, argv);
68 
69  // to save a template default attribute file run it like this:
70  // ./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=Save --ns3::ConfigStore::FileFormat=RawText" --run src/lte/examples/lena-first-sim
71  //
72  // to load a previously created default attribute file
73  // ./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=Load --ns3::ConfigStore::FileFormat=RawText" --run src/lte/examples/lena-first-sim
74 
75  ConfigStore inputConfig;
76  inputConfig.ConfigureDefaults ();
77 
78  // parse again so you can override default values from the command line
79  cmd.Parse (argc, argv);
80 
81  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
82  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
83  // Uncomment to enable logging
84  //lteHelper->EnableLogComponents ();
85 
86  // Create Nodes: eNodeB and UE
87  NodeContainer enbNodes;
88  NodeContainer ueNodes;
89  enbNodes.Create (1);
90  ueNodes.Create (1);
91 
92  // Install Mobility Model
93  MobilityHelper mobility;
94  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
95  mobility.Install (enbNodes);
96  BuildingsHelper::Install (enbNodes);
97  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
98  mobility.Install (ueNodes);
99  BuildingsHelper::Install (ueNodes);
100 
101  // Create Devices and install them in the Nodes (eNB and UE)
102  NetDeviceContainer enbDevs;
103  NetDeviceContainer ueDevs;
104 // lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
105  lteHelper->SetSchedulerType ("ns3::PfFfMacScheduler");
106  lteHelper->SetSchedulerAttribute ("CqiTimerThreshold", UintegerValue (3));
107  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
108  ueDevs = lteHelper->InstallUeDevice (ueNodes);
109 
110  lteHelper->EnableRlcTraces();
111  lteHelper->EnableMacTraces();
112 
113  // Attach a UE to a eNB
114  lteHelper->Attach (ueDevs, enbDevs.Get (0));
115 
116  Simulator::Schedule (Seconds (0.010), &ChangePosition, ueNodes.Get (0));
117  Simulator::Schedule (Seconds (0.020), &ChangePosition, ueNodes.Get (0));
118 
119  // Activate a data radio bearer
121  EpsBearer bearer (q);
122  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
123 
124 
125  Simulator::Stop (Seconds (0.030));
126 
127  Simulator::Run ();
128 
129  //GtkConfigStore config;
130  //config.ConfigureAttributes ();
131 
133  return 0;
134 }
Doxygen introspection did not find any typical Config paths.
Definition: config-store.h:34
double x
x coordinate of vector
Definition: vector.h:49
NetDeviceContainer InstallEnbDevice(NodeContainer c)
create a set of eNB devices
Definition: lte-helper.cc:346
hold variables of type string
Definition: string.h:18
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
static void Run(void)
Run the simulation until one of:
Definition: simulator.cc:157
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
Definition: lte-helper.cc:646
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
Definition: lte-helper.cc:956
Vector GetPosition(void) const
static void ChangePosition(Ptr< Node > node)
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
Definition: simulator.h:825
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Call ActivateDataRadioBearer (ueDevice, bearer) for each UE device in a given set.
Definition: lte-helper.cc:900
a 3d vector
Definition: vector.h:31
static Vector GetPosition(Ptr< Node > node)
void SetSchedulerType(std::string type)
Definition: lte-helper.cc:210
Keep track of the current position and velocity of an object.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:71
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
Hold an unsigned integer type.
Definition: uinteger.h:46
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
set an attribute for the scheduler to be created
Definition: lte-helper.cc:224
holds a vector of ns3::NetDevice pointers
Parse command-line arguments.
Definition: command-line.h:177
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Definition: simulator.cc:121
void ConfigureDefaults(void)
keep track of a set of node pointers.
static void SetPosition(Ptr< Node > node, Vector position)
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void SetPosition(const Vector &position)
NetDeviceContainer InstallUeDevice(NodeContainer c)
create a set of UE devices
Definition: lte-helper.cc:361
Helper class used to assign positions and mobility models to nodes.
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Definition: simulator.cc:165
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
void Parse(int argc, char *argv[])
Parse the program arguments.
int main(int argc, char *argv[])
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
Definition: lte-helper.cc:1044
void SetAttribute(std::string name, const AttributeValue &value)
Definition: object-base.cc:176
Ptr< T > GetObject(void) const
Definition: object.h:362
Qci
QoS Class Indicator.
Definition: eps-bearer.h:77
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.