24 #include <ns3/application-delay-probe.h>
25 #include <ns3/application.h>
26 #include <ns3/boolean.h>
27 #include <ns3/callback.h>
28 #include <ns3/data-collection-object.h>
29 #include <ns3/distribution-collector.h>
31 #include <ns3/inet-socket-address.h>
34 #include <ns3/mac48-address.h>
35 #include <ns3/magister-gnuplot-aggregator.h>
36 #include <ns3/multi-file-aggregator.h>
37 #include <ns3/net-device.h>
38 #include <ns3/node-container.h>
39 #include <ns3/nstime.h>
40 #include <ns3/probe.h>
41 #include <ns3/satellite-geo-net-device.h>
42 #include <ns3/satellite-helper.h>
43 #include <ns3/satellite-id-mapper.h>
44 #include <ns3/satellite-mac.h>
45 #include <ns3/satellite-net-device.h>
46 #include <ns3/satellite-phy.h>
47 #include <ns3/satellite-time-tag.h>
48 #include <ns3/scalar-collector.h>
49 #include <ns3/singleton.h>
50 #include <ns3/string.h>
51 #include <ns3/traffic-time-tag.h>
52 #include <ns3/unit-conversion-collector.h>
56 NS_LOG_COMPONENT_DEFINE(
"SatStatsLinkJitterHelper");
61 NS_OBJECT_ENSURE_REGISTERED(SatStatsLinkJitterHelper);
65 m_averagingMode(false)
67 NS_LOG_FUNCTION(
this << satHelper);
72 NS_LOG_FUNCTION(
this);
79 TypeId(
"ns3::SatStatsLinkJitterHelper")
81 .AddAttribute(
"AveragingMode",
82 "If true, all samples will be averaged before passed to aggregator. "
83 "Only affects histogram, PDF, and CDF output types.",
87 MakeBooleanChecker());
94 NS_LOG_FUNCTION(
this << averagingMode);
107 NS_LOG_FUNCTION(
this);
113 <<
" is not a valid output type for this statistics.");
123 "EnableContextPrinting",
131 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
134 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
138 &MultiFileAggregator::Write1d);
153 EnumValue(UnitConversionCollector::TRANSPARENT));
157 &MultiFileAggregator::Write2d);
172 "EnableContextPrinting",
176 Ptr<MultiFileAggregator> fileAggregator =
178 NS_ASSERT(fileAggregator !=
nullptr);
182 DistributionCollector::OutputType_t outputType =
183 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
186 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
190 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
197 MakeCallback(&MultiFileAggregator::Write2d, fileAggregator));
201 MakeCallback(&MultiFileAggregator::AddContextHeading, fileAggregator));
205 MakeCallback(&MultiFileAggregator::EnableContextWarning, fileAggregator));
210 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
213 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
215 Callback<void, double> callback =
221 it->second->TraceConnectWithoutContext(
"Output", callback);
235 DistributionCollector::OutputType_t outputType =
236 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
239 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
243 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
249 &MultiFileAggregator::Write2d);
252 &MultiFileAggregator::AddContextHeading);
255 &MultiFileAggregator::EnableContextWarning);
264 <<
" is not a valid output type for this statistics.");
274 Ptr<MagisterGnuplotAggregator> plotAggregator =
276 NS_ASSERT(plotAggregator !=
nullptr);
278 plotAggregator->SetLegend(
"Time (in seconds)",
"Packet jitter (in seconds)");
279 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
284 EnumValue(UnitConversionCollector::TRANSPARENT));
290 const std::string context = it->second->GetName();
291 plotAggregator->Add2dDataset(context, context);
295 &MagisterGnuplotAggregator::Write2d);
310 Ptr<MagisterGnuplotAggregator> plotAggregator =
312 NS_ASSERT(plotAggregator !=
nullptr);
314 plotAggregator->SetLegend(
"Packet jitter (in seconds)",
"Frequency");
315 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
321 DistributionCollector::OutputType_t outputType =
322 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
325 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
329 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
336 MakeCallback(&MagisterGnuplotAggregator::Write2d, plotAggregator));
342 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
345 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
347 Callback<void, double> callback =
353 it->second->TraceConnectWithoutContext(
"Output", callback);
364 Ptr<MagisterGnuplotAggregator> plotAggregator =
366 NS_ASSERT(plotAggregator !=
nullptr);
368 plotAggregator->SetLegend(
"Packet jitter (in seconds)",
"Frequency");
369 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
373 DistributionCollector::OutputType_t outputType =
374 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
377 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
381 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
389 const std::string context = it->second->GetName();
390 plotAggregator->Add2dDataset(context, context);
394 &MagisterGnuplotAggregator::Write2d);
401 NS_FATAL_ERROR(
"SatStatsLinkJitterHelper - Invalid output type");
422 if (from.IsInvalid())
424 NS_LOG_WARN(
this <<
" discarding a packet jitter of " << jitter.GetSeconds()
425 <<
" from statistics collection because of"
426 <<
" invalid sender address");
428 else if (Mac48Address::ConvertFrom(from).IsBroadcast())
438 std::map<const Address, uint32_t>::const_iterator it =
m_identifierMap.find(from);
446 NS_LOG_WARN(
this <<
" discarding a packet jitter of " << jitter.GetSeconds()
447 <<
" from statistics collection because of"
448 <<
" unknown sender address " << from);
456 NS_LOG_FUNCTION(
this << utNode->GetId());
458 const SatIdMapper* satIdMapper = Singleton<SatIdMapper>::Get();
461 if (addr.IsInvalid())
463 NS_LOG_WARN(
this <<
" Node " << utNode->GetId() <<
" is not a valid UT");
469 NS_LOG_INFO(
this <<
" associated address " << addr <<
" with identifier " << identifier);
476 NS_LOG_FUNCTION(
this << probe << probe->GetName() << identifier);
486 &ScalarCollector::TraceSinkDouble);
494 &UnitConversionCollector::TraceSinkDouble);
508 &ScalarCollector::TraceSinkDouble);
515 &DistributionCollector::TraceSinkDouble);
521 <<
" is not a valid output type for this statistics.");
527 NS_LOG_INFO(
this <<
" created probe " << probe->GetName() <<
", connected to collector "
532 NS_LOG_WARN(
this <<
" unable to connect probe " << probe->GetName() <<
" to collector "
545 NS_ASSERT_MSG(collector !=
nullptr,
"Unable to find collector with identifier " << identifier);
551 Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
552 NS_ASSERT(c !=
nullptr);
553 c->TraceSinkDouble(0.0, jitter.GetSeconds());
559 Ptr<UnitConversionCollector> c = collector->GetObject<UnitConversionCollector>();
560 NS_ASSERT(c !=
nullptr);
561 c->TraceSinkDouble(0.0, jitter.GetSeconds());
573 Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
574 NS_ASSERT(c !=
nullptr);
575 c->TraceSinkDouble(0.0, jitter.GetSeconds());
579 Ptr<DistributionCollector> c = collector->GetObject<DistributionCollector>();
580 NS_ASSERT(c !=
nullptr);
581 c->TraceSinkDouble(0.0, jitter.GetSeconds());
587 <<
" is not a valid output type for this statistics.");
605 Ptr<const SatHelper> satHelper)
608 NS_LOG_FUNCTION(
this << satHelper);
613 NS_LOG_FUNCTION(
this);
627 NS_LOG_FUNCTION(
this);
629 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
630 Callback<void, const Time&, const Address&> callback =
633 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
637 NS_ASSERT(satGeoDev !=
nullptr);
638 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
639 if (satGeoDev->TraceConnectWithoutContext(
"RxFeederLinkJitter", callback))
641 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
642 <<
" device #" << satGeoDev->GetIfIndex());
646 NS_FATAL_ERROR(
"Error connecting to RxFeederLinkJitter trace source of SatNetDevice"
647 <<
" at node ID " << (*it)->GetId() <<
" device #"
648 << satGeoDev->GetIfIndex());
652 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
654 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
660 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
661 NS_ASSERT(satDev !=
nullptr);
663 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
668 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
669 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
673 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
675 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
676 NS_ASSERT(satDev !=
nullptr);
678 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
689 Ptr<const SatHelper> satHelper)
692 NS_LOG_FUNCTION(
this << satHelper);
697 NS_LOG_FUNCTION(
this);
711 NS_LOG_FUNCTION(
this);
713 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
715 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
719 NS_ASSERT(satGeoDev !=
nullptr);
720 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
723 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
725 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
727 const int32_t utId =
GetUtId(*it);
728 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
732 std::ostringstream probeName;
734 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
735 probe->SetName(probeName.str());
738 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
739 NS_ASSERT(satDev !=
nullptr);
742 if (probe->ConnectByObject(
"RxLinkJitter", satDev) &&
745 m_probes.push_back(probe->GetObject<Probe>());
748 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
752 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatMac"
753 <<
" at node ID " << (*it)->GetId() <<
" device #2");
759 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
760 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
764 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
766 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
767 NS_ASSERT(satDev !=
nullptr);
769 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
780 Ptr<const SatHelper> satHelper)
783 NS_LOG_FUNCTION(
this << satHelper);
788 NS_LOG_FUNCTION(
this);
802 NS_LOG_FUNCTION(
this);
804 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
805 Callback<void, const Time&, const Address&> callback =
808 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
812 NS_ASSERT(satGeoDev !=
nullptr);
813 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
814 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
816 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
817 it2 != satGeoFeederMacs.end();
820 satMac = it2->second;
821 NS_ASSERT(satMac !=
nullptr);
822 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
825 if (satMac->TraceConnectWithoutContext(
"RxLinkJitter", callback))
827 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
828 <<
" device #" << satGeoDev->GetIfIndex());
831 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
835 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
836 <<
" at node ID " << (*it)->GetId() <<
" device #"
837 << satGeoDev->GetIfIndex());
840 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
841 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
842 it2 != satGeoUserMacs.end();
845 satMac = it2->second;
846 NS_ASSERT(satMac !=
nullptr);
847 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
851 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
853 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
859 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
860 NS_ASSERT(satDev !=
nullptr);
861 Ptr<SatMac> satMac = satDev->GetMac();
862 NS_ASSERT(satMac !=
nullptr);
864 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
865 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
870 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
871 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
875 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
877 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
878 NS_ASSERT(satDev !=
nullptr);
879 Ptr<SatMac> satMac = satDev->GetMac();
880 NS_ASSERT(satMac !=
nullptr);
882 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
883 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
894 Ptr<const SatHelper> satHelper)
897 NS_LOG_FUNCTION(
this << satHelper);
902 NS_LOG_FUNCTION(
this);
916 NS_LOG_FUNCTION(
this);
918 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
920 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
924 NS_ASSERT(satGeoDev !=
nullptr);
925 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
926 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
928 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
929 it2 != satGeoFeederMacs.end();
932 satMac = it2->second;
933 NS_ASSERT(satMac !=
nullptr);
934 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
936 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
937 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
938 it2 != satGeoUserMacs.end();
941 satMac = it2->second;
942 NS_ASSERT(satMac !=
nullptr);
943 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
947 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
949 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
951 const int32_t utId =
GetUtId(*it);
952 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
956 std::ostringstream probeName;
958 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
959 probe->SetName(probeName.str());
962 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
963 NS_ASSERT(satDev !=
nullptr);
964 Ptr<SatMac> satMac = satDev->GetMac();
965 NS_ASSERT(satMac !=
nullptr);
968 if (probe->ConnectByObject(
"RxLinkJitter", satMac) &&
971 m_probes.push_back(probe->GetObject<Probe>());
974 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
975 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
979 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatMac"
980 <<
" at node ID " << (*it)->GetId() <<
" device #2");
986 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
987 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
991 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
993 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
994 NS_ASSERT(satDev !=
nullptr);
995 Ptr<SatMac> satMac = satDev->GetMac();
996 NS_ASSERT(satMac !=
nullptr);
998 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
999 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1010 Ptr<const SatHelper> satHelper)
1013 NS_LOG_FUNCTION(
this << satHelper);
1020 NS_LOG_FUNCTION(
this);
1034 NS_LOG_FUNCTION(
this);
1036 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1037 Callback<void, const Time&, const Address&> callback =
1040 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1044 NS_ASSERT(satGeoDev !=
nullptr);
1045 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1046 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1048 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1049 it2 != satGeoFeederPhys.end();
1052 satPhy = it2->second;
1053 NS_ASSERT(satPhy !=
nullptr);
1054 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1057 if (satPhy->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1059 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1060 <<
" device #" << satGeoDev->GetIfIndex());
1063 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1067 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1068 <<
" at node ID " << (*it)->GetId() <<
" device #"
1069 << satGeoDev->GetIfIndex());
1072 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1073 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1074 it2 != satGeoUserPhys.end();
1077 satPhy = it2->second;
1078 NS_ASSERT(satPhy !=
nullptr);
1079 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1083 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1085 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1091 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1092 NS_ASSERT(satDev !=
nullptr);
1093 Ptr<SatPhy> satPhy = satDev->GetPhy();
1094 NS_ASSERT(satPhy !=
nullptr);
1096 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1097 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1102 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1103 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1107 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1109 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1110 NS_ASSERT(satDev !=
nullptr);
1111 Ptr<SatPhy> satPhy = satDev->GetPhy();
1112 NS_ASSERT(satPhy !=
nullptr);
1114 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1115 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1126 Ptr<const SatHelper> satHelper)
1129 NS_LOG_FUNCTION(
this << satHelper);
1136 NS_LOG_FUNCTION(
this);
1150 NS_LOG_FUNCTION(
this);
1152 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1154 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1158 NS_ASSERT(satGeoDev !=
nullptr);
1159 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1160 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1162 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1163 it2 != satGeoFeederPhys.end();
1166 satPhy = it2->second;
1167 NS_ASSERT(satPhy !=
nullptr);
1168 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1170 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1171 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1172 it2 != satGeoUserPhys.end();
1175 satPhy = it2->second;
1176 NS_ASSERT(satPhy !=
nullptr);
1177 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1181 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1183 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1185 const int32_t utId =
GetUtId(*it);
1186 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
1190 std::ostringstream probeName;
1192 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
1193 probe->SetName(probeName.str());
1196 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1197 NS_ASSERT(satDev !=
nullptr);
1198 Ptr<SatPhy> satPhy = satDev->GetPhy();
1199 NS_ASSERT(satPhy !=
nullptr);
1202 if (probe->ConnectByObject(
"RxLinkJitter", satPhy) &&
1205 m_probes.push_back(probe->GetObject<Probe>());
1208 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1209 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1213 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatPhy"
1214 <<
" at node ID " << (*it)->GetId() <<
" device #2");
1220 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1221 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1225 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1227 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1228 NS_ASSERT(satDev !=
nullptr);
1229 Ptr<SatPhy> satPhy = satDev->GetPhy();
1230 NS_ASSERT(satPhy !=
nullptr);
1232 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1233 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1244 Ptr<const SatHelper> satHelper)
1247 NS_LOG_FUNCTION(
this << satHelper);
1252 NS_LOG_FUNCTION(
this);
1266 NS_LOG_FUNCTION(
this);
1268 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1270 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1275 NS_ASSERT(satGeoDev !=
nullptr);
1276 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1279 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1280 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1287 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1288 NS_ASSERT(satDev !=
nullptr);
1289 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1294 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1295 Callback<void, const Time&, const Address&> callback =
1298 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1302 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1304 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1305 NS_ASSERT(satDev !=
nullptr);
1308 if (satDev->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1310 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1311 <<
" device #" << satDev->GetIfIndex());
1314 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1318 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1319 <<
" at node ID " << (*it)->GetId() <<
" device #"
1320 << satDev->GetIfIndex());
1334 Ptr<const SatHelper> satHelper)
1337 NS_LOG_FUNCTION(
this << satHelper);
1342 NS_LOG_FUNCTION(
this);
1356 NS_LOG_FUNCTION(
this);
1358 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1359 Callback<void, const Time&, const Address&> callback =
1362 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1366 NS_ASSERT(satGeoDev !=
nullptr);
1367 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1370 if (satGeoDev->TraceConnectWithoutContext(
"RxUserLinkJitter", callback))
1372 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1373 <<
" device #" << satGeoDev->GetIfIndex());
1377 NS_FATAL_ERROR(
"Error connecting to RxUserLinkJitter trace source of SatNetDevice"
1378 <<
" at node ID " << (*it)->GetId() <<
" device #"
1379 << satGeoDev->GetIfIndex());
1383 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1384 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1391 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1392 NS_ASSERT(satDev !=
nullptr);
1393 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1398 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1400 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1404 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1406 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1407 NS_ASSERT(satDev !=
nullptr);
1409 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1421 Ptr<const SatHelper> satHelper)
1424 NS_LOG_FUNCTION(
this << satHelper);
1429 NS_LOG_FUNCTION(
this);
1443 NS_LOG_FUNCTION(
this);
1445 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1447 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1452 NS_ASSERT(satGeoDev !=
nullptr);
1453 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1454 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
1455 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
1456 it2 != satGeoFeederMacs.end();
1459 satMac = it2->second;
1460 NS_ASSERT(satMac !=
nullptr);
1461 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1463 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
1464 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
1465 it2 != satGeoUserMacs.end();
1468 satMac = it2->second;
1469 NS_ASSERT(satMac !=
nullptr);
1470 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1474 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1475 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1482 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1483 NS_ASSERT(satDev !=
nullptr);
1484 Ptr<SatMac> satMac = satDev->GetMac();
1485 NS_ASSERT(satMac !=
nullptr);
1486 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1487 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1492 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1493 Callback<void, const Time&, const Address&> callback =
1496 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1500 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1502 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1503 NS_ASSERT(satDev !=
nullptr);
1504 Ptr<SatMac> satMac = satDev->GetMac();
1505 NS_ASSERT(satMac !=
nullptr);
1508 if (satMac->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1510 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1511 <<
" device #" << satDev->GetIfIndex());
1514 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1515 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1519 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1520 <<
" at node ID " << (*it)->GetId() <<
" device #"
1521 << satDev->GetIfIndex());
1535 Ptr<const SatHelper> satHelper)
1538 NS_LOG_FUNCTION(
this << satHelper);
1543 NS_LOG_FUNCTION(
this);
1557 NS_LOG_FUNCTION(
this);
1559 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1560 Callback<void, const Time&, const Address&> callback =
1563 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1567 NS_ASSERT(satGeoDev !=
nullptr);
1568 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1569 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
1571 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
1572 it2 != satGeoFeederMacs.end();
1575 satMac = it2->second;
1576 NS_ASSERT(satMac !=
nullptr);
1577 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1579 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
1580 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
1581 it2 != satGeoUserMacs.end();
1584 satMac = it2->second;
1585 NS_ASSERT(satMac !=
nullptr);
1586 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1589 if (satMac->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1591 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1592 <<
" device #" << satGeoDev->GetIfIndex());
1596 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1597 <<
" at node ID " << (*it)->GetId() <<
" device #"
1598 << satGeoDev->GetIfIndex());
1603 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1604 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1611 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1612 NS_ASSERT(satDev !=
nullptr);
1613 Ptr<SatMac> satMac = satDev->GetMac();
1614 NS_ASSERT(satMac !=
nullptr);
1615 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1616 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1621 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1623 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1627 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1629 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1630 NS_ASSERT(satDev !=
nullptr);
1631 Ptr<SatMac> satMac = satDev->GetMac();
1632 NS_ASSERT(satMac !=
nullptr);
1634 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1635 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1647 Ptr<const SatHelper> satHelper)
1650 NS_LOG_FUNCTION(
this << satHelper);
1657 NS_LOG_FUNCTION(
this);
1671 NS_LOG_FUNCTION(
this);
1673 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1675 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1680 NS_ASSERT(satGeoDev !=
nullptr);
1681 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1682 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1683 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1684 it2 != satGeoFeederPhys.end();
1687 satPhy = it2->second;
1688 NS_ASSERT(satPhy !=
nullptr);
1689 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1691 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1692 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1693 it2 != satGeoUserPhys.end();
1696 satPhy = it2->second;
1697 NS_ASSERT(satPhy !=
nullptr);
1698 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1702 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1703 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1710 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1711 NS_ASSERT(satDev !=
nullptr);
1712 Ptr<SatPhy> satPhy = satDev->GetPhy();
1713 NS_ASSERT(satPhy !=
nullptr);
1714 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1715 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1720 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1721 Callback<void, const Time&, const Address&> callback =
1724 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1728 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1730 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1731 NS_ASSERT(satDev !=
nullptr);
1732 Ptr<SatPhy> satPhy = satDev->GetPhy();
1733 NS_ASSERT(satPhy !=
nullptr);
1736 if (satPhy->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1738 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1739 <<
" device #" << satDev->GetIfIndex());
1742 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1743 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1747 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1748 <<
" at node ID " << (*it)->GetId() <<
" device #"
1749 << satDev->GetIfIndex());
1763 Ptr<const SatHelper> satHelper)
1766 NS_LOG_FUNCTION(
this << satHelper);
1773 NS_LOG_FUNCTION(
this);
1787 NS_LOG_FUNCTION(
this);
1789 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1790 Callback<void, const Time&, const Address&> callback =
1793 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1797 NS_ASSERT(satGeoDev !=
nullptr);
1798 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1799 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1801 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1802 it2 != satGeoFeederPhys.end();
1805 satPhy = it2->second;
1806 NS_ASSERT(satPhy !=
nullptr);
1807 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1809 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1810 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1811 it2 != satGeoUserPhys.end();
1814 satPhy = it2->second;
1815 NS_ASSERT(satPhy !=
nullptr);
1816 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1819 if (satPhy->TraceConnectWithoutContext(
"RxLinkJitter", callback))
1821 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1822 <<
" device #" << satGeoDev->GetIfIndex());
1826 NS_FATAL_ERROR(
"Error connecting to RxLinkJitter trace source of SatNetDevice"
1827 <<
" at node ID " << (*it)->GetId() <<
" device #"
1828 << satGeoDev->GetIfIndex());
1833 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1834 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1841 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1842 NS_ASSERT(satDev !=
nullptr);
1843 Ptr<SatPhy> satPhy = satDev->GetPhy();
1844 NS_ASSERT(satPhy !=
nullptr);
1845 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1846 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1851 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1853 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1857 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1859 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1860 NS_ASSERT(satDev !=
nullptr);
1861 Ptr<SatPhy> satPhy = satDev->GetPhy();
1862 NS_ASSERT(satPhy !=
nullptr);
1864 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1865 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
ChannelType_t
Types of channel.
SatGeoNetDevice to be utilized in geostationary satellite.
Address GetUtMacWithNode(Ptr< Node > utNode) const
SatNetDevice to be utilized in the UT and GW nodes.
Produce forward feeder link DEV-level jitter statistics from a satellite module simulation.
SatStatsFwdFeederDevLinkJitterHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdFeederDevLinkJitterHelper()
/ Destructor.
Produce forward feeder link MAC-level jitter statistics from a satellite module simulation.
SatStatsFwdFeederMacLinkJitterHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdFeederMacLinkJitterHelper()
/ Destructor.
Produce forward feeder link PHY-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsFwdFeederPhyLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsFwdFeederPhyLinkJitterHelper()
/ Destructor.
Produce forward user link DEV-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsFwdUserDevLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsFwdUserDevLinkJitterHelper()
/ Destructor.
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
Produce forward user link MAC-level jitter statistics from a satellite module simulation.
virtual ~SatStatsFwdUserMacLinkJitterHelper()
/ Destructor.
SatStatsFwdUserMacLinkJitterHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
Produce forward user link PHY-level jitter statistics from a satellite module simulation.
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
virtual ~SatStatsFwdUserPhyLinkJitterHelper()
/ Destructor.
SatStatsFwdUserPhyLinkJitterHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
Parent abstract class of all satellite statistics helpers.
Ptr< const SatHelper > GetSatHelper() const
static NetDeviceContainer GetGwSatNetDevice(Ptr< Node > gwNode)
static std::string GetOutputTypeName(OutputType_t outputType)
static Ptr< NetDevice > GetSatSatGeoNetDevice(Ptr< Node > satNode)
virtual std::string GetIdentifierHeading(std::string dataLabel) const
virtual std::string GetOutputPath() const
Ptr< DataCollectionObject > CreateAggregator(std::string aggregatorTypeId, 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())
Create the aggregator according to the output type.
virtual std::string GetOutputFileName() const
Compute the path and file name where statistics output should be written to.
uint32_t GetUtId(Ptr< Node > utNode) const
uint32_t CreateCollectorPerIdentifier(CollectorMap &collectorMap) const
Create one collector instance for each identifier in the simulation.
static Ptr< NetDevice > GetUtSatNetDevice(Ptr< Node > utNode)
OutputType_t GetOutputType() const
uint32_t GetIdentifierForUt(Ptr< Node > utNode) const
std::string GetName() const
virtual std::string GetTimeHeading(std::string dataLabel) const
virtual std::string GetDistributionHeading(std::string dataLabel) const
Base class for jitter statistics helpers.
void SetAveragingMode(bool averagingMode)
virtual ~SatStatsLinkJitterHelper()
/ Destructor.
Ptr< DistributionCollector > m_averagingCollector
The final collector utilized in averaged output (histogram, PDF, and CDF).
CollectorMap m_terminalCollectors
Maintains a list of collectors created by this helper.
void SaveAddressAndIdentifier(Ptr< Node > utNode)
Save the address and the proper identifier from the given UT node.
std::map< const Address, uint32_t > m_identifierMap
Map of address and the identifier associated with it (for return link).
void PassSampleToCollector(const Time &jitter, uint32_t identifier)
Find a collector with the right identifier and pass a sample data to it.
bool m_averagingMode
AveragingMode attribute.
SatStatsLinkJitterHelper(Ptr< const SatHelper > satHelper)
void DoInstall()
Install the probes, collectors, and aggregators necessary to produce the statistics output.
static TypeId GetTypeId()
inherited from ObjectBase base class
Ptr< DataCollectionObject > m_aggregator
The aggregator created by this helper.
virtual void DoInstallProbes()=0
void SetChannelLink(SatEnums::ChannelType_t channelLink)
Set the channel used by this probe.
SatEnums::ChannelType_t m_channelLink
void RxLinkJitterCallback(const Time &jitter, const Address &from)
Receive inputs from trace sources and determine the right collector to forward the inputs to.
void InstallProbes()
Set up several probes or other means of listeners and connect them to the collectors.
bool GetAveragingMode() const
bool ConnectProbeToCollector(Ptr< Probe > probe, uint32_t identifier)
Connect the probe to the right collector.
Produce return feeder link DEV-level jitter statistics from a satellite module simulation.
SatStatsRtnFeederDevLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnFeederDevLinkJitterHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
Produce return feeder link MAC-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsRtnFeederMacLinkJitterHelper()
/ Destructor.
SatStatsRtnFeederMacLinkJitterHelper(Ptr< const SatHelper > satHelper)
Produce return feeder link PHY-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnFeederPhyLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnFeederPhyLinkJitterHelper()
/ Destructor.
Produce return user link DEV-level jitter statistics from a satellite module simulation.
virtual ~SatStatsRtnUserDevLinkJitterHelper()
/ Destructor.
SatStatsRtnUserDevLinkJitterHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
Produce return user link MAC-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnUserMacLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnUserMacLinkJitterHelper()
/ Destructor.
Produce return user link PHY-level jitter statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnUserPhyLinkJitterHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnUserPhyLinkJitterHelper()
/ Destructor.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.