300 Ptr<SatAntennaGainPattern> userAgp,
301 Ptr<SatAntennaGainPattern> feederAgp,
307 NS_LOG_FUNCTION(
this << d << ff << fr << uf << ur << userAgp << feederAgp << satId << gwId
310 Ptr<SatOrbiterNetDevice> dev = DynamicCast<SatOrbiterNetDevice>(d);
312 dev->SetForwardLinkRegenerationMode(
313 Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode());
314 dev->SetReturnLinkRegenerationMode(
315 Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode());
316 dev->SetNodeId(satId);
326 Ptr<SatAntennaGainPattern> feederAgp,
332 NS_LOG_FUNCTION(
this << dev << ff << fr << feederAgp << satId << gwId << userBeamId);
343 Ptr<SatChannelEstimationErrorContainer> cec =
344 Create<SatSimpleChannelEstimationErrorContainer>();
346 SatPhyRxCarrierConf::RxCarrierCreateParams_s parametersFeeder =
347 SatPhyRxCarrierConf::RxCarrierCreateParams_s();
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();
357 parametersFeeder.m_cec = cec;
358 parametersFeeder.m_raCollisionModel =
m_raSettings.m_raCollisionModel;
359 parametersFeeder.m_randomAccessModel =
m_raSettings.m_randomAccessModel;
364 Ptr<SatOrbiterFeederPhy> fPhy = CreateObject<SatOrbiterFeederPhy>(
373 fPhy->SetTxAntennaGainPattern(feederAgp, dev->GetNode()->GetObject<
SatMobilityModel>());
374 fPhy->SetRxAntennaGainPattern(feederAgp, dev->GetNode()->GetObject<
SatMobilityModel>());
376 dev->AddFeederPhy(fPhy, userBeamId);
380 Ptr<SatOrbiterFeederMac> fMac;
381 Ptr<SatOrbiterFeederLlc> fLlc;
382 bool startScheduler =
false;
385 fMac = CreateObject<SatOrbiterFeederMac>(satId, userBeamId);
387 Mac48Address feederAddress;
390 switch (std::max(Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode(),
391 Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode()))
396 Ptr<SatNodeInfo> niPhyFeeder =
399 Mac48Address::ConvertFrom(dev->GetAddress()));
400 fPhy->SetNodeInfo(niPhyFeeder);
401 fMac->SetNodeInfo(niPhyFeeder);
407 fLlc = CreateObject<SatOrbiterFeederLlc>();
409 if (
m_gwMacMap.count(std::make_pair(satId, gwId)))
412 dev->AddFeederMac(fMac,
m_gwMacMap[std::make_pair(satId, gwId)], userBeamId);
413 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(
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;
430 feederAddress = Mac48Address::Allocate();
431 Ptr<SatNodeInfo> niFeeder =
433 fPhy->SetNodeInfo(niFeeder);
434 fMac->SetNodeInfo(niFeeder);
435 fLlc->SetNodeInfo(niFeeder);
437 dev->AddFeederPair(userBeamId, feederAddress);
443 fLlc = CreateObject<SatOrbiterFeederLlc>();
445 if (
m_gwMacMap.count(std::make_pair(satId, gwId)))
448 dev->AddFeederMac(fMac,
m_gwMacMap[std::make_pair(satId, gwId)], userBeamId);
449 Singleton<SatTopology>::Get()->AddOrbiterFeederMacPair(
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;
466 feederAddress = Mac48Address::Allocate();
467 Ptr<SatNodeInfo> niFeeder =
469 fPhy->SetNodeInfo(niFeeder);
470 fMac->SetNodeInfo(niFeeder);
471 fLlc->SetNodeInfo(niFeeder);
473 dev->AddFeederPair(userBeamId, feederAddress);
478 NS_FATAL_ERROR(
"Forward or return link regeneration mode unknown");
482 switch (Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode())
487 fPhy->SetAttribute(
"ReceiveCb", CallbackValue(fCb));
495 fPhy->SetAttribute(
"ReceiveCb", CallbackValue(fCb));
499 fLlc->SetReceiveSatelliteCallback(
505 NS_FATAL_ERROR(
"Forward link regeneration mode unknown");
509 switch (Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode())
523 Ptr<SatScpcScheduler> scpcScheduler =
524 CreateObject<SatScpcScheduler>(
m_bbFrameConfRtn, feederAddress, carrierBandwidth);
525 fMac->SetFwdScheduler(scpcScheduler);
529 fMac->StartPeriodicTransmissions();
534 scpcScheduler->SetTxOpportunityCallback(
541 NS_FATAL_ERROR(
"Return link regeneration mode unknown");
544 Singleton<SatTopology>::Get()->AddOrbiterFeederLayers(dev->GetNode(),
545 dev->GetNode()->GetId(),