A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lte-test-deactivate-bearer.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author:Gaurav Sathe <gaurav.sathe@tcs.com>
18 */
19
21
22#include "ns3/double.h"
23#include "ns3/internet-module.h"
24#include "ns3/ipv4-global-routing-helper.h"
25#include "ns3/network-module.h"
26#include "ns3/packet-sink-helper.h"
27#include "ns3/point-to-point-epc-helper.h"
28#include "ns3/point-to-point-helper.h"
29#include "ns3/radio-bearer-stats-calculator.h"
30#include "ns3/string.h"
31#include "ns3/udp-client-server-helper.h"
32#include <ns3/boolean.h>
33#include <ns3/constant-position-mobility-model.h>
34#include <ns3/enum.h>
35#include <ns3/eps-bearer.h>
36#include <ns3/log.h>
37#include <ns3/lte-enb-net-device.h>
38#include <ns3/lte-enb-phy.h>
39#include <ns3/lte-helper.h>
40#include <ns3/lte-ue-net-device.h>
41#include <ns3/lte-ue-phy.h>
42#include <ns3/lte-ue-rrc.h>
43#include <ns3/mobility-helper.h>
44#include <ns3/net-device-container.h>
45#include <ns3/node-container.h>
46#include <ns3/object.h>
47#include <ns3/packet.h>
48#include <ns3/ptr.h>
49#include <ns3/rng-seed-manager.h>
50#include <ns3/simulator.h>
51#include <ns3/spectrum-error-model.h>
52#include <ns3/spectrum-interference.h>
53#include <ns3/test.h>
54
55#include <iostream>
56#include <sstream>
57#include <string>
58
59NS_LOG_COMPONENT_DEFINE("LenaTestDeactivateBearer");
60
61namespace ns3
62{
63
65 : TestSuite("lte-test-deactivate-bearer", Type::SYSTEM)
66{
67 NS_LOG_INFO("creating LenaTestPssFfMacSchedulerSuite");
68
69 bool errorModel = false;
70
71 // Test Case: homogeneous flow test in PSS (different distance)
72 // Traffic1 info
73 // UDP traffic: payload size = 100 bytes, interval = 1 ms
74 // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
75 // byte/sec -> 132000 byte/rate
76 // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
77 // 132000 * 3 = 396000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
78 std::vector<uint16_t> dist_1;
79
80 dist_1.push_back(0); // User 0 distance --> MCS 28
81 dist_1.push_back(0); // User 1 distance --> MCS 22
82 dist_1.push_back(0); // User 2 distance --> MCS 20
83
84 std::vector<uint16_t> packetSize_1;
85
86 packetSize_1.push_back(100); // 1
87 packetSize_1.push_back(100); // 2
88 packetSize_1.push_back(100); // 3
89
90 std::vector<uint32_t> estThrPssDl_1;
91
92 estThrPssDl_1.push_back(132000); // User 0 estimated TTI throughput from PSS
93 estThrPssDl_1.push_back(132000); // User 1 estimated TTI throughput from PSS
94 estThrPssDl_1.push_back(132000); // User 2 estimated TTI throughput from PSS
95
97 new LenaDeactivateBearerTestCase(dist_1, estThrPssDl_1, packetSize_1, 1, errorModel, true),
99}
100
106
107std::string
108LenaDeactivateBearerTestCase::BuildNameString(uint16_t nUser, std::vector<uint16_t> dist)
109{
110 std::ostringstream oss;
111 oss << "distances (m) = [ ";
112 for (auto it = dist.begin(); it != dist.end(); ++it)
113 {
114 oss << *it << " ";
115 }
116 oss << "]";
117 return oss.str();
118}
119
121 std::vector<uint32_t> estThrPssDl,
122 std::vector<uint16_t> packetSize,
123 uint16_t interval,
124 bool errorModelEnabled,
125 bool useIdealRrc)
126 : TestCase(BuildNameString(dist.size(), dist)),
127 m_nUser(dist.size()),
128 m_dist(dist),
129 m_packetSize(packetSize),
130 m_interval(interval),
131 m_estThrPssDl(estThrPssDl),
132 m_errorModelEnabled(errorModelEnabled)
133{
134}
135
137{
138}
139
140void
142{
143 uint32_t originalSeed = RngSeedManager::GetSeed();
144 uint32_t originalRun = RngSeedManager::GetRun();
147
149 {
150 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
151 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
152 }
153
154 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
155 Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
156 StringValue(CreateTempDirFilename("DlRlcStats.txt")));
157 Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
158 StringValue(CreateTempDirFilename("UlRlcStats.txt")));
159
160 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
161 Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper>();
162 lteHelper->SetEpcHelper(epcHelper);
163
164 Ptr<Node> pgw = epcHelper->GetPgwNode();
165
166 // Create a single RemoteHost
167 NodeContainer remoteHostContainer;
168 remoteHostContainer.Create(1);
169 Ptr<Node> remoteHost = remoteHostContainer.Get(0);
170 InternetStackHelper internet;
171 internet.Install(remoteHostContainer);
172
173 // Create the Internet
175 p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate("100Gb/s")));
176 p2ph.SetDeviceAttribute("Mtu", UintegerValue(1500));
177 p2ph.SetChannelAttribute("Delay", TimeValue(Seconds(0.001)));
178 NetDeviceContainer internetDevices = p2ph.Install(pgw, remoteHost);
179 Ipv4AddressHelper ipv4h;
180 ipv4h.SetBase("1.0.0.0", "255.0.0.0");
181 Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(internetDevices);
182 // interface 0 is localhost, 1 is the p2p device
183 Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress(1);
184
185 Ipv4StaticRoutingHelper ipv4RoutingHelper;
186 Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
187 ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject<Ipv4>());
188 remoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1);
189
190 // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
191
192 // LogComponentEnable ("LenaTestDeactivateBearer", LOG_LEVEL_ALL);
193 // LogComponentEnable ("LteHelper", logLevel);
194 // LogComponentEnable ("EpcHelper", logLevel);
195 // LogComponentEnable ("EpcEnbApplication", logLevel);
196 // LogComponentEnable ("EpcMmeApplication", logLevel);
197 // LogComponentEnable ("EpcPgwApplication", logLevel);
198 // LogComponentEnable ("EpcSgwApplication", logLevel);
199 // LogComponentEnable ("LteEnbRrc", logLevel);
200
201 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
202
203 // Create Nodes: eNodeB and UE
204 NodeContainer enbNodes;
205 NodeContainer ueNodes;
206 enbNodes.Create(1);
207 ueNodes.Create(m_nUser);
208
209 // Install Mobility Model
210 MobilityHelper mobility;
211 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
212 mobility.Install(enbNodes);
213 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
214 mobility.Install(ueNodes);
215
216 // Create Devices and install them in the Nodes (eNB and UE)
217 NetDeviceContainer enbDevs;
218 NetDeviceContainer ueDevs;
219 int64_t stream = 1;
220
221 lteHelper->SetSchedulerType("ns3::PssFfMacScheduler");
222 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
223 stream += lteHelper->AssignStreams(enbDevs, stream);
224
225 ueDevs = lteHelper->InstallUeDevice(ueNodes);
226 stream += lteHelper->AssignStreams(ueDevs, stream);
227
228 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(0)->GetObject<LteEnbNetDevice>();
229 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
230 enbPhy->SetAttribute("TxPower", DoubleValue(30.0));
231 enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
232
233 // Set UEs' position and power
234 for (int i = 0; i < m_nUser; i++)
235 {
238 mm->SetPosition(Vector(m_dist.at(i), 0.0, 0.0));
239 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(i)->GetObject<LteUeNetDevice>();
240 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
241 uePhy->SetAttribute("TxPower", DoubleValue(23.0));
242 uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
243 }
244
245 // Install the IP stack on the UEs
246 internet.Install(ueNodes);
247 Ipv4InterfaceContainer ueIpIface;
248 ueIpIface = epcHelper->AssignUeIpv4Address(NetDeviceContainer(ueDevs));
249
250 // Assign IP address to UEs
251 for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
252 {
253 Ptr<Node> ueNode = ueNodes.Get(u);
254 // Set the default gateway for the UE
255 Ptr<Ipv4StaticRouting> ueStaticRouting =
256 ipv4RoutingHelper.GetStaticRouting(ueNode->GetObject<Ipv4>());
257 ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
258 }
259
260 // Attach a UE to a eNB
261 lteHelper->Attach(ueDevs, enbDevs.Get(0));
262
263 // Activate an EPS bearer on all UEs
264
265 for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
266 {
267 Ptr<NetDevice> ueDevice = ueDevs.Get(u);
269 qos.gbrDl = (m_packetSize.at(u) + 32) * (1000 / m_interval) *
270 8; // bit/s, considering IP, UDP, RLC, PDCP header size
271 qos.gbrUl = (m_packetSize.at(u) + 32) * (1000 / m_interval) * 8;
272 qos.mbrDl = qos.gbrDl;
273 qos.mbrUl = qos.gbrUl;
274
276 EpsBearer bearer(q, qos);
277 bearer.arp.priorityLevel = 15 - (u + 1);
278 bearer.arp.preemptionCapability = true;
279 bearer.arp.preemptionVulnerability = true;
280 lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, EpcTft::Default());
281 }
282
283 // Install downlink and uplink applications
284 uint16_t dlPort = 1234;
285 uint16_t ulPort = 2000;
286 PacketSinkHelper dlPacketSinkHelper("ns3::UdpSocketFactory",
288 ApplicationContainer clientApps;
289 ApplicationContainer serverApps;
290
291 for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
292 {
293 ++ulPort;
294 serverApps.Add(
295 dlPacketSinkHelper.Install(ueNodes.Get(u))); // receive packets from remotehost
296 PacketSinkHelper ulPacketSinkHelper("ns3::UdpSocketFactory",
298 serverApps.Add(ulPacketSinkHelper.Install(remoteHost)); // receive packets from UEs
299
300 UdpClientHelper dlClient(ueIpIface.GetAddress(u), dlPort); // uplink packets generator
301 dlClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
302 dlClient.SetAttribute("MaxPackets", UintegerValue(1000000));
303 dlClient.SetAttribute("PacketSize", UintegerValue(m_packetSize.at(u)));
304
305 UdpClientHelper ulClient(remoteHostAddr, ulPort); // downlink packets generator
306 ulClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
307 ulClient.SetAttribute("MaxPackets", UintegerValue(1000000));
308 ulClient.SetAttribute("PacketSize", UintegerValue(m_packetSize.at(u)));
309
310 clientApps.Add(dlClient.Install(remoteHost));
311 clientApps.Add(ulClient.Install(ueNodes.Get(u)));
312 }
313
314 serverApps.Start(Seconds(0.030));
315 clientApps.Start(Seconds(0.030));
316
317 double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
318 double statsDuration = 1.0;
319 double tolerance = 0.1;
320
321 lteHelper->EnableRlcTraces();
322 Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats();
323 rlcStats->SetAttribute("StartTime", TimeValue(Seconds(statsStartTime)));
324 rlcStats->SetAttribute("EpochDuration", TimeValue(Seconds(statsDuration)));
325
326 // get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
327 Ptr<NetDevice> ueDevice = ueDevs.Get(0);
328 Ptr<NetDevice> enbDevice = enbDevs.Get(0);
329
330 /*
331 * Instantiate De-activation using Simulator::Schedule() method which will initiate bearer
332 * de-activation after deActivateTime Instantiate De-activation in sequence (Time const &time,
333 * MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
334 */
335 Time deActivateTime(Seconds(1.5));
336 Simulator::Schedule(deActivateTime,
338 lteHelper,
339 ueDevice,
340 enbDevice,
341 2);
342
343 // stop simulation after 3 seconds
345
347
348 NS_LOG_INFO("DL - Test with " << m_nUser << " user(s)");
349 std::vector<uint64_t> dlDataRxed;
350 std::vector<uint64_t> dlDataTxed;
351 for (int i = 0; i < m_nUser; i++)
352 {
353 // get the imsi
354 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
355 // get the lcId
356 // lcId is hard-coded, since only one dedicated bearer is added
357 uint8_t lcId = 4;
358 dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
359 dlDataTxed.push_back(rlcStats->GetDlTxData(imsi, lcId));
360 NS_LOG_INFO("\tUser " << i << " dist " << m_dist.at(i) << " imsi " << imsi << " bytes rxed "
361 << (double)dlDataRxed.at(i) << " thr "
362 << (double)dlDataRxed.at(i) / statsDuration << " ref "
363 << m_estThrPssDl.at(i));
364 NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " bytes txed " << (double)dlDataTxed.at(i)
365 << " thr " << (double)dlDataTxed.at(i) / statsDuration);
366 }
367
368 for (int i = 0; i < m_nUser; i++)
369 {
370 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
371
372 /*
373 * For UE ID-0 IMSI 1, LCID=4 is deactivated hence If traffic seen on it, test case should
374 * fail Else For other UE's, test case should validate throughput
375 */
376 if (imsi == 1)
377 {
378 NS_TEST_ASSERT_MSG_EQ((double)dlDataTxed.at(i), 0, "Invalid LCID in Statistics ");
379 }
380 else
381 {
382 NS_TEST_ASSERT_MSG_EQ_TOL((double)dlDataTxed.at(i) / statsDuration,
383 m_estThrPssDl.at(i),
384 m_estThrPssDl.at(i) * tolerance,
385 " Unfair Throughput!");
386 }
387 }
388
390
391 RngSeedManager::SetSeed(originalSeed);
392 RngSeedManager::SetRun(originalRun);
393}
394} // namespace ns3
holds a vector of ns3::Application pointers.
ApplicationContainer Install(NodeContainer c)
Install an application on each node of the input container configured with all the attributes set wit...
void SetAttribute(const std::string &name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Mobility model for which the current position does not change once it has been set and until it is se...
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
Definition: data-rate.h:296
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
static Ptr< EpcTft > Default()
creates a TFT matching any traffic
Definition: epc-tft.cc:229
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
AllocationRetentionPriority arp
allocation retention priority
Definition: eps-bearer.h:154
Qci
QoS Class Indicator.
Definition: eps-bearer.h:106
@ GBR_CONV_VOICE
GBR Conversational Voice.
Definition: eps-bearer.h:107
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
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:42
static Ipv4Address GetAny()
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:80
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
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...
Test case that for testing the deactivation of the bearer functionality.
std::vector< uint16_t > m_packetSize
packet size in bytes
void DoRun() override
Implementation to actually run this TestCase.
LenaDeactivateBearerTestCase(std::vector< uint16_t > dist, std::vector< uint32_t > estThrPssDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled, bool useIdealRrc)
Constructor.
std::vector< uint16_t > m_dist
distance between the nodes
static std::string BuildNameString(uint16_t nUser, std::vector< uint16_t > dist)
Build name string function.
std::vector< uint32_t > m_estThrPssDl
estimated threshold PSS DL
The test suite class for the LenaDeactivateBearerTestCase.
The eNodeB device implementation.
void DeActivateDedicatedEpsBearer(Ptr< NetDevice > ueDevice, Ptr< NetDevice > enbDevice, uint8_t bearerId)
Manually trigger dedicated bearer de-activation at specific simulation time.
Definition: lte-helper.cc:1387
The LteUeNetDevice class implements the UE net device.
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this 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.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:522
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
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)
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void SetRun(uint64_t run)
Set the run number of simulation.
static void SetSeed(uint32_t seed)
Set the seed.
static uint64_t GetRun()
Get the current run number.
static uint32_t GetSeed()
Get the current seed value which will be used by all subsequently instantiated RandomVariableStream o...
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:571
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
Hold variables of type string.
Definition: string.h:56
encapsulates test code
Definition: test.h:1061
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:438
A suite of tests to run.
Definition: test.h:1268
Type
Type of test.
Definition: test.h:1275
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
AttributeValue implementation for Time.
Definition: nstime.h:1413
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
Hold an unsigned integer type.
Definition: uinteger.h:45
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:894
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:275
static LenaTestBearerDeactivateSuite lenaTestBearerDeactivateSuite
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.
Definition: test.h:145
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
Definition: test.h:338
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1338
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool preemptionVulnerability
true if bearer can be preempted by others
Definition: eps-bearer.h:60
bool preemptionCapability
true if bearer can preempt others
Definition: eps-bearer.h:59
uint8_t priorityLevel
1-15; 1 = highest
Definition: eps-bearer.h:58
3GPP TS 36.413 9.2.1.18 GBR QoS Information
Definition: eps-bearer.h:36
uint64_t gbrDl
Guaranteed Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:42
uint64_t gbrUl
Guaranteed Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:43
uint64_t mbrDl
Maximum Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:44
uint64_t mbrUl
Maximum Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:45
static const uint32_t packetSize
Packet size generated at the AP.