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"
42 NS_LOG_COMPONENT_DEFINE(
"sat-constellation-example");
47 std::string configurationFolder,
48 std::string startDate,
49 Ptr<SimulationHelper> simulationHelper)
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));
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));
70 Config::SetDefault(
"ns3::SatBbFrameConf::AcmEnabled", BooleanValue(
true));
73 Config::SetDefault(
"ns3::SatEnvVariables::EnableSimulationOutputOverwrite", BooleanValue(
true));
76 Config::SetDefault(
"ns3::SatHelper::PacketTraceEnabled", BooleanValue(
true));
78 simulationHelper->SetSimulationTime(Seconds(30));
79 simulationHelper->SetOutputTag(
"geo");
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};
87 std::set<uint32_t> beamSet = {43, 30};
90 simulationHelper->SetBeamSet(beamSet);
91 simulationHelper->SetUserCountPerUt(5);
93 LogComponentEnable(
"sat-constellation-example", LOG_LEVEL_INFO);
95 Ptr<SatHelper> helper = simulationHelper->CreateSatScenario();
97 helper->PrintTopology(std::cout);
98 Singleton<SatIdMapper>::Get()->ShowIslMap();
100 Config::SetDefault(
"ns3::CbrApplication::Interval", StringValue(interval));
101 Config::SetDefault(
"ns3::CbrApplication::PacketSize", UintegerValue(packetSize));
103 Time startTime = Seconds(1.0);
104 Time stopTime = Seconds(29.0);
105 Time startDelay = Seconds(0.0);
118 NS_LOG_INFO(
"--- sat-constellation-example ---");
119 NS_LOG_INFO(
" PacketSize: " << packetSize);
120 NS_LOG_INFO(
" Interval: " << interval);
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();
130 Ptr<SatStatsHelperContainer> s = simulationHelper->GetStatisticsContainer();
236 simulationHelper->EnableProgressLogs();
237 simulationHelper->RunSimulation();
244 std::string interval,
245 std::string configurationFolder,
246 std::string startDate,
247 Ptr<SimulationHelper> simulationHelper)
250 Config::SetDefault(
"ns3::SatConf::ForwardLinkRegenerationMode",
252 Config::SetDefault(
"ns3::SatConf::ReturnLinkRegenerationMode",
254 Config::SetDefault(
"ns3::SatGeoFeederPhy::QueueSize", UintegerValue(100000));
255 Config::SetDefault(
"ns3::SatGeoUserPhy::QueueSize", UintegerValue(100000));
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));
270 Config::SetDefault(
"ns3::SatAntennaGainPatternContainer::PatternsFolder",
271 StringValue(
"SatAntennaGain72BeamsShifted"));
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"));
279 Config::SetDefault(
"ns3::SatBbFrameConf::AcmEnabled", BooleanValue(
true));
282 Config::SetDefault(
"ns3::SatEnvVariables::EnableSimulationOutputOverwrite", BooleanValue(
true));
285 Config::SetDefault(
"ns3::SatHelper::PacketTraceEnabled", BooleanValue(
true));
287 simulationHelper->SetSimulationTime(Seconds(10));
288 simulationHelper->SetOutputTag(
"leo");
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};
296 std::set<uint32_t> beamSetTelesat = {1, 43, 60, 64};
299 if (configurationFolder ==
"telesat-351-sats")
301 simulationHelper->SetBeamSet(beamSetTelesat);
305 simulationHelper->SetBeamSet(beamSetAll);
307 simulationHelper->SetUserCountPerUt(2);
309 LogComponentEnable(
"sat-constellation-example", LOG_LEVEL_INFO);
311 Ptr<SatHelper> helper = simulationHelper->CreateSatScenario();
313 helper->PrintTopology(std::cout);
314 Singleton<SatIdMapper>::Get()->ShowIslMap();
316 Config::SetDefault(
"ns3::CbrApplication::Interval", StringValue(interval));
317 Config::SetDefault(
"ns3::CbrApplication::PacketSize", UintegerValue(packetSize));
319 Time startTime = Seconds(1.0);
320 Time stopTime = Seconds(9.0);
321 Time startDelay = Seconds(0.0);
323 NodeContainer gws = helper->GwNodes();
324 NodeContainer uts = helper->UtNodes();
325 NodeContainer gwUsers = helper->GetGwUsers();
326 NodeContainer utUsers = helper->GetUtUsers(uts);
330 Ptr<SatTrafficHelper> trafficHelper = simulationHelper->GetTrafficHelper();
350 NS_LOG_INFO(
"--- sat-constellation-example ---");
351 NS_LOG_INFO(
" PacketSize: " << packetSize);
352 NS_LOG_INFO(
" Interval: " << interval);
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();
362 Ptr<SatStatsHelperContainer> s = simulationHelper->GetStatisticsContainer();
394 simulationHelper->EnableProgressLogs();
395 simulationHelper->RunSimulation();
401 main(
int argc,
char* argv[])
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";
408 Ptr<SimulationHelper> simulationHelper =
409 CreateObject<SimulationHelper>(
"example-constellation");
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);
423 std::replace(startDate.begin(), startDate.end(),
',',
' ');
425 if (configurationFolder ==
"eutelsat-geo-2-sats-isls" ||
426 configurationFolder ==
"eutelsat-geo-2-sats-no-isls")
428 mainGeoTwoSats(packetSize, interval, configurationFolder, startDate, simulationHelper);
430 else if (configurationFolder ==
"starlink-1584-sats" ||
431 configurationFolder ==
"kuiper-1156-sats" ||
432 configurationFolder ==
"telesat-351-sats" ||
433 configurationFolder ==
"iridium-next-66-sats")
435 mainLeo(packetSize, interval, configurationFolder, startDate, simulationHelper);
439 NS_FATAL_ERROR(
"Unknown constellation: " << configurationFolder);
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)