sat-ra-sim-tn9-comparison.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014 Magister Solutions
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: Frans Laakso <frans.laakso@magister.fi>
19  *
20  */
21 
22 #include "ns3/applications-module.h"
23 #include "ns3/config-store-module.h"
24 #include "ns3/core-module.h"
25 #include "ns3/internet-module.h"
26 #include "ns3/network-module.h"
27 #include "ns3/satellite-module.h"
28 #include "ns3/traffic-module.h"
29 
30 using namespace ns3;
31 
58 NS_LOG_COMPONENT_DEFINE("sat-ra-sim-tn9-comparison");
59 
60 int
61 main(int argc, char* argv[])
62 {
63  uint32_t beamId(18);
64  uint32_t endUsersPerUt(1);
65  uint32_t utsPerBeam(1);
66  uint32_t packetSize(1);
67  uint32_t numOfInstances(3);
68  double intervalInSeconds(0.1);
69  bool isNoisy(false);
70 
71  double simLength(60.0); // in seconds
72  Time appStartTime = Seconds(0.1);
73 
75  auto sh = CreateObject<SimulationHelper>("example-ra-sim-tn9-comparison");
76  // To read attributes from file
77  std::string inputFileNameWithPath =
78  Singleton<SatEnvVariables>::Get()->LocateDirectory("contrib/satellite/examples") +
79  "/tn9-ra-input-attributes.xml";
80 
81  // read command line parameters given by user
82  CommandLine cmd;
83  cmd.AddValue("utsPerBeam", "Number of UTs per spot-beam", utsPerBeam);
84  cmd.AddValue("numOfInstances", "Number of CRDSA packet instances", numOfInstances);
85  cmd.AddValue("isNoisy", "If true, may print some logging messages", isNoisy);
86  sh->AddDefaultUiArguments(cmd, inputFileNameWithPath);
87  cmd.Parse(argc, argv);
88 
89  if (isNoisy)
90  {
91  LogComponentEnable("sat-ra-sim-tn9", LOG_INFO);
92  }
93 
94  Config::SetDefault("ns3::ConfigStore::Filename", StringValue(inputFileNameWithPath));
95  Config::SetDefault("ns3::ConfigStore::Mode", StringValue("Load"));
96  Config::SetDefault("ns3::ConfigStore::FileFormat", StringValue("Xml"));
97  ConfigStore inputConfig;
98  inputConfig.ConfigureDefaults();
99 
100  // Enable Random Access with all available modules
101  Config::SetDefault("ns3::SatBeamHelper::RandomAccessModel",
103 
104  // Set Random Access interference model
105  Config::SetDefault("ns3::SatBeamHelper::RaInterferenceModel",
107 
108  // Set Random Access collision model
109  Config::SetDefault("ns3::SatBeamHelper::RaCollisionModel",
111 
112  // Disable fading
113  Config::SetDefault("ns3::SatBeamHelper::FadingModel", EnumValue(SatEnums::FADING_OFF));
114 
115  // Disable C/NO reporting
116  Config::SetDefault("ns3::SatRequestManager::CnoReportInterval", TimeValue(Seconds(60.0)));
117 
118  // Disable periodic control slots
119  Config::SetDefault("ns3::SatBeamScheduler::ControlSlotsEnabled", BooleanValue(false));
120 
121  // Set dynamic load control parameters
122  Config::SetDefault("ns3::SatPhyRxCarrierConf::EnableRandomAccessDynamicLoadControl",
123  BooleanValue(false));
124  Config::SetDefault(
125  "ns3::SatPhyRxCarrierConf::RandomAccessAverageNormalizedOfferedLoadMeasurementWindowSize",
126  UintegerValue(10));
127 
128  // Set random access parameters
129  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_MaximumUniquePayloadPerBlock",
130  UintegerValue(1));
131  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_MaximumConsecutiveBlockAccessed",
132  UintegerValue(6));
133  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_MinimumIdleBlock",
134  UintegerValue(0));
135  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_BackOffTimeInMilliSeconds",
136  UintegerValue(50));
137  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_BackOffProbability",
138  UintegerValue(1));
139  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_HighLoadBackOffProbability",
140  UintegerValue(1));
141  Config::SetDefault(
142  "ns3::SatLowerLayerServiceConf::RaService0_AverageNormalizedOfferedLoadThreshold",
143  DoubleValue(0.99));
144  Config::SetDefault("ns3::SatLowerLayerServiceConf::RaService0_NumberOfInstances",
145  UintegerValue(numOfInstances));
146 
147  // Disable CRA and DAMA
148  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService0_ConstantAssignmentProvided",
149  BooleanValue(false));
150  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService1_ConstantAssignmentProvided",
151  BooleanValue(false));
152  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService2_ConstantAssignmentProvided",
153  BooleanValue(false));
154  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService3_ConstantAssignmentProvided",
155  BooleanValue(false));
156  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService0_RbdcAllowed",
157  BooleanValue(false));
158  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService1_RbdcAllowed",
159  BooleanValue(false));
160  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService2_RbdcAllowed",
161  BooleanValue(false));
162  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService3_RbdcAllowed",
163  BooleanValue(false));
164  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService0_VolumeAllowed",
165  BooleanValue(false));
166  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService1_VolumeAllowed",
167  BooleanValue(false));
168  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService2_VolumeAllowed",
169  BooleanValue(false));
170  Config::SetDefault("ns3::SatLowerLayerServiceConf::DaService3_VolumeAllowed",
171  BooleanValue(false));
172 
173  // Creating the reference system. Note, currently the satellite module supports
174  // only one reference system, which is named as "Scenario72". The string is utilized
175  // in mapping the scenario to the needed reference system configuration files. Arbitrary
176  // scenario name results in fatal error.
177  sh->SetSimulationTime(simLength);
178  sh->SetUserCountPerUt(endUsersPerUt);
179  sh->SetUtCountPerBeam(utsPerBeam);
180  sh->SetBeamSet({beamId});
181  Ptr<SatHelper> helper = sh->CreateSatScenario();
182 
187  Config::SetDefault("ns3::CbrApplication::Interval", TimeValue(Seconds(intervalInSeconds)));
188  Config::SetDefault("ns3::CbrApplication::PacketSize", UintegerValue(packetSize));
189  sh->InstallTrafficModel(SimulationHelper::CBR,
192  appStartTime,
193  Seconds(simLength + 1),
194  Seconds(0.01));
195 
196  if (isNoisy)
197  {
198  const double kbps = packetSize / intervalInSeconds / 125.0;
199  std::cout << "Each of " << utsPerBeam * endUsersPerUt << " UT Users"
200  << " offer bandwidth of " << kbps << " kbps" << std::endl;
201  }
202 
206  Ptr<SatStatsHelperContainer> s = sh->GetStatisticsContainer();
207 
208  s->AddPerBeamRtnAppThroughput(SatStatsHelper::OUTPUT_SCALAR_FILE);
209  s->AddPerBeamRtnFeederDevThroughput(SatStatsHelper::OUTPUT_SCALAR_FILE);
210  s->AddPerBeamRtnFeederMacThroughput(SatStatsHelper::OUTPUT_SCALAR_FILE);
211  s->AddPerBeamRtnFeederPhyThroughput(SatStatsHelper::OUTPUT_SCALAR_FILE);
212 
213  s->AddPerBeamRtnAppDelay(SatStatsHelper::OUTPUT_SCALAR_FILE);
214  s->AddPerBeamRtnDevDelay(SatStatsHelper::OUTPUT_SCALAR_FILE);
215  s->AddPerBeamRtnPhyDelay(SatStatsHelper::OUTPUT_SCALAR_FILE);
216  s->AddPerBeamRtnMacDelay(SatStatsHelper::OUTPUT_SCALAR_FILE);
217 
218  s->AddPerBeamRtnAppDelay(SatStatsHelper::OUTPUT_CDF_FILE);
219  s->AddPerBeamRtnDevDelay(SatStatsHelper::OUTPUT_CDF_FILE);
220  s->AddPerBeamRtnPhyDelay(SatStatsHelper::OUTPUT_CDF_FILE);
221  s->AddPerBeamRtnMacDelay(SatStatsHelper::OUTPUT_CDF_FILE);
222 
223  // s->AddPerUtUserRtnAppThroughput (SatStatsHelper::OUTPUT_SCALAR_FILE);
224  // s->AddPerUtUserRtnAppThroughput (SatStatsHelper::OUTPUT_SCATTER_FILE);
225  // s->AddPerUtUserRtnAppThroughput (SatStatsHelper::OUTPUT_SCATTER_PLOT);
226  // s->AddPerUtUserRtnDevThroughput (SatStatsHelper::OUTPUT_SCATTER_FILE);
227  // s->AddPerUtUserRtnDevThroughput (SatStatsHelper::OUTPUT_SCATTER_PLOT);
228 
229  // s->AddPerUtUserRtnAppDelay (SatStatsHelper::OUTPUT_CDF_FILE);
230  // s->AddPerUtUserRtnAppDelay (SatStatsHelper::OUTPUT_CDF_PLOT);
231  // s->AddPerUtRtnDevDelay (SatStatsHelper::OUTPUT_CDF_FILE);
232  // s->AddPerUtRtnDevDelay (SatStatsHelper::OUTPUT_CDF_PLOT);
233 
234  s->AddPerBeamRtnCompositeSinr(SatStatsHelper::OUTPUT_CDF_FILE);
235  s->AddPerBeamRtnCompositeSinr(SatStatsHelper::OUTPUT_CDF_PLOT);
236 
237  s->AddPerBeamResourcesGranted(SatStatsHelper::OUTPUT_CDF_FILE);
238  s->AddPerBeamResourcesGranted(SatStatsHelper::OUTPUT_CDF_PLOT);
239 
240  s->AddPerBeamFrameSymbolLoad(SatStatsHelper::OUTPUT_SCALAR_FILE);
241  s->AddPerBeamWaveformUsage(SatStatsHelper::OUTPUT_SCALAR_FILE);
242 
243  s->AddPerBeamRtnFeederDaPacketError(SatStatsHelper::OUTPUT_SCALAR_FILE);
244 
245  s->AddPerBeamFeederCrdsaPacketCollision(SatStatsHelper::OUTPUT_SCALAR_FILE);
246  s->AddPerBeamFeederCrdsaPacketError(SatStatsHelper::OUTPUT_SCALAR_FILE);
247  s->AddPerBeamFeederSlottedAlohaPacketCollision(SatStatsHelper::OUTPUT_SCALAR_FILE);
248  s->AddPerBeamFeederSlottedAlohaPacketError(SatStatsHelper::OUTPUT_SCALAR_FILE);
249 
250  // s->AddPerUtFeederCrdsaPacketCollision (SatStatsHelper::OUTPUT_SCALAR_FILE);
251  // s->AddPerUtFeederCrdsaPacketError (SatStatsHelper::OUTPUT_SCALAR_FILE);
252  // s->AddPerUtFeederSlottedAlohaPacketCollision (SatStatsHelper::OUTPUT_SCALAR_FILE);
253  // s->AddPerUtFeederSlottedAlohaPacketError (SatStatsHelper::OUTPUT_SCALAR_FILE);
254 
255  NS_LOG_INFO("--- sat-ra-sim-tn9-comparison ---");
256  NS_LOG_INFO(" Packet size: " << packetSize);
257  NS_LOG_INFO(" Simulation length: " << simLength);
258  NS_LOG_INFO(" Number of UTs: " << utsPerBeam);
259  NS_LOG_INFO(" Number of end users per UT: " << endUsersPerUt);
260  NS_LOG_INFO(" ");
261 
265  // std::stringstream filename;
266  // filename << "tn9-ra-comparison-output-attributes-uts-" << utsPerBeam << "-instances-" <<
267  // numOfInstances << ".xml";
268  //
269  // Config::SetDefault ("ns3::ConfigStore::Filename", StringValue (filename.str ()));
270  // Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
271  // Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
272  // ConfigStore outputConfig;
273  // outputConfig.ConfigureDefaults ();
274 
278  sh->RunSimulation();
279 
280  return 0;
281 }
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.