24 #include <ns3/application-packet-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-net-device.h>
45 #include <ns3/satellite-phy.h>
46 #include <ns3/scalar-collector.h>
47 #include <ns3/singleton.h>
48 #include <ns3/string.h>
49 #include <ns3/traffic-time-tag.h>
50 #include <ns3/unit-conversion-collector.h>
54 NS_LOG_COMPONENT_DEFINE(
"SatStatsLinkModcodHelper");
59 NS_OBJECT_ENSURE_REGISTERED(SatStatsLinkModcodHelper);
63 m_averagingMode(false)
65 NS_LOG_FUNCTION(
this << satHelper);
70 NS_LOG_FUNCTION(
this);
77 TypeId(
"ns3::SatStatsLinkModcodHelper")
79 .AddAttribute(
"AveragingMode",
80 "If true, all samples will be averaged before passed to aggregator. "
81 "Only affects histogram, PDF, and CDF output types.",
85 MakeBooleanChecker());
92 NS_LOG_FUNCTION(
this << averagingMode);
105 NS_LOG_FUNCTION(
this);
111 <<
" is not a valid output type for this statistics.");
121 "EnableContextPrinting",
129 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
132 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
136 &MultiFileAggregator::Write1d);
151 EnumValue(UnitConversionCollector::TRANSPARENT));
155 &MultiFileAggregator::Write2d);
170 "EnableContextPrinting",
174 Ptr<MultiFileAggregator> fileAggregator =
176 NS_ASSERT(fileAggregator !=
nullptr);
180 DistributionCollector::OutputType_t outputType =
181 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
184 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
188 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
195 MakeCallback(&MultiFileAggregator::Write2d, fileAggregator));
199 MakeCallback(&MultiFileAggregator::AddContextHeading, fileAggregator));
203 MakeCallback(&MultiFileAggregator::EnableContextWarning, fileAggregator));
208 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
211 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
213 Callback<void, double> callback =
219 it->second->TraceConnectWithoutContext(
"Output", callback);
233 DistributionCollector::OutputType_t outputType =
234 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
237 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
241 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
247 &MultiFileAggregator::Write2d);
250 &MultiFileAggregator::AddContextHeading);
253 &MultiFileAggregator::EnableContextWarning);
262 <<
" is not a valid output type for this statistics.");
272 Ptr<MagisterGnuplotAggregator> plotAggregator =
274 NS_ASSERT(plotAggregator !=
nullptr);
276 plotAggregator->SetLegend(
"Time (in seconds)",
"MODCOD ID");
277 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
282 EnumValue(UnitConversionCollector::TRANSPARENT));
288 const std::string context = it->second->GetName();
289 plotAggregator->Add2dDataset(context, context);
293 &MagisterGnuplotAggregator::Write2d);
308 Ptr<MagisterGnuplotAggregator> plotAggregator =
310 NS_ASSERT(plotAggregator !=
nullptr);
312 plotAggregator->SetLegend(
"MODCOD ID",
"Frequency");
313 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
319 DistributionCollector::OutputType_t outputType =
320 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
323 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
327 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
334 MakeCallback(&MagisterGnuplotAggregator::Write2d, plotAggregator));
340 EnumValue(ScalarCollector::INPUT_DATA_TYPE_DOUBLE));
343 EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
345 Callback<void, double> callback =
351 it->second->TraceConnectWithoutContext(
"Output", callback);
362 Ptr<MagisterGnuplotAggregator> plotAggregator =
364 NS_ASSERT(plotAggregator !=
nullptr);
366 plotAggregator->SetLegend(
"MODCOD ID",
"Frequency");
367 plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
371 DistributionCollector::OutputType_t outputType =
372 DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
375 outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
379 outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
387 const std::string context = it->second->GetName();
388 plotAggregator->Add2dDataset(context, context);
392 &MagisterGnuplotAggregator::Write2d);
399 NS_FATAL_ERROR(
"SatStatsLinkModcodHelper - Invalid output type");
418 if (from.IsInvalid())
420 NS_LOG_WARN(
this <<
" discarding a packet MODCOD ID " << modcod
421 <<
" from statistics collection because of"
422 <<
" invalid sender address");
424 else if (Mac48Address::ConvertFrom(from).IsBroadcast())
434 std::map<const Address, uint32_t>::const_iterator it =
m_identifierMap.find(from);
442 NS_LOG_WARN(
this <<
" discarding a packet MODCOD ID " << modcod
443 <<
" from statistics collection because of"
444 <<
" unknown sender address " << from);
452 NS_LOG_FUNCTION(
this << utNode->GetId());
454 const SatIdMapper* satIdMapper = Singleton<SatIdMapper>::Get();
457 if (addr.IsInvalid())
459 NS_LOG_WARN(
this <<
" Node " << utNode->GetId() <<
" is not a valid UT");
465 NS_LOG_INFO(
this <<
" associated address " << addr <<
" with identifier " << identifier);
472 NS_LOG_FUNCTION(
this << probe << probe->GetName() << identifier);
482 &ScalarCollector::TraceSinkDouble);
490 &UnitConversionCollector::TraceSinkDouble);
504 &ScalarCollector::TraceSinkDouble);
511 &DistributionCollector::TraceSinkDouble);
517 <<
" is not a valid output type for this statistics.");
523 NS_LOG_INFO(
this <<
" created probe " << probe->GetName() <<
", connected to collector "
528 NS_LOG_WARN(
this <<
" unable to connect probe " << probe->GetName() <<
" to collector "
539 NS_ASSERT_MSG(collector !=
nullptr,
"Unable to find collector with identifier " << identifier);
545 Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
546 NS_ASSERT(c !=
nullptr);
547 c->TraceSinkUinteger32(0.0, modcod);
553 Ptr<UnitConversionCollector> c = collector->GetObject<UnitConversionCollector>();
554 NS_ASSERT(c !=
nullptr);
555 c->TraceSinkUinteger32(0.0, modcod);
567 Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
568 NS_ASSERT(c !=
nullptr);
569 c->TraceSinkUinteger32(0.0, modcod);
573 Ptr<DistributionCollector> c = collector->GetObject<DistributionCollector>();
574 NS_ASSERT(c !=
nullptr);
575 c->TraceSinkUinteger32(0.0, modcod);
581 <<
" is not a valid output type for this statistics.");
595 NS_LOG_FUNCTION(
this << satHelper);
600 NS_LOG_FUNCTION(
this);
614 NS_LOG_FUNCTION(
this);
616 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
617 Callback<void, uint32_t, const Address&> callback =
620 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
624 NS_ASSERT(satGeoDev !=
nullptr);
625 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
627 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
628 it2 != satGeoFeederPhys.end();
631 satPhy = it2->second;
632 NS_ASSERT(satPhy !=
nullptr);
633 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
636 if (satPhy->TraceConnectWithoutContext(
"RxLinkModcod", callback))
638 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
639 <<
" device #" << satGeoDev->GetIfIndex());
642 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
646 NS_FATAL_ERROR(
"Error connecting to RxLinkModcod trace source of SatNetDevice"
647 <<
" at node ID " << (*it)->GetId() <<
" device #"
648 << satGeoDev->GetIfIndex());
651 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
652 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
653 it2 != satGeoUserPhys.end();
656 satPhy = it2->second;
657 NS_ASSERT(satPhy !=
nullptr);
658 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
662 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
664 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
670 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
671 NS_ASSERT(satDev !=
nullptr);
672 Ptr<SatPhy> satPhy = satDev->GetPhy();
673 NS_ASSERT(satPhy !=
nullptr);
675 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
680 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
681 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
685 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
687 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
688 NS_ASSERT(satDev !=
nullptr);
689 Ptr<SatPhy> satPhy = satDev->GetPhy();
690 NS_ASSERT(satPhy !=
nullptr);
692 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
705 NS_LOG_FUNCTION(
this << satHelper);
710 NS_LOG_FUNCTION(
this);
724 NS_LOG_FUNCTION(
this);
726 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
727 Callback<void, uint32_t, const Address&> callback =
730 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
734 NS_ASSERT(satGeoDev !=
nullptr);
735 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
737 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
738 it2 != satGeoFeederPhys.end();
741 satPhy = it2->second;
742 NS_ASSERT(satPhy !=
nullptr);
743 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
745 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
746 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
747 it2 != satGeoUserPhys.end();
750 satPhy = it2->second;
751 NS_ASSERT(satPhy !=
nullptr);
752 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
756 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
758 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
763 const int32_t utId =
GetUtId(*it);
764 NS_ASSERT_MSG(utId > 0,
"Node " << (*it)->GetId() <<
" is not a valid UT");
767 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
768 NS_ASSERT(satDev !=
nullptr);
769 Ptr<SatPhy> satPhy = satDev->GetPhy();
770 NS_ASSERT(satPhy !=
nullptr);
773 if (satPhy->TraceConnectWithoutContext(
"RxLinkModcod", callback))
775 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
779 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
783 NS_FATAL_ERROR(
"Error connecting to RxLinkModcod trace source of SatPhy"
784 <<
" at node ID " << (*it)->GetId() <<
" device #2");
790 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
791 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
795 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
797 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
798 NS_ASSERT(satDev !=
nullptr);
799 Ptr<SatPhy> satPhy = satDev->GetPhy();
800 NS_ASSERT(satPhy !=
nullptr);
802 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
815 NS_LOG_FUNCTION(
this << satHelper);
820 NS_LOG_FUNCTION(
this);
834 NS_LOG_FUNCTION(
this);
836 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
838 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
843 NS_ASSERT(satGeoDev !=
nullptr);
844 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
845 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
846 it2 != satGeoFeederPhys.end();
849 satPhy = it2->second;
850 NS_ASSERT(satPhy !=
nullptr);
851 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
853 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
854 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
855 it2 != satGeoUserPhys.end();
858 satPhy = it2->second;
859 NS_ASSERT(satPhy !=
nullptr);
860 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
864 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
865 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
872 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
873 NS_ASSERT(satDev !=
nullptr);
874 Ptr<SatPhy> satPhy = satDev->GetPhy();
875 NS_ASSERT(satPhy !=
nullptr);
876 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
881 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
882 Callback<void, uint32_t, const Address&> callback =
885 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
889 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
891 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
892 NS_ASSERT(satDev !=
nullptr);
893 Ptr<SatPhy> satPhy = satDev->GetPhy();
894 NS_ASSERT(satPhy !=
nullptr);
897 if (satPhy->TraceConnectWithoutContext(
"RxLinkModcod", callback))
899 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
900 <<
" device #" << satDev->GetIfIndex());
903 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
907 NS_FATAL_ERROR(
"Error connecting to RxLinkModcod trace source of SatNetDevice"
908 <<
" at node ID " << (*it)->GetId() <<
" device #"
909 << satDev->GetIfIndex());
925 NS_LOG_FUNCTION(
this << satHelper);
930 NS_LOG_FUNCTION(
this);
944 NS_LOG_FUNCTION(
this);
946 NodeContainer sats =
GetSatHelper()->GetBeamHelper()->GetGeoSatNodes();
947 Callback<void, uint32_t, const Address&> callback =
950 for (NodeContainer::Iterator it = sats.Begin(); it != sats.End(); ++it)
954 NS_ASSERT(satGeoDev !=
nullptr);
955 std::map<uint32_t, Ptr<SatPhy>> satGeoFeederPhys = satGeoDev->GetFeederPhy();
957 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoFeederPhys.begin();
958 it2 != satGeoFeederPhys.end();
961 satPhy = it2->second;
962 NS_ASSERT(satPhy !=
nullptr);
963 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
965 std::map<uint32_t, Ptr<SatPhy>> satGeoUserPhys = satGeoDev->GetUserPhy();
966 for (std::map<uint32_t, Ptr<SatPhy>>::iterator it2 = satGeoUserPhys.begin();
967 it2 != satGeoUserPhys.end();
970 satPhy = it2->second;
971 NS_ASSERT(satPhy !=
nullptr);
972 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
975 if (satPhy->TraceConnectWithoutContext(
"RxLinkModcod", callback))
977 NS_LOG_INFO(
this <<
" successfully connected with node ID " << (*it)->GetId()
978 <<
" device #" << satGeoDev->GetIfIndex());
982 NS_FATAL_ERROR(
"Error connecting to RxLinkModcod trace source of SatNetDevice"
983 <<
" at node ID " << (*it)->GetId() <<
" device #"
984 << satGeoDev->GetIfIndex());
989 NodeContainer uts =
GetSatHelper()->GetBeamHelper()->GetUtNodes();
990 for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
997 Ptr<SatNetDevice> satDev = dev->GetObject<
SatNetDevice>();
998 NS_ASSERT(satDev !=
nullptr);
999 Ptr<SatPhy> satPhy = satDev->GetPhy();
1000 NS_ASSERT(satPhy !=
nullptr);
1001 satPhy->SetAttribute(
"EnableStatisticsTags", BooleanValue(
true));
1006 NodeContainer gws =
GetSatHelper()->GetBeamHelper()->GetGwNodes();
1008 for (NodeContainer::Iterator it = gws.Begin(); it != gws.End(); ++it)
1012 for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
1014 Ptr<SatNetDevice> satDev = (*itDev)->GetObject<
SatNetDevice>();
1015 NS_ASSERT(satDev !=
nullptr);
1016 Ptr<SatPhy> satPhy = satDev->GetPhy();
1017 NS_ASSERT(satPhy !=
nullptr);
1019 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 modcod statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsFwdFeederLinkModcodHelper()
/ Destructor.
SatStatsFwdFeederLinkModcodHelper(Ptr< const SatHelper > satHelper)
Produce forward user link modcod statistics from a satellite module simulation.
virtual ~SatStatsFwdUserLinkModcodHelper()
/ Destructor.
SatStatsFwdUserLinkModcodHelper(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 MODCOD statistics helpers.
bool GetAveragingMode() const
void PassSampleToCollector(uint32_t modcod, uint32_t identifier)
Find a collector with the right identifier and pass a sample data to it.
virtual ~SatStatsLinkModcodHelper()
/ Destructor.
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 m_averagingMode
AveragingMode attribute.
void DoInstall()
Install the probes, collectors, and aggregators necessary to produce the statistics output.
bool ConnectProbeToCollector(Ptr< Probe > probe, uint32_t identifier)
Connect the probe to the right collector.
void InstallProbes()
Set up several probes or other means of listeners and connect them to the collectors.
Ptr< DataCollectionObject > m_aggregator
The aggregator created by this helper.
void SetAveragingMode(bool averagingMode)
static TypeId GetTypeId()
inherited from ObjectBase base class
void RxLinkModcodCallback(uint32_t modcod, const Address &from)
Receive inputs from trace sources and determine the right collector to forward the inputs to.
Ptr< DistributionCollector > m_averagingCollector
The final collector utilized in averaged output (histogram, PDF, and CDF).
SatStatsLinkModcodHelper(Ptr< const SatHelper > satHelper)
std::map< const Address, uint32_t > m_identifierMap
Map of address and the identifier associated with it (for return link).
virtual void DoInstallProbes()=0
Produce return feeder link modcod statistics from a satellite module simulation.
static TypeId GetTypeId()
inherited from ObjectBase base class
virtual ~SatStatsRtnFeederLinkModcodHelper()
/ Destructor.
SatStatsRtnFeederLinkModcodHelper(Ptr< const SatHelper > satHelper)
Produce return user link modcod statistics from a satellite module simulation.
virtual ~SatStatsRtnUserLinkModcodHelper()
/ Destructor.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnUserLinkModcodHelper(Ptr< const SatHelper > satHelper)
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.