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.",
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.",
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.",
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.",
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.",
186 .AddAttribute (
"UseIdealRrc",
187 "If true, LteRrcProtocolIdeal will be used for RRC signaling. "
188 "If false, LteRrcProtocolReal will be used.",
192 .AddAttribute (
"AnrEnabled",
193 "Activate or deactivate Automatic Neighbour Relation function",
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 ",
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);
607 dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
611 dlPhy->AddDataSinrChunkProcessor (pData);
619 dlPhy->AddInterferenceDataChunkProcessor (pDataInterf);
633 NS_ASSERT_MSG (mm,
"MobilityModel needs to be set on node before calling LteHelper::InstallUeDevice ()");
634 dlPhy->SetMobility (mm);
635 ulPhy->SetMobility (mm);
638 NS_ASSERT_MSG (antenna,
"error in creating the AntennaModel object");
639 dlPhy->SetAntenna (antenna);
640 ulPhy->SetAntenna (antenna);
648 rrcProtocol->SetUeRrc (rrc);
649 rrc->AggregateObject (rrcProtocol);
650 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
651 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
656 rrcProtocol->SetUeRrc (rrc);
657 rrc->AggregateObject (rrcProtocol);
658 rrcProtocol->SetLteUeRrcSapProvider (rrc->GetLteUeRrcSapProvider ());
659 rrc->SetLteUeRrcSapUser (rrcProtocol->GetLteUeRrcSapUser ());
664 rrc->SetUseRlcSm (
false);
668 nas->SetAsSapProvider (rrc->GetAsSapProvider ());
669 rrc->SetAsSapUser (nas->GetAsSapUser ());
671 rrc->SetLteUeCmacSapProvider (mac->GetLteUeCmacSapProvider ());
672 mac->SetLteUeCmacSapUser (rrc->GetLteUeCmacSapUser ());
673 rrc->SetLteMacSapProvider (mac->GetLteMacSapProvider ());
675 phy->SetLteUePhySapUser (mac->GetLteUePhySapUser ());
676 mac->SetLteUePhySapProvider (phy->GetLteUePhySapProvider ());
678 phy->SetLteUeCphySapUser (rrc->GetLteUeCphySapUser ());
679 rrc->SetLteUeCphySapProvider (phy->GetLteUeCphySapProvider ());
692 phy->SetDevice (dev);
693 dlPhy->SetDevice (dev);
694 ulPhy->SetDevice (dev);
695 nas->SetDevice (dev);
732 NS_FATAL_ERROR (
"This function is not valid without properly configured EPC");
736 if (ueLteDevice == 0)
738 NS_FATAL_ERROR (
"The passed NetDevice must be an LteUeNetDevice");
744 uint16_t dlEarfcn = ueLteDevice->GetDlEarfcn ();
745 ueNas->StartCellSelection (dlEarfcn);
751 m_epcHelper->ActivateEpsBearer (ueDevice, ueLteDevice->GetImsi (),
776 ueNas->Connect (enbLteDevice->GetCellId (), enbLteDevice->GetDlEarfcn ());
807 double minDistance = std::numeric_limits<double>::infinity ();
813 if (distance < minDistance)
815 minDistance = distance;
816 closestEnbDevice = *i;
820 Attach (ueDevice, closestEnbDevice);
843 uint64_t imsi = ueDevice->GetObject<
LteUeNetDevice> ()->GetImsi ();
844 uint8_t bearerId =
m_epcHelper->ActivateEpsBearer (ueDevice, imsi, tft, bearer);
890 void ActivateDrb (uint64_t imsi, uint16_t cellId, uint16_t rnti);
914 m_ueDevice (ueDevice),
924 a->ActivateDrb (imsi, cellId, rnti);
935 uint16_t rnti = ueRrc->GetRnti ();
947 enbRrc->GetS1SapUser ()->DataRadioBearerSetupRequest (params);
967 std::ostringstream path;
968 path <<
"/NodeList/" << enbLteDevice->
GetNode ()->
GetId ()
969 <<
"/DeviceList/" << enbLteDevice->
GetIfIndex ()
970 <<
"/LteEnbRrc/ConnectionEstablished";
1004 NS_ASSERT_MSG (
m_epcHelper,
"Handover requires the use of the EPC - did you forget to call LteHelper::SetEpcHelper () ?");
1013 uint16_t targetCellId = targetEnbDev->GetObject<
LteEnbNetDevice> ()->GetCellId ();
1015 uint16_t rnti = ueDev->GetObject<
LteUeNetDevice> ()->GetRrc ()->GetRnti ();
1016 sourceRrc->SendHandoverRequest (rnti, targetCellId);
1024 NS_ASSERT_MSG (bearerId != 1,
"Default bearer cannot be de-activated until and unless and UE is released");
1035 uint64_t imsi = ueDevice->GetObject<
LteUeNetDevice> ()->GetImsi ();
1036 uint16_t rnti = ueDevice->GetObject<
LteUeNetDevice> ()->GetRrc ()->GetRnti ();
1041 enbRrc->DoSendReleaseDataRadioBearer (imsi,rnti,bearerId);
1105 m_rlcStats = CreateObject<RadioBearerStatsCalculator> (
"RLC");
1112 int64_t currentStream = stream;
1131 currentStream += dlPhy->AssignStreams (currentStream);
1132 currentStream += ulPhy->AssignStreams (currentStream);
1140 currentStream += dlPhy->AssignStreams (currentStream);
1141 currentStream += ulPhy->AssignStreams (currentStream);
1142 currentStream += ueMac->AssignStreams (currentStream);
1145 return (currentStream - stream);
1163 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/DlPhyTransmission",
1170 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/UlPhyTransmission",
1177 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/DlSpectrumPhy/DlPhyReception",
1184 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/UlSpectrumPhy/UlPhyReception",
1217 Config::Connect (
"/NodeList/*/DeviceList/*/LteUePhy/ReportCurrentCellRsrpSinr",
1227 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbPhy/ReportInterference",
1242 m_pdcpStats = CreateObject<RadioBearerStatsCalculator> (
"PDCP");
void SetFadingModel(std::string type)
Set the type of fading model to be used in both DL and UL.
Ptr< const AttributeChecker > MakeStringChecker(void)
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
Get the TypeId which will be created by this ObjectFactory.
Ptr< Object > m_uplinkPathlossModel
The path loss model used in the uplink channel.
virtual void DoInitialize(void)
Initialize() implementation.
Simulation virtual time values and global simulation resolution.
void SetPathlossModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the path loss models 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
Connects RLC and PDCP statistics containers to appropriate trace sources.
#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)
Register this type.
AttributeValue implementation for Boolean.
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
virtual void GenerateMixedCqiReport(const SpectrumValue &sinr)
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
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 full-blown logging for major components of the LENA architecture.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Hold variables of type string.
void HandoverRequest(Time hoTime, Ptr< NetDevice > ueDev, Ptr< NetDevice > sourceEnbDev, Ptr< NetDevice > targetEnbDev)
Manually trigger an X2-based handover.
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
True if a random variable stream number has been assigned for the fading model.
ObjectFactory m_fadingModelFactory
Factory of fading model object for both the downlink and uplink channels.
static void ActivateCallback(Ptr< DrbActivator > a, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
Function hooked to the Enb RRC Connection Established trace source Fired upon successful RRC connecti...
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.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
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)
DrbActivator Constructor.
Ptr< LteEnbPhy > GetPhy(void) const
void SetUeAntennaModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the UE antenna model to be created.
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
The UsePdschForCqiGeneration attribute.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Ptr< PhyStatsCalculator > m_phyStats
Container of PHY layer statistics.
void EnablePdcpStats(Ptr< RadioBearerStatsCalculator > pdcpStats)
Enables trace sinks for PDCP layer.
Ptr< PhyRxStatsCalculator > m_phyRxStats
Container of PHY layer statistics related to reception.
std::string m_fadingModelType
Name of fading model type, e.g., "ns3::TraceFadingLossModel".
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
bool SetAttributeFailSafe(std::string name, const AttributeValue &value)
Set a single attribute without raising errors.
void SetUeDeviceAttribute(std::string n, const AttributeValue &v)
Set an attribute for the UE devices (LteUeNetDevice) to be created.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
void SetUeAntennaModelType(std::string type)
Set the type of antenna model to be used by UE devices.
virtual void DoDispose(void)
Destructor implementation.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Ptr< MacStatsCalculator > m_macStats
Container of MAC layer statistics.
int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used.
ObjectFactory m_ulPathlossModelFactory
Factory of path loss model object for the uplink channel.
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
ObjectFactory m_channelFactory
Factory of both the downlink and uplink LTE channels.
uint8_t ActivateDedicatedEpsBearer(NetDeviceContainer ueDevices, EpsBearer bearer, Ptr< EpcTft > tft)
Activate a dedicated EPS bearer on a given set of UE devices.
void SetHandoverAlgorithmType(std::string type)
Set the type of handover algorithm to be used by eNodeB devices.
void EnableUlRxPhyTraces(void)
Enable trace sinks for UL reception PHY layer.
void SetFfrAlgorithmType(std::string type)
Set the type of FFR algorithm to be used by eNodeB devices.
static TypeId GetTypeId(void)
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
Ptr< RadioBearerStatsCalculator > m_rlcStats
Container of RLC layer statistics.
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
The path loss model used in the downlink channel.
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.
void DeActivateDedicatedEpsBearer(Ptr< NetDevice > ueDevice, Ptr< NetDevice > enbDevice, uint8_t bearerId)
Manually trigger dedicated bearer de-activation at specific simulation time.
Ptr< Application > GetApplication(uint32_t index) const
Retrieve the index-th Application associated to this node.
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
Ptr< NetDevice > m_ueDevice
UeNetDevice for which bearer will be activated.
void SetHandoverAlgorithmAttribute(std::string n, const AttributeValue &v)
Set an attribute for the handover algorithm to be created.
Hold variables of type enum.
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
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
Create an Object instance of the configured TypeId.
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
uint64_t m_imsi
imsi the unique UE identifier
void EnableRlcStats(Ptr< RadioBearerStatsCalculator > rlcStats)
Enables trace sinks for RLC layer.
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)
Get the type ID.
uint64_t m_imsiCounter
Keep track of the number of IMSI allocated.
ObjectFactory m_enbAntennaModelFactory
Factory of antenna object for eNodeB.
holds a vector of ns3::NetDevice pointers
virtual void AddSpectrumPropagationLossModel(Ptr< SpectrumPropagationLossModel > loss)=0
Set the frequency-dependent propagation loss model to be used.
uint16_t m_cellIdCounter
Keep track of the number of cell ID allocated.
void EnablePhyTraces(void)
Enable trace sinks for PHY layer.
bool m_isAnrEnabled
The AnrEnabled attribute.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
ObjectFactory m_handoverAlgorithmFactory
Factory of handover algorithm object.
fading loss model based on precalculated fading traces
DrbActivatior allows user to activate bearers for UEs when EPC is not used.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
void Connect(std::string path, const CallbackBase &cb)
void SetEnbAntennaModelType(std::string type)
Set the type of antenna model to be used by eNodeB devices.
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
Factory of path loss model object for the downlink channel.
void SetSpectrumChannelType(std::string type)
Set the type of spectrum channel to be used in both DL and UL.
static TypeId GetTypeId(void)
void SetFadingModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the fading model to be created (both DL and UL).
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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
The abstract base class of a Frequency Reuse algorithm.
keep track of a set of node pointers.
Hold objects of type Ptr.
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< const AttributeChecker > MakeBooleanChecker(void)
Ptr< SpectrumChannel > m_uplinkChannel
The uplink LTE channel used in the simulation.
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
Get the name.
void Set(std::string name, const AttributeValue &value)
Set an attribute to be set during construction.
ObjectFactory m_schedulerFactory
Factory of MAC scheduler object.
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
The fading model used in both the downlink and uplink channels.
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
Helper which provides implementation of core network.
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Ptr< PhyTxStatsCalculator > m_phyTxStats
Container of PHY layer statistics related to transmission.
Ptr< RadioBearerStatsCalculator > GetPdcpStats(void)
static void UlPhyTransmissionCallback(Ptr< PhyTxStatsCalculator > phyTxStats, std::string path, PhyTransmissionStatParameters params)
trace sink
virtual void DoDispose(void)
Destructor implementation.
ObjectFactory m_ffrAlgorithmFactory
Factory of FFR (frequency reuse) algorithm object.
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
Models 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 a condition is true, with a message.
uint32_t GetId(void) const
EpsBearer m_bearer
Configuration of bearer which will be activated.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
void SetPathlossModelType(std::string type)
Set the type of path loss model to be used for both DL and UL channels.
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
virtual void ReceiveLteControlMessageList(std::list< Ptr< LteControlMessage > >)
void ActivateDrb(uint64_t imsi, uint16_t cellId, uint16_t rnti)
Procedure firstly checks if bearer was not activated, if IMSI from trace source equals configured one...
virtual void ReceivePss(uint16_t cellId, Ptr< SpectrumValue > p)
void SetEnbAntennaModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the eNodeB antenna model to be created.
ObjectFactory m_ueNetDeviceFactory
Factory for LteUeNetDevice objects.
void SetSpectrumChannelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the spectrum channel to be created (both DL and UL).
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)
Initialize() implementation.
spectrum-aware propagation loss model
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
A base class which provides memory management and object aggregation.
bool m_active
Bearer can be activated only once.
Ptr< const AttributeAccessor > MakeStringAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
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.
void DoDeActivateDedicatedEpsBearer(Ptr< NetDevice > ueDevice, Ptr< NetDevice > enbDevice, uint8_t bearerId)
The actual function to trigger a manual bearer de-activation.
Ptr< RadioBearerStatsCalculator > m_pdcpStats
Container of PDCP layer statistics.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
ObjectFactory m_ueAntennaModelFactory
Factory of antenna object for UE.
std::string GetFfrAlgorithmType() const
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
The eNodeB device implementation.
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
Factory of LteEnbNetDevice objects.
void UpdateSinrPerceived(const SpectrumValue &sinr)
Ptr< SpectrumChannel > m_downlinkChannel
The downlink LTE channel used in the simulation.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
void Initialize(void)
Invoke DoInitialize on all Objects aggregated to this one.
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 SetEnbDeviceAttribute(std::string n, const AttributeValue &v)
Set an attribute for the eNodeB devices (LteEnbNetDevice) to be created.
bool m_useIdealRrc
The UseIdealRrc attribute.
The LteUeNetDevice class implements the UE net device.