96 Ptr<SatNetDevice> gwNd,
98 Address satUserAddress,
102 NS_LOG_FUNCTION(
this << n << satId << beamId << fCh << rCh << gwNd << ncc << satUserAddress);
104 NetDeviceContainer container;
124 Ptr<SatChannelEstimationErrorContainer> cec;
128 cec = Create<SatSimpleChannelEstimationErrorContainer>();
133 cec = Create<SatFwdLinkChannelEstimationErrorContainer>();
136 SatPhyRxCarrierConf::RxCarrierCreateParams_s parameters =
137 SatPhyRxCarrierConf::RxCarrierCreateParams_s();
141 parameters.m_raIfModel =
m_raSettings.m_raInterferenceModel;
142 parameters.m_raIfEliminateModel =
m_raSettings.m_raInterferenceEliminationModel;
143 parameters.m_linkRegenerationMode =
144 Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode();
147 parameters.m_cec = cec;
148 parameters.m_raCollisionModel =
m_raSettings.m_raCollisionModel;
149 parameters.m_randomAccessModel =
m_raSettings.m_randomAccessModel;
151 Ptr<SatUtPhy> phy = CreateObject<SatUtPhy>(
156 phy->SetChannelPairGetterCallback(cbChannel);
162 Ptr<LorawanMacEndDeviceClassA> mac =
163 CreateObject<LorawanMacEndDeviceClassA>(n, satId, beamId,
m_superframeSeq);
166 mac->SetTxDbmForTxPower(std::vector<double>{16, 14, 12, 10, 8, 6, 4, 2});
168 Ptr<SatLoraConf> satLoraConf = CreateObject<SatLoraConf>();
169 satLoraConf->SetConf(mac);
174 phy->SetAttribute(
"ReceiveCb", CallbackValue(recCb));
184 mac->SetPhyRx(DynamicCast<SatLoraPhyRx>(phy->GetPhyRx()));
188 Mac48Address addr = Mac48Address::Allocate();
189 dev->SetAddress(addr);
191 Singleton<SatIdMapper>::Get()->AttachMacToTraceId(dev->GetAddress());
192 Singleton<SatIdMapper>::Get()->AttachMacToUtId(dev->GetAddress());
193 Singleton<SatIdMapper>::Get()->AttachMacToBeamId(dev->GetAddress(), beamId);
194 Singleton<SatIdMapper>::Get()->AttachMacToSatId(dev->GetAddress(), satId + 1);
197 Mac48Address gwAddr = Mac48Address::ConvertFrom(gwNd->GetAddress());
200 mac->SetRoutingUpdateCallback(cbRouting);
201 mac->SetGwAddress(gwAddr);
205 if (Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode() ==
208 mac->SetSatAddress(Mac48Address::ConvertFrom(satUserAddress));
209 mac->SetRegenerative(
true);
222 Ptr<SatNodeInfo> nodeInfo = Create<SatNodeInfo>(
SatEnums::NT_UT, n->GetId(), addr);
223 dev->SetNodeInfo(nodeInfo);
224 mac->SetNodeInfo(nodeInfo);
225 phy->SetNodeInfo(nodeInfo);
228 if (handoverModule !=
nullptr)
230 handoverModule->SetHandoverRequestCallback(
232 mac->SetHandoverModule(handoverModule);
236 Singleton<SatTopology>::Get()->AddUtLayersLora(n, satId, beamId, 0, dev, mac, phy);
virtual Ptr< NetDevice > Install(Ptr< Node > n, uint32_t satId, uint32_t beamId, Ptr< SatChannel > fCh, Ptr< SatChannel > rCh, Ptr< SatNetDevice > gwNd, Ptr< SatNcc > ncc, Address satUserAddress, SatPhy::ChannelPairGetterCallback cbChannel, SatMac::RoutingUpdateCallback cbRouting)