24 #include <ns3/string.h>
26 #include <ns3/abort.h>
27 #include <ns3/pointer.h>
28 #include <ns3/lte-enb-rrc.h>
29 #include <ns3/epc-ue-nas.h>
30 #include <ns3/epc-enb-application.h>
31 #include <ns3/lte-ue-rrc.h>
32 #include <ns3/lte-ue-mac.h>
33 #include <ns3/lte-enb-mac.h>
34 #include <ns3/lte-enb-net-device.h>
35 #include <ns3/lte-enb-phy.h>
36 #include <ns3/lte-ue-phy.h>
37 #include <ns3/lte-spectrum-phy.h>
38 #include <ns3/lte-sinr-chunk-processor.h>
39 #include <ns3/multi-model-spectrum-channel.h>
40 #include <ns3/friis-spectrum-propagation-loss.h>
41 #include <ns3/trace-fading-loss-model.h>
42 #include <ns3/isotropic-antenna-model.h>
43 #include <ns3/lte-enb-net-device.h>
44 #include <ns3/lte-ue-net-device.h>
45 #include <ns3/ff-mac-scheduler.h>
46 #include <ns3/lte-rlc.h>
47 #include <ns3/lte-rlc-um.h>
48 #include <ns3/lte-rlc-am.h>
49 #include <ns3/epc-enb-s1-sap.h>
50 #include <ns3/lte-rrc-protocol-ideal.h>
51 #include <ns3/lte-rrc-protocol-real.h>
52 #include <ns3/mac-stats-calculator.h>
53 #include <ns3/phy-stats-calculator.h>
54 #include <ns3/phy-tx-stats-calculator.h>
55 #include <ns3/phy-rx-stats-calculator.h>
56 #include <ns3/epc-helper.h>
58 #include <ns3/buildings-propagation-loss-model.h>
59 #include <ns3/lte-spectrum-value-helper.h>
60 #include <ns3/epc-x2.h>
69 : m_fadingStreamsAssigned (false),
91 NS_LOG_LOGIC (
this <<
" using a SpectrumPropagationLossModel in DL");
96 NS_LOG_LOGIC (
this <<
" using a PropagationLossModel in DL");
98 NS_ASSERT_MSG (dlPlm != 0,
" " << m_downlinkPathlossModel <<
" is neither PropagationLossModel nor SpectrumPropagationLossModel");
106 NS_LOG_LOGIC (
this <<
" using a SpectrumPropagationLossModel in UL");
111 NS_LOG_LOGIC (
this <<
" using a PropagationLossModel in UL");
123 m_phyStats = CreateObject<PhyStatsCalculator> ();
126 m_macStats = CreateObject<MacStatsCalculator> ();
142 .AddConstructor<LteHelper> ()
143 .AddAttribute (
"Scheduler",
144 "The type of scheduler to be used for eNBs. "
145 "The allowed values for this attributes are the type names "
146 "of any class inheriting from ns3::FfMacScheduler.",
149 MakeStringChecker ())
150 .AddAttribute (
"PathlossModel",
151 "The type of pathloss model to be used. "
152 "The allowed values for this attributes are the type names "
153 "of any class inheriting from ns3::PropagationLossModel.",
156 MakeStringChecker ())
157 .AddAttribute (
"FadingModel",
158 "The type of fading model to be used."
159 "The allowed values for this attributes are the type names "
160 "of any class inheriting from ns3::SpectrumPropagationLossModel."
161 "If the type is set to an empty string, no fading model is used.",
164 MakeStringChecker ())
165 .AddAttribute (
"UseIdealRrc",
166 "If true, LteRrcProtocolIdeal will be used for RRC signaling. "
167 "If false, LteRrcProtocolReal will be used.",
170 MakeBooleanChecker ())
310 devices.
Add (device);
324 devices.
Add (device);
343 dlPhy->SetHarqPhyModule (harq);
344 ulPhy->SetHarqPhyModule (harq);
345 phy->SetHarqPhyModule (harq);
348 ulPhy->AddCtrlSinrChunkProcessor (pCtrl);
351 ulPhy->AddDataSinrChunkProcessor (pData);
354 ulPhy->AddInterferenceDataChunkProcessor (pInterf);
360 NS_ASSERT_MSG (mm,
"MobilityModel needs to be set on node before calling LteHelper::InstallUeDevice ()");
361 dlPhy->SetMobility (mm);
362 ulPhy->SetMobility (mm);
365 NS_ASSERT_MSG (antenna,
"error in creating the AntennaModel object");
366 dlPhy->SetAntenna (antenna);
367 ulPhy->SetAntenna (antenna);
376 rrcProtocol->SetLteEnbRrcSapProvider (rrc->GetLteEnbRrcSapProvider ());
377 rrc->SetLteEnbRrcSapUser (rrcProtocol->GetLteEnbRrcSapUser ());
378 rrc->AggregateObject (rrcProtocol);
379 rrcProtocol->SetCellId (cellId);
384 rrcProtocol->SetLteEnbRrcSapProvider (rrc->GetLteEnbRrcSapProvider ());
385 rrc->SetLteEnbRrcSapUser (rrcProtocol->GetLteEnbRrcSapUser ());
386 rrc->AggregateObject (rrcProtocol);
387 rrcProtocol->SetCellId (cellId);
393 rrc->GetAttribute (
"EpsBearerToRlcMapping", epsBearerToRlcMapping);
415 phy->SetLteEnbCphySapUser (rrc->GetLteEnbCphySapUser ());
416 rrc->SetLteEnbCphySapProvider (phy->GetLteEnbCphySapProvider ());
426 phy->SetDevice (dev);
427 dlPhy->SetDevice (dev);
428 ulPhy->SetDevice (dev);
442 NS_LOG_WARN (
"DL propagation model does not have a Frequency attribute");
449 NS_LOG_WARN (
"UL propagation model does not have a Frequency attribute");
462 NS_ASSERT_MSG (enbApp != 0,
"cannot retrieve EpcEnbApplication");
465 rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
466 enbApp->SetS1SapUser (rrc->GetS1SapUser ());
470 x2->SetEpcX2SapUser (rrc->GetEpcX2SapUser ());
471 rrc->SetEpcX2SapProvider (x2->GetEpcX2SapProvider ());
487 dlPhy->SetHarqPhyModule (harq);
488 ulPhy->SetHarqPhyModule (harq);
489 phy->SetHarqPhyModule (harq);
492 dlPhy->AddRsPowerChunkProcessor (pRs);
495 dlPhy->AddInterferenceCtrlChunkProcessor (pInterf);
498 dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
501 dlPhy->AddDataSinrChunkProcessor (pData);
507 NS_ASSERT_MSG (mm,
"MobilityModel needs to be set on node before calling LteHelper::InstallUeDevice ()");
508 dlPhy->SetMobility (mm);
509 ulPhy->SetMobility (mm);
512 NS_ASSERT_MSG (antenna,
"error in creating the AntennaModel object");
513 dlPhy->SetAntenna (antenna);
514 ulPhy->SetAntenna (antenna);
522 rrcProtocol->SetUeRrc (rrc);
523 rrc->AggregateObject (rrcProtocol);
524 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
525 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
530 rrcProtocol->SetUeRrc (rrc);
531 rrc->AggregateObject (rrcProtocol);
532 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
533 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
538 rrc->SetUseRlcSm (
false);
552 phy->SetLteUeCphySapUser (rrc->GetLteUeCphySapUser ());
553 rrc->SetLteUeCphySapProvider (phy->GetLteUeCphySapProvider ());
558 phy->SetDevice (dev);
559 dlPhy->SetDevice (dev);
560 ulPhy->SetDevice (dev);
561 nas->SetDevice (dev);
601 ueNas->Connect (enbLteDevice->GetCellId (), enbLteDevice->GetDlEarfcn ());
632 double minDistance = std::numeric_limits<double>::infinity ();
638 if (distance < minDistance)
640 minDistance = distance;
641 closestEnbDevice = *i;
645 Attach (ueDevice, closestEnbDevice);
675 void ActivateDrb (uint64_t imsi, uint16_t cellId, uint16_t rnti);
685 m_ueDevice (ueDevice),
695 a->ActivateDrb (imsi, cellId, rnti);
706 uint16_t rnti = ueRrc->
GetRnti();
738 std::ostringstream path;
739 path <<
"/NodeList/" << enbLteDevice->
GetNode ()->
GetId ()
740 <<
"/DeviceList/" << enbLteDevice->
GetIfIndex ()
741 <<
"/LteEnbRrc/ConnectionEstablished";
773 NS_ASSERT_MSG (
m_epcHelper,
"Handover requires the use of the EPC - did you forget to call LteHelper::SetEpcHelper () ?");
852 m_rlcStats = CreateObject<RadioBearerStatsCalculator> (
"RLC");
859 int64_t currentStream = stream;
892 return (currentStream - stream);
910 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/DlPhyTransmission",
917 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/UlPhyTransmission",
924 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/DlSpectrumPhy/DlPhyReception",
931 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/UlSpectrumPhy/UlPhyReception",
964 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/ReportCurrentCellRsrpSinr",
974 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/ReportInterference",
989 m_pdcpStats = CreateObject<RadioBearerStatsCalculator> (
"PDCP");