13#ifndef _LTE_LTEMACENB_H_
14#define _LTE_LTEMACENB_H_
16#include <inet/common/ModuleRefByPar.h>
18#include "simu5g/common/cellInfo/CellInfo.h"
19#include "simu5g/stack/mac/LteMacBase.h"
20#include "simu5g/stack/mac/amc/LteAmc.h"
21#include "simu5g/common/LteCommon.h"
22#include "simu5g/background/trafficGenerator/IBackgroundTrafficManager.h"
23#include "simu5g/stack/mac/DrbQosProfile.h"
24#include "simu5g/stack/mac/UlBacklogRegistry.h"
28using namespace omnetpp;
41 inet::ModuleRefByPar<CellInfo> cellInfo_;
44 LteAmc *amc_ =
nullptr;
47 std::map<GHz, LteMacScheduleList> *scheduleListDl_ =
nullptr;
51 std::map<MacCid, unsigned int> soExpectedSdus_;
56 std::map<GHz, IBackgroundTrafficManager *> bgTrafficManager_;
61 int numPreambles_ = 64;
65 std::map<int, std::vector<inet::Packet *>> pendingRacRequests_;
71 UlBacklogRegistry ulBacklog_;
74 LteSchedulerEnbDl *enbSchedulerDl_ =
nullptr;
77 LteSchedulerEnbUl *enbSchedulerUl_ =
nullptr;
80 std::map<GHz, std::map<Direction, int>> needRtx_;
83 std::map<DrbKey, DrbQosProfile> drbQosMap_;
88 void initialize(
int stage)
override;
94 void handleMessage(cMessage *msg)
override;
100 virtual void sendGrants(std::map<GHz, LteMacScheduleList> *scheduleList);
104 typedef std::map<std::pair<MacNodeId, Direction>, std::map<Codeword, unsigned int>> PerUeGrantBlocks;
115 virtual PerUeGrantBlocks foldScheduleEntries(
const LteMacScheduleList& entries)
const;
119 struct GrantBlocks {
unsigned int totalBlocks = 0;
unsigned int codewords = 0; };
128 virtual GrantBlocks grantBlocksOf(MacNodeId nodeId,
const std::map<Codeword, unsigned int>& cwBlocks)
const;
134 virtual Direction grantDirection(LogicalCid lcid)
const {
return directionFromBsrLcid(lcid, UL); }
143 virtual inet::b grantChunkLength()
const {
return inet::B(1); }
151 void macPduMake(MacCid cid)
override;
163 void macPduUnmake(cPacket *pkt)
override;
170 virtual void macSduRequest();
181 virtual void bufferizeBsr(
const MacBsr *bsr,
const UserControlInfo *lteInfo);
190 bool bufferizePacket(cPacket *pkt)
override;
196 void handleUpperMessage(cPacket *pkt)
override;
205 void macHandleFeedbackPkt(cPacket *pkt)
override;
210 void macHandleRac(cPacket *pkt)
override;
216 virtual void resolveRacCollisions();
221 void updateUserTxParam(cPacket *pkt)
override;
226 virtual void flushHarqBuffers();
231 ~LteMacEnb()
override;
234 LteMacBuffer *getBsrVirtualBuffer(MacCid cid) {
return ulBacklog_.mirror(cid); }
237 std::vector<MacCid> getActiveBsrVirtualBufferCids() {
return ulBacklog_.keys(); }
240 std::vector<LteMacBuffer *> getUlBacklogMirrors(MacNodeId nodeId)
const {
return ulBacklog_.ulMirrorsOf(nodeId); }
243 virtual void clearBsrBuffers(MacNodeId ueId);
251 void deleteQueues(MacNodeId nodeId)
override;
256 virtual LteAmc *getAmc()
264 virtual CellInfo *getCellInfo();
269 virtual IBackgroundTrafficManager *getBackgroundTrafficManager(GHz carrierFrequency)
271 if (bgTrafficManager_.find(carrierFrequency) == bgTrafficManager_.end())
272 throw cRuntimeError(
"LteMacEnb::getBackgroundTrafficManager - carrier frequency [%f] not valid.", carrierFrequency.get());
273 return bgTrafficManager_[carrierFrequency];
279 virtual int getNumAntennas();
285 SchedDiscipline getSchedDiscipline(Direction dir);
291 ActiveSet *getActiveSet(Direction dir);
296 virtual void signalProcessForRtx(MacNodeId nodeId, GHz carrierFrequency, Direction dir,
bool rtx =
true);
301 virtual int getProcessForRtx(GHz carrierFrequency, Direction dir);
304 virtual int getPendingRtxOtherThan(GHz carrierFrequency, Direction excluded);
307 unsigned int getDlBandStatus(
Band b);
308 unsigned int getDlPrevBandStatus(
Band b);
312 virtual void configureDrbQos(DrbKey key,
const DrbQosProfile& qos);
317 const std::map<DrbKey, DrbQosProfile> *getDrbQosMap() {
return &drbQosMap_; }
324 double getUtilization(Direction dir);
333 int getActiveUesNumber(Direction dir);
Define the manager of the conflict graph (CG) for resource allocation purposes.
Definition ConflictGraph.h:83
Lte AMC module for Omnet++ simulator.
Definition LteAmc.h:45
Definition LteHarqProcessRx.h:42
MAC Layer.
Definition LteMacBase.h:80
virtual void handleSelfMessage()=0
Definition LteSchedulerEnbDl.h:27
Definition LteSchedulerEnbUl.h:24
Definition AlertReceiver.h:24
unsigned short Band
Logical band.
Definition LteTypes.h:140
Direction directionFromBsrLcid(LogicalCid lcid, Direction fallback)
std::map< std::pair< MacCid, Codeword >, unsigned int > LteMacScheduleList
Definition LteCommon.h:344
Definition LteMacEnb.h:119