sat-constellation-example.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: Bastien Tauran <bastien.tauran@viveris.fr>
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 
42 NS_LOG_COMPONENT_DEFINE("sat-constellation-example");
43 
44 int
45 mainGeoTwoSats(uint32_t packetSize,
46  std::string interval,
47  std::string configurationFolder,
48  std::string startDate,
49  Ptr<SimulationHelper> simulationHelper)
50 {
52  Config::SetDefault("ns3::SatConf::ForwardLinkRegenerationMode",
54  Config::SetDefault("ns3::SatConf::ReturnLinkRegenerationMode",
56  Config::SetDefault("ns3::SatGeoFeederPhy::QueueSize", UintegerValue(100000));
57  Config::SetDefault("ns3::SatGeoUserPhy::QueueSize", UintegerValue(100000));
58 
60  Config::SetDefault("ns3::SatHelper::SatConstellationEnabled", BooleanValue(true));
61  Config::SetDefault("ns3::SatHelper::SatConstellationFolder", StringValue(configurationFolder));
62  Config::SetDefault("ns3::PointToPointIslHelper::IslDataRate",
63  DataRateValue(DataRate("100Mb/s")));
64  Config::SetDefault("ns3::SatSGP4MobilityModel::StartDateStr", StringValue(startDate));
65  Config::SetDefault("ns3::SatSGP4MobilityModel::UpdatePositionEachRequest", BooleanValue(false));
66  Config::SetDefault("ns3::SatSGP4MobilityModel::UpdatePositionPeriod", TimeValue(Seconds(1)));
67  Config::SetDefault("ns3::SatHelper::GwUsers", UintegerValue(3));
68 
70  Config::SetDefault("ns3::SatBbFrameConf::AcmEnabled", BooleanValue(true));
71 
73  Config::SetDefault("ns3::SatEnvVariables::EnableSimulationOutputOverwrite", BooleanValue(true));
74 
76  Config::SetDefault("ns3::SatHelper::PacketTraceEnabled", BooleanValue(true));
77 
78  simulationHelper->SetSimulationTime(Seconds(30));
79  simulationHelper->SetOutputTag("geo");
80 
81  std::set<uint32_t> beamSetAll = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
82  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
83  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
84  46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
85  61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72};
86 
87  std::set<uint32_t> beamSet = {43, 30};
88 
89  // Set beam ID
90  simulationHelper->SetBeamSet(beamSet);
91  simulationHelper->SetUserCountPerUt(5);
92 
93  LogComponentEnable("sat-constellation-example", LOG_LEVEL_INFO);
94 
95  Ptr<SatHelper> helper = simulationHelper->CreateSatScenario();
96 
97  helper->PrintTopology(std::cout);
98  Singleton<SatIdMapper>::Get()->ShowIslMap();
99 
100  Config::SetDefault("ns3::CbrApplication::Interval", StringValue(interval));
101  Config::SetDefault("ns3::CbrApplication::PacketSize", UintegerValue(packetSize));
102 
103  Time startTime = Seconds(1.0);
104  Time stopTime = Seconds(29.0);
105  Time startDelay = Seconds(0.0);
106 
107  simulationHelper->InstallTrafficModel(SimulationHelper::CBR,
110  startTime,
111  stopTime);
112  simulationHelper->InstallTrafficModel(SimulationHelper::CBR,
115  startTime,
116  stopTime);
117 
118  NS_LOG_INFO("--- sat-constellation-example ---");
119  NS_LOG_INFO(" PacketSize: " << packetSize);
120  NS_LOG_INFO(" Interval: " << interval);
121  NS_LOG_INFO(" ");
122 
123  // To store attributes to file
124  Config::SetDefault("ns3::ConfigStore::Filename", StringValue("output-attributes.xml"));
125  Config::SetDefault("ns3::ConfigStore::FileFormat", StringValue("Xml"));
126  Config::SetDefault("ns3::ConfigStore::Mode", StringValue("Save"));
127  ConfigStore outputConfig;
128  outputConfig.ConfigureDefaults();
129 
130  Ptr<SatStatsHelperContainer> s = simulationHelper->GetStatisticsContainer();
131 
132  // Throughput statistics
133  s->AddPerUtFwdFeederPhyThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
134  s->AddPerUtFwdUserPhyThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
135  s->AddPerUtRtnFeederPhyThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
136  s->AddPerUtRtnUserPhyThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
137 
138  s->AddPerUtFwdFeederMacThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
139  s->AddPerUtFwdUserMacThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
140  s->AddPerUtRtnFeederMacThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
141  s->AddPerUtRtnUserMacThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
142 
143  s->AddPerUtFwdFeederDevThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
144  s->AddPerUtFwdUserDevThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
145  s->AddPerUtRtnFeederDevThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
146  s->AddPerUtRtnUserDevThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
147 
148  s->AddGlobalFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
149  s->AddGlobalRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
150  s->AddPerGwFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
151  s->AddPerGwRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
152  s->AddPerSatFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
153  s->AddPerSatRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
154  s->AddPerBeamFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
155  s->AddPerBeamRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
156  s->AddPerUtFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
157  s->AddPerUtRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
158 
159  // Delay statistics
160  s->AddPerUtFwdPhyDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
161  s->AddPerUtFwdMacDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
162  s->AddPerUtFwdDevDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
163  s->AddPerUtRtnPhyDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
164  s->AddPerUtRtnMacDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
165  s->AddPerUtRtnDevDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
166 
167  // link delay statistics
168  s->AddPerUtFwdFeederPhyLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
169  s->AddPerUtFwdUserPhyLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
170  s->AddPerUtRtnFeederPhyLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
171  s->AddPerUtRtnUserPhyLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
172 
173  s->AddPerUtFwdFeederMacLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
174  s->AddPerUtFwdUserMacLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
175  s->AddPerUtRtnFeederMacLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
176  s->AddPerUtRtnUserMacLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
177 
178  s->AddPerUtFwdFeederDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
179  s->AddPerUtFwdUserDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
180  s->AddPerUtRtnFeederDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
181  s->AddPerUtRtnUserDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
182 
183  // Jitter statistics
184  s->AddPerUtFwdPhyJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
185  s->AddPerUtFwdMacJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
186  s->AddPerUtFwdDevJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
187  s->AddPerUtRtnPhyJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
188  s->AddPerUtRtnMacJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
189  s->AddPerUtRtnDevJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
190 
191  // Link jitter statistics
192  s->AddPerUtFwdFeederPhyLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
193  s->AddPerUtFwdUserPhyLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
194  s->AddPerUtRtnFeederPhyLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
195  s->AddPerUtRtnUserPhyLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
196 
197  s->AddPerUtFwdFeederMacLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
198  s->AddPerUtFwdUserMacLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
199  s->AddPerUtRtnFeederMacLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
200  s->AddPerUtRtnUserMacLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
201 
202  s->AddPerUtFwdFeederDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
203  s->AddPerUtFwdUserDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
204  s->AddPerUtRtnFeederDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
205  s->AddPerUtRtnUserDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
206 
207  // Phy RX statistics
208  s->AddPerUtFwdFeederLinkSinr(SatStatsHelper::OUTPUT_SCATTER_FILE);
209  s->AddPerUtFwdUserLinkSinr(SatStatsHelper::OUTPUT_SCATTER_FILE);
210  s->AddPerUtRtnFeederLinkSinr(SatStatsHelper::OUTPUT_SCATTER_FILE);
211  s->AddPerUtRtnUserLinkSinr(SatStatsHelper::OUTPUT_SCATTER_FILE);
212 
213  s->AddPerUtFwdFeederLinkRxPower(SatStatsHelper::OUTPUT_SCATTER_FILE);
214  s->AddPerUtFwdUserLinkRxPower(SatStatsHelper::OUTPUT_SCATTER_FILE);
215  s->AddPerUtRtnFeederLinkRxPower(SatStatsHelper::OUTPUT_SCATTER_FILE);
216  s->AddPerUtRtnUserLinkRxPower(SatStatsHelper::OUTPUT_SCATTER_FILE);
217 
218  // Other statistics
219  s->AddPerUtFwdFeederLinkModcod(SatStatsHelper::OUTPUT_SCATTER_FILE);
220  s->AddPerUtFwdUserLinkModcod(SatStatsHelper::OUTPUT_SCATTER_FILE);
221  s->AddPerUtRtnFeederLinkModcod(SatStatsHelper::OUTPUT_SCATTER_FILE);
222  s->AddPerUtRtnUserLinkModcod(SatStatsHelper::OUTPUT_SCATTER_FILE);
223 
224  s->AddPerGwRtnFeederQueueBytes(SatStatsHelper::OUTPUT_SCATTER_FILE);
225  s->AddPerSatRtnFeederQueueBytes(SatStatsHelper::OUTPUT_SCATTER_FILE);
226  s->AddPerSatRtnFeederQueuePackets(SatStatsHelper::OUTPUT_SCATTER_FILE);
227 
228  s->AddPerGwFwdUserQueueBytes(SatStatsHelper::OUTPUT_SCATTER_FILE);
229  s->AddPerSatFwdUserQueueBytes(SatStatsHelper::OUTPUT_SCATTER_FILE);
230  s->AddPerSatFwdUserQueuePackets(SatStatsHelper::OUTPUT_SCATTER_FILE);
231 
232  // ISL drop rate statistics
233  s->AddGlobalPacketDropRate(SatStatsHelper::OUTPUT_SCATTER_FILE);
234  s->AddPerIslPacketDropRate(SatStatsHelper::OUTPUT_SCATTER_FILE);
235 
236  simulationHelper->EnableProgressLogs();
237  simulationHelper->RunSimulation();
238 
239  return 0;
240 }
241 
242 int
243 mainLeo(uint32_t packetSize,
244  std::string interval,
245  std::string configurationFolder,
246  std::string startDate,
247  Ptr<SimulationHelper> simulationHelper)
248 {
250  Config::SetDefault("ns3::SatConf::ForwardLinkRegenerationMode",
251  EnumValue(SatEnums::REGENERATION_NETWORK));
252  Config::SetDefault("ns3::SatConf::ReturnLinkRegenerationMode",
253  EnumValue(SatEnums::REGENERATION_NETWORK));
254  Config::SetDefault("ns3::SatGeoFeederPhy::QueueSize", UintegerValue(100000));
255  Config::SetDefault("ns3::SatGeoUserPhy::QueueSize", UintegerValue(100000));
256 
258  Config::SetDefault("ns3::SatHelper::SatConstellationEnabled", BooleanValue(true));
259  Config::SetDefault("ns3::SatHelper::SatConstellationFolder", StringValue(configurationFolder));
260  Config::SetDefault("ns3::PointToPointIslHelper::IslDataRate",
261  DataRateValue(DataRate("100Mb/s")));
262  Config::SetDefault("ns3::SatSGP4MobilityModel::StartDateStr", StringValue(startDate));
263  Config::SetDefault("ns3::SatGwMac::SendNcrBroadcast", BooleanValue(false));
264  Config::SetDefault("ns3::SatSGP4MobilityModel::UpdatePositionEachRequest", BooleanValue(false));
265  Config::SetDefault("ns3::SatSGP4MobilityModel::UpdatePositionPeriod",
266  TimeValue(MilliSeconds(10)));
267  Config::SetDefault("ns3::SatHelper::GwUsers", UintegerValue(3));
268 
270  Config::SetDefault("ns3::SatAntennaGainPatternContainer::PatternsFolder",
271  StringValue("SatAntennaGain72BeamsShifted"));
272 
274  Config::SetDefault("ns3::SatHelper::BeamNetworkAddress", Ipv4AddressValue("20.1.0.0"));
275  Config::SetDefault("ns3::SatHelper::GwNetworkAddress", Ipv4AddressValue("10.1.0.0"));
276  Config::SetDefault("ns3::SatHelper::UtNetworkAddress", Ipv4AddressValue("250.1.0.0"));
277 
279  Config::SetDefault("ns3::SatBbFrameConf::AcmEnabled", BooleanValue(true));
280 
282  Config::SetDefault("ns3::SatEnvVariables::EnableSimulationOutputOverwrite", BooleanValue(true));
283 
285  Config::SetDefault("ns3::SatHelper::PacketTraceEnabled", BooleanValue(true));
286 
287  simulationHelper->SetSimulationTime(Seconds(10));
288  simulationHelper->SetOutputTag("leo");
289 
290  std::set<uint32_t> beamSetAll = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
291  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
292  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
293  46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
294  61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72};
295 
296  std::set<uint32_t> beamSetTelesat = {1, 43, 60, 64};
297 
298  // Set beam ID
299  if (configurationFolder == "telesat-351-sats")
300  {
301  simulationHelper->SetBeamSet(beamSetTelesat);
302  }
303  else
304  {
305  simulationHelper->SetBeamSet(beamSetAll);
306  }
307  simulationHelper->SetUserCountPerUt(2);
308 
309  LogComponentEnable("sat-constellation-example", LOG_LEVEL_INFO);
310 
311  Ptr<SatHelper> helper = simulationHelper->CreateSatScenario();
312 
313  helper->PrintTopology(std::cout);
314  Singleton<SatIdMapper>::Get()->ShowIslMap();
315 
316  Config::SetDefault("ns3::CbrApplication::Interval", StringValue(interval));
317  Config::SetDefault("ns3::CbrApplication::PacketSize", UintegerValue(packetSize));
318 
319  Time startTime = Seconds(1.0);
320  Time stopTime = Seconds(9.0);
321  Time startDelay = Seconds(0.0);
322 
323  NodeContainer gws = helper->GwNodes(); // 3 GWs
324  NodeContainer uts = helper->UtNodes(); // 3 UTs
325  NodeContainer gwUsers = helper->GetGwUsers(); // 3 GW users
326  NodeContainer utUsers = helper->GetUtUsers(uts); // 6 UT users
327 
328  // Total is 3*6 = 18 flows
329  // Global App rate is pktSize*ptkPerSecond*nbFlows = 512*8*50*18 = 3686kb/s on both FWD and RTN
330  Ptr<SatTrafficHelper> trafficHelper = simulationHelper->GetTrafficHelper();
331 
332  trafficHelper->AddCbrTraffic(SatTrafficHelper::FWD_LINK,
333  interval,
334  packetSize,
335  gwUsers,
336  utUsers,
337  startTime,
338  stopTime,
339  startDelay);
340 
341  trafficHelper->AddCbrTraffic(SatTrafficHelper::RTN_LINK,
342  interval,
343  packetSize,
344  gwUsers,
345  utUsers,
346  startTime,
347  stopTime,
348  startDelay);
349 
350  NS_LOG_INFO("--- sat-constellation-example ---");
351  NS_LOG_INFO(" PacketSize: " << packetSize);
352  NS_LOG_INFO(" Interval: " << interval);
353  NS_LOG_INFO(" ");
354 
355  // To store attributes to file
356  Config::SetDefault("ns3::ConfigStore::Filename", StringValue("output-attributes.xml"));
357  Config::SetDefault("ns3::ConfigStore::FileFormat", StringValue("Xml"));
358  Config::SetDefault("ns3::ConfigStore::Mode", StringValue("Save"));
359  ConfigStore outputConfig;
360  outputConfig.ConfigureDefaults();
361 
362  Ptr<SatStatsHelperContainer> s = simulationHelper->GetStatisticsContainer();
363 
364  // Throughput statistics not in TrafficHelper
365  s->AddPerSatFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
366  s->AddPerSatRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
367  s->AddPerBeamFwdAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
368  s->AddPerBeamRtnAppThroughput(SatStatsHelper::OUTPUT_SCATTER_FILE);
369 
370  // Delay statistics
371  s->AddPerUtFwdDevDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
372  s->AddPerUtRtnDevDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
373 
374  // Link delay statistics
375  s->AddPerUtFwdFeederDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
376  s->AddPerUtFwdUserDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
377  s->AddPerUtRtnFeederDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
378  s->AddPerUtRtnUserDevLinkDelay(SatStatsHelper::OUTPUT_SCATTER_FILE);
379 
380  // Jitter statistics
381  s->AddPerUtFwdDevJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
382  s->AddPerUtRtnDevJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
383 
384  // Link jitter statistics
385  s->AddPerUtFwdFeederDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
386  s->AddPerUtFwdUserDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
387  s->AddPerUtRtnFeederDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
388  s->AddPerUtRtnUserDevLinkJitter(SatStatsHelper::OUTPUT_SCATTER_FILE);
389 
390  // ISL drop rate statistics
391  s->AddGlobalPacketDropRate(SatStatsHelper::OUTPUT_SCATTER_FILE);
392  s->AddPerIslPacketDropRate(SatStatsHelper::OUTPUT_SCATTER_FILE);
393 
394  simulationHelper->EnableProgressLogs();
395  simulationHelper->RunSimulation();
396 
397  return 0;
398 }
399 
400 int
401 main(int argc, char* argv[])
402 {
403  uint32_t packetSize = 512;
404  std::string interval = "20ms";
405  std::string configurationFolder = "eutelsat-geo-2-sats-isls";
406  std::string startDate = "2022-11-13 12:00:00";
407 
408  Ptr<SimulationHelper> simulationHelper =
409  CreateObject<SimulationHelper>("example-constellation");
410 
411  // read command line parameters given by user
412  CommandLine cmd;
413  cmd.AddValue("packetSize", "Size of constant packet (bytes)", packetSize);
414  cmd.AddValue("interval", "Interval to sent packets in seconds (e.g. (1s))", interval);
415  cmd.AddValue("configurationFolder",
416  "Satellite constellation configuration folder (e.g. eutelsat-geo-2-sats-isls)",
417  configurationFolder);
418  cmd.AddValue("startDate", "Simulation start date (e.g. 2022-11-13 12:00:00)", startDate);
419  simulationHelper->AddDefaultUiArguments(cmd);
420  cmd.Parse(argc, argv);
421 
422  // TODO find better way to handle this
423  std::replace(startDate.begin(), startDate.end(), ',', ' ');
424 
425  if (configurationFolder == "eutelsat-geo-2-sats-isls" ||
426  configurationFolder == "eutelsat-geo-2-sats-no-isls")
427  {
428  mainGeoTwoSats(packetSize, interval, configurationFolder, startDate, simulationHelper);
429  }
430  else if (configurationFolder == "starlink-1584-sats" ||
431  configurationFolder == "kuiper-1156-sats" ||
432  configurationFolder == "telesat-351-sats" ||
433  configurationFolder == "iridium-next-66-sats")
434  {
435  mainLeo(packetSize, interval, configurationFolder, startDate, simulationHelper);
436  }
437  else
438  {
439  NS_FATAL_ERROR("Unknown constellation: " << configurationFolder);
440  }
441 }
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
int mainGeoTwoSats(uint32_t packetSize, std::string interval, std::string configurationFolder, std::string startDate, Ptr< SimulationHelper > simulationHelper)
int mainLeo(uint32_t packetSize, std::string interval, std::string configurationFolder, std::string startDate, Ptr< SimulationHelper > simulationHelper)