5G-LENA nr-v3.3-120-gdac69c56
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-fh-sched-sap.h
1// Copyright (c) 2023 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4
5#ifndef NR_FH_SCHED_SAP_H
6#define NR_FH_SCHED_SAP_H
7
8#include "nr-mac-scheduler-ns3.h"
9#include "nr-mac-scheduler-ue-info.h"
10
11// #include "nr-fh-control.h"
12
13namespace ns3
14{
15
25{
26 public:
27 virtual ~NrFhSchedSapProvider();
28
29 virtual bool DoesAllocationFit(uint16_t bwpId,
30 uint32_t mcs,
31 uint32_t nRegs,
32 uint8_t dlRank) = 0;
33 virtual uint8_t GetFhControlMethod() = 0;
34 virtual uint16_t GetNrFhPhysicalCellId() = 0;
35 virtual void SetActiveUe(uint16_t bwpId, uint16_t rnti, uint32_t bytes) = 0;
36 virtual void SetActiveHarqUes(uint16_t bwpId, uint16_t rnti) = 0;
37 virtual void UpdateActiveUesMap(
38 uint16_t bwpId,
39 const std::deque<VarTtiAllocInfo>& allocation,
40 const std::unordered_map<uint16_t, std::shared_ptr<NrMacSchedulerUeInfo>>& ueMap) = 0;
41 virtual uint8_t GetMaxMcsAssignable(uint16_t bwpId,
42 uint32_t reg,
43 uint32_t rnti,
44 uint8_t dlRank) = 0;
45 virtual uint32_t GetMaxRegAssignable(uint16_t bwpId,
46 uint32_t mcs,
47 uint32_t rnti,
48 uint8_t dlRank) = 0;
49};
50
60{
61 public:
62 virtual ~NrFhSchedSapUser();
63
64 virtual uint64_t GetNumRbPerRbgFromSched() = 0;
65};
66
72template <class C>
74{
75 public:
82
84
85 bool DoesAllocationFit(uint16_t bwpId, uint32_t mcs, uint32_t nRegs, uint8_t dlRank) override;
86 uint8_t GetFhControlMethod() override;
87 uint16_t GetNrFhPhysicalCellId() override;
88 void SetActiveUe(uint16_t bwpId, uint16_t rnti, uint32_t bytes) override;
89 void SetActiveHarqUes(uint16_t bwpId, uint16_t rnti) override;
90 void UpdateActiveUesMap(
91 uint16_t bwpId,
92 const std::deque<VarTtiAllocInfo>& allocation,
93 const std::unordered_map<uint16_t, std::shared_ptr<NrMacSchedulerUeInfo>>& ueMap) override;
94 uint8_t GetMaxMcsAssignable(uint16_t bwpId,
95 uint32_t reg,
96 uint32_t rnti,
97 uint8_t dlRank) override;
98 uint32_t GetMaxRegAssignable(uint16_t bwpId,
99 uint32_t mcs,
100 uint32_t rnti,
101 uint8_t dlRank) override;
102
103 private:
104 C* m_owner;
105
106}; // end of class MemberNrFhSchedSapProvider
107
108template <class C>
110 : m_owner(owner)
111{
112}
113
114template <class C>
115bool
117 uint32_t mcs,
118 uint32_t nRegs,
119 uint8_t dlRank)
120{
121 return m_owner->DoGetDoesAllocationFit(bwpId, mcs, nRegs, dlRank);
122}
123
124template <class C>
125uint8_t
126MemberNrFhSchedSapProvider<C>::GetFhControlMethod()
127{
128 return m_owner->DoGetFhControlMethod();
129}
130
131template <class C>
132uint16_t
133MemberNrFhSchedSapProvider<C>::GetNrFhPhysicalCellId()
134{
135 return m_owner->DoGetPhysicalCellId();
136}
137
138template <class C>
139void
140MemberNrFhSchedSapProvider<C>::SetActiveUe(uint16_t bwpId, uint16_t rnti, uint32_t bytes)
141{
142 return m_owner->DoSetActiveUe(bwpId, rnti, bytes);
143}
144
145template <class C>
146void
147MemberNrFhSchedSapProvider<C>::SetActiveHarqUes(uint16_t bwpId, uint16_t rnti)
148{
149 return m_owner->DoSetActiveHarqUes(bwpId, rnti);
150}
151
152template <class C>
153void
154MemberNrFhSchedSapProvider<C>::UpdateActiveUesMap(
155 uint16_t bwpId,
156 const std::deque<VarTtiAllocInfo>& allocation,
157 const std::unordered_map<uint16_t, std::shared_ptr<NrMacSchedulerUeInfo>>& ueMap)
158{
159 return m_owner->DoUpdateActiveUesMap(bwpId, allocation, ueMap);
160}
161
162template <class C>
163uint8_t
164MemberNrFhSchedSapProvider<C>::GetMaxMcsAssignable(uint16_t bwpId,
165 uint32_t reg,
166 uint32_t rnti,
167 uint8_t dlRank)
168{
169 return m_owner->DoGetMaxMcsAssignable(bwpId, reg, rnti, dlRank);
170}
171
172template <class C>
173uint32_t
174MemberNrFhSchedSapProvider<C>::GetMaxRegAssignable(uint16_t bwpId,
175 uint32_t mcs,
176 uint32_t rnti,
177 uint8_t dlRank)
178{
179 return m_owner->DoGetMaxRegAssignable(bwpId, mcs, rnti, dlRank);
180}
181
187template <class C>
189{
190 public:
196 MemberNrFhSchedSapUser(C* owner);
197
198 MemberNrFhSchedSapUser() = delete;
199
200 uint64_t GetNumRbPerRbgFromSched() override;
201
202 private:
203 C* m_owner;
204
205}; // end of class MemberNrFhSchedSapUser
206
207template <class C>
209 : m_owner(owner)
210{
211}
212
213template <class C>
214uint64_t
216{
217 return m_owner->GetNumRbPerRbg();
218}
219
220} // namespace ns3
221#endif // NR_FH_SCHED_SAP_H
Template for the implementation of the NrFhSchedSapProvider as a member of an owner class of type C t...
Template for the implementation of the NrFhSchedSapUser as a member of an owner class of type C to wh...
Service Access Point (SAP) offered by the FhControl instance to the MAC Scheduler instance.
Service Access Point (SAP) offered by the MAC Scheduler instance to the FhControl instance.