12#include <ns3/boolean.h>
13#include <ns3/double.h>
14#include <ns3/friis-spectrum-propagation-loss.h>
15#include <ns3/integer.h>
16#include <ns3/internet-stack-helper.h>
17#include <ns3/ipv4-address-helper.h>
18#include <ns3/ipv4-interface-container.h>
19#include <ns3/ipv4-static-routing-helper.h>
21#include <ns3/lte-enb-net-device.h>
22#include <ns3/lte-helper.h>
23#include <ns3/lte-ue-net-device.h>
24#include <ns3/lte-ue-rrc.h>
25#include <ns3/mobility-helper.h>
26#include <ns3/net-device-container.h>
27#include <ns3/node-container.h>
28#include <ns3/point-to-point-epc-helper.h>
29#include <ns3/point-to-point-helper.h>
30#include <ns3/simulator.h>
45 TestCase::Duration::QUICK);
47 TestCase::Duration::QUICK);
51 TestCase::Duration::QUICK);
53 TestCase::Duration::QUICK);
57 TestCase::Duration::QUICK);
59 TestCase::Duration::QUICK);
63 TestCase::Duration::QUICK);
65 TestCase::Duration::QUICK);
69 TestCase::Duration::QUICK);
71 TestCase::Duration::QUICK);
75 TestCase::Duration::QUICK);
77 TestCase::Duration::QUICK);
79 TestCase::Duration::QUICK);
81 TestCase::Duration::QUICK);
83 TestCase::Duration::QUICK);
85 TestCase::Duration::QUICK);
101 uint8_t numberOfComponentCarriers,
102 uint8_t sourceComponentCarrier,
103 uint8_t targetComponentCarrier)
105 m_isIdealRrc{isIdealRrc},
107 m_numberOfComponentCarriers{numberOfComponentCarriers},
108 m_sourceComponentCarrier{sourceComponentCarrier},
109 m_targetComponentCarrier{targetComponentCarrier}
134 lteHelper->SetAttribute(
"PathlossModel",
137 lteHelper->SetAttribute(
"NumberOfComponentCarriers",
141 lteHelper->SetEpcHelper(epcHelper);
149 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
150 mobility.Install(enbNodes);
151 mobility.Install(ueNode);
154 auto enbDevs = lteHelper->InstallEnbDevice(enbNodes);
164 internet.Install(ueNode);
167 std::map<uint8_t, Ptr<ComponentCarrierUe>> ueCcMap = ueDev->GetCcMap();
177 "/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
180 uint16_t targetCellId = targetEnbDev->GetCcMap()
184 lteHelper->AddX2Interface(enbNodes);
185 lteHelper->HandoverRequest(
Seconds(1), ueDev, sourceEnbDev, targetCellId);
191 uint16_t expectedCellId = targetCellId;
192 uint16_t actualCellId = ueDev->GetRrc()->GetCellId();
195 "IMSI " << ueDev->GetImsi() <<
" has attached to an unexpected cell");
199 "UE " << ueDev->GetImsi() <<
" is not at CONNECTED_NORMALLY state");
213 NS_LOG_FUNCTION(
this << imsi << cellId << rnti << oldState << newState);
Testing the handover procedure with multiple component carriers.
LtePrimaryCellChangeTestCase(std::string name, bool isIdealRrc, int64_t rngRun, uint8_t numberOfComponentCarriers, uint8_t sourceComponentCarrier, uint8_t targetComponentCarrier)
Creates an instance of the initial cell selection test case.
void StateTransitionCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteUeRrc::State oldState, LteUeRrc::State newState)
State transition callback function.
uint8_t m_sourceComponentCarrier
source primary component carrier
void DoRun() override
Setup the simulation according to the configuration set by the class constructor, run it,...
~LtePrimaryCellChangeTestCase() override
void ConnectionEstablishedCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
Connection established callback function.
std::map< uint64_t, LteUeRrc::State > m_lastState
The current UE RRC state.
uint8_t m_targetComponentCarrier
target primary component carrier
bool m_isIdealRrc
whether the LTE is configured to use ideal RRC
uint8_t m_numberOfComponentCarriers
number of component carriers
Test suite for executing the primary cell change test cases.
LtePrimaryCellChangeTestSuite()
AttributeValue implementation for Boolean.
static TypeId GetTypeId()
Get the type ID.
aggregate IP/TCP/UDP functionality to existing Nodes.
State
The states of the UE RRC entity.
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
std::string GetName() const
AttributeValue implementation for TypeId.
Hold an unsigned integer type.
void SetGlobal(std::string name, const AttributeValue &value)
void SetDefault(std::string name, const AttributeValue &value)
void Connect(std::string path, const CallbackBase &cb)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
static LtePrimaryCellChangeTestSuite g_ltePrimaryCellChangeTestSuite
Static variable for test initialization.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.