diff --git a/src/lte/helper/lte-helper.cc b/src/lte/helper/lte-helper.cc index ae9742f30..fff25626e 100644 --- a/src/lte/helper/lte-helper.cc +++ b/src/lte/helper/lte-helper.cc @@ -175,6 +175,11 @@ TypeId LteHelper::GetTypeId (void) BooleanValue (true), MakeBooleanAccessor (&LteHelper::m_useIdealRrc), MakeBooleanChecker ()) + .AddAttribute ("AnrEnabled", + "Activate or deactivate Automatic Neighbour Relation function", + BooleanValue (true), + MakeBooleanAccessor (&LteHelper::m_isAnrEnabled), + MakeBooleanChecker ()) ; return tid; } @@ -392,9 +397,9 @@ LteHelper::InstallSingleEnbDevice (Ptr n) Ptr mac = CreateObject (); Ptr sched = m_schedulerFactory.Create (); Ptr handoverAlgorithm = m_handoverAlgorithmFactory.Create (); - Ptr anr = CreateObject (cellId); Ptr rrc = CreateObject (); + if (m_useIdealRrc) { Ptr rrcProtocol = CreateObject (); @@ -430,9 +435,6 @@ LteHelper::InstallSingleEnbDevice (Ptr n) rrc->SetLteHandoverManagementSapProvider (handoverAlgorithm->GetLteHandoverManagementSapProvider ()); handoverAlgorithm->SetLteHandoverManagementSapUser (rrc->GetLteHandoverManagementSapUser ()); - rrc->SetLteAnrSapProvider (anr->GetLteAnrSapProvider ()); - anr->SetLteAnrSapUser (rrc->GetLteAnrSapUser ()); - mac->SetFfMacSchedSapProvider (sched->GetFfMacSchedSapProvider ()); mac->SetFfMacCschedSapProvider (sched->GetFfMacCschedSapProvider ()); @@ -453,7 +455,14 @@ LteHelper::InstallSingleEnbDevice (Ptr n) dev->SetAttribute ("FfMacScheduler", PointerValue (sched)); dev->SetAttribute ("LteEnbRrc", PointerValue (rrc)); dev->SetAttribute ("LteHandoverAlgorithm", PointerValue (handoverAlgorithm)); - dev->SetAttribute ("LteAnr", PointerValue (anr)); + + if (m_isAnrEnabled) + { + Ptr anr = CreateObject (cellId); + rrc->SetLteAnrSapProvider (anr->GetLteAnrSapProvider ()); + anr->SetLteAnrSapUser (rrc->GetLteAnrSapUser ()); + dev->SetAttribute ("LteAnr", PointerValue (anr)); + } phy->SetDevice (dev); dlPhy->SetDevice (dev); diff --git a/src/lte/helper/lte-helper.h b/src/lte/helper/lte-helper.h index a0562093b..45ee2c62f 100644 --- a/src/lte/helper/lte-helper.h +++ b/src/lte/helper/lte-helper.h @@ -675,6 +675,7 @@ private: uint16_t m_cellIdCounter; bool m_useIdealRrc; + bool m_isAnrEnabled; }; diff --git a/src/lte/model/lte-enb-net-device.cc b/src/lte/model/lte-enb-net-device.cc index 0e2615617..5248d23f5 100644 --- a/src/lte/model/lte-enb-net-device.cc +++ b/src/lte/model/lte-enb-net-device.cc @@ -121,6 +121,7 @@ TypeId LteEnbNetDevice::GetTypeId (void) } LteEnbNetDevice::LteEnbNetDevice () + : m_anr (0) { NS_LOG_FUNCTION (this); } @@ -147,6 +148,12 @@ LteEnbNetDevice::DoDispose () m_handoverAlgorithm->Dispose (); m_handoverAlgorithm = 0; + if (m_anr != 0) + { + m_anr->Dispose (); + m_anr = 0; + } + m_phy->Dispose (); m_phy = 0; @@ -269,7 +276,11 @@ LteEnbNetDevice::DoInitialize (void) m_mac->Initialize (); m_rrc->Initialize (); m_handoverAlgorithm->Initialize (); - m_anr->Initialize (); + + if (m_anr != 0) + { + m_anr->Initialize (); + } } diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index 300aa09a8..df4bd85c9 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -2092,7 +2092,11 @@ void LteEnbRrc::AddX2Neighbour (uint16_t cellId) { NS_LOG_FUNCTION (this << cellId); - m_anrSapProvider->AddNeighbourRelation (cellId); + + if (m_anrSapProvider != 0) + { + m_anrSapProvider->AddNeighbourRelation (cellId); + } } LteRrcSap::SystemInformationBlockType1