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(
"SatStatsLinkDelayHelper");
61 NS_OBJECT_ENSURE_REGISTERED(SatStatsLinkDelayHelper);
65 m_averagingMode(false)
67 NS_LOG_FUNCTION(
this << satHelper);
72 NS_LOG_FUNCTION(
this);
79 TypeId(
"ns3::SatStatsLinkDelayHelper")
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 delay (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 delay (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 delay (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(
"SatStatsLinkDelayHelper - Invalid output type");
422 if (from.IsInvalid())
424 NS_LOG_WARN(
this <<
" discarding a packet delay of " << delay.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 delay of " << delay.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, delay.GetSeconds());
559 Ptr<UnitConversionCollector> c = collector->GetObject<UnitConversionCollector>();
560 NS_ASSERT(c !=
nullptr);
561 c->TraceSinkDouble(0.0, delay.GetSeconds());
573 Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
574 NS_ASSERT(c !=
nullptr);
575 c->TraceSinkDouble(0.0, delay.GetSeconds());
579 Ptr<DistributionCollector> c = collector->GetObject<DistributionCollector>();
580 NS_ASSERT(c !=
nullptr);
581 c->TraceSinkDouble(0.0, delay.GetSeconds());
587 <<
" is not a valid output type for this statistics.");
599 Ptr<const SatHelper> satHelper)
602 NS_LOG_FUNCTION(
this << satHelper);
607 NS_LOG_FUNCTION(
this);
621 NS_LOG_FUNCTION(
this);
623 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
624 Callback<void, const Time&, const Address&> callback =
627 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
631 NS_ASSERT(satGeoDev !=
nullptr);
632 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
635 if (satGeoDev->TraceConnectWithoutContext(
"RxFeederLinkDelay", callback))
637 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
638 <<
" device #" << satGeoDev->GetIfIndex());
642 NS_FATAL_ERROR(
"Error connecting to RxFeederLinkDelay trace source of SatNetDevice"
643 <<
" at node ID " << (*it)->GetId() <<
" device #"
644 << satGeoDev->GetIfIndex());
648 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
650 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
656 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
657 NS_ASSERT(satDev !=
nullptr);
659 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
664 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
665 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
669 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
671 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
672 NS_ASSERT(satDev !=
nullptr);
674 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
687 NS_LOG_FUNCTION(
this << satHelper);
692 NS_LOG_FUNCTION(
this);
706 NS_LOG_FUNCTION(
this);
708 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
710 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
714 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
717 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
719 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
721 const int32_t utId =
GetUtId(*it);
722 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
726 std::ostringstream probeName;
728 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
729 probe->SetName(probeName.str());
732 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
733 NS_ASSERT(satDev !=
nullptr);
736 if (probe->ConnectByObject(
"RxLinkDelay", satDev) &&
739 m_probes.push_back(probe->GetObject<Probe>());
742 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
746 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatMac"
747 <<
" at node ID " << (*it)->GetId() <<
" device #2");
753 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
754 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
758 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
760 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
761 NS_ASSERT(satDev !=
nullptr);
763 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
774 Ptr<const SatHelper> satHelper)
777 NS_LOG_FUNCTION(
this << satHelper);
782 NS_LOG_FUNCTION(
this);
796 NS_LOG_FUNCTION(
this);
798 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
799 Callback<void, const Time&, const Address&> callback =
802 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
806 NS_ASSERT(satGeoDev !=
nullptr);
807 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
808 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
810 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
811 it2 != satGeoFeederMacs.end();
814 satMac = it2->second;
815 NS_ASSERT(satMac !=
nullptr);
816 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
819 if (satMac->TraceConnectWithoutContext(
"RxLinkDelay", callback))
821 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
822 <<
" device #" << satGeoDev->GetIfIndex());
825 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
829 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
830 <<
" at node ID " << (*it)->GetId() <<
" device #"
831 << satGeoDev->GetIfIndex());
834 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
835 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
836 it2 != satGeoUserMacs.end();
839 satMac = it2->second;
840 NS_ASSERT(satMac !=
nullptr);
841 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
845 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
847 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
853 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
854 NS_ASSERT(satDev !=
nullptr);
855 Ptr<SatMac> satMac = satDev->GetMac();
856 NS_ASSERT(satMac !=
nullptr);
858 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
859 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
864 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
865 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
869 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
871 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
872 NS_ASSERT(satDev !=
nullptr);
873 Ptr<SatMac> satMac = satDev->GetMac();
874 NS_ASSERT(satMac !=
nullptr);
876 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
877 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
890 NS_LOG_FUNCTION(
this << satHelper);
895 NS_LOG_FUNCTION(
this);
909 NS_LOG_FUNCTION(
this);
911 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
913 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
917 NS_ASSERT(satGeoDev !=
nullptr);
918 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
919 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
921 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
922 it2 != satGeoFeederMacs.end();
925 satMac = it2->second;
926 NS_ASSERT(satMac !=
nullptr);
927 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
929 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
930 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
931 it2 != satGeoUserMacs.end();
934 satMac = it2->second;
935 NS_ASSERT(satMac !=
nullptr);
936 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
940 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
942 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
944 const int32_t utId =
GetUtId(*it);
945 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
949 std::ostringstream probeName;
951 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
952 probe->SetName(probeName.str());
955 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
956 NS_ASSERT(satDev !=
nullptr);
957 Ptr<SatMac> satMac = satDev->GetMac();
958 NS_ASSERT(satMac !=
nullptr);
961 if (probe->ConnectByObject(
"RxLinkDelay", satMac) &&
964 m_probes.push_back(probe->GetObject<Probe>());
967 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
968 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
972 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatMac"
973 <<
" at node ID " << (*it)->GetId() <<
" device #2");
979 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
980 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
984 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
986 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
987 NS_ASSERT(satDev !=
nullptr);
988 Ptr<SatMac> satMac = satDev->GetMac();
989 NS_ASSERT(satMac !=
nullptr);
991 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
992 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1003 Ptr<const SatHelper> satHelper)
1006 NS_LOG_FUNCTION(
this << satHelper);
1011 NS_LOG_FUNCTION(
this);
1025 NS_LOG_FUNCTION(
this);
1027 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1028 Callback<void, const Time&, const Address&> callback =
1031 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1035 NS_ASSERT(satGeoDev !=
nullptr);
1036 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1037 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1039 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1040 it2 != satGeoFeederPhys.end();
1043 satPhy = it2->second;
1044 NS_ASSERT(satPhy !=
nullptr);
1045 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1048 if (satPhy->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1050 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1051 <<
" device #" << satGeoDev->GetIfIndex());
1054 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1058 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1059 <<
" at node ID " << (*it)->GetId() <<
" device #"
1060 << satGeoDev->GetIfIndex());
1063 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1064 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1065 it2 != satGeoUserPhys.end();
1068 satPhy = it2->second;
1069 NS_ASSERT(satPhy !=
nullptr);
1070 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1074 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1076 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1082 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1083 NS_ASSERT(satDev !=
nullptr);
1084 Ptr<SatPhy> satPhy = satDev->GetPhy();
1085 NS_ASSERT(satPhy !=
nullptr);
1087 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1088 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1093 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1094 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1098 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1100 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1101 NS_ASSERT(satDev !=
nullptr);
1102 Ptr<SatPhy> satPhy = satDev->GetPhy();
1103 NS_ASSERT(satPhy !=
nullptr);
1105 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1106 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1119 NS_LOG_FUNCTION(
this << satHelper);
1124 NS_LOG_FUNCTION(
this);
1138 NS_LOG_FUNCTION(
this);
1140 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1142 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1146 NS_ASSERT(satGeoDev !=
nullptr);
1147 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1148 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1150 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1151 it2 != satGeoFeederPhys.end();
1154 satPhy = it2->second;
1155 NS_ASSERT(satPhy !=
nullptr);
1156 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1158 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1159 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1160 it2 != satGeoUserPhys.end();
1163 satPhy = it2->second;
1164 NS_ASSERT(satPhy !=
nullptr);
1165 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1169 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1171 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1173 const int32_t utId =
GetUtId(*it);
1174 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
1178 std::ostringstream probeName;
1180 Ptr<ApplicationDelayProbe> probe = CreateObject<ApplicationDelayProbe>();
1181 probe->SetName(probeName.str());
1184 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1185 NS_ASSERT(satDev !=
nullptr);
1186 Ptr<SatPhy> satPhy = satDev->GetPhy();
1187 NS_ASSERT(satPhy !=
nullptr);
1190 if (probe->ConnectByObject(
"RxLinkDelay", satPhy) &&
1193 m_probes.push_back(probe->GetObject<Probe>());
1196 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1197 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1201 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatPhy"
1202 <<
" at node ID " << (*it)->GetId() <<
" device #2");
1208 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1209 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1213 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1215 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1216 NS_ASSERT(satDev !=
nullptr);
1217 Ptr<SatPhy> satPhy = satDev->GetPhy();
1218 NS_ASSERT(satPhy !=
nullptr);
1220 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1221 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1232 Ptr<const SatHelper> satHelper)
1235 NS_LOG_FUNCTION(
this << satHelper);
1240 NS_LOG_FUNCTION(
this);
1254 NS_LOG_FUNCTION(
this);
1256 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1258 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1263 NS_ASSERT(satGeoDev !=
nullptr);
1264 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1267 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1268 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1275 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1276 NS_ASSERT(satDev !=
nullptr);
1277 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1282 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1283 Callback<void, const Time&, const Address&> callback =
1286 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1290 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1292 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1293 NS_ASSERT(satDev !=
nullptr);
1296 if (satDev->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1298 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1299 <<
" device #" << satDev->GetIfIndex());
1302 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1306 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1307 <<
" at node ID " << (*it)->GetId() <<
" device #"
1308 << satDev->GetIfIndex());
1324 NS_LOG_FUNCTION(
this << satHelper);
1329 NS_LOG_FUNCTION(
this);
1343 NS_LOG_FUNCTION(
this);
1345 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1346 Callback<void, const Time&, const Address&> callback =
1349 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1353 NS_ASSERT(satGeoDev !=
nullptr);
1354 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1357 if (satGeoDev->TraceConnectWithoutContext(
"RxUserLinkDelay", callback))
1359 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1360 <<
" device #" << satGeoDev->GetIfIndex());
1364 NS_FATAL_ERROR(
"Error connecting to RxUserLinkDelay trace source of SatNetDevice"
1365 <<
" at node ID " << (*it)->GetId() <<
" device #"
1366 << satGeoDev->GetIfIndex());
1370 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1371 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1378 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1379 NS_ASSERT(satDev !=
nullptr);
1380 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1385 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1387 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1391 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1393 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1394 NS_ASSERT(satDev !=
nullptr);
1396 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1408 Ptr<const SatHelper> satHelper)
1411 NS_LOG_FUNCTION(
this << satHelper);
1416 NS_LOG_FUNCTION(
this);
1430 NS_LOG_FUNCTION(
this);
1432 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1434 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1439 NS_ASSERT(satGeoDev !=
nullptr);
1440 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1441 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
1442 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
1443 it2 != satGeoFeederMacs.end();
1446 satMac = it2->second;
1447 NS_ASSERT(satMac !=
nullptr);
1448 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1450 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
1451 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
1452 it2 != satGeoUserMacs.end();
1455 satMac = it2->second;
1456 NS_ASSERT(satMac !=
nullptr);
1457 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1461 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1462 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1469 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1470 NS_ASSERT(satDev !=
nullptr);
1471 Ptr<SatMac> satMac = satDev->GetMac();
1472 NS_ASSERT(satMac !=
nullptr);
1473 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1474 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1479 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1480 Callback<void, const Time&, const Address&> callback =
1483 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1487 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1489 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1490 NS_ASSERT(satDev !=
nullptr);
1491 Ptr<SatMac> satMac = satDev->GetMac();
1492 NS_ASSERT(satMac !=
nullptr);
1495 if (satMac->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1497 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1498 <<
" device #" << satDev->GetIfIndex());
1501 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1502 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1506 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1507 <<
" at node ID " << (*it)->GetId() <<
" device #"
1508 << satDev->GetIfIndex());
1524 NS_LOG_FUNCTION(
this << satHelper);
1529 NS_LOG_FUNCTION(
this);
1543 NS_LOG_FUNCTION(
this);
1545 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1546 Callback<void, const Time&, const Address&> callback =
1549 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1553 NS_ASSERT(satGeoDev !=
nullptr);
1554 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1555 std::map<uint32_t, Ptr<SatMac>> satGeoFeederMacs = satGeoDev->GetFeederMac();
1557 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoFeederMacs.begin();
1558 it2 != satGeoFeederMacs.end();
1561 satMac = it2->second;
1562 NS_ASSERT(satMac !=
nullptr);
1563 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1565 std::map<uint32_t, Ptr<SatMac>> satGeoUserMacs = satGeoDev->GetUserMac();
1566 for (std::map<uint32_t, Ptr<SatMac>>::iterator it2 = satGeoUserMacs.begin();
1567 it2 != satGeoUserMacs.end();
1570 satMac = it2->second;
1571 NS_ASSERT(satMac !=
nullptr);
1572 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1575 if (satMac->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1577 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1578 <<
" device #" << satGeoDev->GetIfIndex());
1582 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1583 <<
" at node ID " << (*it)->GetId() <<
" device #"
1584 << satGeoDev->GetIfIndex());
1589 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1590 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1597 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1598 NS_ASSERT(satDev !=
nullptr);
1599 Ptr<SatMac> satMac = satDev->GetMac();
1600 NS_ASSERT(satMac !=
nullptr);
1601 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1602 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1607 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1609 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1613 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1615 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1616 NS_ASSERT(satDev !=
nullptr);
1617 Ptr<SatMac> satMac = satDev->GetMac();
1618 NS_ASSERT(satMac !=
nullptr);
1620 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1621 satMac->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1633 Ptr<const SatHelper> satHelper)
1636 NS_LOG_FUNCTION(
this << satHelper);
1641 NS_LOG_FUNCTION(
this);
1655 NS_LOG_FUNCTION(
this);
1657 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1659 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1664 NS_ASSERT(satGeoDev !=
nullptr);
1665 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1666 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1667 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1668 it2 != satGeoFeederPhys.end();
1671 satPhy = it2->second;
1672 NS_ASSERT(satPhy !=
nullptr);
1673 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1675 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1676 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1677 it2 != satGeoUserPhys.end();
1680 satPhy = it2->second;
1681 NS_ASSERT(satPhy !=
nullptr);
1682 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1686 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1687 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1694 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1695 NS_ASSERT(satDev !=
nullptr);
1696 Ptr<SatPhy> satPhy = satDev->GetPhy();
1697 NS_ASSERT(satPhy !=
nullptr);
1698 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1699 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1704 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1705 Callback<void, const Time&, const Address&> callback =
1708 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1712 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1714 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1715 NS_ASSERT(satDev !=
nullptr);
1716 Ptr<SatPhy> satPhy = satDev->GetPhy();
1717 NS_ASSERT(satPhy !=
nullptr);
1720 if (satPhy->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1722 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1723 <<
" device #" << satDev->GetIfIndex());
1726 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1727 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1731 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1732 <<
" at node ID " << (*it)->GetId() <<
" device #"
1733 << satDev->GetIfIndex());
1749 NS_LOG_FUNCTION(
this << satHelper);
1754 NS_LOG_FUNCTION(
this);
1768 NS_LOG_FUNCTION(
this);
1770 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
1771 Callback<void, const Time&, const Address&> callback =
1774 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
1778 NS_ASSERT(satGeoDev !=
nullptr);
1779 satGeoDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1780 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
1782 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
1783 it2 != satGeoFeederPhys.end();
1786 satPhy = it2->second;
1787 NS_ASSERT(satPhy !=
nullptr);
1788 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1790 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
1791 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
1792 it2 != satGeoUserPhys.end();
1795 satPhy = it2->second;
1796 NS_ASSERT(satPhy !=
nullptr);
1797 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1800 if (satPhy->TraceConnectWithoutContext(
"RxLinkDelay", callback))
1802 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
1803 <<
" device #" << satGeoDev->GetIfIndex());
1807 NS_FATAL_ERROR(
"Error connecting to RxLinkDelay trace source of SatNetDevice"
1808 <<
" at node ID " << (*it)->GetId() <<
" device #"
1809 << satGeoDev->GetIfIndex());
1814 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
1815 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
1822 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
1823 NS_ASSERT(satDev !=
nullptr);
1824 Ptr<SatPhy> satPhy = satDev->GetPhy();
1825 NS_ASSERT(satPhy !=
nullptr);
1826 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1827 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1832 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1834 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1838 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1840 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1841 NS_ASSERT(satDev !=
nullptr);
1842 Ptr<SatPhy> satPhy = satDev->GetPhy();
1843 NS_ASSERT(satPhy !=
nullptr);
1845 satDev->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1846 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
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 delay statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdFeederDevLinkDelayHelper()
/ Destructor.
SatStatsFwdFeederDevLinkDelayHelper(Ptr< const SatHelper > satHelper)
Produce forward feeder link MAC-level delay statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsFwdFeederMacLinkDelayHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsFwdFeederMacLinkDelayHelper()
/ Destructor.
Produce forward feeder link PHY-level delay statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdFeederPhyLinkDelayHelper()
/ Destructor.
SatStatsFwdFeederPhyLinkDelayHelper(Ptr< const SatHelper > satHelper)
Produce forward user link DEV-level delay statistics from a satellite module simulation.
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
virtual ~SatStatsFwdUserDevLinkDelayHelper()
/ Destructor.
SatStatsFwdUserDevLinkDelayHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
Produce forward user link MAC-level delay statistics from a satellite module simulation.
virtual ~SatStatsFwdUserMacLinkDelayHelper()
/ Destructor.
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
SatStatsFwdUserMacLinkDelayHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
Produce forward user link PHY-level delay statistics from a satellite module simulation.
SatStatsFwdUserPhyLinkDelayHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdUserPhyLinkDelayHelper()
/ Destructor.
std::list< Ptr< Probe > > m_probes
Maintains a list of probes created by this helper.
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 delay statistics helpers.
Ptr< DataCollectionObject > m_aggregator
The aggregator created by this helper.
static TypeId GetTypeId()
inherited from ObjectBase base class
void InstallProbes()
Set up several probes or other means of listeners and connect them to the collectors.
std::map< const Address, uint32_t > m_identifierMap
Map of address and the identifier associated with it (for return link).
void SaveAddressAndIdentifier(Ptr< Node > utNode)
Save the address and the proper identifier from the given UT node.
CollectorMap m_terminalCollectors
Maintains a list of collectors created by this helper.
bool ConnectProbeToCollector(Ptr< Probe > probe, uint32_t identifier)
Connect the probe to the right collector.
bool m_averagingMode
AveragingMode attribute.
void PassSampleToCollector(const Time &delay, uint32_t identifier)
Find a collector with the right identifier and pass a sample data to it.
Ptr< DistributionCollector > m_averagingCollector
The final collector utilized in averaged output (histogram, PDF, and CDF).
SatStatsLinkDelayHelper(Ptr< const SatHelper > satHelper)
void SetAveragingMode(bool averagingMode)
virtual ~SatStatsLinkDelayHelper()
/ Destructor.
void RxLinkDelayCallback(const Time &delay, const Address &from)
Receive inputs from trace sources and determine the right collector to forward the inputs to.
void DoInstall()
Install the probes, collectors, and aggregators necessary to produce the statistics output.
bool GetAveragingMode() const
virtual void DoInstallProbes()=0
Produce return feeder link DEV-level delay statistics from a satellite module simulation.
virtual ~SatStatsRtnFeederDevLinkDelayHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnFeederDevLinkDelayHelper(Ptr< const SatHelper > satHelper)
Produce return feeder link MAC-level delay statistics from a satellite module simulation.
SatStatsRtnFeederMacLinkDelayHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnFeederMacLinkDelayHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
Produce return feeder link PHY-level delay statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnFeederPhyLinkDelayHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnFeederPhyLinkDelayHelper()
/ Destructor.
Produce return user link DEV-level delay statistics from a satellite module simulation.
virtual ~SatStatsRtnUserDevLinkDelayHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnUserDevLinkDelayHelper(Ptr< const SatHelper > satHelper)
Produce return user link MAC-level delay statistics from a satellite module simulation.
virtual ~SatStatsRtnUserMacLinkDelayHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnUserMacLinkDelayHelper(Ptr< const SatHelper > satHelper)
Produce return user link PHY-level delay statistics from a satellite module simulation.
SatStatsRtnUserPhyLinkDelayHelper(Ptr< const SatHelper > satHelper)
virtual ~SatStatsRtnUserPhyLinkDelayHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.