RlcMux¶
Package: simu5g.stack.rlc
simple module RlcMux
Lower-layer RLC packet dispatcher.
Dispatches MAC packets to the correct RX entity or TX entity, and collects TX entity output to route to the MAC layer.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
The LteNicBase module serves as the foundational building block for LTE networking in Simu5G. It integrates protocols for LTE communication, including PDCP, RLC, MAC, and PHY layers. This base module allows higher-level modules, such as User Equipment (UE) and eNodeB (evolved Node B), to configure and utilize these layers according to their specific requirements. |
|
compound module |
Defines a User Equipment (UE) network interface card that supports both LTE and NR (New Radio) technologies. It extends the LteNicUe module by adding additional submodules and parameters to support NR-specific functionalities. D2D support is added by the NrNicUeD2D subtype. |
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
simple module |
Device-to-Device (D2D) aware version of RlcMux. It additionally handles D2D mode switch notifications arriving from the MAC layer, dispatching them to the TX or RX UM entity of the affected bearer, and declares the D2D statistics (emitted by the D2D UM entities). Selected by the D2D-capable NICs. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
bearerManagementModule |
string |
“^.rrc.bearerManagement” |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
RlcMux |
|
display |
p=100,200;i=block/dispatch |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
macIn |
input |
||
macOut |
output |
||
toRxEntity [ ] |
output |
Dynamic: dispatches to RX entity in gates |
|
fromTxEntity [ ] |
input |
Dynamic: receives from TX entity out gates |
|
macToTxEntity [ ] |
output |
Dynamic: dispatches MAC SDU requests to TX entity macIn gates |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
receivedPacketFromLowerLayer |
|||
rlcDelayDl |
|||
rlcDelayUl |
|||
rlcPduDelayDl |
|||
rlcPduDelayUl |
|||
rlcPduThroughputDl |
|||
rlcPduThroughputUl |
|||
rlcThroughputDl |
|||
rlcThroughputUl |
|||
sentPacketToLowerLayer |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
receivedPacketFromLowerLayer |
receivedPacketFromLowerLayer |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
|||
rlcDelayDl |
Delay at the rlc layer DL |
rlcDelayDl |
mean,vector |
s |
||
rlcDelayUl |
Delay at the rlc layer UL |
rlcDelayUl |
mean,vector |
s |
||
rlcPduDelayDl |
Delay at the rlc layer UL |
rlcPduDelayDl |
mean,vector |
s |
||
rlcPduDelayUl |
Delay at the rlc layer UL |
rlcPduDelayUl |
mean,vector |
s |
||
rlcPduThroughputDl |
Throughput at the rlc layer DL |
rlcPduThroughputDl |
simu5g_rateavg,vector |
Bps |
||
rlcPduThroughputUl |
Throughput at the rlc layer UL |
rlcPduThroughputUl |
simu5g_rateavg,vector |
Bps |
||
rlcThroughputDl |
Throughput at the rlc layer DL |
rlcThroughputDl |
simu5g_rateavg,vector |
Bps |
||
rlcThroughputUl |
Throughput at the rlc layer UL |
rlcThroughputUl |
simu5g_rateavg,vector |
Bps |
||
sentPacketToLowerLayer |
sentPacketToLowerLayer |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
Source code¶
//
// Lower-layer RLC packet dispatcher.
//
// Dispatches MAC packets to the correct RX entity or TX entity,
// and collects TX entity output to route to the MAC layer.
//
simple RlcMux like IRlcMux
{
parameters:
@class("RlcMux");
@display("p=100,200;i=block/dispatch");
string bearerManagementModule = default("^.rrc.bearerManagement");
@signal[receivedPacketFromLowerLayer];
@statistic[receivedPacketFromLowerLayer](source="receivedPacketFromLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@signal[sentPacketToLowerLayer];
@statistic[sentPacketToLowerLayer](source="sentPacketToLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
//# SDU-level statistics
@signal[rlcDelayDl];
@statistic[rlcDelayDl](title="Delay at the rlc layer DL"; unit="s"; source="rlcDelayDl"; record=mean,vector);
@signal[rlcThroughputDl];
@statistic[rlcThroughputDl](title="Throughput at the rlc layer DL"; unit="Bps"; source="rlcThroughputDl"; record=simu5g_rateavg,vector);
@signal[rlcDelayUl];
@statistic[rlcDelayUl](title="Delay at the rlc layer UL"; unit="s"; source="rlcDelayUl"; record=mean,vector);
@signal[rlcThroughputUl];
@statistic[rlcThroughputUl](title="Throughput at the rlc layer UL"; unit="Bps"; source="rlcThroughputUl"; record=simu5g_rateavg,vector);
//# PDU-level statistics
@signal[rlcPduDelayDl];
@statistic[rlcPduDelayDl](title="Delay at the rlc layer UL"; unit="s"; source="rlcPduDelayDl"; record=mean,vector);
@signal[rlcPduThroughputDl];
@statistic[rlcPduThroughputDl](title="Throughput at the rlc layer DL"; unit="Bps"; source="rlcPduThroughputDl"; record=simu5g_rateavg,vector);
@signal[rlcPduDelayUl];
@statistic[rlcPduDelayUl](title="Delay at the rlc layer UL"; unit="s"; source="rlcPduDelayUl"; record=mean,vector);
@signal[rlcPduThroughputUl];
@statistic[rlcPduThroughputUl](title="Throughput at the rlc layer UL"; unit="Bps"; source="rlcPduThroughputUl"; record=simu5g_rateavg,vector);
gates:
input macIn;
output macOut;
output toRxEntity[]; // Dynamic: dispatches to RX entity in gates
input fromTxEntity[]; // Dynamic: receives from TX entity out gates
output macToTxEntity[]; // Dynamic: dispatches MAC SDU requests to TX entity macIn gates
}