21 #include <ns3/boolean.h>
22 #include <ns3/double.h>
23 #include <ns3/friis-spectrum-propagation-loss.h>
24 #include <ns3/integer.h>
25 #include <ns3/internet-stack-helper.h>
27 #include <ns3/lte-enb-net-device.h>
28 #include <ns3/lte-helper.h>
29 #include <ns3/lte-ue-net-device.h>
30 #include <ns3/lte-ue-rrc.h>
31 #include <ns3/mobility-helper.h>
32 #include <ns3/point-to-point-epc-helper.h>
33 #include <ns3/simulator.h>
62 void ShutdownCell(uint32_t cellId);
71 void UeHandoverStartCallback(uint64_t imsi,
72 uint16_t sourceCellId,
74 uint16_t targetCellId);
80 void DoRun()
override;
85 void DoTeardown()
override;
98 m_useIdealRrc{useIdealRrc},
99 m_numberOfComponentCarriers{2},
100 m_hasUeHandoverStarted{false}
113 uint16_t sourceCellId,
115 uint16_t targetCellId)
133 auto lteHelper = CreateObject<LteHelper>();
134 lteHelper->SetAttribute(
"PathlossModel",
137 lteHelper->SetAttribute(
"NumberOfComponentCarriers",
141 lteHelper->SetHandoverAlgorithmType(
"ns3::A3RsrpHandoverAlgorithm");
142 lteHelper->SetHandoverAlgorithmAttribute(
"Hysteresis",
DoubleValue(1.5));
145 auto epcHelper = CreateObject<PointToPointEpcHelper>();
146 lteHelper->SetEpcHelper(epcHelper);
149 auto enbNode = CreateObject<Node>();
150 auto ueNode = CreateObject<Node>();
154 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
159 m_sourceEnbDev = DynamicCast<LteEnbNetDevice>(lteHelper->InstallEnbDevice(enbNode).Get(0));
160 auto ueDevs = lteHelper->InstallUeDevice(ueNode);
161 auto ueDev = DynamicCast<LteUeNetDevice>(ueDevs.Get(0));
169 Simulator::Schedule(
Seconds(0.5),
175 ueDev->GetRrc()->TraceConnectWithoutContext(
179 std::map<uint8_t, Ptr<ComponentCarrierUe>> ueCcMap = ueDev->GetCcMap();
180 ueDev->SetDlEarfcn(ueCcMap.at(0)->GetDlEarfcn());
186 Simulator::Destroy();
208 :
TestSuite{
"lte-secondary-cell-handover", SYSTEM}
Test measurement-based handover to secondary cell.
void UeHandoverStartCallback(uint64_t imsi, uint16_t sourceCellId, uint16_t rnti, uint16_t targetCellId)
Callback method indicating start of UE handover.
bool m_useIdealRrc
whether LTE is configured to use ideal RRC
Ptr< LteEnbNetDevice > m_sourceEnbDev
Source eNB device.
void ShutdownCell(uint32_t cellId)
Shutdown cellId by reducing its power to 1 dBm.
LteSecondaryCellHandoverTestCase(std::string name, bool useIdealRrc)
Creates an instance of the measurement-based secondary cell handover test case.
void DoRun() override
Run a simulation.
uint8_t m_numberOfComponentCarriers
Number of component carriers.
void DoTeardown() override
Verify that handover has occurred during the simulation.
bool m_hasUeHandoverStarted
true if UE started handover
LTE measurement-based handover to secondary cell test suite.
LteSecondaryCellHandoverTestSuite()
This class can be used to hold variables of floating point type such as 'double' or 'float'.
static TypeId GetTypeId()
Get the type ID.
aggregate IP/TCP/UDP functionality to existing Nodes.
Ptr< LteEnbPhy > GetPhy() const
uint16_t GetCellId() const
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
std::string GetName() const
Hold an unsigned integer type.
void SetDefault(std::string name, const AttributeValue &value)
#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 LteSecondaryCellHandoverTestSuite g_lteSecondaryCellHandoverTestSuiteInstance
Static variable for test initialization.
#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.
Time MilliSeconds(uint64_t 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...