Loading...
Searching...
No Matches
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
53NS_LOG_COMPONENT_DEFINE("SatStatsQueueHelper");
54
55namespace ns3
56{
57
58// BASE CLASS /////////////////////////////////////////////////////////////////
59
60NS_OBJECT_ENSURE_REGISTERED(SatStatsQueueHelper);
61
62std::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
80SatStatsQueueHelper::SatStatsQueueHelper(Ptr<const SatHelper> satHelper)
81 : SatStatsHelper(satHelper),
82 m_pollInterval(MilliSeconds(10)),
84 m_shortLabel(""),
85 m_longLabel("")
86{
87 NS_LOG_FUNCTION(this << satHelper);
88}
89
91{
92 NS_LOG_FUNCTION(this);
93}
94
95TypeId // 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
109void
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 }
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
138void
140{
141 NS_LOG_FUNCTION(this << pollInterval.GetSeconds());
142 m_pollInterval = pollInterval;
143}
144
145Time
150
151void
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",
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",
205 &MultiFileAggregator::Write2d);
206 m_terminalCollectors.ConnectToAggregator("OutputString",
208 &MultiFileAggregator::AddContextHeading);
209
210 break;
211 }
212
216 // Setup aggregator.
217 m_aggregator = CreateAggregator("ns3::MultiFileAggregator",
218 "OutputFileName",
219 StringValue(GetOutputFileName()),
220 "GeneralHeading",
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",
239 &MultiFileAggregator::Write2d);
240 m_terminalCollectors.ConnectToAggregator("OutputString",
242 &MultiFileAggregator::AddContextHeading);
243 m_terminalCollectors.ConnectToAggregator("Warning",
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",
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",
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
345void
347{
348 NS_LOG_FUNCTION(this);
349
350 // The method below is supposed to be implemented by the child class.
352}
353
354void
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
366void
367SatStatsQueueHelper::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
416NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueueHelper);
417
419 : SatStatsQueueHelper(satHelper)
420{
421 NS_LOG_FUNCTION(this << satHelper);
422}
423
425{
426 NS_LOG_FUNCTION(this);
427}
428
429TypeId // static
431{
432 static TypeId tid = TypeId("ns3::SatStatsFwdQueueHelper").SetParent<SatStatsQueueHelper>();
433 return tid;
434}
435
436void
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
493void
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
521NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueueBytesHelper);
522
524 : SatStatsFwdQueueHelper(satHelper)
525{
526 NS_LOG_FUNCTION(this << satHelper);
528}
529
534
535TypeId // static
537{
538 static TypeId tid =
539 TypeId("ns3::SatStatsFwdQueueBytesHelper").SetParent<SatStatsFwdQueueHelper>();
540 return tid;
541}
542
543// FORWARD LINK IN PACKETS ////////////////////////////////////////////////////
544
545NS_OBJECT_ENSURE_REGISTERED(SatStatsFwdQueuePacketsHelper);
546
548 : SatStatsFwdQueueHelper(satHelper)
549{
550 NS_LOG_FUNCTION(this << satHelper);
552}
553
558
559TypeId // static
561{
562 static TypeId tid =
563 TypeId("ns3::SatStatsFwdQueuePacketsHelper").SetParent<SatStatsFwdQueueHelper>();
564 return tid;
565}
566
567// RETURN LINK ////////////////////////////////////////////////////////////////
568
569NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueueHelper);
570
572 : SatStatsQueueHelper(satHelper)
573{
574 NS_LOG_FUNCTION(this << satHelper);
575}
576
578{
579 NS_LOG_FUNCTION(this);
580}
581
582TypeId // static
584{
585 static TypeId tid = TypeId("ns3::SatStatsRtnQueueHelper").SetParent<SatStatsQueueHelper>();
586 return tid;
587}
588
589void
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
608void
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
631NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueueBytesHelper);
632
634 : SatStatsRtnQueueHelper(satHelper)
635{
636 NS_LOG_FUNCTION(this << satHelper);
638}
639
644
645TypeId // static
647{
648 static TypeId tid =
649 TypeId("ns3::SatStatsRtnQueueBytesHelper").SetParent<SatStatsRtnQueueHelper>();
650 return tid;
651}
652
653// RETURN LINK IN PACKETS /////////////////////////////////////////////////////
654
655NS_OBJECT_ENSURE_REGISTERED(SatStatsRtnQueuePacketsHelper);
656
658 : SatStatsRtnQueueHelper(satHelper)
659{
660 NS_LOG_FUNCTION(this << satHelper);
662}
663
668
669TypeId // 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.
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)
Ptr< const SatHelper > GetSatHelper() const
static NetDeviceContainer GetGwSatNetDevice(Ptr< Node > gwNode)
static std::string GetOutputTypeName(OutputType_t outputType)
SatStatsHelper(Ptr< const SatHelper > satHelper)
Creates a new helper instance.
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 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.
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.