--- a/src/lte/examples/inter-cell-interference.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/examples/inter-cell-interference.cc Wed Apr 27 17:42:23 2011 +0200
@@ -90,9 +90,8 @@
<< "_numUes" << std::setw(3) << std::setfill('0') << numUes
<< "_rngRun" << std::setw(3) << std::setfill('0') << runValue.Get () ;
-
- LenaHelper lena;
-
+ Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
+
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
NodeContainer ueNodes1, ueNodes2;
@@ -133,19 +132,19 @@
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs1;
NetDeviceContainer ueDevs2;
- enbDevs = lena.InstallEnbDevice (enbNodes);
- ueDevs1 = lena.InstallUeDevice (ueNodes1);
- ueDevs2 = lena.InstallUeDevice (ueNodes2);
+ enbDevs = lena->InstallEnbDevice (enbNodes);
+ ueDevs1 = lena->InstallUeDevice (ueNodes1);
+ ueDevs2 = lena->InstallUeDevice (ueNodes2);
// Attach UEs to a eNB
- lena.Attach (ueDevs1, enbDevs.Get (0));
- lena.Attach (ueDevs2, enbDevs.Get (1));
+ lena->Attach (ueDevs1, enbDevs.Get (0));
+ lena->Attach (ueDevs2, enbDevs.Get (1));
// Activate an EPS bearer on all UEs
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
- lena.ActivateEpsBearer (ueDevs1, bearer);
- lena.ActivateEpsBearer (ueDevs2, bearer);
+ lena->ActivateEpsBearer (ueDevs1, bearer);
+ lena->ActivateEpsBearer (ueDevs2, bearer);
Simulator::Stop (Seconds (10));
--- a/src/lte/examples/lena-first-sim.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/examples/lena-first-sim.cc Wed Apr 27 17:42:23 2011 +0200
@@ -44,9 +44,9 @@
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
- LenaHelper lena;
+ Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
- lena.EnableLogComponents ();
+ //lena->EnableLogComponents ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
@@ -64,18 +64,18 @@
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
- //lena.SetScheduler ("RrFfMacScheduler");
- lena.SetScheduler ("PfFfMacScheduler");
- enbDevs = lena.InstallEnbDevice (enbNodes);
- ueDevs = lena.InstallUeDevice (ueNodes);
+ //lena->SetSchedulerType ("ns3::RrFfMacScheduler");
+ lena->SetSchedulerType ("ns3::PfFfMacScheduler");
+ enbDevs = lena->InstallEnbDevice (enbNodes);
+ ueDevs = lena->InstallUeDevice (ueNodes);
// Attach a UE to a eNB
- lena.Attach (ueDevs, enbDevs.Get (0));
+ lena->Attach (ueDevs, enbDevs.Get (0));
// Activate an EPS bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
- lena.ActivateEpsBearer (ueDevs, bearer);
+ lena->ActivateEpsBearer (ueDevs, bearer);
Simulator::Stop (Seconds (0.005));
--- a/src/lte/examples/lena-rlc-calculator.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/examples/lena-rlc-calculator.cc Wed Apr 27 17:42:23 2011 +0200
@@ -55,8 +55,6 @@
int main (int argc, char *argv[])
{
- LenaHelper lena;
-
// Command line arguments
CommandLine cmd;
cmd.Parse (argc, argv);
@@ -67,8 +65,10 @@
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
+ Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
+
// Enable LTE log components
- //lena.EnableLogComponents ();
+ //lena->EnableLogComponents ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
@@ -86,16 +86,16 @@
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
- enbDevs = lena.InstallEnbDevice (enbNodes);
- ueDevs = lena.InstallUeDevice (ueNodes);
+ enbDevs = lena->InstallEnbDevice (enbNodes);
+ ueDevs = lena->InstallUeDevice (ueNodes);
// Attach a UE to a eNB
- lena.Attach (ueDevs, enbDevs.Get (0));
+ lena->Attach (ueDevs, enbDevs.Get (0));
// Activate an EPS bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
- lena.ActivateEpsBearer (ueDevs, bearer);
+ lena->ActivateEpsBearer (ueDevs, bearer);
Simulator::Stop (Seconds (4));
--- a/src/lte/helper/lena-helper.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/helper/lena-helper.cc Wed Apr 27 17:42:23 2011 +0200
@@ -22,6 +22,9 @@
#include "lena-helper.h"
+#include <ns3/string.h>
+#include <ns3/log.h>
+
#include <ns3/lte-enb-rrc.h>
#include <ns3/lte-ue-rrc.h>
#include <ns3/lte-ue-mac.h>
@@ -37,66 +40,105 @@
#include <ns3/lte-enb-net-device.h>
#include <ns3/lte-ue-net-device.h>
-#include <ns3/lte-spectrum-value-helper.h>
-#include <ns3/lte-enb-mac.h>
-#include <ns3/pf-ff-mac-scheduler.h>
-#include <ns3/lte-enb-rrc.h>
-#include <ns3/lte-ue-mac.h>
-#include <ns3/lte-ue-rrc.h>
+#include <ns3/ff-mac-scheduler.h>
+NS_LOG_COMPONENT_DEFINE ("LenaHelper");
namespace ns3 {
+NS_OBJECT_ENSURE_REGISTERED (LenaHelper);
LenaHelper::LenaHelper (void)
{
+ NS_LOG_FUNCTION (this);
+}
+
+void
+LenaHelper::DoStart (void)
+{
+ NS_LOG_FUNCTION (this);
m_downlinkChannel = CreateObject<SingleModelSpectrumChannel> ();
m_uplinkChannel = CreateObject<SingleModelSpectrumChannel> ();
- Ptr<SpectrumPropagationLossModel> dlPropagationModel = CreateObject<FriisSpectrumPropagationLossModel> ();
- Ptr<SpectrumPropagationLossModel> ulPropagationModel = CreateObject<FriisSpectrumPropagationLossModel> ();
+ Ptr<SpectrumPropagationLossModel> dlPropagationModel = m_propagationModelFactory.Create<SpectrumPropagationLossModel> ();
+ Ptr<SpectrumPropagationLossModel> ulPropagationModel = m_propagationModelFactory.Create<SpectrumPropagationLossModel> ();
m_downlinkChannel->AddSpectrumPropagationLossModel (dlPropagationModel);
- m_uplinkChannel->AddSpectrumPropagationLossModel (ulPropagationModel);
-
- SetScheduler ("RrFfMacScheduler"); // default scheduler
+ m_uplinkChannel->AddSpectrumPropagationLossModel (ulPropagationModel);
+ Object::DoStart ();
}
LenaHelper::~LenaHelper (void)
{
- m_downlinkChannel = 0;
- m_uplinkChannel = 0;
+ NS_LOG_FUNCTION (this);
}
+void
+LenaHelper::DoDispose ()
+{
+ NS_LOG_FUNCTION (this);
+ m_downlinkChannel = 0;
+ m_uplinkChannel = 0;
+ Object::DoDispose ();
+}
+
+TypeId LenaHelper::GetTypeId (void)
+{
+ static TypeId
+ tid =
+ TypeId ("ns3::LenaHelper")
+ .SetParent<Object> ()
+ .AddConstructor<LenaHelper> ()
+ .AddAttribute ("Scheduler",
+ "The type of scheduler to be used for eNBs",
+ StringValue ("ns3::RrFfMacScheduler"),
+ MakeStringAccessor (&LenaHelper::SetSchedulerType),
+ MakeStringChecker ())
+ .AddAttribute ("PropagationModel",
+ "The type of propagation model to be used",
+ StringValue ("ns3::FriisSpectrumPropagationLossModel"),
+ MakeStringAccessor (&LenaHelper::SetPropagationModelType),
+ MakeStringChecker ())
+ ;
+ return tid;
+}
+
+void
+LenaHelper::SetSchedulerType (std::string type)
+{
+ NS_LOG_FUNCTION (this << type);
+ m_schedulerFactory = ObjectFactory ();
+ m_schedulerFactory.SetTypeId (type);
+}
+
+void
+LenaHelper::SetSchedulerAttribute (std::string n, const AttributeValue &v)
+{
+ NS_LOG_FUNCTION (this << n);
+ m_schedulerFactory.Set (n, v);
+}
void
-LenaHelper::SetScheduler (std::string type,
- std::string n0, const AttributeValue &v0,
- std::string n1, const AttributeValue &v1,
- std::string n2, const AttributeValue &v2,
- std::string n3, const AttributeValue &v3,
- std::string n4, const AttributeValue &v4,
- std::string n5, const AttributeValue &v5,
- std::string n6, const AttributeValue &v6,
- std::string n7, const AttributeValue &v7)
+LenaHelper::SetPropagationModelType (std::string type)
{
- m_scheduler = ObjectFactory ();
- m_scheduler.SetTypeId (type);
- m_scheduler.Set (n0, v0);
- m_scheduler.Set (n1, v1);
- m_scheduler.Set (n2, v2);
- m_scheduler.Set (n3, v3);
- m_scheduler.Set (n4, v4);
- m_scheduler.Set (n5, v5);
- m_scheduler.Set (n6, v6);
- m_scheduler.Set (n7, v7);
+ NS_LOG_FUNCTION (this << type);
+ m_propagationModelFactory = ObjectFactory ();
+ m_propagationModelFactory.SetTypeId (type);
}
+void
+LenaHelper::SetPropagationModelAttribute (std::string n, const AttributeValue &v)
+{
+ NS_LOG_FUNCTION (this << n);
+ m_propagationModelFactory.Set (n, v);
+}
NetDeviceContainer
LenaHelper::InstallEnbDevice (NodeContainer c)
{
+ NS_LOG_FUNCTION (this);
+ Start (); // will run DoStart () if necessary
NetDeviceContainer devices;
for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
{
@@ -110,6 +152,7 @@
NetDeviceContainer
LenaHelper::InstallUeDevice (NodeContainer c)
{
+ NS_LOG_FUNCTION (this);
NetDeviceContainer devices;
for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
{
@@ -124,13 +167,15 @@
void
LenaHelper::SetEnbDeviceAttribute (std::string name, const AttributeValue &value)
{
-
+ NS_LOG_FUNCTION (this);
+ NS_FATAL_ERROR ("not implemented yet");
}
void
LenaHelper::SetUeDeviceAttribute (std::string name, const AttributeValue &value)
{
-
+ NS_LOG_FUNCTION (this);
+ NS_FATAL_ERROR ("not implemented yet");
}
@@ -156,7 +201,7 @@
m_uplinkChannel->AddRx (ulPhy);
Ptr<LteEnbMac> mac = CreateObject<LteEnbMac> ();
- Ptr<FfMacScheduler> sched = m_scheduler.Create<FfMacScheduler> ();
+ Ptr<FfMacScheduler> sched = m_schedulerFactory.Create<FfMacScheduler> ();
Ptr<LteEnbRrc> rrc = CreateObject<LteEnbRrc> ();
--- a/src/lte/helper/lena-helper.h Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/helper/lena-helper.h Wed Apr 27 17:42:23 2011 +0200
@@ -43,12 +43,14 @@
* Creation and configuration of LTE entities
*
*/
-class LenaHelper
+class LenaHelper : public Object
{
public:
LenaHelper (void);
- ~LenaHelper (void);
+ virtual ~LenaHelper (void);
+ static TypeId GetTypeId (void);
+ virtual void DoDispose (void);
/**
* \todo to be implemented
@@ -117,41 +119,30 @@
*/
void ActivateEpsBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer);
+ /**
+ *
+ *
+ * \param type the type of scheduler to be used for the eNBs
+ */
+ void SetSchedulerType (std::string type);
/**
- * \param type the type of ns3::WifiRemoteStationManager to create.
- * \param n0 the name of the attribute to set
- * \param v0 the value of the attribute to set
- * \param n1 the name of the attribute to set
- * \param v1 the value of the attribute to set
- * \param n2 the name of the attribute to set
- * \param v2 the value of the attribute to set
- * \param n3 the name of the attribute to set
- * \param v3 the value of the attribute to set
- * \param n4 the name of the attribute to set
- * \param v4 the value of the attribute to set
- * \param n5 the name of the attribute to set
- * \param v5 the value of the attribute to set
- * \param n6 the name of the attribute to set
- * \param v6 the value of the attribute to set
- * \param n7 the name of the attribute to set
- * \param v7 the value of the attribute to set
- *
- * All the attributes specified in this method should exist
- * in the requested scheduler.
- */
- void SetScheduler (std::string type,
- std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
- std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
- std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
- std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
- std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
- std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
- std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
- std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+ * set an attribute for the scheduler to be created
+ */
+ void SetSchedulerAttribute (std::string n, const AttributeValue &v);
+
+ /**
+ *
+ *
+ * \param type the type of propagation model to be used for the eNBs
+ */
+ void SetPropagationModelType (std::string type);
-
-
+ /**
+ * set an attribute for the propagation model to be created
+ */
+ void SetPropagationModelAttribute (std::string n, const AttributeValue &v);
+
/**
* Enables logging for all components of the LENA architecture
@@ -159,14 +150,22 @@
*/
void EnableLogComponents (void);
+
+protected:
+
+ // inherited from Object
+ virtual void DoStart (void);
+
private:
+
Ptr<NetDevice> InstallSingleEnbDevice (Ptr<Node> n);
Ptr<NetDevice> InstallSingleUeDevice (Ptr<Node> n);
Ptr<SpectrumChannel> m_downlinkChannel;
Ptr<SpectrumChannel> m_uplinkChannel;
- ObjectFactory m_scheduler;
+ ObjectFactory m_schedulerFactory;
+ ObjectFactory m_propagationModelFactory;
};
--- a/src/lte/model/pf-ff-mac-scheduler.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/model/pf-ff-mac-scheduler.cc Wed Apr 27 17:42:23 2011 +0200
@@ -233,7 +233,7 @@
TypeId
PfFfMacScheduler::GetTypeId (void)
{
- static TypeId tid = TypeId ("PfFfMacScheduler")
+ static TypeId tid = TypeId ("ns3::PfFfMacScheduler")
.SetParent<FfMacScheduler> ()
.AddConstructor<PfFfMacScheduler> ();
return tid;
--- a/src/lte/model/rr-ff-mac-scheduler.cc Tue Apr 26 13:53:55 2011 +0200
+++ b/src/lte/model/rr-ff-mac-scheduler.cc Wed Apr 27 17:42:23 2011 +0200
@@ -230,7 +230,7 @@
TypeId
RrFfMacScheduler::GetTypeId (void)
{
- static TypeId tid = TypeId ("RrFfMacScheduler")
+ static TypeId tid = TypeId ("ns3::RrFfMacScheduler")
.SetParent<FfMacScheduler> ()
.AddConstructor<RrFfMacScheduler> ();
return tid;