A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lte-fr-strict-algorithm.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014 Piotr Gawlowicz
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: Piotr Gawlowicz <gawlowicz.p@gmail.com>
19  *
20  */
21 
23 #include <ns3/log.h>
24 #include "ns3/boolean.h"
25 
26 NS_LOG_COMPONENT_DEFINE ("LteFrStrictAlgorithm");
27 
28 namespace ns3 {
29 
30 NS_OBJECT_ENSURE_REGISTERED (LteFrStrictAlgorithm);
31 
33 {
34  uint8_t cellId;
35  uint8_t dlBandwidth;
40  { 1, 15, 2, 0, 4},
41  { 2, 15, 2, 4, 4},
42  { 3, 15, 2, 8, 4},
43  { 1, 25, 6, 0, 6},
44  { 2, 25, 6, 6, 6},
45  { 3, 25, 6, 12, 6},
46  { 1, 50, 21, 0, 9},
47  { 2, 50, 21, 9, 9},
48  { 3, 50, 21, 18, 11},
49  { 1, 75, 36, 0, 12},
50  { 2, 75, 36, 12, 12},
51  { 3, 75, 36, 24, 15},
52  { 1, 100, 28, 0, 24},
53  { 2, 100, 28, 24, 24},
54  { 3, 100, 28, 48, 24}
55 };
56 
58 {
59  uint8_t cellId;
60  uint8_t ulBandwidth;
65  { 1, 15, 3, 0, 4},
66  { 2, 15, 3, 4, 4},
67  { 3, 15, 3, 8, 4},
68  { 1, 25, 6, 0, 6},
69  { 2, 25, 6, 6, 6},
70  { 3, 25, 6, 12, 6},
71  { 1, 50, 21, 0, 9},
72  { 2, 50, 21, 9, 9},
73  { 3, 50, 21, 18, 11},
74  { 1, 75, 36, 0, 12},
75  { 2, 75, 36, 12, 12},
76  { 3, 75, 36, 24, 15},
77  { 1, 100, 28, 0, 24},
78  { 2, 100, 28, 24, 24},
79  { 3, 100, 28, 48, 24}
80 };
81 
82 const uint16_t NUM_DOWNLINK_CONFS (sizeof (g_frStrictDownlinkDefaultConfiguration) / sizeof (FrStrictDownlinkDefaultConfiguration));
83 const uint16_t NUM_UPLINK_CONFS (sizeof (g_frStrictUplinkDefaultConfiguration) / sizeof (FrStrictUplinkDefaultConfiguration));
84 
85 
87  : m_ffrSapUser (0),
88  m_ffrRrcSapUser (0),
89  m_dlEgdeSubBandOffset (0),
90  m_dlEdgeSubBandwidth (0),
91  m_ulEgdeSubBandOffset (0),
92  m_ulEdgeSubBandwidth (0),
93  m_measId (0)
94 {
95  NS_LOG_FUNCTION (this);
98 }
99 
100 
102 {
103  NS_LOG_FUNCTION (this);
104 }
105 
106 
107 void
109 {
110  NS_LOG_FUNCTION (this);
111  delete m_ffrSapProvider;
112  delete m_ffrRrcSapProvider;
113 }
114 
115 
116 TypeId
118 {
119  static TypeId tid = TypeId ("ns3::LteFrStrictAlgorithm")
121  .AddConstructor<LteFrStrictAlgorithm> ()
122  .AddAttribute ("UlCommonSubBandwidth",
123  "Uplink Common SubBandwidth Configuration in number of Resource Block Groups",
124  UintegerValue (25),
125  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_ulCommonSubBandwidth),
126  MakeUintegerChecker<uint8_t> ())
127  .AddAttribute ("UlEdgeSubBandOffset",
128  "Uplink Edge SubBand Offset in number of Resource Block Groups",
129  UintegerValue (0),
130  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_ulEgdeSubBandOffset),
131  MakeUintegerChecker<uint8_t> ())
132  .AddAttribute ("UlEdgeSubBandwidth",
133  "Uplink Edge SubBandwidth Configuration in number of Resource Block Groups",
134  UintegerValue (0),
135  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_ulEdgeSubBandwidth),
136  MakeUintegerChecker<uint8_t> ())
137  .AddAttribute ("DlCommonSubBandwidth",
138  "Downlink Common SubBandwidth Configuration in number of Resource Block Groups",
139  UintegerValue (25),
140  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_dlCommonSubBandwidth),
141  MakeUintegerChecker<uint8_t> ())
142  .AddAttribute ("DlEdgeSubBandOffset",
143  "Downlink Edge SubBand Offset in number of Resource Block Groups",
144  UintegerValue (0),
145  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_dlEgdeSubBandOffset),
146  MakeUintegerChecker<uint8_t> ())
147  .AddAttribute ("DlEdgeSubBandwidth",
148  "Downlink Edge SubBandwidth Configuration in number of Resource Block Groups",
149  UintegerValue (0),
150  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_dlEdgeSubBandwidth),
151  MakeUintegerChecker<uint8_t> ())
152  .AddAttribute ("RsrqThreshold",
153  "If the RSRQ of is worse than this threshold, UE should be served in Edge sub-band",
154  UintegerValue (20),
155  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_egdeSubBandThreshold),
156  MakeUintegerChecker<uint8_t> ())
157  .AddAttribute ("CenterPowerOffset",
158  "PdschConfigDedicated::Pa value for Edge Sub-band, default value dB0",
159  UintegerValue (5),
160  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_centerAreaPowerOffset),
161  MakeUintegerChecker<uint8_t> ())
162  .AddAttribute ("EdgePowerOffset",
163  "PdschConfigDedicated::Pa value for Edge Sub-band, default value dB0",
164  UintegerValue (5),
165  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_edgeAreaPowerOffset),
166  MakeUintegerChecker<uint8_t> ())
167  .AddAttribute ("CenterAreaTpc",
168  "TPC value which will be set in DL-DCI for UEs in center area"
169  "Absolute mode is used, default value 1 is mapped to -1 according to"
170  "TS36.213 Table 5.1.1.1-2",
171  UintegerValue (1),
172  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_centerAreaTpc),
173  MakeUintegerChecker<uint8_t> ())
174  .AddAttribute ("EdgeAreaTpc",
175  "TPC value which will be set in DL-DCI for UEs in edge area"
176  "Absolute mode is used, default value 1 is mapped to -1 according to"
177  "TS36.213 Table 5.1.1.1-2",
178  UintegerValue (1),
179  MakeUintegerAccessor (&LteFrStrictAlgorithm::m_edgeAreaTpc),
180  MakeUintegerChecker<uint8_t> ())
181  ;
182  return tid;
183 }
184 
185 
186 void
188 {
189  NS_LOG_FUNCTION (this << s);
190  m_ffrSapUser = s;
191 }
192 
193 
196 {
197  NS_LOG_FUNCTION (this);
198  return m_ffrSapProvider;
199 }
200 
201 void
203 {
204  NS_LOG_FUNCTION (this << s);
205  m_ffrRrcSapUser = s;
206 }
207 
208 
211 {
212  NS_LOG_FUNCTION (this);
213  return m_ffrRrcSapProvider;
214 }
215 
216 
217 void
219 {
220  NS_LOG_FUNCTION (this);
222 
223  NS_ASSERT_MSG (m_dlBandwidth > 14,"DlBandwidth must be at least 15 to use FFR algorithms");
224  NS_ASSERT_MSG (m_ulBandwidth > 14,"UlBandwidth must be at least 15 to use FFR algorithms");
225 
226  if (m_frCellTypeId != 0)
227  {
230  }
231 
232  NS_LOG_LOGIC (this << " requesting Event A1 measurements"
233  << " (threshold = 0" << ")");
234  LteRrcSap::ReportConfigEutra reportConfig;
237  reportConfig.threshold1.range = 0;
241 }
242 
243 void
245 {
246  NS_LOG_FUNCTION (this);
247  if (m_frCellTypeId != 0)
248  {
251  }
254  m_needReconfiguration = false;
255 }
256 
257 void
258 LteFrStrictAlgorithm::SetDownlinkConfiguration (uint16_t cellId, uint8_t bandwidth)
259 {
260  NS_LOG_FUNCTION (this);
261  for (uint16_t i = 0; i < NUM_DOWNLINK_CONFS; ++i)
262  {
263  if ((g_frStrictDownlinkDefaultConfiguration[i].cellId == cellId)
265  {
269  }
270  }
271 }
272 
273 void
274 LteFrStrictAlgorithm::SetUplinkConfiguration (uint16_t cellId, uint8_t bandwidth)
275 {
276  NS_LOG_FUNCTION (this);
277  for (uint16_t i = 0; i < NUM_UPLINK_CONFS; ++i)
278  {
279  if ((g_frStrictUplinkDefaultConfiguration[i].cellId == cellId)
281  {
285  }
286  }
287 }
288 
289 void
291 {
292  m_dlRbgMap.clear ();
293  m_dlEdgeRbgMap.clear ();
294 
295  int rbgSize = GetRbgSize (m_dlBandwidth);
296  m_dlRbgMap.resize (m_dlBandwidth / rbgSize, true);
297  m_dlEdgeRbgMap.resize (m_dlBandwidth / rbgSize, false);
298 
299  NS_ASSERT_MSG (m_dlCommonSubBandwidth <= m_dlBandwidth,"DlCommonSubBandwidth higher than DlBandwidth");
300  NS_ASSERT_MSG (m_dlEgdeSubBandOffset <= m_dlBandwidth,"DlEgdeSubBandOffset higher than DlBandwidth");
301  NS_ASSERT_MSG (m_dlEdgeSubBandwidth <= m_dlBandwidth,"DlEdgeSubBandwidth higher than DlBandwidth");
303  "(DlCommonSubBandwidth+DlEgdeSubBandOffset+DlEdgeSubBandwidth) higher than DlBandwidth");
304 
305  for (uint8_t i = 0; i < m_dlCommonSubBandwidth / rbgSize; i++)
306  {
307  m_dlRbgMap[i] = false;
308 
309  }
310 
311  for (uint8_t i = m_dlCommonSubBandwidth / rbgSize + m_dlEgdeSubBandOffset / rbgSize;
312  i < (m_dlCommonSubBandwidth / rbgSize + m_dlEgdeSubBandOffset / rbgSize
313  + m_dlEdgeSubBandwidth / rbgSize); i++)
314  {
315  m_dlRbgMap[i] = false;
316  m_dlEdgeRbgMap[i] = true;
317  }
318 }
319 
320 void
322 {
323  m_ulRbgMap.clear ();
324  m_ulEdgeRbgMap.clear ();
325 
326  if (!m_enabledInUplink)
327  {
328  m_ulRbgMap.resize (m_ulBandwidth, false);
329  return;
330  }
331 
332  m_ulRbgMap.resize (m_ulBandwidth, true);
333  m_ulEdgeRbgMap.resize (m_ulBandwidth, false);
334 
335  NS_ASSERT_MSG (m_ulCommonSubBandwidth <= m_ulBandwidth,"UlCommonSubBandwidth higher than UlBandwidth");
336  NS_ASSERT_MSG (m_ulEgdeSubBandOffset <= m_ulBandwidth,"UlEgdeSubBandOffset higher than UlBandwidth");
337  NS_ASSERT_MSG (m_ulEdgeSubBandwidth <= m_ulBandwidth,"UlEdgeSubBandwidth higher than UlBandwidth");
339  "(UlCommonSubBandwidth+UlEgdeSubBandOffset+UlEdgeSubBandwidth) higher than UlBandwidth");
340 
341  for (uint8_t i = 0; i < m_ulCommonSubBandwidth; i++)
342  {
343  m_ulRbgMap[i] = false;
344 
345  }
346 
347  for (uint8_t i = m_ulCommonSubBandwidth + m_ulEgdeSubBandOffset;
348  i < (m_ulCommonSubBandwidth + m_ulEgdeSubBandOffset
349  + m_ulEdgeSubBandwidth); i++)
350  {
351  m_ulRbgMap[i] = false;
352  m_ulEdgeRbgMap[i] = true;
353  }
354 }
355 
356 
357 std::vector <bool>
359 {
360  NS_LOG_FUNCTION (this);
361 
363  {
364  Reconfigure ();
365  }
366 
367  if (m_dlRbgMap.empty ())
368  {
370  }
371 
372  return m_dlRbgMap;
373 }
374 
375 bool
377 {
378  NS_LOG_FUNCTION (this);
379 
380  bool edgeRbg = m_dlEdgeRbgMap[rbgId];
381 
382  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
383  if (it == m_ues.end ())
384  {
385  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
386  return !edgeRbg;
387  }
388 
389  bool edgeUe = false;
390  if (it->second == CellEdge )
391  {
392  edgeUe = true;
393  }
394 
395  return (edgeRbg && edgeUe) || (!edgeRbg && !edgeUe);
396 }
397 
398 std::vector <bool>
400 {
401  NS_LOG_FUNCTION (this);
402 
403  if (m_ulRbgMap.empty ())
404  {
406  }
407 
408  return m_ulRbgMap;
409 }
410 
411 bool
413 {
414  NS_LOG_FUNCTION (this);
415 
416  if (!m_enabledInUplink)
417  {
418  return true;
419  }
420 
421  bool edgeRbg = m_ulEdgeRbgMap[rbgId];
422 
423  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
424  if (it == m_ues.end ())
425  {
426  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
427  return !edgeRbg;
428  }
429 
430  bool edgeUe = false;
431  if (it->second == CellEdge )
432  {
433  edgeUe = true;
434  }
435 
436  return (edgeRbg && edgeUe) || (!edgeRbg && !edgeUe);
437 }
438 
439 void
441 {
442  NS_LOG_FUNCTION (this);
443  NS_LOG_WARN ("Method should not be called, because it is empty");
444 }
445 
446 void
448 {
449  NS_LOG_FUNCTION (this);
450  NS_LOG_WARN ("Method should not be called, because it is empty");
451 }
452 
453 void
454 LteFrStrictAlgorithm::DoReportUlCqiInfo (std::map <uint16_t, std::vector <double> > ulCqiMap)
455 {
456  NS_LOG_FUNCTION (this);
457  NS_LOG_WARN ("Method should not be called, because it is empty");
458 }
459 
460 uint8_t
462 {
463  NS_LOG_FUNCTION (this);
464 
465  if (!m_enabledInUplink)
466  {
467  return 1; // 1 is mapped to 0 for Accumulated mode, and to -1 in Absolute mode TS36.213 Table 5.1.1.1-2
468  }
469 
470  //TS36.213 Table 5.1.1.1-2
471  // TPC | Accumulated Mode | Absolute Mode
472  //------------------------------------------------
473  // 0 | -1 | -4
474  // 1 | 0 | -1
475  // 2 | 1 | 1
476  // 3 | 3 | 4
477  //------------------------------------------------
478  // here Absolute mode is used
479 
480  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
481  if (it == m_ues.end ())
482  {
483  return 1;
484  }
485 
486  if (it->second == CellEdge )
487  {
488  return m_edgeAreaTpc;
489  }
490  else if (it->second == CellCenter )
491  {
492  return m_centerAreaTpc;
493  }
494 
495  return 1;
496 }
497 
498 uint8_t
500 {
501  NS_LOG_FUNCTION (this);
502 
503  if (!m_enabledInUplink)
504  {
505  return m_ulBandwidth;
506  }
507 
509  NS_LOG_INFO ("minContinuousUlBandwidth: " << (int)minContinuousUlBandwidth);
510 
511  return minContinuousUlBandwidth;
512 }
513 
514 void
516  LteRrcSap::MeasResults measResults)
517 {
518  NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
519  NS_LOG_INFO ("RNTI :" << rnti << " MeasId: " << (uint16_t) measResults.measId
520  << " RSRP: " << (uint16_t)measResults.rsrpResult
521  << " RSRQ: " << (uint16_t)measResults.rsrqResult);
522 
523  if (measResults.measId != m_measId)
524  {
525  NS_LOG_WARN ("Ignoring measId " << (uint16_t) measResults.measId);
526  }
527  else
528  {
529  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
530  if (it == m_ues.end ())
531  {
532  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
533  }
534  it = m_ues.find (rnti);
535 
536  if (measResults.rsrqResult < m_egdeSubBandThreshold)
537  {
538  if (it->second != CellEdge )
539  {
540  NS_LOG_INFO ("UE RNTI: " << rnti << " will be served in Edge sub-band");
541  it->second = CellEdge;
542 
543  LteRrcSap::PdschConfigDedicated pdschConfigDedicated;
544  pdschConfigDedicated.pa = m_edgeAreaPowerOffset;
545  m_ffrRrcSapUser->SetPdschConfigDedicated (rnti, pdschConfigDedicated);
546  }
547  }
548  else
549  {
550  if (it->second != CellCenter)
551  {
552  NS_LOG_INFO ("UE RNTI: " << rnti << " will be served in Center sub-band");
553  it->second = CellCenter;
554 
555  LteRrcSap::PdschConfigDedicated pdschConfigDedicated;
556  pdschConfigDedicated.pa = m_centerAreaPowerOffset;
557  m_ffrRrcSapUser->SetPdschConfigDedicated (rnti, pdschConfigDedicated);
558  }
559  }
560  }
561 }
562 
563 void
565 {
566  NS_LOG_FUNCTION (this);
567  NS_LOG_WARN ("Method should not be called, since it is empty");
568 
569 }
570 
571 } // end of namespace ns3
RSRQ is used for the threshold.
Definition: lte-rrc-sap.h:315
Service Access Point (SAP) offered by the Frequency Reuse algorithm instance to the eNodeB RRC instan...
Template for the implementation of the LteFfrRrcSapProvider as a member of an owner class of type C t...
Service Access Point (SAP) offered by the eNodeB RRC instance to the Frequency Reuse algorithm instan...
Definition: lte-ffr-sap.h:132
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
virtual uint8_t DoGetTpc(uint16_t rnti)
DoGetTpc for UE.
virtual void DoRecvLoadInformation(EpcX2Sap::LoadInformationParams params)
DoRecvLoadInformation.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
Definition: object-base.h:38
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
Definition: lte-rrc-sap.h:339
Specifies criteria for triggering of an E-UTRA measurement reporting event.
Definition: lte-rrc-sap.h:321
uint8_t m_ulBandwidth
uplink bandwidth in RBs
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:170
virtual std::vector< bool > DoGetAvailableUlRbg()
Implementation of LteFfrSapProvider::GetAvailableUlRbg.
void SetUplinkConfiguration(uint16_t cellId, uint8_t bandwidth)
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:223
virtual bool DoIsUlRbgAvailableForUe(int i, uint16_t rnti)
Implementation of LteFfrSapProvider::IsUlRbgAvailableForUe.
virtual uint8_t AddUeMeasReportConfigForFfr(LteRrcSap::ReportConfigEutra reportConfig)=0
Request a certain reporting configuration to be fulfilled by the UEs attached to the eNodeB entity...
virtual void DoReportDlCqiInfo(const struct FfMacSchedSapProvider::SchedDlCqiInfoReqParameters &params)
DoReportDlCqiInfo.
virtual void SetPdschConfigDedicated(uint16_t rnti, LteRrcSap::PdschConfigDedicated pdschConfigDedicated)=0
Instruct the eNodeB RRC entity to perform RrcConnectionReconfiguration to inform UE about new PdschCo...
LteFrStrictAlgorithm()
Creates a trivial ffr algorithm instance.
virtual uint8_t DoGetMinContinuousUlBandwidth()
DoGetMinContinuousUlBandwidth in number of RB.
Template for the implementation of the LteFfrSapProvider as a member of an owner class of type C to w...
Definition: lte-ffr-sap.h:146
LteFfrSapProvider * m_ffrSapProvider
virtual void SetLteFfrRrcSapUser(LteFfrRrcSapUser *s)
Set the "user" part of the LteFfrRrcSap interface that this frequency reuse algorithm instance will i...
Service Access Point (SAP) offered by the Frequency Reuse algorithm instance to the MAC Scheduler ins...
Definition: lte-ffr-sap.h:39
Hold an unsigned integer type.
Definition: uinteger.h:46
Ptr< SampleEmitter > s
bool m_enabledInUplink
If true FR algorithm will also work in Uplink.
bool m_needReconfiguration
If true FR algorithm will be reconfigured.
uint8_t m_dlBandwidth
downlink bandwidth in RBs
virtual void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:233
virtual void Reconfigure()
Automatic FR reconfiguration.
virtual LteFfrSapProvider * GetLteFfrSapProvider()
Export the "provider" part of the LteFfrSap interface.
virtual LteFfrRrcSapProvider * GetLteFfrRrcSapProvider()
Export the "provider" part of the LteFfrRrcSap interface.
virtual void DoInitialize()
This method is called only once by Object::Initialize.
Event A1: Serving becomes better than absolute threshold.
Definition: lte-rrc-sap.h:331
The abstract base class of a Frequency Reuse algorithm.
enum ns3::LteRrcSap::ReportConfigEutra::@73 eventId
Choice of E-UTRA event triggered reporting criteria.
uint8_t range
Value range used in RSRP/RSRQ threshold.
Definition: lte-rrc-sap.h:317
std::map< uint16_t, uint8_t > m_ues
Service Access Point (SAP) offered by the eNodeB RRC instance to the Frequency Reuse algorithm instan...
#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:84
Parameters of the SCHED_DL_CQI_INFO_REQ primitive.
uint8_t m_frCellTypeId
FFR cell type ID for automatic configuration.
static const struct ns3::FrStrictDownlinkDefaultConfiguration g_frStrictDownlinkDefaultConfiguration[]
enum ns3::LteRrcSap::ReportConfigEutra::@77 reportInterval
Indicates the interval between periodical reports.
Parameters of the SCHED_UL_CQI_INFO_REQ primitive.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:203
enum ns3::LteRrcSap::ReportConfigEutra::@75 triggerQuantity
The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36...
void SetDownlinkConfiguration(uint16_t cellId, uint8_t bandwidth)
int GetRbgSize(int dlbandwidth)
Get RBG size for DL Bandwidth according to table 7.1.6.1-1 of 36.213.
Parameters of the LOAD INFORMATION message.
Definition: epc-x2-sap.h:300
virtual void DoReportUlCqiInfo(const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters &params)
DoReportUlCqiInfo.
Reference Signal Received Quality.
Definition: lte-rrc-sap.h:363
const uint16_t NUM_DOWNLINK_CONFS(sizeof(g_ffrEnhancedDownlinkDefaultConfiguration)/sizeof(FfrEnhancedDownlinkDefaultConfiguration))
virtual std::vector< bool > DoGetAvailableDlRbg()
Implementation of LteFfrSapProvider::GetAvailableDlRbg.
enum ns3::LteRrcSap::ThresholdEutra::@71 choice
virtual bool DoIsDlRbgAvailableForUe(int i, uint16_t rnti)
Implementation of LteFfrSapProvider::IsDlRbgAvailableForUe.
virtual void SetLteFfrSapUser(LteFfrSapUser *s)
Set the "user" part of the LteFfrSap interface that this frequency reuse algorithm instance will inte...
a unique identifier for an interface.
Definition: type-id.h:49
static const struct ns3::FrStrictUplinkDefaultConfiguration g_frStrictUplinkDefaultConfiguration[]
TypeId SetParent(TypeId tid)
Definition: type-id.cc:610
const uint16_t NUM_UPLINK_CONFS(sizeof(g_ffrEnhancedUplinkDefaultConfiguration)/sizeof(FfrEnhancedUplinkDefaultConfiguration))
virtual void DoReportUeMeas(uint16_t rnti, LteRrcSap::MeasResults measResults)
Implementation of LteFfrRrcSapProvider::ReportUeMeas.
virtual void DoInitialize(void)
This method is called only once by Object::Initialize.
Definition: object.cc:342
LteFfrRrcSapProvider * m_ffrRrcSapProvider