25 #include "../stats/satellite-frame-symbol-load-probe.h"
26 #include "../stats/satellite-frame-user-load-probe.h"
37 #include <ns3/address.h>
38 #include <ns3/boolean.h>
39 #include <ns3/double.h>
41 #include <ns3/ipv4-address.h>
43 #include <ns3/mac48-address.h>
44 #include <ns3/singleton.h>
52 NS_LOG_COMPONENT_DEFINE(
"SatBeamScheduler");
59 Ptr<SatCnoEstimator> cnoEstimator,
60 Time controlSlotOffset,
61 bool controlSlotsEnabled)
62 : m_damaEntry(damaEntry),
63 m_cnoEstimator(cnoEstimator),
64 m_controlSlotsEnabled(controlSlotsEnabled)
66 NS_LOG_FUNCTION(
this);
74 NS_LOG_FUNCTION(
this);
82 NS_LOG_FUNCTION(
this);
85 std::map<uint8_t, uint16_t> rbdcReqs;
87 for (CrMsgContainer_t::const_iterator crIt = m_crContainer.begin(); crIt != m_crContainer.end();
92 for (SatCrMessage::RequestContainer_t::const_iterator descriptorIt = crContent.begin();
93 descriptorIt != crContent.end();
96 switch (descriptorIt->first.second)
99 rbdcReqs[descriptorIt->first.first] += descriptorIt->second;
104 m_damaEntry->ResetVolumeBacklogPersistence();
105 m_damaEntry->UpdateVbdcInBytes(descriptorIt->first.first, descriptorIt->second);
110 m_damaEntry->ResetVolumeBacklogPersistence();
111 m_damaEntry->SetVbdcInBytes(descriptorIt->first.first, descriptorIt->second);
122 for (std::map<uint8_t, uint16_t>::iterator it = rbdcReqs.begin(); it != rbdcReqs.end(); it++)
124 m_damaEntry->ResetDynamicRatePersistence();
125 m_damaEntry->UpdateRbdcInKbps(it->first, it->second);
129 m_crContainer.clear();
135 NS_LOG_FUNCTION(
this);
137 return m_cnoEstimator->GetCnoEstimation();
143 NS_LOG_FUNCTION(
this << sample);
145 m_cnoEstimator->AddSample(sample);
151 NS_LOG_FUNCTION(
this << crMsg);
153 m_crContainer.push_back(crMsg);
159 NS_LOG_FUNCTION(
this);
161 m_crContainer.clear();
167 NS_LOG_FUNCTION(
this);
169 bool isGenerationTime =
false;
173 isGenerationTime =
true;
176 return isGenerationTime;
182 NS_LOG_FUNCTION(
this);
184 m_controlSlotGenerationTime = Simulator::Now() + offset;
195 TypeId(
"ns3::SatBeamScheduler")
197 .AddConstructor<SatBeamScheduler>()
198 .AddAttribute(
"CnoEstimationMode",
199 "Mode of the C/N0 estimator",
201 MakeEnumAccessor<SatCnoEstimator::EstimationMode_t>(
206 "MinimumValueInWindow",
208 "AverageValueInWindow"))
209 .AddAttribute(
"CnoEstimationWindow",
210 "Time window for C/N0 estimation.",
211 TimeValue(MilliSeconds(1000)),
214 .AddAttribute(
"MaxTwoWayPropagationDelay",
215 "Maximum two way propagation delay between GW and UT.",
216 TimeValue(MilliSeconds(560)),
219 .AddAttribute(
"MaxTBTPTxAndProcessingDelay",
220 "Maximum TBTP transmission and processing delay at the GW.",
221 TimeValue(MilliSeconds(100)),
225 "ControlSlotsEnabled",
226 "Control slots generation enabled according to ControlSlotInterval attribute.",
229 MakeBooleanChecker())
230 .AddAttribute(
"ControlSlotInterval",
231 "Time interval to generate time slots for the UT(s).",
232 TimeValue(MilliSeconds(1000)),
235 .AddAttribute(
"HandoverStrategy",
236 "Strategy used when performing handover to transfer capacity requests "
237 "and C/No informations",
239 MakeEnumAccessor<SatBeamScheduler::HandoverInformationForward_t>(
245 .AddAttribute(
"SuperFrameAllocatorType",
246 "Type of SuperFrameAllocator",
248 MakeEnumAccessor<SatEnums::SuperframeAllocatorType_t>(
251 .AddTraceSource(
"BacklogRequestsTrace",
252 "Trace for backlog requests done to beam scheduler.",
254 "ns3::SatBeamScheduler::BacklogRequestsTraceCallback")
255 .AddTraceSource(
"WaveformTrace",
256 "Trace scheduled wave forms (called once per UT per round).",
258 "ns3::SatBeamScheduler::WaveformTrace")
259 .AddTraceSource(
"FrameUtLoadTrace",
260 "Trace UT load per the frame.",
262 "ns3::SatFrameUserLoadProbe::FrameUserLoadCallback")
263 .AddTraceSource(
"FrameLoadTrace",
264 "Trace load per the frame allocated symbols / total symbols.",
266 "ns3::SatFrameSymbolLoadProbe::FrameSymbolLoadCallback")
267 .AddTraceSource(
"UsableCapacityTrace",
268 "Trace usable capacity per beam in kbps.",
270 "ns3::SatBeamScheduler::UsableCapacityTraceCallback")
271 .AddTraceSource(
"UnmetCapacityTrace",
272 "Trace unmet capacity per beam in kbps.",
274 "ns3::SatBeamScheduler::UnmetCapacityTrace")
275 .AddTraceSource(
"ExceedingCapacityTrace",
276 "Trace exceeding capacity per beam in kbps.",
278 "ns3::SatBeamScheduler::ExceedingCapacityTrace");
295 NS_LOG_FUNCTION(
this);
300 NS_LOG_FUNCTION(
this);
306 NS_LOG_FUNCTION(
this);
314 NS_LOG_FUNCTION(
this << msg);
323 NS_LOG_FUNCTION(
this << msg << utId);
337 NS_LOG_FUNCTION(
this << msg << satelliteMac);
346 NS_LOG_FUNCTION(
this << &cb);
354 Ptr<SatNetDevice> gwNetDevice,
355 Ptr<SatOrbiterNetDevice> orbiterNetDevice,
357 Ptr<SatSuperframeSeq> seq,
358 uint32_t maxFrameSizeInBytes,
362 NS_LOG_FUNCTION(
this << beamId << &cb);
368 m_gwMac = DynamicCast<SatGwMac>(gwNetDevice->GetMac());
383 uint32_t sfCountOffset =
384 (uint32_t)(totalDelay.GetInteger() / seq->GetDuration(0).GetInteger() + 1);
400 uint32_t maxIndex = 0;
403 ->GetRaChannelCount() > 0)
406 ->GetRaChannelCount() -
417 Ptr<SatDefaultSuperframeAllocator> superframeAllocator =
418 CreateObject<SatDefaultSuperframeAllocator>(
424 NS_FATAL_ERROR(
"Invalid SuperframeAllocatorType");
428 NS_LOG_INFO(
"Initialized SatBeamScheduler");
431 Time txTime = Singleton<SatRtnLinkTime>::Get()->GetNextSuperFrameStartTime(
436 delay = txTime - Now();
440 NS_FATAL_ERROR(
"Trying to schedule a super frame in the past!");
449 NS_LOG_FUNCTION(
this << utId);
451 Ptr<SatDamaEntry> damaEntry = Create<SatDamaEntry>(llsConf);
458 Ptr<UniformRandomVariable> m_randomInterval = CreateObject<UniformRandomVariable>();
459 uint32_t randomOffset = m_randomInterval->GetInteger(
463 firstCtrlSlotInterval = Time(randomOffset);
467 Ptr<SatUtInfo> utInfo =
486 NS_LOG_FUNCTION(
this << utId << utInfo);
488 Ptr<SatDamaEntry> damaEntry = utInfo->GetDamaEntry();
495 std::pair<UtInfoMap_t::iterator, bool> result =
m_utInfos.insert(std::make_pair(utId, utInfo));
500 damaEntry->GetRcCount(),
503 allocReq.
m_cno = NAN;
510 NS_FATAL_ERROR(
"UT (Address: " << utId <<
") already added to Beam scheduler.");
517 Address utId = iterator->first;
518 Ptr<SatUtInfo> utInfo = iterator->second;
524 if (it->first == utId)
531 Ptr<SatDamaEntry> damaEntry = utInfo->GetDamaEntry();
540 NS_LOG_FUNCTION(
this << utId);
542 UtInfoMap_t::iterator result =
m_utInfos.find(utId);
549 NS_LOG_FUNCTION(
this);
557 NS_LOG_FUNCTION(
this << utId << cno);
568 NS_LOG_FUNCTION(
this << satelliteMac << cno);
579 NS_LOG_FUNCTION(
this << utId << crMsg);
590 NS_LOG_FUNCTION(
this);
592 Ptr<SatCnoEstimator> estimator =
nullptr;
603 NS_FATAL_ERROR(
"Not supported C/N0 estimation mode!!!");
617 Ptr<SatCnoReportMessage> cnoReportMessage = CreateObject<SatCnoReportMessage>();
618 cnoReportMessage->SetCnoEstimate(cno);
629 NS_LOG_FUNCTION(
this);
631 uint32_t requestedKbpsSum(0);
632 uint32_t offeredKbpsSum(0);
647 Ptr<SatTbtpMessage> firstTbtp =
651 std::vector<Ptr<SatTbtpMessage>> tbtps;
652 tbtps.push_back(firstTbtp);
672 for (std::vector<Ptr<SatTbtpMessage>>::const_iterator it = tbtps.begin(); it != tbtps.end();
691 NS_FATAL_ERROR(
"Too big for " << error <<
" TBTP messages");
694 NS_LOG_INFO(
"TBTP sent");
697 uint32_t usableCapacity = std::min(offeredKbpsSum, requestedKbpsSum);
698 uint32_t unmetCapacity = requestedKbpsSum - usableCapacity;
699 uint32_t exceedingCapacity =
700 (uint32_t)(std::max(((
double)(offeredKbpsSum)-requestedKbpsSum), 0.0) + 0.5);
717 NS_LOG_FUNCTION(
this);
719 if (tbtpContainer.empty())
721 NS_FATAL_ERROR(
"TBTP container must contain at least one message.");
724 Ptr<SatTbtpMessage> tbtpToFill = tbtpContainer.back();
726 Ptr<SatSuperframeConf> superFrameConf =
729 int32_t prevFrameId = -1;
731 for (uint32_t i = 0; i < superFrameConf->GetRaChannelCount(); i++)
733 uint8_t frameId = superFrameConf->GetRaChannelFrameId(i);
734 Ptr<SatFrameConf> frameConf = superFrameConf->GetFrameConf(frameId);
735 uint16_t timeSlotCount = frameConf->GetTimeSlotCount() / frameConf->GetCarrierCount();
739 uint32_t frameInfoSize = 0;
741 if (prevFrameId != (int32_t)frameId)
744 frameInfoSize = tbtpToFill->GetFrameInfoSize();
747 while (timeSlotCount > 0)
750 uint32_t timeSlotCountMaxFrame =
752 tbtpToFill->GetTimeSlotInfoSizeInBytes();
753 if (timeSlotCountMaxFrame > timeSlotCount)
755 timeSlotCountMaxFrame = timeSlotCount;
758 tbtpToFill->SetRaChannel(i,
759 superFrameConf->GetRaChannelFrameId(i),
760 timeSlotCountMaxFrame);
761 timeSlotCount -= timeSlotCountMaxFrame;
764 if (timeSlotCount > 0)
766 Ptr<SatTbtpMessage> newTbtp =
767 CreateObject<SatTbtpMessage>(tbtpToFill->GetSuperframeSeqId());
768 newTbtp->SetSuperframeCounter(tbtpToFill->GetSuperframeCounter());
769 tbtpContainer.push_back(newTbtp);
770 tbtpToFill = newTbtp;
779 NS_LOG_FUNCTION(
this);
781 uint32_t requestedCraRbdcKbps(0);
787 Ptr<SatDamaEntry> damaEntry =
m_utInfos.at(it->first)->GetDamaEntry();
790 m_utInfos.at(it->first)->UpdateDamaEntryFromCrs();
794 it->second.m_cno =
m_utInfos.at(it->first)->GetCnoEstimation();
797 it->second.m_generateCtrlSlot =
m_utInfos.at(it->first)->IsControlSlotGenerationTime();
799 for (uint8_t i = 0; i < damaEntry->GetRcCount(); i++)
801 double superFrameDurationInSeconds =
806 it->second.m_reqPerRc[i].m_craBytes =
808 superFrameDurationInSeconds) /
810 it->second.m_reqPerRc[i].m_rbdcBytes =
812 superFrameDurationInSeconds) /
814 it->second.m_reqPerRc[i].m_vbdcBytes = damaEntry->GetVbdcInBytes(i);
817 requestedCraRbdcKbps += damaEntry->GetCraInKbps(i);
818 requestedCraRbdcKbps += damaEntry->GetRbdcInKbps(i);
820 uint16_t minRbdcCraDeltaRateInKbps =
821 std::max(0, damaEntry->GetMinRbdcInKbps(i) - damaEntry->GetCraInKbps(i));
822 it->second.m_reqPerRc[i].m_minRbdcBytes =
824 superFrameDurationInSeconds) /
829 if (it->second.m_reqPerRc[i].m_rbdcBytes == 0)
831 it->second.m_reqPerRc[i].m_minRbdcBytes = 0;
835 (it->second.m_reqPerRc[i].m_minRbdcBytes <= it->second.m_reqPerRc[i].m_rbdcBytes));
842 std::stringstream head;
843 head << Now().GetSeconds() <<
", ";
845 head << Singleton<SatIdMapper>::Get()->GetUtIdWithMac(it->first) <<
", ";
847 std::stringstream rbdcTail;
849 rbdcTail << damaEntry->GetRbdcInKbps(i);
853 std::stringstream vbdcTail;
855 vbdcTail << damaEntry->GetVbdcInBytes(i);
862 return requestedCraRbdcKbps;
868 NS_LOG_FUNCTION(
this);
881 allocReqs.push_back(&(it->second));
893 NS_LOG_FUNCTION(
this);
895 uint32_t offeredCraRbdcKbps(0);
900 Ptr<SatDamaEntry> damaEntry =
m_utInfos.at(it->first)->GetDamaEntry();
901 SatFrameAllocator::UtAllocInfoContainer_t::const_iterator allocInfo =
902 utAllocContainer.find(it->first);
904 if (allocInfo != utAllocContainer.end())
907 if (allocInfo->second.second)
912 double superFrameDurationInSeconds =
917 for (uint32_t i = 0; i < allocInfo->second.first.size(); i++)
919 uint32_t rateBasedBytes =
921 superFrameDurationInSeconds) /
924 superFrameDurationInSeconds) /
927 offeredCraRbdcKbps += (uint32_t)((allocInfo->second.first[i] *
929 superFrameDurationInSeconds /
933 NS_LOG_INFO(
"UT: " << allocInfo->first <<
" RC index: " << i
934 <<
" rate based bytes: " << rateBasedBytes
935 <<
" allocated bytes: " << allocInfo->second.first[i]);
938 if (rateBasedBytes < allocInfo->second.first[i])
941 uint32_t vbdcBytes = damaEntry->GetVbdcInBytes(i);
943 NS_LOG_INFO(
"UT: " << allocInfo->first <<
" RC index: " << i
944 <<
" requested VBDC bytes: " << vbdcBytes);
947 uint32_t allocVbdcBytes = allocInfo->second.first[i] - rateBasedBytes;
950 if (vbdcBytes > allocVbdcBytes)
952 uint32_t remainingVbdcBytes = vbdcBytes - allocVbdcBytes;
954 NS_LOG_INFO(
"UT: " << allocInfo->first <<
" RC index: " << i
955 <<
" VBDC allocation: " << allocVbdcBytes
956 <<
" remaining VBDC bytes: " << remainingVbdcBytes);
958 damaEntry->SetVbdcInBytes(i, remainingVbdcBytes);
963 NS_LOG_INFO(
"UT: " << allocInfo->first <<
" RC index: " << i
964 <<
" VBDC allocation: " << allocVbdcBytes
965 <<
" remaining VBDC bytes: " << 0);
967 damaEntry->SetVbdcInBytes(i, 0);
973 damaEntry->DecrementDynamicRatePersistence();
974 damaEntry->DecrementVolumeBacklogPersistence();
976 return offeredCraRbdcKbps;
982 NS_LOG_FUNCTION(
this << utId << destination->m_satId << destination->m_beamId);
984 UtInfoMap_t::iterator utIterator =
m_utInfos.find(utId);
988 NS_ASSERT_MSG(destination->HasUt(utId),
"UT is not part of the source beam");
993 Ptr<SatUtInfo> utInfo = utIterator->second;
994 destination->AddUtInfo(utId, utInfo);
1001 utInfo->ClearCrMsgs();
1008 utInfo->ClearCrMsgs();
1013 NS_FATAL_ERROR(
"Unknown handover strategy");
1021 NS_LOG_FUNCTION(
this << address);
1030 NS_LOG_FUNCTION(
this << address);
1033 m_gwMac->DisconnectUt(address);
1039 NS_LOG_FUNCTION(
this << address);
1047 NS_LOG_FUNCTION(
this << address);
1055 NS_LOG_FUNCTION(
this << utId);
1057 UtInfoMap_t::iterator utIterator =
m_utInfos.find(utId);
1060 NS_FATAL_ERROR(
"Trying to remove a UT not connected to a beam: " << utId);
1064 Ptr<SatUtInfo> utInfo = utIterator->second;
1071 NS_LOG_FUNCTION(
this);
1073 Ptr<SatTimuMessage> timuMsg = CreateObject<SatTimuMessage>();
1074 timuMsg->SetAllocatedSatId(
m_satId);
1075 timuMsg->SetAllocatedBeamId(
m_beamId);
1084 NS_LOG_FUNCTION(
this << logonChannelId);
1088 uint32_t maxIndex = maxId.Get();
1090 if (logonChannelId > maxIndex)
1092 NS_FATAL_ERROR(
"Cannot use channel ID " << logonChannelId
1093 <<
" for logon as it doesn't exist");
1107 NS_LOG_FUNCTION(
this << useLora);
CnoCompare class to sort UT request according to C/N0 information.
void ClearCrMsgs()
Remove all CR messages from UT info to reset capacity requests in case of handover.
void UpdateDamaEntryFromCrs()
Update DamaEntry with information of the received CR messages.
void AddCrMsg(Ptr< SatCrMessage > crMsg)
Add CR message to UT info to be used when capacity request is calculated next time (method UpdateDama...
double GetCnoEstimation()
Get estimated C/N0 value based on added samples.
Ptr< SatDamaEntry > GetDamaEntry()
Get damaEntry of the UT info.
bool IsControlSlotGenerationTime() const
Check if time is expired to send control slot.
SatUtInfo(Ptr< SatDamaEntry > damaEntry, Ptr< SatCnoEstimator > cnoEstimator, Time controlSlotOffset, bool controlSlotsEnabled)
Construct SatUtInfo.
void SetControlSlotGenerationTime(Time offset)
Set time for next time slot generation for this UT.
void AddCnoSample(double sample)
Add C/N0 sample to UT info's estimator.
class for module Beam Scheduler.
bool SendToSatellite(Ptr< SatControlMessage > msg, Address satelliteMac)
Send control message to the satellite.
void DisconnectGw(Mac48Address address)
Disconnect a new GW address from this scheduler.
HandoverInformationForward_t m_handoverStrategy
void UtCrReceived(Address utId, Ptr< SatCrMessage > crMsg)
Receive capacity requests from UTs.
uint32_t UpdateDamaEntriesWithAllocs(SatFrameAllocator::UtAllocInfoContainer_t &utAllocContainer)
Update dama entries with given allocations at end of the scheduling.
uint32_t m_maxBbFrameSize
Maximum size of the BB frame.
Ptr< SatCnoEstimator > m_satelliteCnoEstimator
Estimator for the C/N0 from satellite.
void DisconnectUt(Mac48Address address)
Disconnect a new UT address from this scheduler.
Time m_cnoEstimationWindow
Time window for C/N0 estimation.
bool m_receivedSatelliteCnoSample
Indicates if Cno sample have been received since last C/N0 control message sent.
Callback< bool, Ptr< SatControlMessage >, const Address & > SendCtrlMsgCallback
SatBeamScheduler::SendTbtpCallback m_txTbtpCallback
The TBTP send callback to inform GW Mac.
void AddRaChannels(std::vector< Ptr< SatTbtpMessage >> &tbtpContainer)
Add RA channel information to TBTP(s).
void DoPreResourceAllocation()
Do pre-allocation of the symbols per UT/RC, before time slot generation.
Time m_maxTwoWayPropagationDelay
Maximum two-way propagation delay estimate between GW-SAT-UT-SAT-GW.
void RemoveUtInfo(UtInfoMap_t::iterator iterator)
TracedCallback< uint32_t > m_exceedingCapacityTrace
Trace exceeding capacity.
Callback< void, Ptr< SatTbtpMessage > > SendTbtpCallback
void AddUtInfo(Address utId, Ptr< SatUtInfo > utInfo)
TracedCallback< uint32_t > m_usableCapacityTrace
Trace usable capacity.
TracedCallback< uint32_t, double > m_frameLoadTrace
Trace frame load ratio.
void DoDispose(void)
Dispose actions for SatBeamScheduler.
SatBeamScheduler::SendCtrlMsgCallback m_txCallback
The control message send callback.
uint32_t m_logonChannelIndex
Logon channel ID to exclude it from the RA channel selection.
SatEnums::SuperframeAllocatorType_t m_superframeAllocatorType
Type of SatSuperframeAllocator class to use.
void ConnectUt(Mac48Address address)
Connect a new UT address to this scheduler.
void ConnectGw(Mac48Address address)
Connect a new GW address to this scheduler.
void SetSendTbtpCallback(SendTbtpCallback cb)
Set the callback to inform NCC a TBTP has been sent.
Time m_controlSlotInterval
Interval to generate control time slots.
bool Send(Ptr< SatControlMessage > message)
Send control messages to the beam.
bool SendTo(Ptr< SatControlMessage > message, Address utId)
Send control message to an UT into the beam.
Ptr< SatSuperframeSeq > m_superframeSeq
Pointer to super frame sequence.
Ptr< SatCnoEstimator > CreateCnoEstimator()
Create estimator for the UT according to set attributes.
Ptr< SatSuperframeAllocator > m_superframeAllocator
Superframe allocator to maintain load information of the frames and their configurations.
TracedCallback< std::string > m_backlogRequestsTrace
Trace for backlog requests done to beam scheduler.
void Initialize(uint32_t satId, uint32_t beamId, Ptr< SatNetDevice > gwNetDevice, Ptr< SatOrbiterNetDevice > orbiterNetDevice, SatBeamScheduler::SendCtrlMsgCallback cb, Ptr< SatSuperframeSeq > seq, uint32_t maxFrameSizeInBytes, Address satAddress, Address gwAddress)
TracedCallback< uint32_t, uint32_t > m_frameUtLoadTrace
Trace count of UTs scheduled per Frame.
bool HasUt()
Check whether an UT is handled by this scheduler.
Ptr< SatOrbiterNetDevice > m_orbiterNetDevice
OrbiterNetDevice on satellite linked to this beam.
TracedCallback< uint32_t > m_waveformTrace
Trace first wave form scheduled for the UT.
Ptr< RandomVariableStream > m_raChRandomIndex
Random variable stream to select RA channel for a UT.
static TypeId GetTypeId(void)
Get the type ID.
Time m_maxTbtpTxAndProcessingDelay
Maximum TBTP tx and processing delay estimate at the GW (scheduler).
uint32_t m_satId
ID of the satellite using this beam.
void SendCnoToSatellite()
Send an estimation of cno to satellite, if samples have been received.
void TransferUtToBeam(Address utId, Ptr< SatBeamScheduler > destination)
Transfer ownership of a terminal to the given SatBeamScheduler.
void ReserveLogonChannel(uint32_t logonChannelId)
~SatBeamScheduler()
Destroy a SatBeamScheduler.
uint32_t m_superFrameCounter
Counter for super frame sequence.
Ptr< SatTimuMessage > CreateTimu() const
Create a TIM unicast message containing enough data for a terminal to connect to the beam handled by ...
void RemoveUt(Address utId)
Remove a UT from its SatBeamScheduler.
UtReqInfoContainer_t m_utRequestInfos
Container including every UT's allocation requests.
Address m_satelliteMac
MAC address of the satellite (used when regenerative)
SatCnoEstimator::EstimationMode_t m_cnoEstimatorMode
Mode used for C/N0 estimator.
void Schedule()
Schedule UTs added (registered) to scheduler.
void SetUseLora(bool useLora)
Set if SNS-3 is used with Lora standard.
bool m_controlSlotsEnabled
Flag to indicated if control time slots generation is enabled.
uint32_t m_beamId
ID of the beam.
uint32_t UpdateDamaEntriesWithReqs()
Update dama entries with received requests at beginning of the scheduling.
void UpdateUtCno(Address utId, double cno)
Update UT C/N0 info with the latest value.
bool m_useLora
Flag indicating if lora standard is used.
SatBeamScheduler()
Construct a SatBeamScheduler.
uint32_t AddUt(Address utId, Ptr< SatLowerLayerServiceConf > llsConf)
Add UT to scheduler.
UtInfoMap_t m_utInfos
Map to store UT information in beam for updating purposes.
Ptr< SatGwMac > m_gwMac
GW MAC linked to this beam.
void UpdateSatelliteCno(Address satelliteMac, double cno)
Update satellite C/N0 info with the latest value.
TracedCallback< uint32_t > m_unmetCapacityTrace
Trace unmet capacity.
SatCnoEstimator class defines interface for C/N0 estimators.
@ MINIMUM
Minimum value in the given window returned.
@ LAST
Last value in the given window returned.
@ AVERAGE
Average value in the given window returned.
std::map< RequestDescriptor_t, uint16_t > RequestContainer_t
Define type RequestContainer_t.
SatEnums class is for simplifying the use of enumerators in the satellite module.
@ DEFAULT_SUPERFRAME_ALLOCATOR
SatFrameAllocReq is used to define frame allocation parameters when requesting allocation from SatFra...
Allocation information item for the UT/RC requests [bytes].
std::vector< SatFrameAllocReq * > SatFrameAllocContainer_t
Container to store SatFrameAllocReq item pointers.
std::map< Address, UtAllocInfoItem_t > UtAllocInfoContainer_t
Map container to store UT allocation information.
std::vector< SatFrameAllocReqItem > SatFrameAllocReqItemContainer_t
Container to store SatFrameAllocReqItem items.
constexpr uint8_t SUPERFRAME_SEQUENCE
Used superframe sequence in the RTN link.
constexpr uint32_t BITS_IN_KBIT
Number of bits consisting a kilobit.
constexpr uint32_t BITS_PER_BYTE
Number of bits in a byte.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.