Attribute to enable/disable ANR
authorBudiarto Herman <budiarto.herman@magister.fi>
Fri, 23 Aug 2013 15:47:32 +0300
changeset 10329 e9286f613bf9
parent 10328 31ba13ced6b5
child 10330 7b717087c639
Attribute to enable/disable ANR
src/lte/helper/lte-helper.cc
src/lte/helper/lte-helper.h
src/lte/model/lte-enb-net-device.cc
src/lte/model/lte-enb-rrc.cc
--- a/src/lte/helper/lte-helper.cc	Tue Aug 20 11:32:22 2013 +0300
+++ b/src/lte/helper/lte-helper.cc	Fri Aug 23 15:47:32 2013 +0300
@@ -175,6 +175,11 @@
                    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 @@
   Ptr<LteEnbMac> mac = CreateObject<LteEnbMac> ();
   Ptr<FfMacScheduler> sched = m_schedulerFactory.Create<FfMacScheduler> ();
   Ptr<LteHandoverAlgorithm> handoverAlgorithm = m_handoverAlgorithmFactory.Create<LteHandoverAlgorithm> ();
-  Ptr<LteAnr> anr = CreateObject<LteAnr> (cellId);
   Ptr<LteEnbRrc> rrc = CreateObject<LteEnbRrc> ();
 
+
   if (m_useIdealRrc)
     {
       Ptr<LteEnbRrcProtocolIdeal> rrcProtocol = CreateObject<LteEnbRrcProtocolIdeal> ();
@@ -430,9 +435,6 @@
   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 @@
   dev->SetAttribute ("FfMacScheduler", PointerValue (sched));
   dev->SetAttribute ("LteEnbRrc", PointerValue (rrc)); 
   dev->SetAttribute ("LteHandoverAlgorithm", PointerValue (handoverAlgorithm));
-  dev->SetAttribute ("LteAnr", PointerValue (anr));
+
+  if (m_isAnrEnabled)
+    {
+      Ptr<LteAnr> anr = CreateObject<LteAnr> (cellId);
+      rrc->SetLteAnrSapProvider (anr->GetLteAnrSapProvider ());
+      anr->SetLteAnrSapUser (rrc->GetLteAnrSapUser ());
+      dev->SetAttribute ("LteAnr", PointerValue (anr));
+    }
 
   phy->SetDevice (dev);
   dlPhy->SetDevice (dev);
--- a/src/lte/helper/lte-helper.h	Tue Aug 20 11:32:22 2013 +0300
+++ b/src/lte/helper/lte-helper.h	Fri Aug 23 15:47:32 2013 +0300
@@ -675,6 +675,7 @@
   uint16_t m_cellIdCounter;
 
   bool m_useIdealRrc;
+  bool m_isAnrEnabled;
 };
 
 
--- a/src/lte/model/lte-enb-net-device.cc	Tue Aug 20 11:32:22 2013 +0300
+++ b/src/lte/model/lte-enb-net-device.cc	Fri Aug 23 15:47:32 2013 +0300
@@ -121,6 +121,7 @@
 }
 
 LteEnbNetDevice::LteEnbNetDevice ()
+  : m_anr (0)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -147,6 +148,12 @@
   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 @@
   m_mac->Initialize ();
   m_rrc->Initialize ();
   m_handoverAlgorithm->Initialize ();
-  m_anr->Initialize ();
+
+  if (m_anr != 0)
+    {
+      m_anr->Initialize ();
+    }
 }
 
 
--- a/src/lte/model/lte-enb-rrc.cc	Tue Aug 20 11:32:22 2013 +0300
+++ b/src/lte/model/lte-enb-rrc.cc	Fri Aug 23 15:47:32 2013 +0300
@@ -2092,7 +2092,11 @@
 LteEnbRrc::AddX2Neighbour (uint16_t cellId)
 {
   NS_LOG_FUNCTION (this << cellId);
-  m_anrSapProvider->AddNeighbourRelation (cellId);
+
+  if (m_anrSapProvider != 0)
+    {
+      m_anrSapProvider->AddNeighbourRelation (cellId);
+    }
 }
 
 LteRrcSap::SystemInformationBlockType1