A Discrete-Event Network Simulator
API
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 namespace ns3 {
27 
28 NS_LOG_COMPONENT_DEFINE ("LteFrStrictAlgorithm");
29 
30 NS_OBJECT_ENSURE_REGISTERED (LteFrStrictAlgorithm);
31 
34 {
35  uint8_t cellId;
36  uint8_t dlBandwidth;
41  { 1, 15, 2, 0, 4},
42  { 2, 15, 2, 4, 4},
43  { 3, 15, 2, 8, 4},
44  { 1, 25, 6, 0, 6},
45  { 2, 25, 6, 6, 6},
46  { 3, 25, 6, 12, 6},
47  { 1, 50, 21, 0, 9},
48  { 2, 50, 21, 9, 9},
49  { 3, 50, 21, 18, 11},
50  { 1, 75, 36, 0, 12},
51  { 2, 75, 36, 12, 12},
52  { 3, 75, 36, 24, 15},
53  { 1, 100, 28, 0, 24},
54  { 2, 100, 28, 24, 24},
55  { 3, 100, 28, 48, 24}
56 };
57 
60 {
61  uint8_t cellId;
62  uint8_t ulBandwidth;
67  { 1, 15, 3, 0, 4},
68  { 2, 15, 3, 4, 4},
69  { 3, 15, 3, 8, 4},
70  { 1, 25, 6, 0, 6},
71  { 2, 25, 6, 6, 6},
72  { 3, 25, 6, 12, 6},
73  { 1, 50, 21, 0, 9},
74  { 2, 50, 21, 9, 9},
75  { 3, 50, 21, 18, 11},
76  { 1, 75, 36, 0, 12},
77  { 2, 75, 36, 12, 12},
78  { 3, 75, 36, 24, 15},
79  { 1, 100, 28, 0, 24},
80  { 2, 100, 28, 24, 24},
81  { 3, 100, 28, 48, 24}
82 };
83 
85 const uint16_t NUM_DOWNLINK_CONFS (sizeof (g_frStrictDownlinkDefaultConfiguration) / sizeof (FrStrictDownlinkDefaultConfiguration));
87 const uint16_t NUM_UPLINK_CONFS (sizeof (g_frStrictUplinkDefaultConfiguration) / sizeof (FrStrictUplinkDefaultConfiguration));
88 
89 
91  : m_ffrSapUser (0),
92  m_ffrRrcSapUser (0),
93  m_dlEdgeSubBandOffset (0),
94  m_dlEdgeSubBandwidth (0),
95  m_ulEdgeSubBandOffset (0),
96  m_ulEdgeSubBandwidth (0),
97  m_measId (0)
98 {
99  NS_LOG_FUNCTION (this);
102 }
103 
104 
106 {
107  NS_LOG_FUNCTION (this);
108 }
109 
110 
111 void
113 {
114  NS_LOG_FUNCTION (this);
115  delete m_ffrSapProvider;
116  delete m_ffrRrcSapProvider;
117 }
118 
119 
120 TypeId
122 {
123  static TypeId tid = TypeId ("ns3::LteFrStrictAlgorithm")
125  .SetGroupName("Lte")
126  .AddConstructor<LteFrStrictAlgorithm> ()
127  .AddAttribute ("UlCommonSubBandwidth",
128  "Uplink Common SubBandwidth Configuration in number of Resource Block Groups",
129  UintegerValue (25),
131  MakeUintegerChecker<uint8_t> ())
132  .AddAttribute ("UlEdgeSubBandOffset",
133  "Uplink Edge SubBand Offset in number of Resource Block Groups",
134  UintegerValue (0),
136  MakeUintegerChecker<uint8_t> ())
137  .AddAttribute ("UlEdgeSubBandwidth",
138  "Uplink Edge SubBandwidth Configuration in number of Resource Block Groups",
139  UintegerValue (0),
141  MakeUintegerChecker<uint8_t> ())
142  .AddAttribute ("DlCommonSubBandwidth",
143  "Downlink Common SubBandwidth Configuration in number of Resource Block Groups",
144  UintegerValue (25),
146  MakeUintegerChecker<uint8_t> ())
147  .AddAttribute ("DlEdgeSubBandOffset",
148  "Downlink Edge SubBand Offset in number of Resource Block Groups",
149  UintegerValue (0),
151  MakeUintegerChecker<uint8_t> ())
152  .AddAttribute ("DlEdgeSubBandwidth",
153  "Downlink Edge SubBandwidth Configuration in number of Resource Block Groups",
154  UintegerValue (0),
156  MakeUintegerChecker<uint8_t> ())
157  .AddAttribute ("RsrqThreshold",
158  "If the RSRQ of is worse than this threshold, UE should be served in Edge sub-band",
159  UintegerValue (20),
161  MakeUintegerChecker<uint8_t> ())
162  .AddAttribute ("CenterPowerOffset",
163  "PdschConfigDedicated::Pa value for Edge Sub-band, default value dB0",
164  UintegerValue (5),
166  MakeUintegerChecker<uint8_t> ())
167  .AddAttribute ("EdgePowerOffset",
168  "PdschConfigDedicated::Pa value for Edge Sub-band, default value dB0",
169  UintegerValue (5),
171  MakeUintegerChecker<uint8_t> ())
172  .AddAttribute ("CenterAreaTpc",
173  "TPC value which will be set in DL-DCI for UEs in center area"
174  "Absolute mode is used, default value 1 is mapped to -1 according to"
175  "TS36.213 Table 5.1.1.1-2",
176  UintegerValue (1),
178  MakeUintegerChecker<uint8_t> ())
179  .AddAttribute ("EdgeAreaTpc",
180  "TPC value which will be set in DL-DCI for UEs in edge area"
181  "Absolute mode is used, default value 1 is mapped to -1 according to"
182  "TS36.213 Table 5.1.1.1-2",
183  UintegerValue (1),
185  MakeUintegerChecker<uint8_t> ())
186  ;
187  return tid;
188 }
189 
190 
191 void
193 {
194  NS_LOG_FUNCTION (this << s);
195  m_ffrSapUser = s;
196 }
197 
198 
201 {
202  NS_LOG_FUNCTION (this);
203  return m_ffrSapProvider;
204 }
205 
206 void
208 {
209  NS_LOG_FUNCTION (this << s);
210  m_ffrRrcSapUser = s;
211 }
212 
213 
216 {
217  NS_LOG_FUNCTION (this);
218  return m_ffrRrcSapProvider;
219 }
220 
221 
222 void
224 {
225  NS_LOG_FUNCTION (this);
227 
228  NS_ASSERT_MSG (m_dlBandwidth > 14,"DlBandwidth must be at least 15 to use FFR algorithms");
229  NS_ASSERT_MSG (m_ulBandwidth > 14,"UlBandwidth must be at least 15 to use FFR algorithms");
230 
231  if (m_frCellTypeId != 0)
232  {
235  }
236 
237  NS_LOG_LOGIC (this << " requesting Event A1 measurements"
238  << " (threshold = 0" << ")");
239  LteRrcSap::ReportConfigEutra reportConfig;
242  reportConfig.threshold1.range = 0;
246 }
247 
248 void
250 {
251  NS_LOG_FUNCTION (this);
252  if (m_frCellTypeId != 0)
253  {
256  }
259  m_needReconfiguration = false;
260 }
261 
262 void
263 LteFrStrictAlgorithm::SetDownlinkConfiguration (uint16_t cellId, uint8_t bandwidth)
264 {
265  NS_LOG_FUNCTION (this);
266  for (uint16_t i = 0; i < NUM_DOWNLINK_CONFS; ++i)
267  {
268  if ((g_frStrictDownlinkDefaultConfiguration[i].cellId == cellId)
270  {
274  }
275  }
276 }
277 
278 void
279 LteFrStrictAlgorithm::SetUplinkConfiguration (uint16_t cellId, uint8_t bandwidth)
280 {
281  NS_LOG_FUNCTION (this);
282  for (uint16_t i = 0; i < NUM_UPLINK_CONFS; ++i)
283  {
284  if ((g_frStrictUplinkDefaultConfiguration[i].cellId == cellId)
286  {
290  }
291  }
292 }
293 
294 void
296 {
297  m_dlRbgMap.clear ();
298  m_dlEdgeRbgMap.clear ();
299 
300  int rbgSize = GetRbgSize (m_dlBandwidth);
301  m_dlRbgMap.resize (m_dlBandwidth / rbgSize, true);
302  m_dlEdgeRbgMap.resize (m_dlBandwidth / rbgSize, false);
303 
304  NS_ASSERT_MSG (m_dlCommonSubBandwidth <= m_dlBandwidth,"DlCommonSubBandwidth higher than DlBandwidth");
305  NS_ASSERT_MSG (m_dlEdgeSubBandOffset <= m_dlBandwidth,"DlEdgeSubBandOffset higher than DlBandwidth");
306  NS_ASSERT_MSG (m_dlEdgeSubBandwidth <= m_dlBandwidth,"DlEdgeSubBandwidth higher than DlBandwidth");
308  "(DlCommonSubBandwidth+DlEdgeSubBandOffset+DlEdgeSubBandwidth) higher than DlBandwidth");
309 
310  for (uint8_t i = 0; i < m_dlCommonSubBandwidth / rbgSize; i++)
311  {
312  m_dlRbgMap[i] = false;
313 
314  }
315 
316  for (uint8_t i = m_dlCommonSubBandwidth / rbgSize + m_dlEdgeSubBandOffset / rbgSize;
317  i < (m_dlCommonSubBandwidth / rbgSize + m_dlEdgeSubBandOffset / rbgSize
318  + m_dlEdgeSubBandwidth / rbgSize); i++)
319  {
320  m_dlRbgMap[i] = false;
321  m_dlEdgeRbgMap[i] = true;
322  }
323 }
324 
325 void
327 {
328  m_ulRbgMap.clear ();
329  m_ulEdgeRbgMap.clear ();
330 
331  if (!m_enabledInUplink)
332  {
333  m_ulRbgMap.resize (m_ulBandwidth, false);
334  return;
335  }
336 
337  m_ulRbgMap.resize (m_ulBandwidth, true);
338  m_ulEdgeRbgMap.resize (m_ulBandwidth, false);
339 
340  NS_ASSERT_MSG (m_ulCommonSubBandwidth <= m_ulBandwidth,"UlCommonSubBandwidth higher than UlBandwidth");
341  NS_ASSERT_MSG (m_ulEdgeSubBandOffset <= m_ulBandwidth,"UlEdgeSubBandOffset higher than UlBandwidth");
342  NS_ASSERT_MSG (m_ulEdgeSubBandwidth <= m_ulBandwidth,"UlEdgeSubBandwidth higher than UlBandwidth");
344  "(UlCommonSubBandwidth+UlEdgeSubBandOffset+UlEdgeSubBandwidth) higher than UlBandwidth");
345 
346  for (uint8_t i = 0; i < m_ulCommonSubBandwidth; i++)
347  {
348  m_ulRbgMap[i] = false;
349 
350  }
351 
354  + m_ulEdgeSubBandwidth); i++)
355  {
356  m_ulRbgMap[i] = false;
357  m_ulEdgeRbgMap[i] = true;
358  }
359 }
360 
361 
362 std::vector <bool>
364 {
365  NS_LOG_FUNCTION (this);
366 
368  {
369  Reconfigure ();
370  }
371 
372  if (m_dlRbgMap.empty ())
373  {
375  }
376 
377  return m_dlRbgMap;
378 }
379 
380 bool
382 {
383  NS_LOG_FUNCTION (this);
384 
385  bool edgeRbg = m_dlEdgeRbgMap[rbgId];
386 
387  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
388  if (it == m_ues.end ())
389  {
390  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
391  return !edgeRbg;
392  }
393 
394  bool edgeUe = false;
395  if (it->second == CellEdge )
396  {
397  edgeUe = true;
398  }
399 
400  return (edgeRbg && edgeUe) || (!edgeRbg && !edgeUe);
401 }
402 
403 std::vector <bool>
405 {
406  NS_LOG_FUNCTION (this);
407 
408  if (m_ulRbgMap.empty ())
409  {
411  }
412 
413  return m_ulRbgMap;
414 }
415 
416 bool
418 {
419  NS_LOG_FUNCTION (this);
420 
421  if (!m_enabledInUplink)
422  {
423  return true;
424  }
425 
426  bool edgeRbg = m_ulEdgeRbgMap[rbgId];
427 
428  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
429  if (it == m_ues.end ())
430  {
431  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
432  return !edgeRbg;
433  }
434 
435  bool edgeUe = false;
436  if (it->second == CellEdge )
437  {
438  edgeUe = true;
439  }
440 
441  return (edgeRbg && edgeUe) || (!edgeRbg && !edgeUe);
442 }
443 
444 void
446 {
447  NS_LOG_FUNCTION (this);
448  NS_LOG_WARN ("Method should not be called, because it is empty");
449 }
450 
451 void
453 {
454  NS_LOG_FUNCTION (this);
455  NS_LOG_WARN ("Method should not be called, because it is empty");
456 }
457 
458 void
459 LteFrStrictAlgorithm::DoReportUlCqiInfo (std::map <uint16_t, std::vector <double> > ulCqiMap)
460 {
461  NS_LOG_FUNCTION (this);
462  NS_LOG_WARN ("Method should not be called, because it is empty");
463 }
464 
465 uint8_t
467 {
468  NS_LOG_FUNCTION (this);
469 
470  if (!m_enabledInUplink)
471  {
472  return 1; // 1 is mapped to 0 for Accumulated mode, and to -1 in Absolute mode TS36.213 Table 5.1.1.1-2
473  }
474 
475  //TS36.213 Table 5.1.1.1-2
476  // TPC | Accumulated Mode | Absolute Mode
477  //------------------------------------------------
478  // 0 | -1 | -4
479  // 1 | 0 | -1
480  // 2 | 1 | 1
481  // 3 | 3 | 4
482  //------------------------------------------------
483  // here Absolute mode is used
484 
485  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
486  if (it == m_ues.end ())
487  {
488  return 1;
489  }
490 
491  if (it->second == CellEdge )
492  {
493  return m_edgeAreaTpc;
494  }
495  else if (it->second == CellCenter )
496  {
497  return m_centerAreaTpc;
498  }
499 
500  return 1;
501 }
502 
503 uint16_t
505 {
506  NS_LOG_FUNCTION (this);
507 
508  if (!m_enabledInUplink)
509  {
510  return m_ulBandwidth;
511  }
512 
514  NS_LOG_INFO ("minContinuousUlBandwidth: " << (int)minContinuousUlBandwidth);
515 
516  return minContinuousUlBandwidth;
517 }
518 
519 void
521  LteRrcSap::MeasResults measResults)
522 {
523  NS_LOG_FUNCTION (this << rnti << (uint16_t) measResults.measId);
524  NS_LOG_INFO ("RNTI :" << rnti << " MeasId: " << (uint16_t) measResults.measId
525  << " RSRP: " << (uint16_t)measResults.rsrpResult
526  << " RSRQ: " << (uint16_t)measResults.rsrqResult);
527 
528  if (measResults.measId != m_measId)
529  {
530  NS_LOG_WARN ("Ignoring measId " << (uint16_t) measResults.measId);
531  }
532  else
533  {
534  std::map< uint16_t, uint8_t >::iterator it = m_ues.find (rnti);
535  if (it == m_ues.end ())
536  {
537  m_ues.insert (std::pair< uint16_t, uint8_t > (rnti, AreaUnset));
538  }
539  it = m_ues.find (rnti);
540 
541  if (measResults.rsrqResult < m_edgeSubBandThreshold)
542  {
543  if (it->second != CellEdge )
544  {
545  NS_LOG_INFO ("UE RNTI: " << rnti << " will be served in Edge sub-band");
546  it->second = CellEdge;
547 
548  LteRrcSap::PdschConfigDedicated pdschConfigDedicated;
549  pdschConfigDedicated.pa = m_edgeAreaPowerOffset;
550  m_ffrRrcSapUser->SetPdschConfigDedicated (rnti, pdschConfigDedicated);
551  }
552  }
553  else
554  {
555  if (it->second != CellCenter)
556  {
557  NS_LOG_INFO ("UE RNTI: " << rnti << " will be served in Center sub-band");
558  it->second = CellCenter;
559 
560  LteRrcSap::PdschConfigDedicated pdschConfigDedicated;
561  pdschConfigDedicated.pa = m_centerAreaPowerOffset;
562  m_ffrRrcSapUser->SetPdschConfigDedicated (rnti, pdschConfigDedicated);
563  }
564  }
565  }
566 }
567 
568 void
570 {
571  NS_LOG_FUNCTION (this);
572  NS_LOG_WARN ("Method should not be called, since it is empty");
573 
574 }
575 
576 } // end of namespace ns3
enum ns3::LteRrcSap::ThresholdEutra::@63 choice
Threshold enumeration.
Service Access Point (SAP) offered by the Frequency Reuse algorithm instance to the eNodeB RRC instan...
virtual void DoInitialize(void)
Initialize() implementation.
Definition: object.cc:353
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:138
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
LteFfrSapUser * m_ffrSapUser
FFR SAP user.
virtual uint8_t DoGetTpc(uint16_t rnti)
DoGetTpc for UE.
virtual void DoRecvLoadInformation(EpcX2Sap::LoadInformationParams params)
DoRecvLoadInformation.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
uint8_t m_measId
The expected measurement identity.
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
Definition: lte-rrc-sap.h:381
Specifies criteria for triggering of an E-UTRA measurement reporting event.
Definition: lte-rrc-sap.h:361
uint8_t m_ulBandwidth
uplink bandwidth in RBs
LteFfrRrcSapUser * m_ffrRrcSapUser
FFR RRC SAP user.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:204
uint8_t m_ulEdgeSubBandwidth
UL edge subbandwidth.
uint8_t m_centerAreaTpc
center area tpc
virtual std::vector< bool > DoGetAvailableUlRbg()
Implementation of LteFfrSapProvider::GetAvailableUlRbg.
void SetUplinkConfiguration(uint16_t cellId, uint8_t bandwidth)
Set uplink configuration.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:280
enum ns3::LteRrcSap::ReportConfigEutra::@66 triggerQuantity
Trigger type enumeration.
virtual bool DoIsUlRbgAvailableForUe(int i, uint16_t rnti)
Implementation of LteFfrSapProvider::IsUlRbgAvailableForUe.
Reference Signal Received Quality.
Definition: lte-rrc-sap.h:407
virtual uint8_t AddUeMeasReportConfigForFfr(LteRrcSap::ReportConfigEutra reportConfig)=0
Request a certain reporting configuration to be fulfilled by the UEs attached to the eNodeB entity...
Strict Frequency Reuse algorithm implementation.
virtual void DoReportDlCqiInfo(const struct FfMacSchedSapProvider::SchedDlCqiInfoReqParameters &params)
DoReportDlCqiInfo.
uint8_t m_edgeAreaPowerOffset
edge area power offset
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.
uint8_t rsrpResult
RSRP result.
Definition: lte-rrc-sap.h:681
Template for the implementation of the LteFfrSapProvider as a member of an owner class of type C to w...
Definition: lte-ffr-sap.h:152
LteFfrSapProvider * m_ffrSapProvider
FFR SAP provider.
uint8_t m_ulCommonSubBandwidth
UL common subbandwidth.
static TypeId GetTypeId()
Get the type ID.
virtual void SetLteFfrRrcSapUser(LteFfrRrcSapUser *s)
Set the "user" part of the LteFfrRrcSap interface that this frequency reuse algorithm instance will i...
MeasResults structure.
Definition: lte-rrc-sap.h:678
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:44
bool m_enabledInUplink
If true FR algorithm will also work in Uplink.
uint8_t m_edgeSubBandThreshold
Edge subband threshold.
bool m_needReconfiguration
If true FR algorithm will be reconfigured.
uint8_t m_dlEdgeSubBandwidth
DL edge subbandwidth.
uint8_t m_dlBandwidth
downlink bandwidth in RBs
uint8_t m_centerAreaPowerOffset
center area power offset
enum ns3::LteRrcSap::ReportConfigEutra::@68 reportInterval
Report interval enumeration.
enum ns3::LteRrcSap::ReportConfigEutra::@65 eventId
Event enumeration.
virtual void DoDispose()
Destructor implementation.
virtual void Reconfigure()
Automatic FR reconfiguration.
virtual LteFfrSapProvider * GetLteFfrSapProvider()
Export the "provider" part of the LteFfrSap interface.
void InitializeDownlinkRbgMaps()
Initialize downlink RBG maps.
virtual LteFfrRrcSapProvider * GetLteFfrRrcSapProvider()
Export the "provider" part of the LteFfrRrcSap interface.
uint8_t m_dlCommonSubBandwidth
DL common subbandwidth.
virtual void DoInitialize()
Initialize() implementation.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
The abstract base class of a Frequency Reuse algorithm.
uint8_t m_edgeAreaTpc
edge area tpc
uint8_t range
Value range used in RSRP/RSRQ threshold.
Definition: lte-rrc-sap.h:357
virtual uint16_t DoGetMinContinuousUlBandwidth()
DoGetMinContinuousUlBandwidth in number of RB.
uint8_t m_ulEdgeSubBandOffset
UL edge subband offset.
std::map< uint16_t, uint8_t > m_ues
UEs.
Service Access Point (SAP) offered by the eNodeB RRC instance to the Frequency Reuse algorithm instan...
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
uint8_t measId
measure ID
Definition: lte-rrc-sap.h:680
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[]
the strict downlink default configuration
Parameters of the SCHED_UL_CQI_INFO_REQ primitive.
std::vector< bool > m_ulRbgMap
UL RBG map.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:264
void SetDownlinkConfiguration(uint16_t cellId, uint8_t bandwidth)
Set downlink configuration.
int GetRbgSize(int dlbandwidth)
Get RBG size for DL Bandwidth according to table 7.1.6.1-1 of 36.213.
std::vector< bool > m_ulEdgeRbgMap
UL edge RBG map.
Parameters of the LOAD INFORMATION message.
Definition: epc-x2-sap.h:303
Event A1: Serving becomes better than absolute threshold.
Definition: lte-rrc-sap.h:373
virtual void DoReportUlCqiInfo(const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters &params)
DoReportUlCqiInfo.
RSRQ is used for the threshold.
Definition: lte-rrc-sap.h:355
std::vector< bool > m_dlRbgMap
DL RBG map.
const uint16_t NUM_DOWNLINK_CONFS(sizeof(g_ffrEnhancedDownlinkDefaultConfiguration)/sizeof(FfrEnhancedDownlinkDefaultConfiguration))
uint8_t rsrqResult
RSRQ result.
Definition: lte-rrc-sap.h:682
virtual std::vector< bool > DoGetAvailableDlRbg()
Implementation of LteFfrSapProvider::GetAvailableDlRbg.
uint8_t m_dlEdgeSubBandOffset
DL edge subband offset.
PdschConfigDedicated structure.
Definition: lte-rrc-sap.h:154
virtual bool DoIsDlRbgAvailableForUe(int i, uint16_t rnti)
Implementation of LteFfrSapProvider::IsDlRbgAvailableForUe.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: uinteger.h:45
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:58
static const struct ns3::FrStrictUplinkDefaultConfiguration g_frStrictUplinkDefaultConfiguration[]
the strict uplink default configuration
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:915
std::vector< bool > m_dlEdgeRbgMap
DL edge RBG map.
const uint16_t NUM_UPLINK_CONFS(sizeof(g_ffrEnhancedUplinkDefaultConfiguration)/sizeof(FfrEnhancedUplinkDefaultConfiguration))
virtual void DoReportUeMeas(uint16_t rnti, LteRrcSap::MeasResults measResults)
Implementation of LteFfrRrcSapProvider::ReportUeMeas.
void InitializeUplinkRbgMaps()
Initialize uplink RBG maps.
LteFfrRrcSapProvider * m_ffrRrcSapProvider
FFR RRC SAP provider.