/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store.h" #include "ns3/mmwave-helper.h" #include #include "ns3/global-route-manager.h" #include "ns3/ipv4-global-routing-helper.h" #include "ns3/internet-module.h" #include "ns3/applications-module.h" #include "ns3/log.h" using namespace ns3; double distUpdateInterval = 100.0; // in ms double distInc = 0.5; // increment by 10 meters void updateDistance (double dist, Ptr ue) { std::cout << "************* distance changing to " << dist << " *************" << std::endl; Ptr mobModel = ue->GetObject (); mobModel->SetPosition (Vector (dist, 0.0, 0.0)); Vector position = mobModel->GetPosition(); std::cout<< "The position of UE is"<= 0 && mcsDl < 29) { Config::SetDefault ("ns3::MmWaveFlexTtiMacScheduler::FixedMcsDl", BooleanValue(true)); Config::SetDefault ("ns3::MmWaveFlexTtiMacScheduler::McsDefaultDl", UintegerValue(mcsDl)); } Config::SetDefault ("ns3::MmWaveFlexTtiMacScheduler::HarqEnabled", BooleanValue(harqEnabled)); Config::SetDefault ("ns3::MmWaveFlexTtiMacScheduler::UlSchedOnly", BooleanValue(true)); Config::SetDefault ("ns3::MmWavePhyMacCommon::ResourceBlockNum", UintegerValue(1)); Config::SetDefault ("ns3::MmWavePhyMacCommon::ChunkPerRB", UintegerValue(72)); Config::SetDefault ("ns3::MmWaveBeamforming::LongTermUpdatePeriod", TimeValue (Seconds (2*simTime))); Config::SetDefault ("ns3::LteEnbRrc::SystemInformationPeriodicity", TimeValue (MilliSeconds (1.0))); Config::SetDefault ("ns3::MmWaveAmc::Ber", DoubleValue (0.001)); Config::SetDefault ("ns3::MmWavePropagationLossModel::ChannelStates", StringValue ("l")); Config::SetDefault ("ns3::MmWaveBeamforming::SmallScaleFading", BooleanValue (smallScale)); Config::SetDefault ("ns3::MmWaveBeamforming::FixSpeed", BooleanValue (true)); Config::SetDefault ("ns3::MmWaveBeamforming::UeSpeed", DoubleValue (speed)); Ptr mmwHelper = CreateObject (); mmwHelper->Initialize(); mmwHelper->SetHarqEnabled (harqEnabled); /* A configuration example. * mmwHelper->GetPhyMacConfigurable ()->SetAttribute("SymbolPerSlot", UintegerValue(30)); */ NodeContainer enbNodes; NodeContainer ueNodes; enbNodes.Create (numEnb); ueNodes.Create (numUe); Ptr enbPositionAlloc = CreateObject (); enbPositionAlloc->Add (Vector (0.0, 0.0, 0.0)); enbPositionAlloc->Add (Vector (45.0, 0.0, 0.0)); MobilityHelper enbmobility; enbmobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); enbmobility.SetPositionAllocator(enbPositionAlloc); enbmobility.Install (enbNodes); BuildingsHelper::Install (enbNodes); MobilityHelper uemobility; Ptr uePositionAlloc = CreateObject (); uePositionAlloc->Add (Vector (distMin, 0.0, 0.0)); Simulator::Schedule (MilliSeconds(distUpdateInterval), &updateDistance, distMin+distInc, ueNodes.Get (0)); uemobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); uemobility.SetPositionAllocator(uePositionAlloc); uemobility.Install (ueNodes); BuildingsHelper::Install (ueNodes); NetDeviceContainer enbNetDev = mmwHelper->InstallEnbDevice (enbNodes); NetDeviceContainer ueNetDev = mmwHelper->InstallUeDevice (ueNodes); mmwHelper->AttachToClosestEnb (ueNetDev, enbNetDev); mmwHelper->EnableTraces(); // Attach a UE to a eNB Ptr enb1 = enbNodes.Get (0); Ptr mobModelenb1 = enb1->GetObject (); Vector positionenb1 = mobModelenb1->GetPosition(); std::cout<< "The position of ENB1 is"< enb2 = enbNodes.Get (1); Ptr mobModelenb2 = enb2->GetObject (); Vector positionenb2 = mobModelenb2->GetPosition(); std::cout<< "The position of ENB2 is"<ActivateDataRadioBearer (ueNetDev, bearer); Simulator::Stop (Seconds (simTime)); NS_LOG_UNCOND ("Simulation running for " << simTime << " seconds"); Simulator::Run (); Simulator::Destroy (); return 0; }