24 #include <ns3/string.h>
26 #include <ns3/abort.h>
27 #include <ns3/pointer.h>
28 #include <ns3/lte-enb-rrc.h>
29 #include <ns3/epc-ue-nas.h>
30 #include <ns3/epc-enb-application.h>
31 #include <ns3/lte-ue-rrc.h>
32 #include <ns3/lte-ue-mac.h>
33 #include <ns3/lte-enb-mac.h>
34 #include <ns3/lte-enb-net-device.h>
35 #include <ns3/lte-enb-phy.h>
36 #include <ns3/lte-ue-phy.h>
37 #include <ns3/lte-spectrum-phy.h>
38 #include <ns3/lte-chunk-processor.h>
39 #include <ns3/multi-model-spectrum-channel.h>
40 #include <ns3/friis-spectrum-propagation-loss.h>
41 #include <ns3/trace-fading-loss-model.h>
42 #include <ns3/isotropic-antenna-model.h>
43 #include <ns3/lte-enb-net-device.h>
44 #include <ns3/lte-ue-net-device.h>
45 #include <ns3/ff-mac-scheduler.h>
46 #include <ns3/lte-ffr-algorithm.h>
47 #include <ns3/lte-handover-algorithm.h>
48 #include <ns3/lte-anr.h>
49 #include <ns3/lte-rlc.h>
50 #include <ns3/lte-rlc-um.h>
51 #include <ns3/lte-rlc-am.h>
52 #include <ns3/epc-enb-s1-sap.h>
53 #include <ns3/lte-rrc-protocol-ideal.h>
54 #include <ns3/lte-rrc-protocol-real.h>
55 #include <ns3/mac-stats-calculator.h>
56 #include <ns3/phy-stats-calculator.h>
57 #include <ns3/phy-tx-stats-calculator.h>
58 #include <ns3/phy-rx-stats-calculator.h>
59 #include <ns3/epc-helper.h>
61 #include <ns3/buildings-propagation-loss-model.h>
62 #include <ns3/lte-spectrum-value-helper.h>
63 #include <ns3/epc-x2.h>
72 : m_fadingStreamsAssigned (false),
95 NS_LOG_LOGIC (
this <<
" using a SpectrumPropagationLossModel in DL");
100 NS_LOG_LOGIC (
this <<
" using a PropagationLossModel in DL");
102 NS_ASSERT_MSG (dlPlm != 0,
" " << m_downlinkPathlossModel <<
" is neither PropagationLossModel nor SpectrumPropagationLossModel");
110 NS_LOG_LOGIC (
this <<
" using a SpectrumPropagationLossModel in UL");
115 NS_LOG_LOGIC (
this <<
" using a PropagationLossModel in UL");
127 m_phyStats = CreateObject<PhyStatsCalculator> ();
130 m_macStats = CreateObject<MacStatsCalculator> ();
146 .AddConstructor<LteHelper> ()
147 .AddAttribute (
"Scheduler",
148 "The type of scheduler to be used for eNBs. "
149 "The allowed values for this attributes are the type names "
150 "of any class inheriting from ns3::FfMacScheduler.",
154 MakeStringChecker ())
155 .AddAttribute (
"FfrAlgorithm",
156 "The type of FFR algorithm to be used for eNBs. "
157 "The allowed values for this attributes are the type names "
158 "of any class inheriting from ns3::LteFfrAlgorithm.",
162 MakeStringChecker ())
163 .AddAttribute (
"HandoverAlgorithm",
164 "The type of handover algorithm to be used for eNBs. "
165 "The allowed values for this attributes are the type names "
166 "of any class inheriting from ns3::LteHandoverAlgorithm.",
170 MakeStringChecker ())
171 .AddAttribute (
"PathlossModel",
172 "The type of pathloss model to be used. "
173 "The allowed values for this attributes are the type names "
174 "of any class inheriting from ns3::PropagationLossModel.",
177 MakeStringChecker ())
178 .AddAttribute (
"FadingModel",
179 "The type of fading model to be used."
180 "The allowed values for this attributes are the type names "
181 "of any class inheriting from ns3::SpectrumPropagationLossModel."
182 "If the type is set to an empty string, no fading model is used.",
185 MakeStringChecker ())
186 .AddAttribute (
"UseIdealRrc",
187 "If true, LteRrcProtocolIdeal will be used for RRC signaling. "
188 "If false, LteRrcProtocolReal will be used.",
191 MakeBooleanChecker ())
192 .AddAttribute (
"AnrEnabled",
193 "Activate or deactivate Automatic Neighbour Relation function",
196 MakeBooleanChecker ())
197 .AddAttribute (
"UsePdschForCqiGeneration",
198 "If true, DL-CQI will be calculated from PDCCH as signal and PDSCH as interference "
199 "If false, DL-CQI will be calculated from PDCCH as signal and PDCCH as interference ",
202 MakeBooleanChecker ())
391 devices.
Add (device);
405 devices.
Add (device);
424 dlPhy->SetHarqPhyModule (harq);
425 ulPhy->SetHarqPhyModule (harq);
426 phy->SetHarqPhyModule (harq);
430 ulPhy->AddCtrlSinrChunkProcessor (pCtrl);
435 ulPhy->AddDataSinrChunkProcessor (pData);
439 ulPhy->AddInterferenceDataChunkProcessor (pInterf);
445 NS_ASSERT_MSG (mm,
"MobilityModel needs to be set on node before calling LteHelper::InstallUeDevice ()");
446 dlPhy->SetMobility (mm);
447 ulPhy->SetMobility (mm);
450 NS_ASSERT_MSG (antenna,
"error in creating the AntennaModel object");
451 dlPhy->SetAntenna (antenna);
452 ulPhy->SetAntenna (antenna);
463 rrcProtocol->SetLteEnbRrcSapProvider (rrc->GetLteEnbRrcSapProvider ());
464 rrc->SetLteEnbRrcSapUser (rrcProtocol->GetLteEnbRrcSapUser ());
465 rrc->AggregateObject (rrcProtocol);
466 rrcProtocol->SetCellId (cellId);
471 rrcProtocol->SetLteEnbRrcSapProvider (rrc->GetLteEnbRrcSapProvider ());
472 rrc->SetLteEnbRrcSapUser (rrcProtocol->GetLteEnbRrcSapUser ());
473 rrc->AggregateObject (rrcProtocol);
474 rrcProtocol->SetCellId (cellId);
480 rrc->GetAttribute (
"EpsBearerToRlcMapping", epsBearerToRlcMapping);
488 rrc->SetLteEnbCmacSapProvider (mac->GetLteEnbCmacSapProvider ());
489 mac->SetLteEnbCmacSapUser (rrc->GetLteEnbCmacSapUser ());
490 rrc->SetLteMacSapProvider (mac->GetLteMacSapProvider ());
492 rrc->SetLteHandoverManagementSapProvider (handoverAlgorithm->GetLteHandoverManagementSapProvider ());
493 handoverAlgorithm->SetLteHandoverManagementSapUser (rrc->GetLteHandoverManagementSapUser ());
495 mac->SetFfMacSchedSapProvider (sched->GetFfMacSchedSapProvider ());
496 mac->SetFfMacCschedSapProvider (sched->GetFfMacCschedSapProvider ());
498 sched->SetFfMacSchedSapUser (mac->GetFfMacSchedSapUser ());
499 sched->SetFfMacCschedSapUser (mac->GetFfMacCschedSapUser ());
501 phy->SetLteEnbPhySapUser (mac->GetLteEnbPhySapUser ());
502 mac->SetLteEnbPhySapProvider (phy->GetLteEnbPhySapProvider ());
504 phy->SetLteEnbCphySapUser (rrc->GetLteEnbCphySapUser ());
505 rrc->SetLteEnbCphySapProvider (phy->GetLteEnbCphySapProvider ());
508 sched->SetLteFfrSapProvider (ffrAlgorithm->GetLteFfrSapProvider ());
509 ffrAlgorithm->SetLteFfrSapUser (sched->GetLteFfrSapUser ());
511 rrc->SetLteFfrRrcSapProvider (ffrAlgorithm->GetLteFfrRrcSapProvider ());
512 ffrAlgorithm->SetLteFfrRrcSapUser (rrc->GetLteFfrRrcSapUser ());
528 rrc->SetLteAnrSapProvider (anr->GetLteAnrSapProvider ());
529 anr->SetLteAnrSapUser (rrc->GetLteAnrSapUser ());
533 phy->SetDevice (dev);
534 dlPhy->SetDevice (dev);
535 ulPhy->SetDevice (dev);
549 NS_LOG_WARN (
"DL propagation model does not have a Frequency attribute");
556 NS_LOG_WARN (
"UL propagation model does not have a Frequency attribute");
568 NS_ASSERT_MSG (enbApp != 0,
"cannot retrieve EpcEnbApplication");
571 rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
572 enbApp->SetS1SapUser (rrc->GetS1SapUser ());
576 x2->SetEpcX2SapUser (rrc->GetEpcX2SapUser ());
577 rrc->SetEpcX2SapProvider (x2->GetEpcX2SapProvider ());
593 dlPhy->SetHarqPhyModule (harq);
594 ulPhy->SetHarqPhyModule (harq);
595 phy->SetHarqPhyModule (harq);
599 dlPhy->AddRsPowerChunkProcessor (pRs);
603 dlPhy->AddInterferenceCtrlChunkProcessor (pInterf);
608 dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
612 dlPhy->AddDataSinrChunkProcessor (pData);
620 dlPhy->AddInterferenceDataChunkProcessor (pDataInterf);
626 NS_ASSERT_MSG (mm,
"MobilityModel needs to be set on node before calling LteHelper::InstallUeDevice ()");
627 dlPhy->SetMobility (mm);
628 ulPhy->SetMobility (mm);
631 NS_ASSERT_MSG (antenna,
"error in creating the AntennaModel object");
632 dlPhy->SetAntenna (antenna);
633 ulPhy->SetAntenna (antenna);
641 rrcProtocol->SetUeRrc (rrc);
642 rrc->AggregateObject (rrcProtocol);
643 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
644 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
649 rrcProtocol->SetUeRrc (rrc);
650 rrc->AggregateObject (rrcProtocol);
651 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
652 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
657 rrc->SetUseRlcSm (
false);
661 nas->SetAsSapProvider (rrc->GetAsSapProvider ());
662 rrc->SetAsSapUser (nas->GetAsSapUser ());
664 rrc->SetLteUeCmacSapProvider (mac->GetLteUeCmacSapProvider ());
665 mac->SetLteUeCmacSapUser (rrc->GetLteUeCmacSapUser ());
666 rrc->SetLteMacSapProvider (mac->GetLteMacSapProvider ());
668 phy->SetLteUePhySapUser (mac->GetLteUePhySapUser ());
669 mac->SetLteUePhySapProvider (phy->GetLteUePhySapProvider ());
671 phy->SetLteUeCphySapUser (rrc->GetLteUeCphySapUser ());
672 rrc->SetLteUeCphySapProvider (phy->GetLteUeCphySapProvider ());
685 phy->SetDevice (dev);
686 dlPhy->SetDevice (dev);
687 ulPhy->SetDevice (dev);
688 nas->SetDevice (dev);
725 NS_FATAL_ERROR (
"This function is not valid without properly configured EPC");
729 if (ueLteDevice == 0)
731 NS_FATAL_ERROR (
"The passed NetDevice must be an LteUeNetDevice");
737 uint16_t dlEarfcn = ueLteDevice->GetDlEarfcn ();
738 ueNas->StartCellSelection (dlEarfcn);
744 m_epcHelper->ActivateEpsBearer (ueDevice, ueLteDevice->GetImsi (),
769 ueNas->Connect (enbLteDevice->GetCellId (), enbLteDevice->GetDlEarfcn ());
800 double minDistance = std::numeric_limits<double>::infinity ();
806 if (distance < minDistance)
808 minDistance = distance;
809 closestEnbDevice = *i;
813 Attach (ueDevice, closestEnbDevice);
834 uint64_t imsi = ueDevice->GetObject<
LteUeNetDevice> ()->GetImsi ();
835 m_epcHelper->ActivateEpsBearer (ueDevice, imsi, tft, bearer);
843 void ActivateDrb (uint64_t imsi, uint16_t cellId, uint16_t rnti);
853 m_ueDevice (ueDevice),
863 a->ActivateDrb (imsi, cellId, rnti);
874 uint16_t rnti = ueRrc->GetRnti ();
886 enbRrc->GetS1SapUser ()->DataRadioBearerSetupRequest (params);
906 std::ostringstream path;
907 path <<
"/NodeList/" << enbLteDevice->
GetNode ()->
GetId ()
908 <<
"/DeviceList/" << enbLteDevice->
GetIfIndex ()
909 <<
"/LteEnbRrc/ConnectionEstablished";
943 NS_ASSERT_MSG (
m_epcHelper,
"Handover requires the use of the EPC - did you forget to call LteHelper::SetEpcHelper () ?");
952 uint16_t targetCellId = targetEnbDev->GetObject<
LteEnbNetDevice> ()->GetCellId ();
954 uint16_t rnti = ueDev->GetObject<
LteUeNetDevice> ()->GetRrc ()->GetRnti ();
955 sourceRrc->SendHandoverRequest (rnti, targetCellId);
1022 m_rlcStats = CreateObject<RadioBearerStatsCalculator> (
"RLC");
1029 int64_t currentStream = stream;
1048 currentStream += dlPhy->AssignStreams (currentStream);
1049 currentStream += ulPhy->AssignStreams (currentStream);
1057 currentStream += dlPhy->AssignStreams (currentStream);
1058 currentStream += ulPhy->AssignStreams (currentStream);
1059 currentStream += ueMac->AssignStreams (currentStream);
1062 return (currentStream - stream);
1080 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/DlPhyTransmission",
1087 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/UlPhyTransmission",
1094 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/DlSpectrumPhy/DlPhyReception",
1101 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/UlSpectrumPhy/UlPhyReception",
1134 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/ReportCurrentCellRsrpSinr",
1144 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/ReportInterference",
1159 m_pdcpStats = CreateObject<RadioBearerStatsCalculator> (
"PDCP");
Parameters passed to DataRadioBearerSetupRequest ()
uint16_t GetDlEarfcn() const
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
TypeId GetTypeId(void) const
Ptr< Object > m_uplinkPathlossModel
Simulation virtual time values and global simulation resolution.
void SetPathlossModelAttribute(std::string n, const AttributeValue &v)
set an attribute for the pathloss model to be created
virtual void AddPropagationLossModel(Ptr< PropagationLossModel > loss)=0
set the single-frequency propagation loss model to be used
void EnableDlRxPhyTraces(void)
Enable trace sinks for DL reception PHY layer.
smart pointer class similar to boost::intrusive_ptr
RadioBearerStatsConnector m_radioBearerStatsConnector
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
Ptr< NetDevice > InstallSingleEnbDevice(Ptr< Node > n)
Create an eNodeB device (LteEnbNetDevice) on the given node.
The abstract base class of a handover algorithm that operates using the Handover Management SAP inter...
static TypeId GetTypeId(void)
NetDeviceContainer InstallEnbDevice(NodeContainer c)
create a set of eNB devices
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
uint16_t GetCellId() const
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
void EnableLogComponents(void)
Enables logging for all components of the LENA architecture.
hold variables of type string
void HandoverRequest(Time hoTime, Ptr< NetDevice > ueDev, Ptr< NetDevice > sourceEnbDev, Ptr< NetDevice > targetEnbDev)
Manually trigger an X2-based handover of a UE between two eNBs at a specific simulation time...
static void DlSchedulingCallback(Ptr< MacStatsCalculator > macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
Trace sink for the ns3::LteEnbMac::DlScheduling trace source.
bool m_fadingStreamsAssigned
ObjectFactory m_fadingModelFactory
static void ActivateCallback(Ptr< DrbActivator > a, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
virtual void SetNode(Ptr< Node > node)
Hold a value for an Attribute.
void EnableDlPhyTraces(void)
Enable trace sinks for DL PHY layer.
uint16_t rnti
the RNTI identifying the UE for which the DataRadioBearer is to be created
virtual void GenerateCtrlCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Ctrl frame
virtual void ReceiveLteControlMessageList(std::list< Ptr< LteControlMessage > >)
PhySpectrum received a new list of LteControlMessage.
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
static Vector GetPosition(Ptr< Node > node)
DrbActivator(Ptr< NetDevice > ueDevice, EpsBearer bearer)
Ptr< LteEnbPhy > GetPhy(void) const
void SetUeAntennaModelAttribute(std::string n, const AttributeValue &v)
set an attribute for the AntennaModel to be used for the UEs
void SetFadingModel(std::string model)
static Ptr< EpcTft > Default()
creates a TFT matching any traffic
void ReportUeSinr(uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear)
Notifies the stats calculator that an UE SINR report has occurred.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
bool m_usePdschForCqiGeneration
void SetTypeId(TypeId tid)
Ptr< PhyStatsCalculator > m_phyStats
void EnablePdcpStats(Ptr< RadioBearerStatsCalculator > pdcpStats)
Ptr< PhyRxStatsCalculator > m_phyRxStats
std::string m_fadingModelType
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
bool SetAttributeFailSafe(std::string name, const AttributeValue &value)
void SetUeDeviceAttribute(std::string n, const AttributeValue &v)
set an attribute for the LteUeNetDevice to be created
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
fatal error handling
void SetUeAntennaModelType(std::string type)
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Ptr< MacStatsCalculator > m_macStats
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
void Connect(std::string path, const CallbackBase &cb)
ObjectFactory m_ulPathlossModelFactory
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Call ActivateDataRadioBearer (ueDevice, bearer) for each UE device in a given set.
ObjectFactory m_channelFactory
void SetHandoverAlgorithmType(std::string type)
void EnableUlRxPhyTraces(void)
Enable trace sinks for UL reception PHY layer.
void SetFfrAlgorithmType(std::string type)
static TypeId GetTypeId(void)
void SetSchedulerType(std::string type)
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
Ptr< RadioBearerStatsCalculator > m_rlcStats
std::string GetHandoverAlgorithmType() const
void EnablePdcpTraces(void)
Enable trace sinks for PDCP layer.
void AttachToClosestEnb(NetDeviceContainer ueDevices, NetDeviceContainer enbDevices)
Manual attachment of a set of UE devices to the network via the closest eNodeB (with respect to dista...
static void ReportCurrentCellRsrpSinrCallback(Ptr< PhyStatsCalculator > phyStats, std::string path, uint16_t cellId, uint16_t rnti, double rsrp, double sinr)
trace sink
Keep track of the current position and velocity of an object.
virtual Ptr< Node > GetNode(void) const
virtual void GenerateCtrlCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Ctrl frame
Ptr< Object > m_downlinkPathlossModel
static double GetCarrierFrequency(uint16_t earfcn)
Calculates the carrier frequency from the E-UTRA Absolute Radio Frequency Channel Number (EARFCN) acc...
This class contains the specification of EPS Bearers.
Ptr< Application > GetApplication(uint32_t index) const
Retrieve the index-th Application associated to this node.
Ptr< NetDevice > m_ueDevice
void SetHandoverAlgorithmAttribute(std::string n, const AttributeValue &v)
set an attribute for the handover algorithm to be created
hold variables of type 'enum'
virtual uint32_t GetIfIndex(void) const
void DoHandoverRequest(Ptr< NetDevice > ueDev, Ptr< NetDevice > sourceEnbDev, Ptr< NetDevice > targetEnbDev)
The actual function to trigger a manual handover.
virtual void GenerateDataCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Data frame (used for PUSCH CQIs) ...
double CalculateDistance(const Vector3D &a, const Vector3D &b)
Ptr< Object > Create(void) const
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
void EnableRlcStats(Ptr< RadioBearerStatsCalculator > rlcStats)
void EnableTraces(void)
Enables trace sinks for PHY, MAC, RLC and PDCP.
virtual void ReceiveLteUlHarqFeedback(UlInfoListElement_s mes)
PhySpectrum generated a new UL HARQ feedback.
Hold an unsigned integer type.
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
set an attribute for the scheduler to be created
Ptr< NetDevice > InstallSingleUeDevice(Ptr< Node > n)
Create a UE device (LteUeNetDevice) on the given node.
static TypeId GetTypeId(void)
ObjectFactory m_enbAntennaModelFactory
holds a vector of ns3::NetDevice pointers
virtual void AddSpectrumPropagationLossModel(Ptr< SpectrumPropagationLossModel > loss)=0
set the frequency-dependent propagation loss model to be used
void EnablePhyTraces(void)
Enable trace sinks for PHY layer.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
ObjectFactory m_handoverAlgorithmFactory
fading loss model based on precalculated fading traces
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
void SetEnbAntennaModelType(std::string type)
virtual void ReportInterference(const SpectrumValue &interf)
generate a report based on the linear interference and noise power perceived during DATA frame NOTE: ...
static TypeId GetTypeId()
ObjectFactory m_dlPathlossModelFactory
void SetSpectrumChannelType(std::string type)
static TypeId GetTypeId(void)
void SetFadingModelAttribute(std::string n, const AttributeValue &v)
set an attribute of the fading model
void EnableDlMacTraces(void)
Enable trace sinks for DL MAC layer.
virtual void ReportDataInterference(const SpectrumValue &interf)
virtual void ReceiveLteDlHarqFeedback(DlInfoListElement_s mes)
PhySpectrum generated a new DL HARQ feedback.
void ActivateDedicatedEpsBearer(NetDeviceContainer ueDevices, EpsBearer bearer, Ptr< EpcTft > tft)
Activate a dedicated EPS bearer on a given set of UE devices.
The abstract base class of a Frequency Reuse algorithm.
keep track of a set of node pointers.
This entity is installed inside an eNB and provides the functionality for the X2 interface.
void EnableUlTxPhyTraces(void)
Enable trace sinks for UL transmission PHY layer.
Ptr< SpectrumChannel > m_uplinkChannel
static void DlPhyTransmissionCallback(Ptr< PhyTxStatsCalculator > phyTxStats, std::string path, PhyTransmissionStatParameters params)
trace sink
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
void AddX2Interface(NodeContainer enbNodes)
Create an X2 interface between all the eNBs in a given set.
std::string GetName(void) const
void Set(std::string name, const AttributeValue &value)
ObjectFactory m_schedulerFactory
void EnableUlPhyTraces(void)
Enable trace sinks for UL PHY layer.
uint16_t GetUlEarfcn() const
void EnableDlTxPhyTraces(void)
Enable trace sinks for DL transmission PHY layer.
friend class ObjectFactory
Ptr< SpectrumPropagationLossModel > m_fadingModule
static void DlPhyReceptionCallback(Ptr< PhyRxStatsCalculator > phyRxStats, std::string path, PhyReceptionStatParameters params)
trace sink
void Receive(Ptr< Packet > p)
receive a packet from the lower layers in order to forward it to the upper layers ...
void EnableUlMacTraces(void)
Enable trace sinks for UL MAC layer.
static void UlPhyReceptionCallback(Ptr< PhyRxStatsCalculator > phyRxStats, std::string path, PhyReceptionStatParameters params)
trace sink
static void UlSchedulingCallback(Ptr< MacStatsCalculator > macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t size)
Trace sink for the ns3::LteEnbMac::UlScheduling trace source.
This abstract base class identifies the interface by means of which the helper object can plug on the...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< EpcHelper > m_epcHelper
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
create a set of UE devices
Ptr< PhyTxStatsCalculator > m_phyTxStats
Ptr< RadioBearerStatsCalculator > GetPdcpStats(void)
static void UlPhyTransmissionCallback(Ptr< PhyTxStatsCalculator > phyTxStats, std::string path, PhyTransmissionStatParameters params)
trace sink
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
ObjectFactory m_ffrAlgorithmFactory
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
Modelize the propagation loss through a transmission medium.
void SetEpcHelper(Ptr< EpcHelper > h)
Set the EpcHelper to be used to setup the EPC network in conjunction with the setup of the LTE radio ...
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if cond is true.
uint32_t GetId(void) const
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
void SetPathlossModelType(std::string type)
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
virtual void ReceiveLteControlMessageList(std::list< Ptr< LteControlMessage > >)
void Initialize(void)
This method calls the virtual DoInitialize method on all the objects aggregated to this object...
void ActivateDrb(uint64_t imsi, uint16_t cellId, uint16_t rnti)
virtual void ReceivePss(uint16_t cellId, Ptr< SpectrumValue > p)
void SetEnbAntennaModelAttribute(std::string n, const AttributeValue &v)
set an attribute for the AntennaModel to be used for the eNBs
ObjectFactory m_ueNetDeviceFactory
void SetSpectrumChannelAttribute(std::string n, const AttributeValue &v)
set an attribute for the SpectrumChannel to be used for the UEs
Defines the interface for spectrum-aware channel implementations.
void PhyPduReceived(Ptr< Packet > p)
PhySpectrum received a new PHY-PDU.
void ReportInterference(uint16_t cellId, Ptr< SpectrumValue > interference)
Notifies the stats calculator that an interference report has occurred.
virtual void DoInitialize(void)
This method is called only once by Object::Initialize.
spectrum-aware propagation loss model
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
a base class which provides memory management and object aggregation
virtual void ReportRsReceivedPower(const SpectrumValue &power)
generate a report based on the linear RS power perceived during CTRL frame NOTE: used only by UE for ...
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
Ptr< RadioBearerStatsCalculator > m_pdcpStats
Hold a floating point type.
ObjectFactory m_ueAntennaModelFactory
std::string GetFfrAlgorithmType() const
void SetAttribute(std::string name, const AttributeValue &value)
The eNodeB device implementation.
Ptr< T > GetObject(void) const
A template-based reference counting class.
void PhyPduReceived(Ptr< Packet > p)
PhySpectrum received a new PHY-PDU.
a unique identifier for an interface.
void SetFfrAlgorithmAttribute(std::string n, const AttributeValue &v)
set an attribute for the FFR algorithm to be created
ObjectFactory m_enbNetDeviceFactory
void UpdateSinrPerceived(const SpectrumValue &sinr)
Ptr< SpectrumChannel > m_downlinkChannel
TypeId SetParent(TypeId tid)
virtual void DoInitialize(void)
This method is called only once by Object::Initialize.
std::string GetSchedulerType() const
virtual void ReportInterference(const SpectrumValue &interf)
generate a report based on the linear interference and noise power perceived during DATA frame NOTE: ...
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
void SetEnbDeviceAttribute(std::string n, const AttributeValue &v)
set an attribute for the LteEnbNetDevice to be created
The LteUeNetDevice class implements the UE net device.