5G-LENA nr-v3.3-120-gdac69c56
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-test-fdm-of-numerologies.cc
Go to the documentation of this file.
1// Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4
5#include "ns3/antenna-module.h"
6#include "ns3/applications-module.h"
7#include "ns3/core-module.h"
8#include "ns3/internet-module.h"
9#include "ns3/mobility-module.h"
10#include "ns3/network-module.h"
11#include "ns3/nr-eps-bearer-tag.h"
12#include "ns3/nr-module.h"
13#include "ns3/point-to-point-helper.h"
14#include "ns3/three-gpp-channel-model.h"
15// #include "ns3/component-carrier-gnb.h"
16// #include "ns3/component-carrier-nr-ue.h"
17using namespace ns3;
18
34class NrTestFdmOfNumerologiesCase1 : public TestCase
35{
36 public:
37 NrTestFdmOfNumerologiesCase1(std::string name,
38 uint32_t numerology,
39 double bw1,
40 double bw2,
41 bool isDownlink,
42 bool isUplink);
43 ~NrTestFdmOfNumerologiesCase1() override;
44
45 private:
46 void DoRun() override;
47
48 uint32_t m_numerology; // the numerology to be used
49 double m_bw1; // bandwidth of bandwidth part 1
50 double m_bw2; // bandwidth of bandwidth part 2
51 bool m_isDownlink; // whether to generate the downlink traffic
52 bool m_isUplink; // whether to generate the uplink traffic
53};
54
55// Add some help text to this case to describe what it is intended to test
56NrTestFdmOfNumerologiesCase1::NrTestFdmOfNumerologiesCase1(std::string name,
57 uint32_t numerology,
58 double bw1,
59 double bw2,
60 bool isDownlnk,
61 bool isUplink)
62 : TestCase(name)
63{
64 m_numerology = numerology;
65 m_bw1 = bw1;
66 m_bw2 = bw2;
67 m_isDownlink = isDownlnk;
68 m_isUplink = isUplink;
69}
70
71// This destructor does nothing but we include it as a reminder that
72// the test case should clean up after itself
73NrTestFdmOfNumerologiesCase1::~NrTestFdmOfNumerologiesCase1()
74{
75}
76
77void
78NrTestFdmOfNumerologiesCase1::DoRun()
79{
80 // set simulation time and mobility
81 double simTime = 0.2; // seconds
82 double udpAppStartTime = 0.1; // seconds
83 double totalTxPower = 4;
84 uint16_t gNbNum = 1;
85 uint16_t ueNumPergNb = 2;
86 uint32_t packetSize = 1000;
87
88 Config::SetDefault("ns3::NrRlcUm::MaxTxBufferSize", UintegerValue(999999999));
89 Config::SetDefault("ns3::NrEpsBearer::Release", UintegerValue(15));
90
91 RngSeedManager::SetSeed(1);
92 RngSeedManager::SetRun(1);
93
94 // create base stations and mobile terminals
95 NodeContainer gNbNodes;
96 NodeContainer ueNodes;
97 MobilityHelper mobility;
98
99 double gNbHeight = 10;
100 double ueHeight = 1.5;
101
102 gNbNodes.Create(gNbNum);
103 ueNodes.Create(ueNumPergNb * gNbNum);
104
105 Ptr<ListPositionAllocator> apPositionAlloc = CreateObject<ListPositionAllocator>();
106 Ptr<ListPositionAllocator> staPositionAlloc = CreateObject<ListPositionAllocator>();
107 apPositionAlloc->Add(Vector(0.0, 20, gNbHeight));
108 staPositionAlloc->Add(Vector(1, 1, ueHeight));
109 staPositionAlloc->Add(Vector(-1, 1, ueHeight));
110 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
111 mobility.SetPositionAllocator(apPositionAlloc);
112 mobility.Install(gNbNodes);
113 mobility.SetPositionAllocator(staPositionAlloc);
114 mobility.Install(ueNodes);
115
116 double totalBandwidth = 0;
117 totalBandwidth = m_bw1 + m_bw2;
118
119 Ptr<NrPointToPointEpcHelper> nrEpcHelper = CreateObject<NrPointToPointEpcHelper>();
120 Ptr<IdealBeamformingHelper> idealBeamformingHelper = CreateObject<IdealBeamformingHelper>();
121 Ptr<NrHelper> nrHelper = CreateObject<NrHelper>();
122 Ptr<NrChannelHelper> channelHelper = CreateObject<NrChannelHelper>();
123 // Set the spectrum channel with the UMi scenario and always LOS condition
124 channelHelper->ConfigureFactories("UMi", "LOS");
125 // Set shadowing disabled
126 channelHelper->SetPathlossAttribute("ShadowingEnabled", BooleanValue(false));
127 // Put the pointers inside nrHelper
128 nrHelper->SetBeamformingHelper(idealBeamformingHelper);
129
130 // Antennas for all the UEs
131 nrHelper->SetUeAntennaAttribute("NumRows", UintegerValue(2));
132 nrHelper->SetUeAntennaAttribute("NumColumns", UintegerValue(4));
133 nrHelper->SetUeAntennaAttribute("AntennaElement",
134 PointerValue(CreateObject<IsotropicAntennaModel>()));
135
136 // Antennas for all the gNbs
137 nrHelper->SetGnbAntennaAttribute("NumRows", UintegerValue(4));
138 nrHelper->SetGnbAntennaAttribute("NumColumns", UintegerValue(8));
139 nrHelper->SetGnbAntennaAttribute("AntennaElement",
140 PointerValue(CreateObject<IsotropicAntennaModel>()));
141
142 nrHelper->SetEpcHelper(nrEpcHelper);
143
145 CcBwpCreator ccBwpCreator;
146
147 const uint8_t numCcPerBand = 2;
148
149 CcBwpCreator::SimpleOperationBandConf bandConf1(28e9, totalBandwidth, numCcPerBand);
150 OperationBandInfo band1 = ccBwpCreator.CreateOperationBandContiguousCc(bandConf1);
151 channelHelper->AssignChannelsToBands({band1});
152 // Set BW of each BWP
153 band1.m_cc[0]->m_bwp[0]->m_channelBandwidth = m_bw1;
154 band1.m_cc[1]->m_bwp[0]->m_channelBandwidth = m_bw2;
155 allBwps = CcBwpCreator::GetAllBwps({band1});
156
157 // gNb routing between Bearer and bandwidh part
158 nrHelper->SetGnbBwpManagerAlgorithmAttribute("NGBR_LOW_LAT_EMBB", UintegerValue(0));
159 nrHelper->SetGnbBwpManagerAlgorithmAttribute("GBR_CONV_VOICE", UintegerValue(1));
160 // Ue routing between Bearer and bandwidth part
161 nrHelper->SetUeBwpManagerAlgorithmAttribute("NGBR_LOW_LAT_EMBB", UintegerValue(0));
162 nrHelper->SetUeBwpManagerAlgorithmAttribute("GBR_CONV_VOICE", UintegerValue(1));
163
164 // install nr net devices
165 NetDeviceContainer gnbNetDev = nrHelper->InstallGnbDevice(gNbNodes, allBwps);
166 NetDeviceContainer ueNetDev = nrHelper->InstallUeDevice(ueNodes, allBwps);
167
168 double x = pow(10, totalTxPower / 10);
169
170 nrHelper->GetGnbPhy(gnbNetDev.Get(0), 0)
171 ->SetAttribute("Numerology", UintegerValue(m_numerology));
172 nrHelper->GetGnbPhy(gnbNetDev.Get(0), 1)
173 ->SetAttribute("Numerology", UintegerValue(m_numerology));
174
175 nrHelper->GetGnbPhy(gnbNetDev.Get(0), 0)
176 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw1 / totalBandwidth) * x)));
177 nrHelper->GetGnbPhy(gnbNetDev.Get(0), 1)
178 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw2 / totalBandwidth) * x)));
179
180 nrHelper->GetUePhy(ueNetDev.Get(0), 0)
181 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw1 / totalBandwidth) * x)));
182 nrHelper->GetUePhy(ueNetDev.Get(0), 1)
183 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw2 / totalBandwidth) * x)));
184
185 nrHelper->GetUePhy(ueNetDev.Get(1), 0)
186 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw1 / totalBandwidth) * x)));
187 nrHelper->GetUePhy(ueNetDev.Get(1), 1)
188 ->SetAttribute("TxPower", DoubleValue(10 * log10((m_bw2 / totalBandwidth) * x)));
189
190 for (uint32_t j = 0; j < gNbNodes.GetN(); ++j)
191 {
192 // We test 2 BWP in this test
193 for (uint8_t bwpId = 0; bwpId < 2; bwpId++)
194 {
195 Ptr<const NrSpectrumPhy> txSpectrumPhy =
196 nrHelper->GetGnbPhy(gnbNetDev.Get(j), bwpId)->GetSpectrumPhy();
197 Ptr<SpectrumChannel> txSpectrumChannel = txSpectrumPhy->GetSpectrumChannel();
198 Ptr<ThreeGppPropagationLossModel> propagationLossModel =
199 DynamicCast<ThreeGppPropagationLossModel>(
200 txSpectrumChannel->GetPropagationLossModel());
201 NS_ASSERT(propagationLossModel != nullptr);
202 propagationLossModel->AssignStreams(1);
203 Ptr<ChannelConditionModel> channelConditionModel =
204 propagationLossModel->GetChannelConditionModel();
205 channelConditionModel->AssignStreams(1);
206 Ptr<ThreeGppSpectrumPropagationLossModel> spectrumLossModel =
207 DynamicCast<ThreeGppSpectrumPropagationLossModel>(
208 txSpectrumChannel->GetPhasedArraySpectrumPropagationLossModel());
209 NS_ASSERT(spectrumLossModel != nullptr);
210 Ptr<ThreeGppChannelModel> channel =
211 DynamicCast<ThreeGppChannelModel>(spectrumLossModel->GetChannelModel());
212 channel->AssignStreams(1);
213 }
214 }
215
216 for (uint32_t j = 0; j < ueNodes.GetN(); ++j)
217 {
218 // We test 2 BWP in this test
219 for (uint8_t bwpId = 0; bwpId < 2; bwpId++)
220 {
221 Ptr<const NrSpectrumPhy> txSpectrumPhy =
222 nrHelper->GetUePhy(ueNetDev.Get(j), bwpId)->GetSpectrumPhy();
223 Ptr<SpectrumChannel> txSpectrumChannel = txSpectrumPhy->GetSpectrumChannel();
224 Ptr<ThreeGppPropagationLossModel> propagationLossModel =
225 DynamicCast<ThreeGppPropagationLossModel>(
226 txSpectrumChannel->GetPropagationLossModel());
227 NS_ASSERT(propagationLossModel != nullptr);
228 propagationLossModel->AssignStreams(1);
229 Ptr<ChannelConditionModel> channelConditionModel =
230 propagationLossModel->GetChannelConditionModel();
231 channelConditionModel->AssignStreams(1);
232 Ptr<ThreeGppSpectrumPropagationLossModel> spectrumLossModel =
233 DynamicCast<ThreeGppSpectrumPropagationLossModel>(
234 txSpectrumChannel->GetPhasedArraySpectrumPropagationLossModel());
235 NS_ASSERT(spectrumLossModel != nullptr);
236 Ptr<ThreeGppChannelModel> channel =
237 DynamicCast<ThreeGppChannelModel>(spectrumLossModel->GetChannelModel());
238 channel->AssignStreams(1);
239 }
240 }
241
242 // create the internet and install the IP stack on the UEs
243 // get SGW/PGW and create a single RemoteHost
244 Ptr<Node> pgw = nrEpcHelper->GetPgwNode();
245 NodeContainer remoteHostContainer;
246 remoteHostContainer.Create(1);
247 Ptr<Node> remoteHost = remoteHostContainer.Get(0);
248 InternetStackHelper internet;
249 internet.Install(remoteHostContainer);
250 // connect a remoteHost to pgw. Setup routing too
251 PointToPointHelper p2ph;
252 p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate("100Gb/s")));
253 p2ph.SetDeviceAttribute("Mtu", UintegerValue(2500));
254 p2ph.SetChannelAttribute("Delay", TimeValue(Seconds(0.000)));
255 NetDeviceContainer internetDevices = p2ph.Install(pgw, remoteHost);
256 Ipv4AddressHelper ipv4h;
257 ipv4h.SetBase("1.0.0.0", "255.0.0.0");
258 Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(internetDevices);
259 // in this container, interface 0 is the pgw, 1 is the remoteHost
260 Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress(1);
261
262 Ipv4StaticRoutingHelper ipv4RoutingHelper;
263 Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
264 ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject<Ipv4>());
265 remoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1);
266 internet.Install(ueNodes);
267 Ipv4InterfaceContainer ueIpIface;
268 ueIpIface = nrEpcHelper->AssignUeIpv4Address(NetDeviceContainer(ueNetDev));
269
270 // Set the default gateway for the UEs
271 for (uint32_t j = 0; j < ueNodes.GetN(); ++j)
272 {
273 Ptr<Ipv4StaticRouting> ueStaticRouting =
274 ipv4RoutingHelper.GetStaticRouting(ueNodes.Get(j)->GetObject<Ipv4>());
275 ueStaticRouting->SetDefaultRoute(nrEpcHelper->GetUeDefaultGatewayAddress(), 1);
276 }
277
278 // attach UEs to the closest gNB
279 nrHelper->AttachToClosestGnb(ueNetDev, gnbNetDev);
280
281 // assign IP address to UEs, and install UDP downlink applications
282 uint16_t dlPort = 1234;
283 uint16_t ulPort = 2000;
284 ApplicationContainer clientAppsDl;
285 ApplicationContainer serverAppsDl;
286 ApplicationContainer clientAppsUl;
287 ApplicationContainer serverAppsUl;
288 // ObjectMapValue objectMapValue;
289
290 if (m_isUplink)
291 {
292 // configure here UDP traffic
293 for (uint32_t j = 0; j < ueNodes.GetN(); ++j)
294 {
295 UdpServerHelper ulPacketSinkHelper(ulPort);
296 serverAppsUl.Add(ulPacketSinkHelper.Install(remoteHost));
297
298 UdpClientHelper ulClient(remoteHostAddr, ulPort);
299 ulClient.SetAttribute("MaxPackets", UintegerValue(0xFFFFFFFF));
300 ulClient.SetAttribute("PacketSize", UintegerValue(packetSize));
301 ulClient.SetAttribute(
302 "Interval",
303 TimeValue(Seconds(0.00001))); // we try to saturate, we just need to measure during
304 // a short time, how much traffic can handle each BWP
305 clientAppsUl.Add(ulClient.Install(ueNodes.Get(j)));
306
307 Ptr<NrEpcTft> tft = Create<NrEpcTft>();
309 ulpf.remotePortStart = ulPort;
310 ulpf.remotePortEnd = ulPort;
311 tft->Add(ulpf);
312
313 enum NrEpsBearer::Qci q;
314
315 if (j == 0)
316 {
318 }
319 else
320 {
322 }
323
324 NrEpsBearer bearer(q);
325 nrHelper->ActivateDedicatedEpsBearer(ueNetDev.Get(j), bearer, tft);
326
327 ulPort++;
328 }
329
330 serverAppsUl.Start(Seconds(udpAppStartTime));
331 clientAppsUl.Start(Seconds(udpAppStartTime));
332 serverAppsUl.Stop(Seconds(simTime));
333 clientAppsUl.Stop(Seconds(simTime));
334 }
335
336 if (m_isDownlink)
337 {
338 UdpServerHelper dlPacketSinkHelper(dlPort);
339 serverAppsDl.Add(dlPacketSinkHelper.Install(ueNodes));
340
341 // configure here UDP traffic
342 for (uint32_t j = 0; j < ueNodes.GetN(); ++j)
343 {
344 UdpClientHelper dlClient(ueIpIface.GetAddress(j), dlPort);
345 dlClient.SetAttribute("MaxPackets", UintegerValue(0xFFFFFFFF));
346 dlClient.SetAttribute("PacketSize", UintegerValue(packetSize));
347 dlClient.SetAttribute(
348 "Interval",
349 TimeValue(Seconds(0.00001))); // we try to saturate, we just need to measure during
350 // a short time, how much traffic can handle each BWP
351 clientAppsDl.Add(dlClient.Install(remoteHost));
352
353 Ptr<NrEpcTft> tft = Create<NrEpcTft>();
355 dlpf.localPortStart = dlPort;
356 dlpf.localPortEnd = dlPort;
357 tft->Add(dlpf);
358
359 enum NrEpsBearer::Qci q;
360
361 if (j == 0)
362 {
364 }
365 else
366 {
368 }
369
370 NrEpsBearer bearer(q);
371 nrHelper->ActivateDedicatedEpsBearer(ueNetDev.Get(j), bearer, tft);
372 }
373
374 // start UDP server and client apps
375 serverAppsDl.Start(Seconds(udpAppStartTime));
376 clientAppsDl.Start(Seconds(udpAppStartTime));
377 serverAppsDl.Stop(Seconds(simTime));
378 clientAppsDl.Stop(Seconds(simTime));
379 }
380
381 // nrHelper->EnableTraces();
382 Simulator::Stop(Seconds(simTime));
383 Simulator::Run();
384
385 if (m_isDownlink)
386 {
387 Ptr<UdpServer> serverApp1 = serverAppsDl.Get(0)->GetObject<UdpServer>();
388 Ptr<UdpServer> serverApp2 = serverAppsDl.Get(1)->GetObject<UdpServer>();
389 double throughput1 =
390 (serverApp1->GetReceived() * (packetSize + 28) * 8) / (simTime - udpAppStartTime);
391 double throughput2 =
392 (serverApp2->GetReceived() * (packetSize + 28) * 8) / (simTime - udpAppStartTime);
393
394 NS_TEST_ASSERT_MSG_EQ_TOL(throughput2,
395 throughput1 * m_bw2 / m_bw1,
396 std::max(throughput1, throughput2) * 0.2,
397 "Throughputs are not equal within tolerance");
398 NS_TEST_ASSERT_MSG_NE(throughput1, 0, "Throughput should be a non-zero value");
399 std::cout << "Total DL UDP throughput 1 (bps):" << throughput1 / 10e6 << "Mbps"
400 << std::endl;
401 std::cout << "Total DL UDP throughput 2 (bps):" << throughput2 / 10e6 << "Mbps"
402 << std::endl;
403 std::cout << "\n Test value throughput 1: " << (throughput2 * m_bw1 / m_bw2) / 10e6
404 << "Mbps" << std::endl;
405 std::cout << "\n Test value throughput 2: " << (throughput1 * m_bw2 / m_bw1) / 10e6
406 << "Mbps" << std::endl;
407 }
408 if (m_isUplink)
409 {
410 Ptr<UdpServer> serverApp1 = serverAppsUl.Get(0)->GetObject<UdpServer>();
411 Ptr<UdpServer> serverApp2 = serverAppsUl.Get(1)->GetObject<UdpServer>();
412 double throughput1 =
413 (serverApp1->GetReceived() * (packetSize + 28) * 8) / (simTime - udpAppStartTime);
414 double throughput2 =
415 (serverApp2->GetReceived() * (packetSize + 28) * 8) / (simTime - udpAppStartTime);
416
417 std::cout << "\nBw1:" << m_bw1 << ", bwp2:" << m_bw2 << std::endl;
418 std::cout << "Total UL UDP throughput 1 (bps):" << throughput1 / 10e6 << "Mbps"
419 << std::endl;
420 std::cout << "Total UL UDP throughput 2 (bps):" << throughput2 / 10e6 << "Mbps"
421 << std::endl;
422 std::cout << "Test expected throughput 1: " << (throughput2 * m_bw1 / m_bw2) / 10e6
423 << "Mbps" << std::endl;
424 std::cout << "Test expected throughput 2: " << (throughput1 * m_bw2 / m_bw1) / 10e6
425 << "Mbps" << std::endl;
426
427 NS_TEST_ASSERT_MSG_EQ_TOL(throughput2,
428 throughput1 * m_bw2 / m_bw1,
429 std::max(throughput1, throughput2) * 0.5,
430 "Throughputs are not equal within tolerance");
431
432 NS_TEST_ASSERT_MSG_NE(throughput1, 0, "Throughput should be a non-zero value");
433 }
434
435 Simulator::Destroy();
436}
437
438// The TestSuite class names the TestNrTestFdmOfNumerologiesTestSuite, identifies what type of
439// TestSuite, and enables the TestCases to be run. Typically, only the constructor for this class
440// must be defined
441//
442class NrTestFdmOfNumerologiesTestSuiteDlFour : public TestSuite
443{
444 public:
445 NrTestFdmOfNumerologiesTestSuiteDlFour();
446};
447
448NrTestFdmOfNumerologiesTestSuiteDlFour::NrTestFdmOfNumerologiesTestSuiteDlFour()
449 : TestSuite("nr-test-fdm-of-numerologies-dl-4", Type::SYSTEM)
450{
451 // downlink test cases
452 AddTestCase(
453 new NrTestFdmOfNumerologiesCase1("fdm dl 4, 50e6, 150e6", 4, 50e6, 150e6, true, false),
454 Duration::QUICK);
455 AddTestCase(
456 new NrTestFdmOfNumerologiesCase1("fdm dl 4, 100e6, 100e6", 4, 100e6, 100e6, true, false),
457 Duration::QUICK);
458 AddTestCase(
459 new NrTestFdmOfNumerologiesCase1("fdm dl 4, 80e6, 120e6", 4, 80e6, 120e6, true, false),
460 Duration::QUICK);
461 AddTestCase(
462 new NrTestFdmOfNumerologiesCase1("fdm dl 4 60e6, 140e6", 4, 60e6, 140e6, true, false),
463 Duration::QUICK);
464}
465
466// Do not forget to allocate an instance of this TestSuite
467static NrTestFdmOfNumerologiesTestSuiteDlFour nrTestFdmOfNumerologiesTestSuiteDlFour;
468
469// ----------------------------------------------------------------------------
470
471class NrTestFdmOfNumerologiesTestSuiteDlTwo : public TestSuite
472{
473 public:
474 NrTestFdmOfNumerologiesTestSuiteDlTwo();
475};
476
477NrTestFdmOfNumerologiesTestSuiteDlTwo::NrTestFdmOfNumerologiesTestSuiteDlTwo()
478 : TestSuite("nr-test-fdm-of-numerologies-dl-2", Type::SYSTEM)
479{
480 AddTestCase(
481 new NrTestFdmOfNumerologiesCase1("fdm dl 2 50e6 150e6", 2, 50e6, 150e6, true, false),
482 Duration::QUICK);
483 AddTestCase(
484 new NrTestFdmOfNumerologiesCase1("fdm dl 2 100e6 100e6", 2, 100e6, 100e6, true, false),
485 Duration::QUICK);
486 AddTestCase(
487 new NrTestFdmOfNumerologiesCase1("fdm dl 2 80e6 120e6", 2, 80e6, 120e6, true, false),
488 Duration::QUICK);
489 AddTestCase(
490 new NrTestFdmOfNumerologiesCase1("fdm dl 2 60e6 140e6", 2, 60e6, 140e6, true, false),
491 Duration::QUICK);
492}
493
494// Do not forget to allocate an instance of this TestSuite
495static NrTestFdmOfNumerologiesTestSuiteDlTwo nrTestFdmOfNumerologiesTestSuiteDlTwo;
496
497// ----------------------------------------------------------------------------
498
499class NrTestFdmOfNumerologiesTestSuiteUlFour : public TestSuite
500{
501 public:
502 NrTestFdmOfNumerologiesTestSuiteUlFour();
503};
504
505NrTestFdmOfNumerologiesTestSuiteUlFour::NrTestFdmOfNumerologiesTestSuiteUlFour()
506 : TestSuite("nr-test-fdm-of-numerologies-ul-4", Type::SYSTEM)
507{
508 AddTestCase(
509 new NrTestFdmOfNumerologiesCase1("fdm ul 4, 50e6, 150e6", 4, 50e6, 150e6, false, true),
510 Duration::QUICK);
511 AddTestCase(
512 new NrTestFdmOfNumerologiesCase1("fdm ul 4, 100e6, 100e6", 4, 100e6, 100e6, false, true),
513 Duration::QUICK);
514 AddTestCase(
515 new NrTestFdmOfNumerologiesCase1("fdm ul 4, 80e6, 120e6", 4, 80e6, 120e6, false, true),
516 Duration::QUICK);
517 AddTestCase(
518 new NrTestFdmOfNumerologiesCase1("fdm ul 4 60e6, 140e6", 4, 60e6, 140e6, false, true),
519 Duration::QUICK);
520}
521
522// Do not forget to allocate an instance of this TestSuite
523static NrTestFdmOfNumerologiesTestSuiteUlFour nrTestFdmOfNumerologiesTestSuiteUlFour;
524
525// ----------------------------------------------------------------------------
526
527class NrTestFdmOfNumerologiesTestSuiteUlTwo : public TestSuite
528{
529 public:
530 NrTestFdmOfNumerologiesTestSuiteUlTwo();
531};
532
533NrTestFdmOfNumerologiesTestSuiteUlTwo::NrTestFdmOfNumerologiesTestSuiteUlTwo()
534 : TestSuite("nr-test-fdm-of-numerologies-ul-2", Type::SYSTEM)
535{
536 AddTestCase(
537 new NrTestFdmOfNumerologiesCase1("fdm ul 2 50e6 150e6", 2, 50e6, 150e6, false, true),
538 Duration::QUICK);
539 // AddTestCase (new NrTestFdmOfNumerologiesCase1 ("fdm ul 2 100e6 100e6", 2, 100e6, 100e6,
540 // false, true), Duration::QUICK); AddTestCase (new NrTestFdmOfNumerologiesCase1 ("fdm ul 2 80e6
541 // 120e6" , 2, 80e6, 120e6, false, true), Duration::QUICK); AddTestCase (new
542 // NrTestFdmOfNumerologiesCase1 ("fdm ul 2 60e6 140e6", 2, 60e6, 140e6, false, true),
543 // Duration::QUICK);
544}
545
546// Do not forget to allocate an instance of this TestSuite
547static NrTestFdmOfNumerologiesTestSuiteUlTwo nrTestFdmOfNumerologiesTestSuiteUlTwo;
Manages the correct creation of operation bands, component carriers and bandwidth parts.
OperationBandInfo CreateOperationBandContiguousCc(const SimpleOperationBandConf &conf)
Create an operation band with the CC specified.
static BandwidthPartInfoPtrVector GetAllBwps(const std::vector< std::reference_wrapper< OperationBandInfo > > &operationBands)
Get all the BWP pointers from the specified vector of operation bands.
This class contains the specification of EPS Bearers.
@ NGBR_LOW_LAT_EMBB
Non-GBR Low Latency eMBB applications.
@ GBR_CONV_VOICE
GBR Conversational Voice.
std::vector< std::reference_wrapper< BandwidthPartInfoPtr > > BandwidthPartInfoPtrVector
vector of unique_ptr of BandwidthPartInfo
Minimum configuration requirements for a OperationBand.
uint16_t remotePortEnd
end of the port number range of the remote host
Definition nr-epc-tft.h:117
uint16_t localPortStart
start of the port number range of the UE
Definition nr-epc-tft.h:118
uint16_t remotePortStart
start of the port number range of the remote host
Definition nr-epc-tft.h:116
uint16_t localPortEnd
end of the port number range of the UE
Definition nr-epc-tft.h:119
Operation band information structure.
std::vector< ComponentCarrierInfoPtr > m_cc
Operation band component carriers.