5G-LENA nr-v3.3-161-gad18933f
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-mac-scheduler.cc
1// Copyright (c) 2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4
5#include "nr-mac-scheduler.h"
6
7#include "nr-mac-csched-sap.h"
8
9#include "ns3/log.h"
10
11namespace ns3
12{
13
14NS_LOG_COMPONENT_DEFINE("NrMacScheduler");
15NS_OBJECT_ENSURE_REGISTERED(NrMacScheduler);
16
17class NrMacGeneralCschedSapProvider : public NrMacCschedSapProvider
18{
19 public:
20 NrMacGeneralCschedSapProvider() = delete;
21
22 NrMacGeneralCschedSapProvider(NrMacScheduler* scheduler)
23 : m_scheduler(scheduler)
24 {
25 }
26
27 ~NrMacGeneralCschedSapProvider() override = default;
28
29 // inherited from NrMacCschedSapProvider
31 const NrMacCschedSapProvider::CschedCellConfigReqParameters& params) override
32 {
33 m_scheduler->DoCschedCellConfigReq(params);
34 }
35
36 void CschedUeConfigReq(
37 const NrMacCschedSapProvider::CschedUeConfigReqParameters& params) override
38 {
39 m_scheduler->DoCschedUeConfigReq(params);
40 }
41
42 void CschedLcConfigReq(
43 const NrMacCschedSapProvider::CschedLcConfigReqParameters& params) override
44 {
45 m_scheduler->DoCschedLcConfigReq(params);
46 }
47
48 void CschedLcReleaseReq(
49 const NrMacCschedSapProvider::CschedLcReleaseReqParameters& params) override
50 {
51 m_scheduler->DoCschedLcReleaseReq(params);
52 }
53
54 void CschedUeReleaseReq(
55 const NrMacCschedSapProvider::CschedUeReleaseReqParameters& params) override
56 {
57 m_scheduler->DoCschedUeReleaseReq(params);
58 }
59
60 private:
61 NrMacScheduler* m_scheduler{nullptr};
62};
63
64class NrMacGeneralSchedSapProvider : public NrMacSchedSapProvider
65{
66 public:
67 NrMacGeneralSchedSapProvider() = delete;
68
69 NrMacGeneralSchedSapProvider(NrMacScheduler* sched)
70 : m_scheduler(sched)
71 {
72 }
73
74 void SchedDlRlcBufferReq(
75 const NrMacSchedSapProvider::SchedDlRlcBufferReqParameters& params) override
76 {
77 m_scheduler->DoSchedDlRlcBufferReq(params);
78 }
79
81 const NrMacSchedSapProvider::SchedDlTriggerReqParameters& params) override
82 {
83 m_scheduler->DoSchedDlTriggerReq(params);
84 }
85
87 const NrMacSchedSapProvider::SchedUlTriggerReqParameters& params) override
88 {
89 m_scheduler->DoSchedUlTriggerReq(params);
90 }
91
92 void SchedDlCqiInfoReq(
93 const NrMacSchedSapProvider::SchedDlCqiInfoReqParameters& params) override
94 {
95 m_scheduler->DoSchedDlCqiInfoReq(params);
96 }
97
98 void SchedUlCqiInfoReq(
99 const NrMacSchedSapProvider::SchedUlCqiInfoReqParameters& params) override
100 {
101 m_scheduler->DoSchedUlCqiInfoReq(params);
102 }
103
104 void SchedUlMacCtrlInfoReq(
105 const NrMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters& params) override
106 {
107 m_scheduler->DoSchedUlMacCtrlInfoReq(params);
108 }
109
110 void SchedUlSrInfoReq(const SchedUlSrInfoReqParameters& params) override
111 {
112 m_scheduler->DoSchedUlSrInfoReq(params);
113 }
114
115 void SchedSetMcs(uint32_t mcs) override
116 {
117 m_scheduler->DoSchedSetMcs(mcs);
118 }
119
120 void SchedDlRachInfoReq(const SchedDlRachInfoReqParameters& params) override
121 {
122 m_scheduler->DoSchedDlRachInfoReq(params);
123 }
124
125 uint8_t GetDlCtrlSyms() const override
126 {
127 return m_scheduler->GetDlCtrlSyms();
128 }
129
130 uint8_t GetUlCtrlSyms() const override
131 {
132 return m_scheduler->GetUlCtrlSyms();
133 }
134
135 bool IsHarqReTxEnable() const override
136 {
137 return m_scheduler->IsHarqReTxEnable();
138 };
139
140 private:
141 NrMacScheduler* m_scheduler{nullptr};
142};
143
144TypeId
146{
147 static TypeId tid = TypeId("ns3::NrMacScheduler").SetParent<Object>();
148
149 return tid;
150}
151
153{
154 NS_LOG_FUNCTION_NOARGS();
155 m_macSchedSapProvider = new NrMacGeneralSchedSapProvider(this);
156 m_macCschedSapProvider = new NrMacGeneralCschedSapProvider(this);
157}
158
160{
161 NS_LOG_FUNCTION_NOARGS();
163 m_macSchedSapProvider = nullptr;
164
166 m_macCschedSapProvider = nullptr;
167}
168
169} // namespace ns3
virtual void CschedCellConfigReq(const struct CschedCellConfigReqParameters &params)=0
CSCHED_CELL_CONFIG_REQ.
virtual void SchedUlTriggerReq(const struct SchedUlTriggerReqParameters &params)=0
Starts the UL MAC scheduler for this subframe.
virtual void SchedDlTriggerReq(const struct SchedDlTriggerReqParameters &params)=0
Starts the DL MAC scheduler for this subframe.
static TypeId GetTypeId()
Get the type id.
NrMacScheduler()
NrMacScheduler constructor.
NrMacSchedSapProvider * m_macSchedSapProvider
SAP Provider.
NrMacCschedSapProvider * m_macCschedSapProvider
SAP Provider.
~NrMacScheduler() override
NrMacScheduler deconstructor.