Loading...
Searching...
No Matches
satellite-orbiter-helper.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013 Magister Solutions Ltd
4 * Copyright (c) 2018 CNES
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation;
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * Author: Sami Rantanen <sami.rantanen@magister.fi>
20 * Author: Mathias Ettinger <mettinger@viveris.toulouse.fr>
21 */
22
24
25#include "satellite-helper.h"
27
28#include "ns3/config.h"
29#include "ns3/double.h"
30#include "ns3/enum.h"
31#include "ns3/log.h"
32#include "ns3/names.h"
33#include "ns3/packet.h"
34#include "ns3/pointer.h"
35#include "ns3/satellite-channel-estimation-error-container.h"
36#include "ns3/satellite-const-variables.h"
37#include "ns3/satellite-id-mapper.h"
38#include "ns3/satellite-orbiter-feeder-llc.h"
39#include "ns3/satellite-orbiter-feeder-mac.h"
40#include "ns3/satellite-orbiter-feeder-phy.h"
41#include "ns3/satellite-orbiter-user-llc.h"
42#include "ns3/satellite-orbiter-user-mac.h"
43#include "ns3/satellite-orbiter-user-phy.h"
44#include "ns3/satellite-phy-rx-carrier-conf.h"
45#include "ns3/satellite-phy-rx.h"
46#include "ns3/satellite-phy-tx.h"
47#include "ns3/satellite-topology.h"
48#include "ns3/satellite-typedefs.h"
49#include "ns3/satellite-utils.h"
50#include "ns3/singleton.h"
51#include "ns3/uinteger.h"
52
53#include <algorithm>
54#include <string>
55#include <utility>
56#include <vector>
57
58NS_LOG_COMPONENT_DEFINE("SatOrbiterHelper");
59
60namespace ns3
61{
62
63NS_OBJECT_ENSURE_REGISTERED(SatOrbiterHelper);
64
65TypeId
67{
68 static TypeId tid =
69 TypeId("ns3::SatOrbiterHelper")
70 .SetParent<Object>()
71 .AddAttribute("DaFwdLinkInterferenceModel",
72 "Forward link interference model for dedicated access",
74 MakeEnumAccessor<SatPhyRxCarrierConf::InterferenceModel>(
77 "Constant",
79 "Trace",
81 "PerPacket",
83 "PerFragment"))
84 .AddAttribute("DaRtnLinkInterferenceModel",
85 "Return link interference model for dedicated access",
87 MakeEnumAccessor<SatPhyRxCarrierConf::InterferenceModel>(
90 "Constant",
92 "Trace",
94 "PerPacket",
96 "PerFragment"))
97 .AddAttribute("FwdLinkErrorModel",
98 "Forward feeder link error model",
100 MakeEnumAccessor<SatPhyRxCarrierConf::ErrorModel>(
102 MakeEnumChecker(SatPhyRxCarrierConf::EM_NONE,
103 "None",
105 "Constant",
107 "AVI"))
108 .AddAttribute("FwdLinkConstantErrorRate",
109 "Constant error rate on forward feeder link",
110 DoubleValue(0.0),
112 MakeDoubleChecker<double>())
113 .AddAttribute("RtnLinkErrorModel",
114 "Return user link error model",
116 MakeEnumAccessor<SatPhyRxCarrierConf::ErrorModel>(
118 MakeEnumChecker(SatPhyRxCarrierConf::EM_NONE,
119 "None",
121 "Constant",
123 "AVI"))
124 .AddAttribute("RtnLinkConstantErrorRate",
125 "Constant error rate on return user link",
126 DoubleValue(0.0),
128 MakeDoubleChecker<double>())
129 .AddAttribute(
130 "IslArbiterType",
131 "Arbiter in use to route packets on ISLs",
132 EnumValue(SatEnums::UNICAST),
133 MakeEnumAccessor<SatEnums::IslArbiterType_t>(&SatOrbiterHelper::m_islArbiterType),
134 MakeEnumChecker(SatEnums::UNICAST, "Unicast", SatEnums::ECMP, "ECMP"))
135 .AddTraceSource("Creation",
136 "Creation traces",
137 MakeTraceSourceAccessor(&SatOrbiterHelper::m_creationTrace),
138 "ns3::SatTypedefs::CreationCallback");
139 return tid;
140}
141
150 m_raSettings(),
153 m_islArbiterType(SatEnums::UNICAST),
156{
157 NS_LOG_FUNCTION(this);
158
159 // this default constructor should be never called
160 NS_ASSERT(false);
161}
162
164 uint32_t rtnLinkCarrierCount,
165 uint32_t fwdLinkCarrierCount,
166 Ptr<SatSuperframeSeq> seq,
169 RandomAccessSettings_s randomAccessSettings)
170 : m_carrierBandwidthConverter(bandwidthConverterCb),
171 m_fwdLinkCarrierCount(fwdLinkCarrierCount),
172 m_rtnLinkCarrierCount(rtnLinkCarrierCount),
177 m_superframeSeq(seq),
178 m_raSettings(randomAccessSettings),
181 m_fwdReadCtrlCb(fwdReadCb),
182 m_rtnReadCtrlCb(rtnReadCb)
183{
184 NS_LOG_FUNCTION(this << rtnLinkCarrierCount << fwdLinkCarrierCount);
185}
186
187void
188SatOrbiterHelper::Initialize(Ptr<SatLinkResultsFwd> lrFwd, Ptr<SatLinkResultsRtn> lrRcs2)
189{
190 NS_LOG_FUNCTION(this);
191
192 /*
193 * Forward channel link results (DVB-S2 or DVB-S2X).
194 */
196 {
197 m_fwdLinkResults = lrFwd;
198 }
199
200 /*
201 * Return channel link results (DVB-RCS2).
202 */
204 {
205 m_rtnLinkResults = lrRcs2;
206 }
207
211 CreateObject<SatBbFrameConf>(m_symbolRateRtn,
212 SatEnums::DVB_S2); // TODO We should be able to switch to S2X ?
213 m_bbFrameConfRtn->InitializeCNoRequirements(lrFwd);
214
218 CreateObject<SatBbFrameConf>(m_symbolRateFwd,
219 SatEnums::DVB_S2); // TODO We should be able to switch to S2X ?
220 m_bbFrameConfFwd->InitializeCNoRequirements(lrFwd);
221}
222
223void
224SatOrbiterHelper::SetDeviceAttribute(std::string n1, const AttributeValue& v1)
225{
226 NS_LOG_FUNCTION(this << n1);
227
228 m_deviceFactory.Set(n1, v1);
229}
230
231void
232SatOrbiterHelper::SetUserPhyAttribute(std::string n1, const AttributeValue& v1)
233{
234 NS_LOG_FUNCTION(this << n1);
235
236 Config::SetDefault("ns3::SatOrbiterUserPhy::" + n1, v1);
237}
238
239void
240SatOrbiterHelper::SetFeederPhyAttribute(std::string n1, const AttributeValue& v1)
241{
242 NS_LOG_FUNCTION(this << n1);
243
244 Config::SetDefault("ns3::SatOrbiterFeederPhy::" + n1, v1);
245}
246
247NetDeviceContainer
249{
250 NS_LOG_FUNCTION(this);
251
252 NodeContainer c = Singleton<SatTopology>::Get()->GetOrbiterNodes();
253 NetDeviceContainer devs;
254
255 for (NodeContainer::Iterator i = c.Begin(); i != c.End(); i++)
256 {
257 devs.Add(Install(*i));
258 }
259
260 return devs;
261}
262
263Ptr<NetDevice>
265{
266 NS_LOG_FUNCTION(this << n);
267
268 NS_ASSERT(m_deviceCount[n->GetId()] == 0);
269
270 // Create SatOrbiterNetDevice
271 Ptr<SatOrbiterNetDevice> satDev = CreateOrbiterNetDevice();
272
273 satDev->SetAddress(Mac48Address::Allocate());
274 n->AddDevice(satDev);
275 m_deviceCount[n->GetId()]++;
276 m_nodeIds.push_back(n->GetId());
277
278 Singleton<SatIdMapper>::Get()->AttachMacToTraceId(satDev->GetAddress());
279 Singleton<SatIdMapper>::Get()->AttachMacToSatId(satDev->GetAddress(), m_nodeIds.size());
280
281 return satDev;
282}
283
284Ptr<NetDevice>
286{
287 NS_LOG_FUNCTION(this << aName);
288
289 Ptr<Node> n = Names::Find<Node>(aName);
290
291 return Install(n);
292}
293
294void
296 Ptr<SatChannel> ff,
297 Ptr<SatChannel> fr,
298 Ptr<SatChannel> uf,
299 Ptr<SatChannel> ur,
300 Ptr<SatAntennaGainPattern> userAgp,
301 Ptr<SatAntennaGainPattern> feederAgp,
302 Ptr<SatNcc> ncc,
303 uint32_t satId,
304 uint32_t gwId,
305 uint32_t userBeamId)
306{
307 NS_LOG_FUNCTION(this << d << ff << fr << uf << ur << userAgp << feederAgp << satId << gwId
308 << userBeamId);
309
310 Ptr<SatOrbiterNetDevice> dev = DynamicCast<SatOrbiterNetDevice>(d);
311
312 dev->SetForwardLinkRegenerationMode(
313 Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode());
314 dev->SetReturnLinkRegenerationMode(
315 Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode());
316 dev->SetNodeId(satId);
317
318 AttachChannelsFeeder(dev, ff, fr, feederAgp, ncc, satId, gwId, userBeamId);
319 AttachChannelsUser(dev, uf, ur, userAgp, ncc, satId, userBeamId);
320}
321
322void
323SatOrbiterHelper::AttachChannelsFeeder(Ptr<SatOrbiterNetDevice> dev,
324 Ptr<SatChannel> ff,
325 Ptr<SatChannel> fr,
326 Ptr<SatAntennaGainPattern> feederAgp,
327 Ptr<SatNcc> ncc,
328 uint32_t satId,
329 uint32_t gwId,
330 uint32_t userBeamId)
331{
332 NS_LOG_FUNCTION(this << dev << ff << fr << feederAgp << satId << gwId << userBeamId);
333
335 params.m_satId = satId;
336 params.m_beamId = userBeamId;
337 params.m_device = dev;
339
343 Ptr<SatChannelEstimationErrorContainer> cec =
344 Create<SatSimpleChannelEstimationErrorContainer>();
345
346 SatPhyRxCarrierConf::RxCarrierCreateParams_s parametersFeeder =
347 SatPhyRxCarrierConf::RxCarrierCreateParams_s();
348 parametersFeeder.m_errorModel = m_fwdErrorModel;
349 parametersFeeder.m_daConstantErrorRate = m_fwdDaConstantErrorRate;
350 parametersFeeder.m_daIfModel = m_daFwdLinkInterferenceModel;
351 parametersFeeder.m_raIfModel = m_raSettings.m_raFwdInterferenceModel;
352 parametersFeeder.m_raIfEliminateModel = m_raSettings.m_raInterferenceEliminationModel;
353 parametersFeeder.m_linkRegenerationMode =
354 Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode();
355 parametersFeeder.m_bwConverter = m_carrierBandwidthConverter;
356 parametersFeeder.m_carrierCount = m_fwdLinkCarrierCount;
357 parametersFeeder.m_cec = cec;
358 parametersFeeder.m_raCollisionModel = m_raSettings.m_raCollisionModel;
359 parametersFeeder.m_randomAccessModel = m_raSettings.m_randomAccessModel;
360
361 params.m_txCh = fr;
362 params.m_rxCh = ff;
363
364 Ptr<SatOrbiterFeederPhy> fPhy = CreateObject<SatOrbiterFeederPhy>(
365 params,
367 parametersFeeder,
369
370 // Note, that currently we have only one set of antenna patterns,
371 // which are utilized in both in user link and feeder link, and
372 // in both uplink and downlink directions.
373 fPhy->SetTxAntennaGainPattern(feederAgp, dev->GetNode()->GetObject<SatMobilityModel>());
374 fPhy->SetRxAntennaGainPattern(feederAgp, dev->GetNode()->GetObject<SatMobilityModel>());
375
376 dev->AddFeederPhy(fPhy, userBeamId);
377
378 fPhy->Initialize();
379
380 Ptr<SatOrbiterFeederMac> fMac;
381 Ptr<SatOrbiterFeederLlc> fLlc;
382 bool startScheduler = false;
383
384 // Create MAC layer
385 fMac = CreateObject<SatOrbiterFeederMac>(satId, userBeamId);
386
387 Mac48Address feederAddress;
388
389 // Create layers needed depending on max regeneration mode
390 switch (std::max(Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode(),
391 Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode()))
392 {
395 // Create a node info to PHY layers
396 Ptr<SatNodeInfo> niPhyFeeder =
397 Create<SatNodeInfo>(SatEnums::NT_SAT,
398 m_nodeIds[satId],
399 Mac48Address::ConvertFrom(dev->GetAddress()));
400 fPhy->SetNodeInfo(niPhyFeeder);
401 fMac->SetNodeInfo(niPhyFeeder);
402
403 break;
404 }
406 // Create LLC layer
407 fLlc = CreateObject<SatOrbiterFeederLlc>();
408
409 if (m_gwMacMap.count(std::make_pair(satId, gwId)))
410 {
411 // MAC already exists for this GW ID, reusing it, and disabling the other
412 dev->AddFeederMac(fMac, m_gwMacMap[std::make_pair(satId, gwId)], userBeamId);
413 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(
414 fMac,
415 m_gwMacMap[std::make_pair(satId, gwId)]);
416 }
417 else
418 {
419 // First MAC for this GW ID, storing it to the map
420 dev->AddFeederMac(fMac, fMac, userBeamId);
421 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(fMac, fMac);
422 m_gwMacMap[std::make_pair(satId, gwId)] = fMac;
423 startScheduler = true;
424 }
425
426 fMac->SetReadCtrlCallback(m_fwdReadCtrlCb);
427 fLlc->SetReadCtrlCallback(m_fwdReadCtrlCb);
428
429 // Create a node info to PHY and MAC layers
430 feederAddress = Mac48Address::Allocate();
431 Ptr<SatNodeInfo> niFeeder =
432 Create<SatNodeInfo>(SatEnums::NT_SAT, m_nodeIds[satId], feederAddress);
433 fPhy->SetNodeInfo(niFeeder);
434 fMac->SetNodeInfo(niFeeder);
435 fLlc->SetNodeInfo(niFeeder);
436
437 dev->AddFeederPair(userBeamId, feederAddress);
438
439 break;
440 }
442 // Create LLC layer
443 fLlc = CreateObject<SatOrbiterFeederLlc>();
444
445 if (m_gwMacMap.count(std::make_pair(satId, gwId)))
446 {
447 // MAC already exists for this GW ID, reusing it, and disabling the other
448 dev->AddFeederMac(fMac, m_gwMacMap[std::make_pair(satId, gwId)], userBeamId);
449 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(
450 fMac,
451 m_gwMacMap[std::make_pair(satId, gwId)]);
452 }
453 else
454 {
455 // First MAC for this GW ID, storing it to the map
456 dev->AddFeederMac(fMac, fMac, userBeamId);
457 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(fMac, fMac);
458 m_gwMacMap[std::make_pair(satId, gwId)] = fMac;
459 startScheduler = true;
460 }
461
462 fMac->SetReadCtrlCallback(m_fwdReadCtrlCb);
463 fLlc->SetReadCtrlCallback(m_fwdReadCtrlCb);
464
465 // Create a node info to PHY and MAC layers
466 feederAddress = Mac48Address::Allocate();
467 Ptr<SatNodeInfo> niFeeder =
468 Create<SatNodeInfo>(SatEnums::NT_SAT, m_nodeIds[satId], feederAddress);
469 fPhy->SetNodeInfo(niFeeder);
470 fMac->SetNodeInfo(niFeeder);
471 fLlc->SetNodeInfo(niFeeder);
472
473 dev->AddFeederPair(userBeamId, feederAddress);
474
475 break;
476 }
477 default:
478 NS_FATAL_ERROR("Forward or return link regeneration mode unknown");
479 }
480
481 // Connect callbacks on forward link
482 switch (Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode())
483 {
486 SatPhy::ReceiveCallback fCb = MakeCallback(&SatOrbiterFeederMac::Receive, fMac);
487 fPhy->SetAttribute("ReceiveCb", CallbackValue(fCb));
488
489 fMac->SetReceiveNetDeviceCallback(MakeCallback(&SatOrbiterNetDevice::ReceiveFeeder, dev));
490
491 break;
492 }
494 SatPhy::ReceiveCallback fCb = MakeCallback(&SatOrbiterFeederMac::Receive, fMac);
495 fPhy->SetAttribute("ReceiveCb", CallbackValue(fCb));
496
497 fMac->SetReceiveCallback(MakeCallback(&SatOrbiterFeederLlc::Receive, fLlc));
498
499 fLlc->SetReceiveSatelliteCallback(
500 MakeCallback(&SatOrbiterNetDevice::ReceivePacketFeeder, dev));
501
502 break;
503 }
504 default:
505 NS_FATAL_ERROR("Forward link regeneration mode unknown");
506 }
507
508 // Connect callbacks on return link
509 switch (Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode())
510 {
513 // Nothing to do on feeder side
514 break;
515 }
518 fMac->SetTransmitCallback(MakeCallback(&SatOrbiterFeederPhy::SendPduWithParams, fPhy));
519
521 0,
523 Ptr<SatScpcScheduler> scpcScheduler =
524 CreateObject<SatScpcScheduler>(m_bbFrameConfRtn, feederAddress, carrierBandwidth);
525 fMac->SetFwdScheduler(scpcScheduler);
526 fMac->SetLlc(fLlc);
527 if (startScheduler)
528 {
529 fMac->StartPeriodicTransmissions();
530 }
531
532 // Attach the LLC Tx opportunity and scheduling context getter callbacks to
533 // SatFwdLinkScheduler
534 scpcScheduler->SetTxOpportunityCallback(
535 MakeCallback(&SatOrbiterLlc::NotifyTxOpportunity, fLlc));
536 scpcScheduler->SetSchedContextCallback(MakeCallback(&SatLlc::GetSchedulingContexts, fLlc));
537
538 break;
539 }
540 default:
541 NS_FATAL_ERROR("Return link regeneration mode unknown");
542 }
543
544 Singleton<SatTopology>::Get()->AddOrbiterFeederLayers(dev->GetNode(),
545 dev->GetNode()->GetId(),
546 userBeamId,
547 dev,
548 fLlc,
549 fMac,
550 fPhy);
551}
552
553void
554SatOrbiterHelper::EnableCreationTraces(Ptr<OutputStreamWrapper> stream, CallbackBase& cb)
555{
556 NS_LOG_FUNCTION(this);
557
558 TraceConnect("Creation", "SatOrbiterHelper", cb);
559}
560
561void
562SatOrbiterHelper::SetIslRoutes(std::vector<std::pair<uint32_t, uint32_t>> isls)
563{
564 NS_LOG_FUNCTION(this);
565
566 switch (m_islArbiterType)
567 {
568 case SatEnums::UNICAST: {
569 Ptr<SatIslArbiterUnicastHelper> satIslArbiterHelper =
570 CreateObject<SatIslArbiterUnicastHelper>(isls);
571 satIslArbiterHelper->InstallArbiters();
572 break;
573 }
574 case SatEnums::ECMP: {
575 NS_FATAL_ERROR("ISL Arbiter ECMP not implemented yet");
576 }
577 default: {
578 NS_FATAL_ERROR("Unknown ISL arbiter");
579 }
580 }
581}
582
583} // namespace ns3
SatEnums class is for simplifying the use of enumerators in the satellite module.
virtual void GetSchedulingContexts(std::vector< Ptr< SatSchedulingObject > > &output) const =0
Create and fill the scheduling objects based on LLC layer information.
virtual void Receive(Ptr< Packet > packet, Mac48Address source, Mac48Address dest)
Receive user data packet from lower layer.
Callback< Ptr< SatControlMessage >, uint32_t > ReadCtrlMsgCallback
Callback to read control messages from container storing control messages.
Keep track of the current position and velocity of an object in satellite network.
void Receive(SatPhy::PacketContainer_t packets, Ptr< SatSignalParameters > rxParams)
Receive packet from lower layer.
virtual void SendPduWithParams(Ptr< SatSignalParameters > rxParams)
Send Pdu to the PHY tx module (for satellite switch packet forwarding).
Creates needed objects for Satellite node like SatorbiterNetDevice objects.
Ptr< SatLinkResults > m_rtnLinkResults
Return channel link results (DVB-RCS2) are created if ErrorModel is configured to be AVI.
SatPhy::InterferenceModel m_daFwdLinkInterferenceModel
SatMac::ReadCtrlMsgCallback m_fwdReadCtrlCb
Control forward link messages callback.
SatEnums::IslArbiterType_t m_islArbiterType
Arbiter in use to route packets on ISLs.
virtual void AttachChannelsUser(Ptr< SatOrbiterNetDevice > dev, Ptr< SatChannel > uf, Ptr< SatChannel > ur, Ptr< SatAntennaGainPattern > userAgp, Ptr< SatNcc > ncc, uint32_t satId, uint32_t userBeamId)=0
void Initialize(Ptr< SatLinkResultsFwd > lrFwd, Ptr< SatLinkResultsRtn > lrRcs2)
std::map< std::pair< uint32_t, uint32_t >, Ptr< SatOrbiterFeederMac > > m_gwMacMap
Map used in regenerative mode to store if MAC already created for a given pair SAT ID / GW ID.
void SetFeederPhyAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Feeder Phy created by the helper.
void SetUserPhyAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each User Phy created by the helper.
RandomAccessSettings_s m_raSettings
The used random access model settings.
std::vector< uint32_t > m_nodeIds
Satellites node id.
NetDeviceContainer InstallAllOrbiters()
This method creates a ns3::SatOrbiterNetDevices with the requested attributes and associate the resul...
Ptr< SatBbFrameConf > m_bbFrameConfFwd
void AttachChannelsFeeder(Ptr< SatOrbiterNetDevice > dev, Ptr< SatChannel > ff, Ptr< SatChannel > fr, Ptr< SatAntennaGainPattern > feederAgp, Ptr< SatNcc > ncc, uint32_t satId, uint32_t gwId, uint32_t userBeamId)
TracedCallback< std::string > m_creationTrace
Trace callback for creation traces.
Ptr< SatLinkResults > m_fwdLinkResults
Forward channel link results (DVB-S2) are created if ErrorModel is configured to be AVI.
Ptr< SatSuperframeSeq > m_superframeSeq
Superframe sequence.
SatPhy::InterferenceModel m_daRtnLinkInterferenceModel
void AttachChannels(Ptr< NetDevice > dev, Ptr< SatChannel > ff, Ptr< SatChannel > fr, Ptr< SatChannel > uf, Ptr< SatChannel > ur, Ptr< SatAntennaGainPattern > userAgp, Ptr< SatAntennaGainPattern > feederAgp, Ptr< SatNcc > ncc, uint32_t satId, uint32_t gwId, uint32_t userBeamId)
SatTypedefs::CarrierBandwidthConverter_t m_carrierBandwidthConverter
void EnableCreationTraces(Ptr< OutputStreamWrapper > stream, CallbackBase &cb)
Enables creation traces to be written in given file.
virtual Ptr< SatOrbiterNetDevice > CreateOrbiterNetDevice()=0
Create a SatOrbiterNetDevice instance, with correct type infered from child classes.
Ptr< SatBbFrameConf > m_bbFrameConfRtn
SatOrbiterHelper()
Default constructor.
Ptr< NetDevice > Install(Ptr< Node > n)
SatMac::ReadCtrlMsgCallback m_rtnReadCtrlCb
Control return link messages callback.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
static TypeId GetTypeId(void)
Get the type ID.
std::map< uint32_t, uint16_t > m_deviceCount
void SetIslRoutes(std::vector< std::pair< uint32_t, uint32_t > > isls)
Set ISL routes.
virtual Ptr< Packet > NotifyTxOpportunity(uint32_t bytes, Mac48Address utAddr, uint8_t flowId, uint32_t &bytesLeft, uint32_t &nextMinTxO)
Called from lower layer (MAC) to inform a Tx opportunity of certain amount of bytes.
void ReceiveFeeder(SatPhy::PacketContainer_t packets, Ptr< SatSignalParameters > rxParams)
Receive the packet from the lower layers.
virtual void ReceivePacketFeeder(Ptr< Packet > packet, const Address &feederAddress)=0
Receive the packet from the lower layers, in network regeneration on forward link.
Callback< void, PacketContainer_t, Ptr< SatSignalParameters > > ReceiveCallback
Information of beam users liken UTs and their users.
Callback< double, SatEnums::ChannelType_t, uint32_t, SatEnums::CarrierBandwidthType_t > CarrierBandwidthConverter_t
Callback for carrier bandwidths.
constexpr uint8_t SUPERFRAME_SEQUENCE
Used superframe sequence in the RTN link.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
Creation parameters for base PHY object.
SatEnums::SatLoraNodeType_t m_standard