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>
46 TestCase::Duration::QUICK);
48 TestCase::Duration::QUICK);
53 TestCase::Duration::QUICK);
55 TestCase::Duration::QUICK);
73 uint8_t numberOfComponentCarriers)
75 m_isIdealRrc(isIdealRrc),
77 m_numberOfComponentCarriers(numberOfComponentCarriers)
96 lteHelper->SetAttribute(
"PathlossModel",
99 lteHelper->SetAttribute(
"NumberOfComponentCarriers",
103 lteHelper->SetEpcHelper(epcHelper);
111 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
112 mobility.Install(enbNode);
113 mobility.Install(ueNodes);
117 auto ueDevs = lteHelper->InstallUeDevice(ueNodes);
121 internet.Install(ueNodes);
122 epcHelper->AssignUeIpv4Address(ueDevs);
125 std::map<uint8_t, Ptr<ComponentCarrierUe>> ueCcMap = ueDev->GetCcMap();
126 for (
auto it : ueCcMap)
128 NS_LOG_DEBUG(
"Assign DL EARFCN " << it.second->GetDlEarfcn() <<
" to UE "
129 << ueDevs.Get(it.first)->GetNode()->GetId());
134 lteHelper->Attach(ueDevs);
138 "/NodeList/*/DeviceList/*/LteUeRrc/StateTransition",
141 "/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
148 for (
auto& it : enbDev->GetCcMap())
151 uint16_t expectedCellId = it.second->GetCellId();
152 uint16_t actualCellId = ueDev->GetRrc()->GetCellId();
154 <<
" attached to cell ID: " << actualCellId);
157 "IMSI " << ueDev->GetImsi() <<
" has attached to an unexpected cell");
161 "UE " << ueDev->GetImsi() <<
" is not at CONNECTED_NORMALLY state");
176 NS_LOG_FUNCTION(
this << imsi << cellId << rnti << oldState << newState);
Testing the initial cell selection procedure by UE at IDLE state in the beginning of simulation with ...
void StateTransitionCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteUeRrc::State oldState, LteUeRrc::State newState)
State transition callback function.
bool m_isIdealRrc
whether the LTE is configured to use ideal RRC
uint8_t m_numberOfComponentCarriers
number of component carriers
std::map< uint64_t, LteUeRrc::State > m_lastState
The current UE RRC state.
void ConnectionEstablishedCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
Connection established callback function.
~LteSecondaryCellSelectionTestCase() override
LteSecondaryCellSelectionTestCase(std::string name, bool isIdealRrc, uint64_t rngRun, uint8_t numberOfComponentCarriers)
Creates an instance of the initial cell selection test case.
void DoRun() override
Setup the simulation according to the configuration set by the class constructor, run it,...
Test suite for executing the secondary cell selection test cases.
LteSecondaryCellSelectionTestSuite()
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.
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 Connect(std::string path, const CallbackBase &cb)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
static LteSecondaryCellSelectionTestSuite g_lteSecondaryCellSelectionTestSuite
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.