satellite-stats-queue-helper.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014 Magister Solutions
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Budiarto Herman <budiarto.herman@magister.fi>
19  *
20  */
21 
23 
24 #include <ns3/boolean.h>
25 #include <ns3/data-collection-object.h>
26 #include <ns3/distribution-collector.h>
27 #include <ns3/enum.h>
28 #include <ns3/fatal-error.h>
29 #include <ns3/interval-rate-collector.h>
30 #include <ns3/log.h>
31 #include <ns3/mac48-address.h>
32 #include <ns3/magister-gnuplot-aggregator.h>
33 #include <ns3/multi-file-aggregator.h>
34 #include <ns3/net-device.h>
35 #include <ns3/node-container.h>
36 #include <ns3/satellite-helper.h>
37 #include <ns3/satellite-id-mapper.h>
38 #include <ns3/satellite-llc.h>
39 #include <ns3/satellite-net-device.h>
40 #include <ns3/satellite-phy-rx.h>
41 #include <ns3/satellite-phy.h>
42 #include <ns3/satellite-topology.h>
43 #include <ns3/scalar-collector.h>
44 #include <ns3/simulator.h>
45 #include <ns3/singleton.h>
46 #include <ns3/string.h>
47 #include <ns3/unit-conversion-collector.h>
48 
49 #include <list>
50 #include <string>
51 #include <utility>
52 
53 NS_LOG_COMPONENT_DEFINE("SatStatsQueueHelper");
54 
55 namespace ns3
56 {
57 
58 // BASE CLASS /////////////////////////////////////////////////////////////////
59 
60 NS_OBJECT_ENSURE_REGISTERED(SatStatsQueueHelper);
61 
62 std::string // static
64 {
65  switch (unitType)
66  {
68  return "UNIT_BYTES";
70  return "UNIT_NUMBER_OF_PACKETS";
71  default:
72  NS_FATAL_ERROR("SatStatsQueueHelper - Invalid unit type");
73  break;
74  }
75 
76  NS_FATAL_ERROR("SatStatsQueueHelper - Invalid unit type");
77  return "";
78 }
79 
80 SatStatsQueueHelper::SatStatsQueueHelper(Ptr<const SatHelper> satHelper)
81  : SatStatsHelper(satHelper),
82  m_pollInterval(MilliSeconds(10)),
83  m_unitType(SatStatsQueueHelper::UNIT_BYTES),
84  m_shortLabel(""),
85  m_longLabel("")
86 {
87  NS_LOG_FUNCTION(this << satHelper);
88 }
89 
91 {
92  NS_LOG_FUNCTION(this);
93 }
94 
95 TypeId // static
97 {
98  static TypeId tid = TypeId("ns3::SatStatsQueueHelper")
99  .SetParent<SatStatsHelper>()
100  .AddAttribute("PollInterval",
101  "",
102  TimeValue(MilliSeconds(10)),
103  MakeTimeAccessor(&SatStatsQueueHelper::SetPollInterval,
105  MakeTimeChecker());
106  return tid;
107 }
108 
109 void
111 {
112  NS_LOG_FUNCTION(this << GetUnitTypeName(unitType));
113  m_unitType = unitType;
114 
115  // Update presentation-based attributes.
116  if (unitType == SatStatsQueueHelper::UNIT_BYTES)
117  {
118  m_shortLabel = "size_bytes";
119  m_longLabel = "Queue size (in bytes)";
120  }
121  else if (unitType == SatStatsQueueHelper::UNIT_NUMBER_OF_PACKETS)
122  {
123  m_shortLabel = "num_packets";
124  m_longLabel = "Queue size (in number of packets)";
125  }
126  else
127  {
128  NS_FATAL_ERROR("SatStatsQueueHelper - Invalid unit type");
129  }
130 }
131 
134 {
135  return m_unitType;
136 }
137 
138 void
140 {
141  NS_LOG_FUNCTION(this << pollInterval.GetSeconds());
142  m_pollInterval = pollInterval;
143 }
144 
145 Time
147 {
148  return m_pollInterval;
149 }
150 
151 void
153 {
154  NS_LOG_FUNCTION(this);
155 
156  switch (GetOutputType())
157  {
159  NS_FATAL_ERROR(GetOutputTypeName(GetOutputType())
160  << " is not a valid output type for this statistics.");
161  break;
162 
164  // Setup aggregator.
165  m_aggregator = CreateAggregator("ns3::MultiFileAggregator",
166  "OutputFileName",
167  StringValue(GetOutputFileName()),
168  "MultiFileMode",
169  BooleanValue(false),
170  "EnableContextPrinting",
171  BooleanValue(true),
172  "GeneralHeading",
173  StringValue(GetIdentifierHeading(m_shortLabel)));
174 
175  // Setup collectors.
176  m_terminalCollectors.SetType("ns3::ScalarCollector");
177  m_terminalCollectors.SetAttribute("InputDataType",
178  EnumValue(ScalarCollector::INPUT_DATA_TYPE_UINTEGER));
179  m_terminalCollectors.SetAttribute(
180  "OutputType",
181  EnumValue(ScalarCollector::OUTPUT_TYPE_AVERAGE_PER_SAMPLE));
183  m_terminalCollectors.ConnectToAggregator("Output",
184  m_aggregator,
185  &MultiFileAggregator::Write1d);
186  break;
187  }
188 
190  // Setup aggregator.
191  m_aggregator = CreateAggregator("ns3::MultiFileAggregator",
192  "OutputFileName",
193  StringValue(GetOutputFileName()),
194  "GeneralHeading",
195  StringValue(GetTimeHeading(m_shortLabel)));
196 
197  // Setup second-level collectors.
198  m_terminalCollectors.SetType("ns3::IntervalRateCollector");
199  m_terminalCollectors.SetAttribute(
200  "InputDataType",
201  EnumValue(IntervalRateCollector::INPUT_DATA_TYPE_UINTEGER));
203  m_terminalCollectors.ConnectToAggregator("OutputWithTime",
204  m_aggregator,
205  &MultiFileAggregator::Write2d);
206  m_terminalCollectors.ConnectToAggregator("OutputString",
207  m_aggregator,
208  &MultiFileAggregator::AddContextHeading);
209 
210  break;
211  }
212 
216  // Setup aggregator.
217  m_aggregator = CreateAggregator("ns3::MultiFileAggregator",
218  "OutputFileName",
219  StringValue(GetOutputFileName()),
220  "GeneralHeading",
221  StringValue(GetDistributionHeading(m_shortLabel)));
222 
223  // Setup collectors.
224  m_terminalCollectors.SetType("ns3::DistributionCollector");
225  DistributionCollector::OutputType_t outputType =
226  DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
228  {
229  outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
230  }
232  {
233  outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
234  }
235  m_terminalCollectors.SetAttribute("OutputType", EnumValue(outputType));
237  m_terminalCollectors.ConnectToAggregator("Output",
238  m_aggregator,
239  &MultiFileAggregator::Write2d);
240  m_terminalCollectors.ConnectToAggregator("OutputString",
241  m_aggregator,
242  &MultiFileAggregator::AddContextHeading);
243  m_terminalCollectors.ConnectToAggregator("Warning",
244  m_aggregator,
245  &MultiFileAggregator::EnableContextWarning);
246  break;
247  }
248 
251  NS_FATAL_ERROR(GetOutputTypeName(GetOutputType())
252  << " is not a valid output type for this statistics.");
253  break;
254 
256  // Setup aggregator.
257  m_aggregator = CreateAggregator("ns3::MagisterGnuplotAggregator",
258  "OutputPath",
259  StringValue(GetOutputPath()),
260  "OutputFileName",
261  StringValue(GetName()));
262  Ptr<MagisterGnuplotAggregator> plotAggregator =
263  m_aggregator->GetObject<MagisterGnuplotAggregator>();
264  NS_ASSERT(plotAggregator != nullptr);
265  // plot->SetTitle ("");
266  plotAggregator->SetLegend("Time (in seconds)", "Queued packets");
267  plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::STEPS);
268 
269  // Setup second-level collectors.
270  m_terminalCollectors.SetType("ns3::IntervalRateCollector");
271  m_terminalCollectors.SetAttribute(
272  "InputDataType",
273  EnumValue(IntervalRateCollector::INPUT_DATA_TYPE_UINTEGER));
275  for (CollectorMap::Iterator it = m_terminalCollectors.Begin();
276  it != m_terminalCollectors.End();
277  ++it)
278  {
279  const std::string context = it->second->GetName();
280  plotAggregator->Add2dDataset(context, context);
281  }
282  m_terminalCollectors.ConnectToAggregator("OutputWithTime",
283  m_aggregator,
284  &MagisterGnuplotAggregator::Write2d);
285 
286  break;
287  }
288 
292  // Setup aggregator.
293  m_aggregator = CreateAggregator("ns3::MagisterGnuplotAggregator",
294  "OutputPath",
295  StringValue(GetOutputPath()),
296  "OutputFileName",
297  StringValue(GetName()));
298  Ptr<MagisterGnuplotAggregator> plotAggregator =
299  m_aggregator->GetObject<MagisterGnuplotAggregator>();
300  NS_ASSERT(plotAggregator != nullptr);
301  // plot->SetTitle ("");
302  plotAggregator->SetLegend(m_longLabel, "Frequency");
303  plotAggregator->Set2dDatasetDefaultStyle(Gnuplot2dDataset::LINES);
304 
305  // Setup collectors.
306  m_terminalCollectors.SetType("ns3::DistributionCollector");
307  DistributionCollector::OutputType_t outputType =
308  DistributionCollector::OUTPUT_TYPE_HISTOGRAM;
310  {
311  outputType = DistributionCollector::OUTPUT_TYPE_PROBABILITY;
312  }
314  {
315  outputType = DistributionCollector::OUTPUT_TYPE_CUMULATIVE;
316  }
317  m_terminalCollectors.SetAttribute("OutputType", EnumValue(outputType));
319  for (CollectorMap::Iterator it = m_terminalCollectors.Begin();
320  it != m_terminalCollectors.End();
321  ++it)
322  {
323  const std::string context = it->second->GetName();
324  plotAggregator->Add2dDataset(context, context);
325  }
326  m_terminalCollectors.ConnectToAggregator("Output",
327  m_aggregator,
328  &MagisterGnuplotAggregator::Write2d);
329  break;
330  }
331 
332  default:
333  NS_FATAL_ERROR("SatStatsQueueHelper - Invalid output type");
334  break;
335  }
336 
337  // Identify the list of source of queue events.
338  EnlistSource();
339 
340  // Schedule the first polling session.
341  Simulator::Schedule(m_pollInterval, &SatStatsQueueHelper::Poll, this);
342 
343 } // end of `void DoInstall ();`
344 
345 void
347 {
348  NS_LOG_FUNCTION(this);
349 
350  // The method below is supposed to be implemented by the child class.
351  DoEnlistSource();
352 }
353 
354 void
356 {
357  NS_LOG_FUNCTION(this);
358 
359  // The method below is supposed to be implemented by the child class.
360  DoPoll();
361 
362  // Schedule the next polling session.
363  Simulator::Schedule(m_pollInterval, &SatStatsQueueHelper::Poll, this);
364 }
365 
366 void
367 SatStatsQueueHelper::PushToCollector(uint32_t identifier, uint32_t value)
368 {
369  // NS_LOG_FUNCTION (this << identifier << value);
370 
371  // Find the collector with the right identifier.
372  Ptr<DataCollectionObject> collector = m_terminalCollectors.Get(identifier);
373  NS_ASSERT_MSG(collector != nullptr, "Unable to find collector with identifier " << identifier);
374 
375  switch (GetOutputType())
376  {
379  Ptr<ScalarCollector> c = collector->GetObject<ScalarCollector>();
380  NS_ASSERT(c != nullptr);
381  c->TraceSinkUinteger32(0, value);
382  break;
383  }
384 
387  Ptr<IntervalRateCollector> c = collector->GetObject<IntervalRateCollector>();
388  NS_ASSERT(c != nullptr);
389  c->TraceSinkUinteger32(0, value);
390  break;
391  }
392 
399  Ptr<DistributionCollector> c = collector->GetObject<DistributionCollector>();
400  NS_ASSERT(c != nullptr);
401  c->TraceSinkUinteger32(0, value);
402  break;
403  }
404 
405  default:
406  NS_FATAL_ERROR(GetOutputTypeName(GetOutputType())
407  << " is not a valid output type for this statistics.");
408  break;
409 
410  } // end of `switch (GetOutputType ())`
411 
412 } // end of `void PushToCollector (uint32_t, uint32_t)`
413 
414 // FORWARD LINK ///////////////////////////////////////////////////////////////
415 
416 NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueueHelper);
417 
418 SatStatsFwdQueueHelper::SatStatsFwdQueueHelper(Ptr<const SatHelper> satHelper)
419  : SatStatsQueueHelper(satHelper)
420 {
421  NS_LOG_FUNCTION(this << satHelper);
422 }
423 
425 {
426  NS_LOG_FUNCTION(this);
427 }
428 
429 TypeId // static
431 {
432  static TypeId tid = TypeId("ns3::SatStatsFwdQueueHelper").SetParent<SatStatsQueueHelper>();
433  return tid;
434 }
435 
436 void
438 {
439  NS_LOG_FUNCTION(this);
440 
441  const SatIdMapper* satIdMapper = Singleton<SatIdMapper>::Get();
442 
443  NodeContainer gws = Singleton<SatTopology>::Get()->GetGwNodes();
444  for (NodeContainer::Iterator it1 = gws.Begin(); it1 != gws.End(); ++it1)
445  {
446  NetDeviceContainer devs = GetGwSatNetDevice(*it1);
447 
448  for (NetDeviceContainer::Iterator itDev = devs.Begin(); itDev != devs.End(); ++itDev)
449  {
450  Ptr<SatNetDevice> satDev = (*itDev)->GetObject<SatNetDevice>();
451  NS_ASSERT(satDev != nullptr);
452 
453  // Get the beam ID of this device.
454  Ptr<SatPhy> satPhy = satDev->GetPhy();
455  NS_ASSERT(satPhy != nullptr);
456  Ptr<SatPhyRx> satPhyRx = satPhy->GetPhyRx();
457  NS_ASSERT(satPhyRx != nullptr);
458  const uint32_t satId = satPhyRx->GetSatId();
459  const uint32_t beamId = satPhyRx->GetBeamId();
460  NS_LOG_DEBUG(this << " enlisting UT from sat ID " << satId << " and beam ID "
461  << beamId);
462 
463  // Go through the UTs of this beam.
464  ListOfUt_t listOfUt;
465  NodeContainer uts = GetSatHelper()->GetBeamHelper()->GetUtNodes(satId, beamId);
466  for (NodeContainer::Iterator it2 = uts.Begin(); it2 != uts.End(); ++it2)
467  {
468  const Address addr = satIdMapper->GetUtMacWithNode(*it2);
469  const Mac48Address mac48Addr = Mac48Address::ConvertFrom(addr);
470 
471  if (addr.IsInvalid())
472  {
473  NS_LOG_WARN(this << " Node " << (*it2)->GetId() << " is not a valid UT");
474  }
475  else
476  {
477  const uint32_t identifier = GetIdentifierForUt(*it2);
478  listOfUt.push_back(std::make_pair(mac48Addr, identifier));
479  }
480  }
481 
482  // Add an entry to the LLC list.
483  Ptr<SatLlc> satLlc = satDev->GetLlc();
484  NS_ASSERT(satLlc != nullptr);
485  m_llc.push_back(std::make_pair(satLlc, listOfUt));
486 
487  } // end of `for (NetDeviceContainer::Iterator itDev = devs)`
488 
489  } // end of `for (it1 = gws.Begin(); it1 != gws.End (); ++it1)`
490 
491 } // end of `void DoInstall ();`
492 
493 void
495 {
496  // NS_LOG_FUNCTION (this);
497 
498  // Go through the LLC list.
499  std::list<std::pair<Ptr<SatLlc>, ListOfUt_t>>::const_iterator it1;
500  for (it1 = m_llc.begin(); it1 != m_llc.end(); ++it1)
501  {
502  for (ListOfUt_t::const_iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2)
503  {
504  const Mac48Address addr = it2->first;
505  const uint32_t identifier = it2->second;
507  {
508  PushToCollector(identifier, it1->first->GetNBytesInQueue(addr));
509  }
510  else
511  {
513  PushToCollector(identifier, it1->first->GetNPacketsInQueue(addr));
514  }
515  }
516  }
517 }
518 
519 // FORWARD LINK IN BYTES //////////////////////////////////////////////////////
520 
521 NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueueBytesHelper);
522 
524  : SatStatsFwdQueueHelper(satHelper)
525 {
526  NS_LOG_FUNCTION(this << satHelper);
528 }
529 
531 {
532  NS_LOG_FUNCTION(this);
533 }
534 
535 TypeId // static
537 {
538  static TypeId tid =
539  TypeId("ns3::SatStatsFwdQueueBytesHelper").SetParent<SatStatsFwdQueueHelper>();
540  return tid;
541 }
542 
543 // FORWARD LINK IN PACKETS ////////////////////////////////////////////////////
544 
545 NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueuePacketsHelper);
546 
548  : SatStatsFwdQueueHelper(satHelper)
549 {
550  NS_LOG_FUNCTION(this << satHelper);
552 }
553 
555 {
556  NS_LOG_FUNCTION(this);
557 }
558 
559 TypeId // static
561 {
562  static TypeId tid =
563  TypeId("ns3::SatStatsFwdQueuePacketsHelper").SetParent<SatStatsFwdQueueHelper>();
564  return tid;
565 }
566 
567 // RETURN LINK ////////////////////////////////////////////////////////////////
568 
569 NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueueHelper);
570 
571 SatStatsRtnQueueHelper::SatStatsRtnQueueHelper(Ptr<const SatHelper> satHelper)
572  : SatStatsQueueHelper(satHelper)
573 {
574  NS_LOG_FUNCTION(this << satHelper);
575 }
576 
578 {
579  NS_LOG_FUNCTION(this);
580 }
581 
582 TypeId // static
584 {
585  static TypeId tid = TypeId("ns3::SatStatsRtnQueueHelper").SetParent<SatStatsQueueHelper>();
586  return tid;
587 }
588 
589 void
591 {
592  NS_LOG_FUNCTION(this);
593 
594  NodeContainer uts = Singleton<SatTopology>::Get()->GetUtNodes();
595  for (NodeContainer::Iterator it = uts.Begin(); it != uts.End(); ++it)
596  {
597  const uint32_t identifier = GetIdentifierForUt(*it);
598  Ptr<NetDevice> dev = GetUtSatNetDevice(*it);
599  Ptr<SatNetDevice> satDev = dev->GetObject<SatNetDevice>();
600  NS_ASSERT(satDev != nullptr);
601  Ptr<SatLlc> satLlc = satDev->GetLlc();
602  NS_ASSERT(satLlc != nullptr);
603  m_llc.push_back(std::make_pair(satLlc, identifier));
604  }
605 
606 } // end of `void DoInstall ();`
607 
608 void
610 {
611  // NS_LOG_FUNCTION (this);
612 
613  // Go through the LLC list.
614  std::list<std::pair<Ptr<SatLlc>, uint32_t>>::const_iterator it;
615  for (it = m_llc.begin(); it != m_llc.end(); ++it)
616  {
618  {
619  PushToCollector(it->second, it->first->GetNBytesInQueue());
620  }
621  else
622  {
624  PushToCollector(it->second, it->first->GetNPacketsInQueue());
625  }
626  }
627 }
628 
629 // RETURN LINK IN BYTES ///////////////////////////////////////////////////////
630 
631 NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueueBytesHelper);
632 
634  : SatStatsRtnQueueHelper(satHelper)
635 {
636  NS_LOG_FUNCTION(this << satHelper);
638 }
639 
641 {
642  NS_LOG_FUNCTION(this);
643 }
644 
645 TypeId // static
647 {
648  static TypeId tid =
649  TypeId("ns3::SatStatsRtnQueueBytesHelper").SetParent<SatStatsRtnQueueHelper>();
650  return tid;
651 }
652 
653 // RETURN LINK IN PACKETS /////////////////////////////////////////////////////
654 
655 NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueuePacketsHelper);
656 
658  : SatStatsRtnQueueHelper(satHelper)
659 {
660  NS_LOG_FUNCTION(this << satHelper);
662 }
663 
665 {
666  NS_LOG_FUNCTION(this);
667 }
668 
669 TypeId // static
671 {
672  static TypeId tid =
673  TypeId("ns3::SatStatsRtnQueuePacketsHelper").SetParent<SatStatsRtnQueueHelper>();
674  return tid;
675 }
676 
677 } // end of namespace ns3
Class for ID-mapper.
Address GetUtMacWithNode(Ptr< Node > utNode) const
SatNetDevice to be utilized in the UT and GW nodes.
Helper for forward link queue statistics using byte as unit.
SatStatsFwdQueueBytesHelper(Ptr< const SatHelper > satHelper)
static TypeId GetTypeId()
inherited from ObjectBase base class
Helper for forward link queue statistics.
SatStatsFwdQueueHelper(Ptr< const SatHelper > satHelper)
void DoPoll()
Retrieve the queue size of every relevant encapsulator and push the values to the right collectors.
virtual ~SatStatsFwdQueueHelper()
/ Destructor.
std::list< std::pair< Mac48Address, uint32_t > > ListOfUt_t
std::list< std::pair< Ptr< SatLlc >, ListOfUt_t > > m_llc
Maintains a list of GW LLC, its UT address, and its identifier.
static TypeId GetTypeId()
inherited from ObjectBase base class
Helper for forward link queue statistics using packet as unit.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsFwdQueuePacketsHelper(Ptr< const SatHelper > satHelper)
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)
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 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
Helper for queue statistics.
static std::string GetUnitTypeName(UnitType_t unitType)
virtual void DoEnlistSource()=0
CollectorMap m_terminalCollectors
Maintains a list of collectors created by this helper.
void DoInstall()
Install the probes, collectors, and aggregators necessary to produce the statistics output.
void Poll()
Retrieve the queue size of every relevant encapsulator and push the values to the right collectors.
virtual ~SatStatsQueueHelper()
/ Destructor.
void EnlistSource()
Identify the list of source of queue events.
void SetPollInterval(Time pollInterval)
void PushToCollector(uint32_t identifier, uint32_t value)
static TypeId GetTypeId()
inherited from ObjectBase base class
void SetUnitType(UnitType_t unitType)
Ptr< DataCollectionObject > m_aggregator
The aggregator created by this helper.
SatStatsQueueHelper(Ptr< const SatHelper > satHelper)
Time m_pollInterval
PollInterval attribute.
virtual void DoPoll()=0
Retrieve the queue size of every relevant encapsulator and push the values to the right collectors.
Helper for return link queue statistics using byte as unit.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnQueueBytesHelper(Ptr< const SatHelper > satHelper)
Helper for return link queue statistics.
virtual ~SatStatsRtnQueueHelper()
/ Destructor.
std::list< std::pair< Ptr< SatLlc >, uint32_t > > m_llc
Maintains a list of UT LLC and its identifier.
SatStatsRtnQueueHelper(Ptr< const SatHelper > satHelper)
void DoPoll()
Retrieve the queue size of every relevant encapsulator and push the values to the right collectors.
static TypeId GetTypeId()
inherited from ObjectBase base class
Helper for return link queue statistics using packet as unit.
static TypeId GetTypeId()
inherited from ObjectBase base class
SatStatsRtnQueuePacketsHelper(Ptr< const SatHelper > satHelper)
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.