D2dEnbMacBase< Base > Class Template Reference

Simu5G: D2dEnbMacBase< Base > Class Template Reference
Simu5G
D2dEnbMacBase< Base > Class Template Reference

#include <D2dEnbMacBase.h>

Public Member Functions

void initialize (int stage) override
void handleMessage (cMessage *msg) override
 intercepts the D2D self-messages (mode switch, conflict graph update)
void deleteQueues (MacNodeId nodeId) override

Protected Member Functions

void flushHarqBuffers () override
void fromPhy (cPacket *pkt) override
 Lower Layer Handler: intercepts mirrored D2D H-ARQ feedback.
LteHarqBufferRx * createRxHarqBuffer (MacNodeId src, const UserControlInfo *userInfo) override
 HARQ RX buffer factory: adds support for the D2D and D2D_MULTI directions.

Detailed Description

template<class Base>
class simu5g::D2dEnbMacBase< Base >

CRTP mixin that adds D2D support to an eNB/gNB MAC.

The core MACs (LteMacEnb and its NR subclass NrMacGnb) carry no D2D code; this mixin layers the D2D eNB-MAC glue (D2D feedback push, mode-switch dispatch and notification, mirror H-ARQ buffer lifecycle, conflict-graph bookkeeping) on top of either of them, so the LTE and NR D2D MACs share one implementation. The heavy shared state and logic already lives in D2dEnbMacHelper; the mixin holds the module-side glue that the two leaf classes used to duplicate. It has native protected access to the Base internals it needs.

The concrete Define_Module'd MACs are: LteMacEnbD2D = D2dEnbMacBase<LteMacEnb> (+ the sendGrants/macPduUnmake fork overrides, see LteMacEnbD2D.h) NrMacGnbD2D = D2dEnbMacBase<NrMacGnb>

No signals are owned here: the mode-switch statistics are declared on the D2D NED modules and emitted by the UE-side mixin. See the "Signals" note in D2dUeMacBase.h for the package-wide registration rule.

Member Function Documentation

◆ flushHarqBuffers()

template<class Base>
void flushHarqBuffers ( )
overrideprotected

Flush Tx H-ARQ buffers for all users; additionally marks the D2D mirror buffers as waiting.

◆ fromPhy()

template<class Base>
void fromPhy ( cPacket * pkt)
overrideprotected

Lower Layer Handler: intercepts mirrored D2D H-ARQ feedback.

References LteMacBase::fromPhy().

◆ createRxHarqBuffer()

template<class Base>
LteHarqBufferRx * createRxHarqBuffer ( MacNodeId src,
const UserControlInfo * userInfo )
overrideprotected

HARQ RX buffer factory: adds support for the D2D and D2D_MULTI directions.

◆ initialize()

template<class Base>
void initialize ( int stage)
override

Reads the D2D MAC parameters and performs initialization.

◆ handleMessage()

template<class Base>
void handleMessage ( cMessage * msg)
override

intercepts the D2D self-messages (mode switch, conflict graph update)

◆ deleteQueues()

template<class Base>
void deleteQueues ( MacNodeId nodeId)
override

deleteQueues() on ENB performs actions from base classes and also deletes mirror buffers

Parameters
nodeIdid of node performing handover