28 NS_LOG_COMPONENT_DEFINE(
"SatFwdLinkSchedulerDefault");
33 NS_OBJECT_ENSURE_REGISTERED(SatFwdLinkSchedulerDefault);
39 TypeId(
"ns3::SatFwdLinkSchedulerDefault")
41 .AddConstructor<SatFwdLinkSchedulerDefault>()
43 "SchedulingStartThresholdTime",
44 "Threshold time of total transmissions in BB Frame container to trigger a "
46 TimeValue(MilliSeconds(5)),
50 "SchedulingStopThresholdTime",
51 "Threshold time of total transmissions in BB Frame container to stop a scheduling "
53 TimeValue(MilliSeconds(15)),
56 .AddAttribute(
"BBFrameContainer",
57 "BB frame container of this scheduler.",
60 MakePointerChecker<SatBbFrameContainer>());
67 NS_LOG_FUNCTION(
this);
75 NS_LOG_FUNCTION(
this);
76 NS_FATAL_ERROR(
"Default constructor for SatFwdLinkSchedulerDefault not supported");
81 double carrierBandwidthInHz)
85 NS_LOG_FUNCTION(
this);
87 ObjectBase::ConstructSelf(AttributeConstructionList());
89 std::vector<SatEnums::SatModcod_t> modCods = conf->GetModCodsUsed();
100 NS_LOG_FUNCTION(
this);
106 NS_LOG_FUNCTION(
this);
111 std::pair<Ptr<SatBbFrame>,
const Time>
114 NS_LOG_FUNCTION(
this);
124 if (frame !=
nullptr)
132 frame = Create<SatBbFrame>(
m_bbFrameConf->GetDefaultModCod(),
137 Ptr<Packet> dummyPacket = Create<Packet>(1);
143 dummyPacket->AddPacketTag(mTag);
149 dummyPacket->AddPacketTag(addressE2ETag);
152 frame->AddPayload(dummyPacket);
154 frameDuration = frame->GetDuration();
157 else if (frame ==
nullptr)
162 if (frame !=
nullptr)
164 frameDuration = frame->GetDuration();
165 frame->SetSliceId(0);
168 return std::make_pair(frame, frameDuration);
174 NS_LOG_FUNCTION(
this);
182 NS_LOG_FUNCTION(
this);
195 NS_LOG_FUNCTION(
this);
205 NS_LOG_FUNCTION(
this);
208 std::vector<Ptr<SatSchedulingObject>> so;
211 for (std::vector<Ptr<SatSchedulingObject>>::const_iterator it = so.begin();
216 uint32_t currentObBytes = (*it)->GetBufferedBytes();
217 uint32_t currentObMinReqBytes = (*it)->GetMinTxOpportunityInBytes();
218 uint8_t flowId = (*it)->GetFlowId();
225 (currentObBytes > 0))
227 if (frameBytes < currentObMinReqBytes)
234 if (frameBytes < currentObMinReqBytes)
236 NS_FATAL_ERROR(
"Control package too probably too long!!!");
241 (*it)->GetMacAddress(),
244 currentObMinReqBytes);
258 NS_FATAL_ERROR(
"Packet does not fit in empty BB Frame. Control package too long or "
259 "fragmentation problem in user package!!!");
270 NS_LOG_FUNCTION(
this);
This class implements a tag that carries the satellite MAC of GW and UT.
void SetE2ESourceAddress(Mac48Address e2eSourceAddress)
Set E2E source MAC address.
void SetE2EDestAddress(Mac48Address e2eDestAddress)
Set E2E destination MAC address.
SatModcod_t
Modulation scheme and coding rate for DVB-S2.
void GetSchedulingObjects(std::vector< Ptr< SatSchedulingObject >> &output)
Gets scheduling object in sorted order according to configured sorting criteria.
virtual std::pair< Ptr< SatBbFrame >, const Time > GetNextFrame()
Get next frame to be transmitted.
void ScheduleBbFrames()
Schedule BB Frames.
void PeriodicTimerExpired()
Handles periodic timer timeouts.
Time m_schedulingStopThresholdTime
Threshold time of total transmissions in BB Frame container to stop a scheduling round.
void SendAndClearSymbolsSentStat()
Send stats and reset all the symbols sent count for each slice to zero.
SatFwdLinkSchedulerDefault()
Construct a SatFwdLinkScheduler.
Time m_schedulingStartThresholdTime
Threshold time of total transmissions in BB Frame container to trigger a scheduling round.
static TypeId GetTypeId(void)
Get the type ID.
virtual void ClearAllPackets()
Remove all packets being treated.
Ptr< SatBbFrameContainer > m_bbFrameContainer
The container for BB Frames.
~SatFwdLinkSchedulerDefault()
Destroy a SatFwdLinkScheduler.
void DoDispose(void)
Do dispose actions.
virtual TypeId GetInstanceTypeId(void) const
Get the type ID of instance.
uint32_t m_symbolsSent
The number of symbols sent for each slice during an allocation cycle.
SatFwdLinkScheduler schedules BB frames for forward link.
TracedCallback< uint8_t, double > m_schedulingSymbolRateTrace
Traced callback for symbol rate, with flowId, requested Modcod info.
SatFwdLinkScheduler::TxOpportunityCallback m_txOpportunityCallback
Callback to notify the txOpportunity to upper layer Returns a packet Attributes: payload in bytes.
double m_carrierBandwidthInHz
Carrier bandwidth in hertz where scheduler is associated to.
void DoDispose(void)
Do dispose actions.
Ptr< SatBbFrameConf > m_bbFrameConf
Configured BB Frame conf.
bool m_dummyFrameSendingEnabled
Flag indicating if Dummy Frames are sent or not.
Mac48Address m_macAddress
MAC address of the this instance (node)
Time m_periodicInterval
The interval for periodic scheduling timer.
double GetSchedulingObjectCno(Ptr< SatSchedulingObject > ob)
void SortSchedulingObjects(std::vector< Ptr< SatSchedulingObject >> &so)
Sorts given scheduling objects according to configured sorting criteria.
SatFwdLinkScheduler::SchedContextCallback m_schedContextCallback
The scheduling context getter callback.
This class implements a tag that carries the satellite MAC specific information, such as source and d...
void SetDestAddress(Mac48Address dest)
Set destination MAC address.
void SetSourceAddress(Mac48Address source)
Set source MAC address.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.