A Discrete-Event Network Simulator
API
lte-test-cell-selection.cc
Go to the documentation of this file.
1/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013 Budiarto Herman
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Budiarto Herman <budiarto.herman@magister.fi>
19 *
20 */
21
23
24#include <ns3/simulator.h>
25#include <ns3/log.h>
26#include <ns3/boolean.h>
27#include <ns3/double.h>
28#include <ns3/integer.h>
29#include <ns3/rng-seed-manager.h>
30
31#include <ns3/mobility-helper.h>
32#include <ns3/lte-helper.h>
33#include <ns3/point-to-point-epc-helper.h>
34#include <ns3/internet-stack-helper.h>
35#include <ns3/point-to-point-helper.h>
36#include <ns3/ipv4-address-helper.h>
37#include <ns3/ipv4-static-routing-helper.h>
38
39#include <ns3/node-container.h>
40#include <ns3/net-device-container.h>
41#include <ns3/ipv4-interface-container.h>
42
43#include <ns3/lte-ue-net-device.h>
44#include <ns3/lte-ue-rrc.h>
45#include <ns3/lte-enb-net-device.h>
46
47using namespace ns3;
48
49NS_LOG_COMPONENT_DEFINE ("LteCellSelectionTest");
50
51/*
52 * This test suite sets up four cells (four eNBs) and six UEs. Two of the
53 * cells are CSG and two are non-CSG. The six UEs associate with cells
54 * based on their positions and random access procedures. The test checks
55 * that the UEs, at specirfic simulation times, are associated to expected
56 * cells. See the header Doxygen for more specific descriptions.
57 *
58 * The test conditions that are checked rely on the RA preamble values
59 * (randomly selected) being unique for the six UEs. For most values of
60 * random seed and run number, this will be the case, but certain values
61 * will cause a collision (same RA preamble drawn for two UEs). Therefore,
62 * this test fixes the RngSeed and RngRun values, and uses AssignStreams,
63 * to ensure that an RA preamble collision does not occur.
64 */
65
66
68 : TestSuite ("lte-cell-selection", SYSTEM)
69{
70 std::vector<LteCellSelectionTestCase::UeSetup_t> w;
71
72 // REAL RRC PROTOCOL
73
74 w = {
75 // x, y, csgMember, checkPoint, cell1, cell2
76 LteCellSelectionTestCase::UeSetup_t (0.0, 0.55, false, MilliSeconds (283), 1, 0),
77 LteCellSelectionTestCase::UeSetup_t (0.0, 0.45, false, MilliSeconds (283), 1, 0),
78 LteCellSelectionTestCase::UeSetup_t (0.5, 0.45, false, MilliSeconds (363), 1, 3),
79 LteCellSelectionTestCase::UeSetup_t (0.5, 0.0, true, MilliSeconds (283), 2, 4),
80 LteCellSelectionTestCase::UeSetup_t (1.0, 0.55, true, MilliSeconds (283), 3, 0),
81 LteCellSelectionTestCase::UeSetup_t (1.0, 0.45, true, MilliSeconds (283), 4, 0),
82 };
83
84 AddTestCase (new LteCellSelectionTestCase ("EPC, real RRC",
85 true, false, 60.0 /* isd */, w),
86 TestCase::QUICK);
87
88 // IDEAL RRC PROTOCOL
89
90 w = {
91 // x, y, csgMember, checkPoint, cell1, cell2
92 LteCellSelectionTestCase::UeSetup_t (0.0, 0.55, false, MilliSeconds (266), 1, 0),
93 LteCellSelectionTestCase::UeSetup_t (0.0, 0.45, false, MilliSeconds (266), 1, 0),
94 LteCellSelectionTestCase::UeSetup_t (0.5, 0.45, false, MilliSeconds (346), 1, 3),
95 LteCellSelectionTestCase::UeSetup_t (0.5, 0.0, true, MilliSeconds (266), 2, 4),
96 LteCellSelectionTestCase::UeSetup_t (1.0, 0.55, true, MilliSeconds (266), 3, 0),
97 LteCellSelectionTestCase::UeSetup_t (1.0, 0.45, true, MilliSeconds (266), 4, 0),
98 };
99
100 AddTestCase (new LteCellSelectionTestCase ("EPC, ideal RRC",
101 true, true, 60.0 /* isd */, w),
102 TestCase::QUICK);
103
104} // end of LteCellSelectionTestSuite::LteCellSelectionTestSuite ()
105
106
108
109
110
111/*
112 * Test Case
113 */
114
115
117 double relPosX, double relPosY, bool isCsgMember, Time checkPoint,
118 uint16_t expectedCellId1, uint16_t expectedCellId2)
119 : position (Vector (relPosX, relPosY, 0.0)),
120 isCsgMember (isCsgMember),
121 checkPoint (checkPoint),
122 expectedCellId1 (expectedCellId1),
123 expectedCellId2 (expectedCellId2)
124{
125}
126
127
129 std::string name, bool isEpcMode, bool isIdealRrc,
130 double interSiteDistance,
131 std::vector<UeSetup_t> ueSetupList)
132 : TestCase (name),
133 m_isEpcMode (isEpcMode),
134 m_isIdealRrc (isIdealRrc),
135 m_interSiteDistance (interSiteDistance),
136 m_ueSetupList (ueSetupList)
137{
138 NS_LOG_FUNCTION (this << GetName ());
139 m_lastState.resize (m_ueSetupList.size (), LteUeRrc::NUM_STATES);
140}
141
142
144{
145 NS_LOG_FUNCTION (this << GetName ());
146}
147
148
149void
151{
152 NS_LOG_FUNCTION (this << GetName ());
153
154 // In ns-3 test suite operation, static variables persist across all
155 // tests (all test suites execute within a single ns-3 process).
156 // Therefore, to fix a seed and run number for a specific test, the
157 // current values of seed and run number should be saved and restored
158 // after the test is run.
159 uint32_t previousSeed = RngSeedManager::GetSeed ();
160 uint64_t previousRun = RngSeedManager::GetRun ();
161 // Values of 1 and 2 here will prevent RA preamble collisions
162 Config::SetGlobal ("RngSeed", UintegerValue (1));
163 Config::SetGlobal ("RngRun", UintegerValue (2));
164
165 Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
166 lteHelper->SetAttribute ("PathlossModel",
167 StringValue ("ns3::FriisSpectrumPropagationLossModel"));
168 lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (m_isIdealRrc));
169
171
172 if (m_isEpcMode)
173 {
174 epcHelper = CreateObject<PointToPointEpcHelper> ();
175 lteHelper->SetEpcHelper (epcHelper);
176 }
177
178 /*
179 * The topology is the following (the number on the node indicate the cell ID)
180 *
181 * [1] [3]
182 * non-CSG -- non-CSG
183 * | |
184 * | | 60 m
185 * | |
186 * [2] [4]
187 * CSG ------ CSG
188 * 60 m
189 */
190
191 // Create Nodes
192 NodeContainer enbNodes;
193 enbNodes.Create (4);
194 NodeContainer ueNodes;
195 uint16_t nUe = static_cast<uint16_t> (m_ueSetupList.size ());
196 ueNodes.Create (nUe);
197
198 // Assign nodes to position
199 Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
200 // eNodeB
201 positionAlloc->Add (Vector ( 0.0, m_interSiteDistance, 0.0));
202 positionAlloc->Add (Vector ( 0.0, 0.0, 0.0));
203 positionAlloc->Add (Vector (m_interSiteDistance, m_interSiteDistance, 0.0));
204 positionAlloc->Add (Vector (m_interSiteDistance, 0.0, 0.0));
205 // UE
206 std::vector<UeSetup_t>::const_iterator itSetup;
207 for (itSetup = m_ueSetupList.begin ();
208 itSetup != m_ueSetupList.end (); itSetup++)
209 {
210 Vector uePos (m_interSiteDistance * itSetup->position.x,
211 m_interSiteDistance * itSetup->position.y,
212 m_interSiteDistance * itSetup->position.z);
213 NS_LOG_INFO ("UE position " << uePos);
214 positionAlloc->Add (uePos);
215 }
216
218 mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
219 mobility.SetPositionAllocator (positionAlloc);
220 mobility.Install (enbNodes);
221 mobility.Install (ueNodes);
222
223 // Create Devices and install them in the Nodes (eNB and UE)
224 int64_t stream = 1;
225 NetDeviceContainer enbDevs;
226
227 // cell ID 1 is a non-CSG cell
228 lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (0));
229 lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (false));
230 enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (0)));
231
232 // cell ID 2 is a CSG cell
233 lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
234 lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
235 enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (1)));
236
237 // cell ID 3 is a non-CSG cell
238 lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (0));
239 lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (false));
240 enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (2)));
241
242 // cell ID 4 is a CSG cell
243 lteHelper->SetEnbDeviceAttribute ("CsgId", UintegerValue (1));
244 lteHelper->SetEnbDeviceAttribute ("CsgIndication", BooleanValue (true));
245 enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (3)));
246
247 NetDeviceContainer ueDevs;
248 Time lastCheckPoint = MilliSeconds (0);
249 NS_ASSERT (m_ueSetupList.size () == ueNodes.GetN ());
251 for (itSetup = m_ueSetupList.begin (), itNode = ueNodes.Begin ();
252 itSetup != m_ueSetupList.end () || itNode != ueNodes.End ();
253 itSetup++, itNode++)
254 {
255 if (itSetup->isCsgMember)
256 {
257 lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (1));
258 }
259 else
260 {
261 lteHelper->SetUeDeviceAttribute ("CsgId", UintegerValue (0));
262 }
263
264 NetDeviceContainer devs = lteHelper->InstallUeDevice (*itNode);
265 Ptr<LteUeNetDevice> ueDev = devs.Get (0)->GetObject<LteUeNetDevice> ();
266 NS_ASSERT (ueDev);
267 ueDevs.Add (devs);
268 Simulator::Schedule (itSetup->checkPoint,
270 this, ueDev,
271 itSetup->expectedCellId1, itSetup->expectedCellId2);
272
273 if (lastCheckPoint < itSetup->checkPoint)
274 {
275 lastCheckPoint = itSetup->checkPoint;
276 }
277 }
278
279 stream += lteHelper->AssignStreams (enbDevs, stream);
280 stream += lteHelper->AssignStreams (ueDevs, stream);
281
282 // Tests
283 NS_ASSERT (m_ueSetupList.size () == ueDevs.GetN ());
285 for (itSetup = m_ueSetupList.begin (), itDev = ueDevs.Begin ();
286 itSetup != m_ueSetupList.end () || itDev != ueDevs.End ();
287 itSetup++, itDev++)
288 {
289 Ptr<LteUeNetDevice> ueDev = (*itDev)->GetObject<LteUeNetDevice> ();
290 }
291
292 if (m_isEpcMode)
293 {
294 // Create P-GW node
295 Ptr<Node> pgw = epcHelper->GetPgwNode ();
296
297 // Create a single RemoteHost
298 NodeContainer remoteHostContainer;
299 remoteHostContainer.Create (1);
300 Ptr<Node> remoteHost = remoteHostContainer.Get (0);
301 InternetStackHelper internet;
302 internet.Install (remoteHostContainer);
303
304 // Create the Internet
306 p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
307 p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
308 p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
309 NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
310 Ipv4AddressHelper ipv4h;
311 ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
312 Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
313
314 // Routing of the Internet Host (towards the LTE network)
315 Ipv4StaticRoutingHelper ipv4RoutingHelper;
316 Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
317 remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
318
319 // Install the IP stack on the UEs
320 internet.Install (ueNodes);
321 Ipv4InterfaceContainer ueIpIfaces;
322 ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
323
324 // Assign IP address to UEs
325 for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
326 {
327 Ptr<Node> ueNode = ueNodes.Get (u);
328 // Set the default gateway for the UE
329 Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
330 ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
331 }
332
333 } // end of if (m_isEpcMode)
334 else
335 {
336 NS_FATAL_ERROR ("No support yet for LTE-only simulations");
337 }
338
339 // Connect to trace sources in UEs
340 Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/StateTransition",
342 this));
343 Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/InitialCellSelectionEndOk",
345 this));
346 Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/InitialCellSelectionEndError",
348 this));
349 Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
351 this));
352
353 // Enable Idle mode cell selection
354 lteHelper->Attach (ueDevs);
355
356 // Run simulation
357 Simulator::Stop (lastCheckPoint);
358 Simulator::Run ();
359
360 NS_LOG_INFO ("Simulation ends");
361 Simulator::Destroy ();
362
363 // Restore the seed and run number that were in effect before this test
364 Config::SetGlobal ("RngSeed", UintegerValue (previousSeed));
365 Config::SetGlobal ("RngRun", UintegerValue (previousRun));
366
367} // end of void LteCellSelectionTestCase::DoRun ()
368
369
370void
372 uint16_t expectedCellId1,
373 uint16_t expectedCellId2)
374{
375 uint16_t actualCellId = ueDev->GetRrc ()->GetCellId ();
376
377 if (expectedCellId2 == 0)
378 {
379 NS_TEST_ASSERT_MSG_EQ (actualCellId, expectedCellId1,
380 "IMSI " << ueDev->GetImsi ()
381 << " has attached to an unexpected cell");
382 }
383 else
384 {
385 bool pass = (actualCellId == expectedCellId1) ||
386 (actualCellId == expectedCellId2);
387 NS_TEST_ASSERT_MSG_EQ (pass, true,
388 "IMSI " << ueDev->GetImsi ()
389 << " has attached to an unexpected cell"
390 << " (actual: " << actualCellId << ","
391 << " expected: " << expectedCellId1
392 << " or " << expectedCellId2 << ")");
393 }
394
395 if (expectedCellId1 > 0)
396 {
397 NS_TEST_ASSERT_MSG_EQ (m_lastState.at (static_cast<unsigned int>(ueDev->GetImsi () - 1)),
398 LteUeRrc::CONNECTED_NORMALLY,
399 "UE " << ueDev->GetImsi ()
400 << " is not at CONNECTED_NORMALLY state");
401 }
402}
403
404
405void
407 std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti,
408 LteUeRrc::State oldState, LteUeRrc::State newState)
409{
410 NS_LOG_FUNCTION (this << imsi << cellId << rnti << oldState << newState);
411 m_lastState.at (static_cast<unsigned int>(imsi - 1)) = newState;
412}
413
414
415void
417 std::string context, uint64_t imsi, uint16_t cellId)
418{
419 NS_LOG_FUNCTION (this << imsi << cellId);
420}
421
422
423void
425 std::string context, uint64_t imsi, uint16_t cellId)
426{
427 NS_LOG_FUNCTION (this << imsi << cellId);
428}
429
430
431void
433 std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
434{
435 NS_LOG_FUNCTION (this << imsi << cellId << rnti);
436}
Testing the initial cell selection procedure by UE at IDLE state in the beginning of simulation.
std::vector< UeSetup_t > m_ueSetupList
UE setup list.
void CheckPoint(Ptr< LteUeNetDevice > ueDev, uint16_t expectedCellId1, uint16_t expectedCellId2)
Verifies if the given UE is attached to either of the given two cells and in a CONNECTED_NORMALLY sta...
void InitialCellSelectionEndOkCallback(std::string context, uint64_t imsi, uint16_t cellId)
Initial cell selection end ok callback function.
std::vector< LteUeRrc::State > m_lastState
The current UE RRC state.
virtual void DoRun()
Setup the simulation according to the configuration set by the class constructor, run it,...
LteCellSelectionTestCase(std::string name, bool isEpcMode, bool isIdealRrc, double interSiteDistance, std::vector< UeSetup_t > ueSetupList)
Creates an instance of the initial cell selection test case.
bool m_isEpcMode
whether the LTE configuration in test is using EPC
double m_interSiteDistance
inter site distance
void ConnectionEstablishedCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti)
Connection established callback function.
void InitialCellSelectionEndErrorCallback(std::string context, uint64_t imsi, uint16_t cellId)
Initial cell selection end error callback function.
bool m_isIdealRrc
whether the LTE is configured to use ideal RRC
void StateTransitionCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteUeRrc::State oldState, LteUeRrc::State newState)
State transition callback function.
Test suite for executing the cell selection test cases in without-EPC and with-EPC scenarios.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
aggregate IP/TCP/UDP functionality to existing Nodes.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:77
holds a vector of std::pair of Ptr<Ipv4> and interface index.
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:256
Helper class that adds ns3::Ipv4StaticRouting objects.
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Try and find the static routing protocol as either the main routing protocol or in the list of routin...
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 ...
Definition: lte-helper.cc:272
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:474
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
Definition: lte-helper.cc:959
void SetEnbDeviceAttribute(std::string n, const AttributeValue &v)
Set an attribute for the eNodeB devices (LteEnbNetDevice) to be created.
Definition: lte-helper.cc:400
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:489
void SetUeDeviceAttribute(std::string n, const AttributeValue &v)
Set an attribute for the UE devices (LteUeNetDevice) to be created.
Definition: lte-helper.cc:422
int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used.
Definition: lte-helper.cc:1443
The LteUeNetDevice class implements the UE net device.
State
The states of the UE RRC entity.
Definition: lte-ue-rrc.h:106
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
uint32_t GetN(void) const
Get the number of Ptr<NetDevice> stored in this container.
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Ptr< Node > GetPgwNode() const override
Get the PGW node.
Ipv4Address GetUeDefaultGatewayAddress() override
Ipv4InterfaceContainer AssignUeIpv4Address(NetDeviceContainer ueDevices) override
Assign IPv4 addresses to UE devices.
keep track of a set of node pointers.
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
uint32_t GetN(void) const
Get the number of Ptr<Node> stored in this container.
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Definition: object-base.cc:256
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:470
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Hold variables of type string.
Definition: string.h:41
encapsulates test code
Definition: test.h:994
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
std::string GetName(void) const
Definition: test.cc:370
A suite of tests to run.
Definition: test.h:1188
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
AttributeValue implementation for Time.
Definition: nstime.h:1309
Hold an unsigned integer type.
Definition: uinteger.h:44
Vector3D Vector
Vector alias typedef for compatibility with mobility models.
Definition: vector.h:324
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
void SetGlobal(std::string name, const AttributeValue &value)
Definition: config.cc:891
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:920
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:206
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:282
#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.
Definition: test.h:141
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1245
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1253
static LteCellSelectionTestSuite g_lteCellSelectionTestSuite
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...
Definition: callback.h:661
mobility
Definition: third.py:98
A set of input parameters for setting up a UE in the simulation.
UeSetup_t(double relPosX, double relPosY, bool isCsgMember, Time checkPoint, uint16_t expectedCellId1, uint16_t expectedCellId2)
UE test setup function.