A Discrete-Event Network Simulator
API
no-op-component-carrier-manager.cc
Go to the documentation of this file.
1/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2015 Danilo Abrignani
4 * Copyright (c) 2016 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation;
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * Authors: Danilo Abrignani <danilo.abrignani@unibo.it>
20 * Biljana Bojovic <biljana.bojovic@cttc.es>
21 *
22 */
23
25#include <ns3/log.h>
26#include <ns3/random-variable-stream.h>
27
28namespace ns3 {
29
30NS_LOG_COMPONENT_DEFINE ("NoOpComponentCarrierManager");
31NS_OBJECT_ENSURE_REGISTERED (NoOpComponentCarrierManager);
32
34{
35 NS_LOG_FUNCTION (this);
40}
41
43{
44 NS_LOG_FUNCTION (this);
45}
46
47void
49{
50 NS_LOG_FUNCTION (this);
52 delete m_ccmMacSapUser;
53 delete m_macSapProvider;
54}
55
56
59{
60 static TypeId tid = TypeId ("ns3::NoOpComponentCarrierManager")
62 .SetGroupName("Lte")
63 .AddConstructor<NoOpComponentCarrierManager> ()
64 ;
65 return tid;
66}
67
68
69void
71{
72 NS_LOG_FUNCTION (this);
74}
75
77// MAC SAP
79
80
81void
83{
84 NS_LOG_FUNCTION (this);
85 std::map <uint8_t, LteMacSapProvider*>::iterator it = m_macSapProvidersMap.find (params.componentCarrierId);
86 NS_ASSERT_MSG (it != m_macSapProvidersMap.end (), "could not find Sap for ComponentCarrier " << params.componentCarrierId);
87 // with this algorithm all traffic is on Primary Carrier
88 it->second->TransmitPdu (params);
89}
90
91void
93{
94 NS_LOG_FUNCTION (this);
95 auto ueManager = m_ccmRrcSapUser->GetUeManager (params.rnti);
96 std::map <uint8_t, LteMacSapProvider*>::iterator it = m_macSapProvidersMap.find (ueManager->GetComponentCarrierId ());
97 NS_ASSERT_MSG (it != m_macSapProvidersMap.end (), "could not find Sap for ComponentCarrier ");
98 it->second->ReportBufferStatus (params);
99}
100
101void
103{
104 NS_LOG_FUNCTION (this);
105 NS_LOG_DEBUG (this << " rnti= " << txOpParams.rnti << " lcid= " << +txOpParams.lcid << " layer= " << +txOpParams.layer << " ccId=" << +txOpParams.componentCarrierId);
106 m_ueInfo.at (txOpParams.rnti).m_ueAttached.at (txOpParams.lcid)->NotifyTxOpportunity (txOpParams);
107}
108
109void
111{
112 NS_LOG_FUNCTION (this);
113 auto lcidIt = m_ueInfo.at (rxPduParams.rnti).m_ueAttached.find (rxPduParams.lcid);
114 if (lcidIt != m_ueInfo.at (rxPduParams.rnti).m_ueAttached.end ())
115 {
116 lcidIt->second->ReceivePdu (rxPduParams);
117 }
118}
119
120void
122{
123 NS_LOG_FUNCTION (this);
124}
125
126void
128 LteRrcSap::MeasResults measResults)
129{
130 NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
131}
132
133void
134NoOpComponentCarrierManager::DoAddUe (uint16_t rnti, uint8_t state)
135{
136 NS_LOG_FUNCTION (this << rnti << (uint16_t) state);
137 std::map<uint16_t, uint8_t>::iterator eccIt; // m_enabledComponentCarrier iterator
138 auto ueInfoIt = m_ueInfo.find (rnti);
139 if (ueInfoIt == m_ueInfo.end ())
140 {
141 NS_LOG_DEBUG (this << " UE " << rnti << " was not found, now it is added in the map");
142 UeInfo info;
143 info.m_ueState = state;
144
145 // the Primary carrier (PC) is enabled by default
146 // on the PC the SRB0 and SRB1 are enabled when the Ue is connected
147 // these are hard-coded and the configuration not pass through the
148 // Component Carrier Manager which is responsible of configure
149 // only DataRadioBearer on the different Component Carrier
151 m_ueInfo.emplace (rnti, info);
152 }
153 else
154 {
155 NS_LOG_DEBUG (this << " UE " << rnti << "found, updating the state from " << +ueInfoIt->second.m_ueState << " to " << +state);
156 ueInfoIt->second.m_ueState = state;
157 }
158}
159
160void
162{
163 NS_LOG_FUNCTION (this);
164 m_ueInfo.at (lcInfo.rnti).m_rlcLcInstantiated.emplace (lcInfo.lcId, lcInfo);
165}
166
167
168void
170{
171 NS_LOG_FUNCTION (this);
172 auto rntiIt = m_ueInfo.find (rnti);
173 NS_ASSERT_MSG (rntiIt != m_ueInfo.end (), "request to remove UE info with unknown RNTI " << rnti);
174 m_ueInfo.erase (rntiIt);
175}
176
177std::vector<LteCcmRrcSapProvider::LcsConfig>
178NoOpComponentCarrierManager::DoSetupDataRadioBearer (EpsBearer bearer, uint8_t bearerId, uint16_t rnti, uint8_t lcid, uint8_t lcGroup, LteMacSapUser *msu)
179{
180 NS_LOG_FUNCTION (this << rnti);
181 auto rntiIt = m_ueInfo.find (rnti);
182 NS_ASSERT_MSG (rntiIt != m_ueInfo.end (), "SetupDataRadioBearer on unknown RNTI " << rnti);
183
184 // enable by default all carriers
185 rntiIt->second.m_enabledComponentCarrier = m_noOfComponentCarriers;
186
187 std::vector<LteCcmRrcSapProvider::LcsConfig> res;
190 // NS_LOG_DEBUG (this << " componentCarrierEnabled " << (uint16_t) eccIt->second);
191 for (uint16_t ncc = 0; ncc < m_noOfComponentCarriers; ncc++)
192 {
193 // NS_LOG_DEBUG (this << " res size " << (uint16_t) res.size ());
195 lci.rnti = rnti;
196 lci.lcId = lcid;
197 lci.lcGroup = lcGroup;
198 lci.qci = bearer.qci;
199 if (ncc == 0)
200 {
201 lci.isGbr = bearer.IsGbr ();
202 lci.mbrUl = bearer.gbrQosInfo.mbrUl;
203 lci.mbrDl = bearer.gbrQosInfo.mbrDl;
204 lci.gbrUl = bearer.gbrQosInfo.gbrUl;
205 lci.gbrDl = bearer.gbrQosInfo.gbrDl;
206 }
207 else
208 {
209 lci.isGbr = 0;
210 lci.mbrUl = 0;
211 lci.mbrDl = 0;
212 lci.gbrUl = 0;
213 lci.gbrDl = 0;
214 } // data flows only on PC
215 NS_LOG_DEBUG (this << " RNTI " << lci.rnti << "Lcid " << (uint16_t) lci.lcId << " lcGroup " << (uint16_t) lci.lcGroup);
216 entry.componentCarrierId = ncc;
217 entry.lc = lci;
218 entry.msu = m_ccmMacSapUser;
219 res.push_back (entry);
220 } // end for
221
222 auto lcidIt = rntiIt->second.m_rlcLcInstantiated.find (lcid);
223 if (lcidIt == rntiIt->second.m_rlcLcInstantiated.end ())
224 {
225 lcinfo.rnti = rnti;
226 lcinfo.lcId = lcid;
227 lcinfo.lcGroup = lcGroup;
228 lcinfo.qci = bearer.qci;
229 lcinfo.isGbr = bearer.IsGbr ();
230 lcinfo.mbrUl = bearer.gbrQosInfo.mbrUl;
231 lcinfo.mbrDl = bearer.gbrQosInfo.mbrDl;
232 lcinfo.gbrUl = bearer.gbrQosInfo.gbrUl;
233 lcinfo.gbrDl = bearer.gbrQosInfo.gbrDl;
234 rntiIt->second.m_rlcLcInstantiated.emplace (lcinfo.lcId, lcinfo);
235 rntiIt->second.m_ueAttached.emplace (lcinfo.lcId, msu);
236 }
237 else
238 {
239 NS_LOG_ERROR ("LC already exists");
240 }
241 return res;
242
243}
244
245std::vector<uint8_t>
247{
248 NS_LOG_FUNCTION (this << rnti << +lcid);
249
250 // Here we receive directly the RNTI and the LCID, instead of only DRB ID
251 // DRB ID are mapped as DRBID = LCID + 2
252 auto rntiIt = m_ueInfo.find (rnti);
253 NS_ASSERT_MSG (rntiIt != m_ueInfo.end (), "request to Release Data Radio Bearer on UE with unknown RNTI " << rnti);
254
255 NS_LOG_DEBUG (this << " remove LCID " << +lcid << " for RNTI " << rnti);
256 std::vector<uint8_t> res;
257 for (uint16_t i = 0; i < rntiIt->second.m_enabledComponentCarrier; i++)
258 {
259 res.insert (res.end (), i);
260 }
261
262 auto lcIt = rntiIt->second.m_ueAttached.find (lcid);
263 NS_ASSERT_MSG (lcIt != rntiIt->second.m_ueAttached.end (), "Logical Channel not found");
264 rntiIt->second.m_ueAttached.erase (lcIt);
265
266 auto rlcInstancesIt = rntiIt->second.m_rlcLcInstantiated.find (rnti);
267 NS_ASSERT_MSG (rlcInstancesIt != rntiIt->second.m_rlcLcInstantiated.end (), "Logical Channel not found");
268 rntiIt->second.m_rlcLcInstantiated.erase (rlcInstancesIt);
269
270 return res;
271}
272
275{
276 NS_LOG_FUNCTION (this);
277
278 auto rntiIt = m_ueInfo.find (lcinfo.rnti);
279 NS_ASSERT_MSG (rntiIt != m_ueInfo.end (), "request to add a signal bearer to unknown RNTI " << lcinfo.rnti);
280
281 auto lcidIt = rntiIt->second.m_ueAttached.find (lcinfo.lcId);
282 if (lcidIt == rntiIt->second.m_ueAttached.end ())
283 {
284 rntiIt->second.m_ueAttached.emplace (lcinfo.lcId, msu);
285 }
286 else
287 {
288 NS_LOG_ERROR ("LC already exists");
289 }
290
291 return m_ccmMacSapUser;
292}
293
294void
295NoOpComponentCarrierManager::DoNotifyPrbOccupancy (double prbOccupancy, uint8_t componentCarrierId)
296{
297 NS_LOG_FUNCTION (this);
298 NS_LOG_DEBUG ("Update PRB occupancy:"<<prbOccupancy<<" at carrier:"<< (uint32_t) componentCarrierId);
299 m_ccPrbOccupancy.insert(std::pair<uint8_t, double> (componentCarrierId, prbOccupancy));
300}
301
302void
304{
305 NS_LOG_FUNCTION (this);
306 NS_ASSERT_MSG (bsr.m_macCeType == MacCeListElement_s::BSR, "Received a Control Message not allowed " << bsr.m_macCeType);
307 if ( bsr.m_macCeType == MacCeListElement_s::BSR)
308 {
309 MacCeListElement_s newBsr;
310 newBsr.m_rnti = bsr.m_rnti;
311 newBsr.m_macCeType = bsr.m_macCeType;
314 newBsr.m_macCeValue.m_bufferStatus.resize (4);
315 for (uint16_t i = 0; i < 4; i++)
316 {
317 uint8_t bsrId = bsr.m_macCeValue.m_bufferStatus.at (i);
319 // here the buffer should be divide among the different sap
320 // since the buffer status report are compressed information
321 // it is needed to use BsrId2BufferSize to uncompress
322 // after the split over all component carriers is is needed to
323 // compress again the information to fit MacCeListEkement_s structure
324 // verify how many Component Carrier are enabled per UE
325 // in this simple code the BufferStatus will be notify only
326 // to the primary carrier component
328 }
329 auto sapIt = m_ccmMacSapProviderMap.find (componentCarrierId);
330 if (sapIt == m_ccmMacSapProviderMap.end ())
331 {
332 NS_FATAL_ERROR ("Sap not found in the CcmMacSapProviderMap");
333 }
334 else
335 {
336 // in the current implementation bsr in uplink is forwarded only to the primary carrier.
337 // above code demonstrates how to resize buffer status if more carriers are being used in future
338 sapIt->second->ReportMacCeToScheduler (newBsr);
339 }
340 }
341 else
342 {
343 NS_FATAL_ERROR ("Expected BSR type of message.");
344 }
345}
346
347void
348NoOpComponentCarrierManager::DoUlReceiveSr (uint16_t rnti, uint8_t componentCarrierId)
349{
350 NS_LOG_FUNCTION (this);
351
352 auto sapIt = m_ccmMacSapProviderMap.find (componentCarrierId);
354 "Sap not found in the CcmMacSapProviderMap");
355
356 sapIt->second->ReportSrToScheduler (rnti);
357}
358
359
361
363
365{
366 NS_LOG_FUNCTION (this);
367
368}
369
371{
372 NS_LOG_FUNCTION (this);
373}
374
375TypeId
377{
378 static TypeId tid = TypeId ("ns3::RrComponentCarrierManager")
380 .SetGroupName("Lte")
381 .AddConstructor<RrComponentCarrierManager> ()
382 ;
383 return tid;
384}
385
386
387void
389{
390 NS_LOG_FUNCTION (this);
391
392 uint32_t numberOfCarriersForUe = m_ueInfo.at (params.rnti).m_enabledComponentCarrier;
393 if (params.lcid == 0 || params.lcid == 1 || numberOfCarriersForUe == 1)
394 {
395 NS_LOG_INFO("Buffer status forwarded to the primary carrier.");
396 auto ueManager = m_ccmRrcSapUser->GetUeManager (params.rnti);
397 m_macSapProvidersMap.at (ueManager->GetComponentCarrierId ())->ReportBufferStatus (params);
398 }
399 else
400 {
401 params.retxQueueSize /= numberOfCarriersForUe;
402 params.txQueueSize /= numberOfCarriersForUe;
403 for ( uint16_t i = 0; i < numberOfCarriersForUe ; i++)
404 {
405 NS_ASSERT_MSG (m_macSapProvidersMap.find(i)!=m_macSapProvidersMap.end(), "Mac sap provider does not exist.");
406 m_macSapProvidersMap.at (i)->ReportBufferStatus(params);
407 }
408 }
409}
410
411
412void
414{
415 NS_LOG_FUNCTION (this);
416 NS_ASSERT_MSG (componentCarrierId == 0, "Received BSR from a ComponentCarrier not allowed, ComponentCarrierId = " << componentCarrierId);
417 NS_ASSERT_MSG (bsr.m_macCeType == MacCeListElement_s::BSR, "Received a Control Message not allowed " << bsr.m_macCeType);
418
419 // split traffic in uplink equally among carriers
420 uint32_t numberOfCarriersForUe = m_ueInfo.at (bsr.m_rnti).m_enabledComponentCarrier;
421
422 if ( bsr.m_macCeType == MacCeListElement_s::BSR)
423 {
424 MacCeListElement_s newBsr;
425 newBsr.m_rnti = bsr.m_rnti;
426 // mac control element type, values can be BSR, PHR, CRNTI
427 newBsr.m_macCeType = bsr.m_macCeType;
428 // the power headroom, 64 means no valid phr is available
430 // indicates that the CRNTI MAC CE was received. The value is not used.
432 // and value 64 means that the buffer status should not be updated
433 newBsr.m_macCeValue.m_bufferStatus.resize (4);
434 // always all 4 LCGs are present see 6.1.3.1 of 3GPP TS 36.321.
435 for (uint16_t i = 0; i < 4; i++)
436 {
437 uint8_t bsrStatusId = bsr.m_macCeValue.m_bufferStatus.at (i);
438 uint32_t bufferSize = BufferSizeLevelBsr::BsrId2BufferSize (bsrStatusId);
439 // here the buffer should be divide among the different sap
440 // since the buffer status report are compressed information
441 // it is needed to use BsrId2BufferSize to uncompress
442 // after the split over all component carriers is is needed to
443 // compress again the information to fit MacCeListElement_s structure
444 // verify how many Component Carrier are enabled per UE
445 newBsr.m_macCeValue.m_bufferStatus.at(i) = BufferSizeLevelBsr::BufferSize2BsrId (bufferSize/numberOfCarriersForUe);
446 }
447 // notify MAC of each component carrier that is enabled for this UE
448 for ( uint16_t i = 0; i < numberOfCarriersForUe ; i++)
449 {
450 NS_ASSERT_MSG (m_ccmMacSapProviderMap.find(i)!=m_ccmMacSapProviderMap.end(), "Mac sap provider does not exist.");
451 m_ccmMacSapProviderMap.find(i)->second->ReportMacCeToScheduler(newBsr);
452 }
453 }
454 else
455 {
456 auto ueManager = m_ccmRrcSapUser->GetUeManager (bsr.m_rnti);
457 m_ccmMacSapProviderMap.at (ueManager->GetComponentCarrierId ())->ReportMacCeToScheduler (bsr);
458 }
459}
460
461void
462RrComponentCarrierManager::DoUlReceiveSr(uint16_t rnti, [[maybe_unused]] uint8_t componentCarrierId)
463{
464 NS_LOG_FUNCTION (this);
465 // split traffic in uplink equally among carriers
466 uint32_t numberOfCarriersForUe = m_ueInfo.at (rnti).m_enabledComponentCarrier;
467
468 m_ccmMacSapProviderMap.find (m_lastCcIdForSr)->second->ReportSrToScheduler (rnti);
469
471 if (m_lastCcIdForSr > numberOfCarriersForUe - 1)
472 {
473 m_lastCcIdForSr = 0;
474 }
475}
476
477} // end of namespace ns3
static uint8_t BufferSize2BsrId(uint32_t val)
Convert Buffer size to BSR ID.
Definition: lte-common.cc:191
static uint32_t BsrId2BufferSize(uint8_t val)
Convert BSR ID to buffer size.
Definition: lte-common.cc:184
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:92
enum ns3::EpsBearer::Qci qci
Qos class indicator.
bool IsGbr() const
Definition: eps-bearer.cc:119
GbrQosInformation gbrQosInfo
GBR QOS information.
Definition: eps-bearer.h:131
virtual Ptr< UeManager > GetUeManager(uint16_t rnti)=0
Get UE manager by RNTI.
The class implements Component Carrier Manager (CCM) that operates using the Component Carrier Manage...
std::map< uint16_t, UeInfo > m_ueInfo
The map from RNTI to UE information.
LteCcmRrcSapProvider * m_ccmRrcSapProvider
A pointer to the SAP interface of the CCM instance to receive API calls from the eNodeB RRC instance.
LteMacSapProvider * m_macSapProvider
A pointer to main SAP interface of the MAC instance, which is in this case handled by CCM.
std::map< uint8_t, LteMacSapProvider * > m_macSapProvidersMap
A map of pointers to real SAP interfaces of MAC instances.
std::map< uint8_t, LteCcmMacSapProvider * > m_ccmMacSapProviderMap
A map of pointers to the SAP interfaces of CCM instance that provides the CCM specific functionalitie...
uint16_t m_noOfComponentCarriers
The number component of carriers that are supported by this eNb.
LteCcmMacSapUser * m_ccmMacSapUser
LteCcmMacSapUser is extended version of LteMacSapUser interface.
LteCcmRrcSapUser * m_ccmRrcSapUser
A pointer to SAP interface of RRC instance, i.e.
Service Access Point (SAP) offered by the MAC to the RLC See Femto Forum MAC Scheduler Interface Spec...
Definition: lte-mac-sap.h:96
The default component carrier manager that forwards all traffic, the uplink and the downlink,...
virtual LteMacSapUser * DoConfigureSignalBearer(LteEnbCmacSapProvider::LcInfo lcinfo, LteMacSapUser *msu)
Configure the signal bearer.
virtual void DoNotifyPrbOccupancy(double prbOccupancy, uint8_t componentCarrierId)
Function implements the function of the SAP interface of CCM instance which is used by MAC to notify ...
friend class MemberLteCcmRrcSapProvider< NoOpComponentCarrierManager >
allow MemberLteCcmRrcSapProvider<NoOpComponentCarrierManager> class friend access
virtual void DoTransmitPdu(LteMacSapProvider::TransmitPduParameters params)
Transmit PDU.
virtual void DoReportBufferStatus(LteMacSapProvider::ReportBufferStatusParameters params)
Report buffer status.
virtual void DoAddLc(LteEnbCmacSapProvider::LcInfo lcInfo, LteMacSapUser *msu)
Add LC.
virtual void DoRemoveUe(uint16_t rnti)
Remove UE.
virtual void DoDispose()
Destructor implementation.
std::map< uint8_t, double > m_ccPrbOccupancy
The physical resource block occupancy per carrier.
virtual void DoAddUe(uint16_t rnti, uint8_t state)
Add UE.
virtual void DoNotifyTxOpportunity(LteMacSapUser::TxOpportunityParameters txOpParams)
Notify transmit opportunity.
virtual void DoUlReceiveSr(uint16_t rnti, uint8_t componentCarrierId)
Forward uplink SR to CCM, called by MAC through CCM SAP interface.
virtual void DoInitialize()
Initialize() implementation.
friend class MemberLteCcmMacSapUser< NoOpComponentCarrierManager >
allow MemberLteCcmMacSapUser<NoOpComponentCarrierManager> class friend access
virtual void DoUlReceiveMacCe(MacCeListElement_s bsr, uint8_t componentCarrierId)
Forwards uplink BSR to CCM, called by MAC through CCM SAP interface.
friend class EnbMacMemberLteMacSapProvider< NoOpComponentCarrierManager >
allow EnbMacMemberLteMacSapProvider<NoOpComponentCarrierManager> class friend access
virtual std::vector< uint8_t > DoReleaseDataRadioBearer(uint16_t rnti, uint8_t lcid)
Release data radio bearer.
virtual void DoReceivePdu(LteMacSapUser::ReceivePduParameters rxPduParams)
Receive PDU.
virtual std::vector< LteCcmRrcSapProvider::LcsConfig > DoSetupDataRadioBearer(EpsBearer bearer, uint8_t bearerId, uint16_t rnti, uint8_t lcid, uint8_t lcGroup, LteMacSapUser *msu)
Setup data radio bearer.
virtual void DoReportUeMeas(uint16_t rnti, LteRrcSap::MeasResults measResults)
Implementation of ReportUeMeas.
virtual void DoNotifyHarqDeliveryFailure()
Notify HARQ delivery failure.
virtual void DoInitialize(void)
Initialize() implementation.
Definition: object.cc:353
Component carrier manager implementation that splits traffic equally among carriers.
virtual void DoUlReceiveMacCe(MacCeListElement_s bsr, uint8_t componentCarrierId) override
Forwards uplink BSR to CCM, called by MAC through CCM SAP interface.
static TypeId GetTypeId()
Get the type ID.
virtual void DoUlReceiveSr(uint16_t rnti, uint8_t componentCarrierId) override
Forward uplink SR to CCM, called by MAC through CCM SAP interface.
uint8_t m_lastCcIdForSr
Last CCID to which a SR was routed.
virtual void DoReportBufferStatus(LteMacSapProvider::ReportBufferStatusParameters params) override
Report buffer status.
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:88
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
Definition: log.h:257
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#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:281
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Every class exported by the ns3 library is enclosed in the ns3 namespace.
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
uint16_t componentCarrierId
component carrier ID
LteEnbCmacSapProvider::LcInfo lc
LC info.
Logical Channel information to be passed to CmacSapProvider::ConfigureLc.
uint64_t gbrUl
guaranteed bitrate in uplink
uint8_t qci
QoS Class Identifier.
uint64_t mbrDl
maximum bitrate in downlink
uint64_t mbrUl
maximum bitrate in uplink
uint8_t lcGroup
logical channel group
uint64_t gbrDl
guaranteed bitrate in downlink
uint8_t lcId
logical channel identifier
bool isGbr
true if the bearer is GBR, false if the bearer is NON-GBR
uint16_t rnti
C-RNTI identifying the UE.
uint8_t m_enabledComponentCarrier
The number of enabled component carriers.
Parameters for LteMacSapProvider::ReportBufferStatus.
Definition: lte-mac-sap.h:68
uint32_t txQueueSize
the current size of the RLC transmission queue
Definition: lte-mac-sap.h:71
uint32_t retxQueueSize
the current size of the RLC retransmission queue in bytes
Definition: lte-mac-sap.h:73
uint8_t lcid
the logical channel id corresponding to the sending RLC instance
Definition: lte-mac-sap.h:70
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-mac-sap.h:69
Parameters for LteMacSapProvider::TransmitPdu.
Definition: lte-mac-sap.h:46
uint8_t componentCarrierId
the component carrier id corresponding to the sending Mac istance
Definition: lte-mac-sap.h:52
Parameters for LteMacSapUser::ReceivePdu.
Definition: lte-mac-sap.h:157
uint8_t lcid
the logical channel id
Definition: lte-mac-sap.h:177
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-mac-sap.h:176
Parameters for LteMacSapUser::NotifyTxOpportunity.
Definition: lte-mac-sap.h:104
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-mac-sap.h:133
uint8_t componentCarrierId
the component carrier id
Definition: lte-mac-sap.h:132
uint8_t layer
the layer of transmission (MIMO)
Definition: lte-mac-sap.h:130
uint8_t lcid
the logical channel id
Definition: lte-mac-sap.h:134
MeasResults structure.
Definition: lte-rrc-sap.h:680
uint8_t measId
measure ID
Definition: lte-rrc-sap.h:681
See section 4.3.14 macCEListElement.
struct MacCeValue_u m_macCeValue
MAC CE value.
std::vector< uint8_t > m_bufferStatus
buffer status
uint8_t m_crnti
NRTI.