#include<ns3/lte-module.h>
#include<ns3/applications-module.h>
#include<ns3/internet-module.h>
#include<ns3/point-to-point-helper.h>
#include<ns3/network-module.h>
#include<ns3/core-module.h>
#include<ns3/mobility-module.h>
#include<ns3/buildings-helper.h>
#include<iomanip>
#include<stdio.h>
#include<ios>
//#include "lte-simple-helper.h"
//#include "lte-test-entities.h"
#include "ns3/config-store.h"
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("icn8");
int main (int argc, char *argv[])
{
uint16_t numEnb = 1;
uint16_t numUes = 10;
Time simTime = MilliSeconds (1050);
bool useCa = false;
CommandLine cmd;
cmd.AddValue ("simTime", "Total duration of the simulation", simTime);
cmd.AddValue ("useCa", "Whether to use carrier aggregation.", useCa);
cmd.Parse (argc, argv);
ConfigStore inputConfig;
inputConfig.ConfigureDefaults ();
// Parse again so you can override default values from the command line
cmd.Parse (argc, argv);
if (useCa)
{
Config::SetDefault ("ns3::LteHelper::UseCa", BooleanValue (useCa));
Config::SetDefault ("ns3::LteHelper::NumberOfComponentCarriers", UintegerValue (2));
Config::SetDefault ("ns3::LteHelper::EnbComponentCarrierManager", StringValue ("ns3::RrComponentCarrierManager"));
}
Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
//eNB and UE nodes
NodeContainer ueNodes;
NodeContainer enbNodes;
ueNodes.Create(numUes);
enbNodes.Create(numEnb);
// Install Mobility Model
MobilityHelper mobility;
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (enbNodes);
BuildingsHelper::Install (enbNodes);
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (ueNodes);
BuildingsHelper::Install (ueNodes);
NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice(enbNodes);
NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice(ueNodes);
lteHelper->Attach(ueLteDevs, enbLteDevs.Get(0));
//Attach a data radio bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer(q);
for(uint32_t u = 0; u<ueNodes.GetN(); ++u)
{
Ptr<NetDevice> ueDev = ueNodes.Get(u)->GetDevice(u);
//Ptr<NetDevice> ueDev = ueLteDevs.Get(u);
lteHelper->ActivateDataRadioBearer(ueDev, bearer);
Ptr<LteEnbNetDevice> enbLteDevice = ueDev->GetObject<LteUeNetDevice> ()->GetTargetEnb ();
Ptr<LteUeRrc> ueRrc = ueDev->GetObject<LteUeNetDevice> ()->GetRrc ();
uint16_t rnti = ueRrc->GetRnti();
Ptr<LteEnbRrc> enbRrc = enbLteDevice->GetObject<LteEnbNetDevice>()->GetRrc();
Ptr<UeManager> ueManager = enbRrc->GetUeManager(rnti);
//ueManager->SetAttribute("C-RNTI", UintegerValue(8));
// for(std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = ueManager->m_drbMap.begin (); it != ueManager->m_drbMap.end (); ++it)
// {
// Ptr<LtePdcp> pdcp = it->second->m_pdcp;
// Ptr<LteRlc> rlc = it->second->m_rlc;
// pdcp->SetRnti(11);
// rlc->SetRnti(11);
// }
Ptr<LteDataRadioBearerInfo> bearerInfo = ueManager->GetObject<LteDataRadioBearerInfo>();
Ptr<LtePdcp> pdcp = bearerInfo->GetObject<LtePdcp>();
Ptr<LteRlc> rlc = bearerInfo->GetObject<LteRlc>();
pdcp->SetRnti(11);
rlc->SetRnti(11);
}
lteHelper->EnableTraces ();
Simulator::Stop (simTime);
Simulator::Run ();
Simulator::Destroy ();
return 0;
}