NED File src/simu5g/stack/mac/LteMacBase.ned¶
Name |
Type |
Description |
|---|---|---|
compound module |
Base module for the Medium Access Control (MAC) layer of the LTE protocol stack. |
Source code¶
//
// Simu5G
//
// Copyright (C) 2019-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa)
// Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa)
//
// This file is part of a software released under the license included in file
// "license.pdf". Please read LICENSE and README files before using it.
// The above files and the present reference are part of the software itself,
// and cannot be removed from it.
//
package simu5g.stack.mac;
//
// Base module for the Medium Access Control (MAC) layer of the LTE protocol stack.
//
// Provides common functionalities for MAC operations at both the
// eNodeB and User Equipment (UE) sides, such as functions to exchange MAC Service
// Data Units (SDUs) with the Radio Link Control (RLC) layer, and MAC Protocol Data
// Units (PDUs) with the physical layer.
//
module LteMacBase like ILteMac
{
parameters:
@display("i=block/mac");
int macNodeId; // MacNodeId of the stack leg this MAC belongs to (set by the NIC)
string binderModule = default("binder");
//# Mac Queues
int queueSize @unit(B) = default(2MiB); // MAC Buffers queue size
//# Mac MIB
//# H-ARQ
int harqProcesses = default(8);
int maxHarqRtx = default(3);
int harqFbEvaluationTimer = default(4); // Number of slots for sending back HARQ FB
//# Statistics display (in GUI)
bool statDisplay = default(false);
//# Statistics recording
@signal[macDelayDl];
@statistic[macDelayDl](title="Delay at the MAC layer UL"; unit="s"; source="macDelayDl"; record=mean,vector);
@signal[macThroughputDl];
@statistic[macThroughputDl](title="Throughput at the MAC layer DL"; unit="Bps"; source="macThroughputDl"; record=simu5g_rateavg);
@signal[macDelayUl];
@statistic[macDelayUl](title="Delay at the MAC layer UL"; unit="s"; source="macDelayUl"; record=mean,vector);
@signal[macThroughputUl];
@statistic[macThroughputUl](title="Throughput at the MAC layer UL"; unit="Bps"; source="macThroughputUl"; record=simu5g_rateavg);
@signal[macCellPacketLossDl];
@statistic[macCellPacketLossDl](title="Mac Cell Packet Loss Dl"; unit=""; source="macCellPacketLossDl"; record=mean);
@signal[macCellPacketLossUl];
@statistic[macCellPacketLossUl](title="Mac Cell Packet Loss Ul"; unit=""; source="macCellPacketLossUl"; record=mean);
@signal[macPacketLossUl];
@statistic[macPacketLossUl](title="Mac Packet Loss Ul"; unit=""; source="macPacketLossUl"; record=mean);
@signal[macPacketLossDl];
@statistic[macPacketLossDl](title="Mac Packet Loss Dl"; unit=""; source="macPacketLossDl"; record=mean);
@signal[macBufferOverFlowDl];
@statistic[macBufferOverFlowDl](title="Mac buffer overflow as function of time"; unit="Byte/s"; source="macBufferOverFlowDl"; record=mean);
@signal[macBufferOverFlowUl];
@statistic[macBufferOverFlowUl](title="Mac buffer overflow as function of time"; unit="Byte/s"; source="macBufferOverFlowUl"; record=mean);
@signal[harqErrorRateUl];
@statistic[harqErrorRateUl](title="Harq Error Rate Ul"; unit=""; source="harqErrorRateUl"; record=mean,vector);
@signal[harqErrorRateDl];
@statistic[harqErrorRateDl](title="Harq Error Rate Dl"; unit=""; source="harqErrorRateDl"; record=mean,vector);
@signal[harqTxAttemptsDl];
@statistic[harqTxAttemptsDl](title="Harq Tx Attempts Dl"; unit=""; source="harqTxAttemptsDl"; record=mean,vector);
@signal[harqTxAttemptsUl];
@statistic[harqTxAttemptsUl](title="Harq Tx Attempts Ul"; unit=""; source="harqTxAttemptsUl"; record=mean,vector);
@signal[harqErrorRate_1st_Ul];
@statistic[harqErrorRate_1st_Ul](title="Harq Error Rate Ul (1st tx)"; unit=""; source="harqErrorRate_1st_Ul"; record=mean,vector);
@signal[harqErrorRate_1st_Dl];
@statistic[harqErrorRate_1st_Dl](title="Harq Error Rate Dl (1st tx)"; unit=""; source="harqErrorRate_1st_Dl"; record=mean,vector);
@signal[harqErrorRate_2nd_Ul];
@statistic[harqErrorRate_2nd_Ul](title="Harq Error Rate Ul (2nd tx)"; unit=""; source="harqErrorRate_2nd_Ul"; record=mean,vector);
@signal[harqErrorRate_2nd_Dl];
@statistic[harqErrorRate_2nd_Dl](title="Harq Error Rate Dl (2nd tx)"; unit=""; source="harqErrorRate_2nd_Dl"; record=mean,vector);
@signal[harqErrorRate_3rd_Ul];
@statistic[harqErrorRate_3rd_Ul](title="Harq Error Rate Ul (3rd tx)"; unit=""; source="harqErrorRate_3rd_Ul"; record=mean,vector);
@signal[harqErrorRate_3rd_Dl];
@statistic[harqErrorRate_3rd_Dl](title="Harq Error Rate Dl (3rd tx)"; unit=""; source="harqErrorRate_3rd_Dl"; record=mean,vector);
@signal[harqErrorRate_4th_Ul];
@statistic[harqErrorRate_4th_Ul](title="Harq Error Rate Ul (4th tx)"; unit=""; source="harqErrorRate_4th_Ul"; record=mean,vector);
@signal[harqErrorRate_4th_Dl];
@statistic[harqErrorRate_4th_Dl](title="Harq Error Rate Dl (4th tx)"; unit=""; source="harqErrorRate_4th_Dl"; record=mean,vector);
@signal[receivedPacketFromUpperLayer];
@statistic[receivedPacketFromUpperLayer](source="receivedPacketFromUpperLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@signal[receivedPacketFromLowerLayer];
@statistic[receivedPacketFromLowerLayer](source="receivedPacketFromLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@signal[sentPacketToUpperLayer];
@statistic[sentPacketToUpperLayer](source="sentPacketToUpperLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@signal[sentPacketToLowerLayer];
@statistic[sentPacketToLowerLayer](source="sentPacketToLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@signal[macPduAcked];
@signal[macPduDiscarded];
@signal[rlcPduDiscarded];
@signal[grantSent];
@signal[ulMacPduArrived];
gates:
//# Gates connecting RLC and MAC Layers
input upperLayerIn; // From RLC
output upperLayerOut; // To RLC
//# Gates connecting MAC and PHY Layers
input phyIn; // From PHY
output phyOut; // To PHY
}