When a radio bearer is put on the E-DCH, three layers need to agree on how to find its data. RLC hands PDUs to one logical channel, and MAC-d puts that logical channel into one MAC-d flow. MAC-e/es then labels the data in its header, so that the Node B and the SRNC can take it apart again. RRC sets up all three links in one IE, the RB mapping info. This page reads one such configuration from a tester log and then shows where each value comes from in 25.321 and 25.331.
- How does RRC map one RB onto the E-DCH ?
- What does the network do with the DDI ?
- Which RRC IEs carry the mapping ?
- Reference
How does RRC map one RB onto the E-DCH ?
Let's start from a real message. The mapping is easiest to follow when you trace one radio bearer from the RRC IE down to the MAC-e header, and the diagram below does exactly that for one RB.
On the left is a decoded RB-InformationAffected-r6 from a tester log. It carries rb-Identity 2, so this is SRB2. The uplink of this RB uses the e-dch branch of ul-LogicalChannelMappings, and the downlink still uses a DCH, transport channel 31. On the right, three rows of boxes stand for the value spaces of RLC logical channels, MAC-d flows and MAC-e/es DDI values. The arrows show which box each field of the log selects.

logicalChannelIdentity 2 : This picks the logical channel in the RLC row, whose value range is 1 to 15. MAC uses it to tell apart the logical channels multiplexed on the E-DCH.e-DCH-MAC-d-FlowIdentity 2 : This puts the logical channel into MAC-d flow 2 out of the flows 0 to 7. Each MAC-d flow has its own power offset, maximum number of retransmissions and grant type.ddi 2 : This is the 6-bit label that MAC-e writes into its header for this logical channel and this RLC PDU size. The DDI row runs from 0 to 62.rlc-PDU-SizeList with sizeType1 16 : The actual size is 8 x 16 + 16 = 144 bits. So each MAC-es SDU from this RB is 144 bits long.includeInSchedulingInfo FALSE : The UE leaves this logical channel out when it reports its buffer in the Scheduling Information.mac-LogicalChannelPriority 1 : This is the highest of the 8 priority levels, which fits a signalling RB.
In this example the three numbers are all 2, but that is a choice of the network and not a rule. Logical channel identity, MAC-d flow identity and DDI are three independent value spaces. A network can put several logical channels into one MAC-d flow, and one logical channel can use several DDI values when it has several RLC PDU sizes.
One IE sets up the whole chain : The e-dch branch of the RB mapping info links the RLC logical channel, the MAC-d flow and the DDI in one step.Uplink and downlink can use different transport channels : Here the uplink of SRB2 is on the E-DCH while its downlink stays on DCH 31.Equal numbers are a coincidence : Do not read the same value in the three fields as a requirement.
What does the network do with the DDI ?
Why does MAC-e need a DDI at all, when RRC already knows the logical channel? The reason is that the MAC-e PDU is taken apart by two different nodes. The Node B only sees the MAC-e header. It has to cut the payload into MAC-es PDUs and forward each one to the right Iub bearer, and it does not know the RLC configuration.
The MAC-e header therefore carries pairs of fields. The 6-bit DDI identifies the logical channel, the MAC-d flow and the size of the MAC-d PDUs in the MAC-es PDU that follows. The 6-bit N says how many MAC-d PDUs of that DDI are concatenated. From DDI and N, the Node B knows the size of each MAC-es PDU. The SRNC configures the Node B with the mapping between the active DDI values, the MAC-d flow and the PDU size. In the SRNC, the MAC-es re-ordering entity then uses the DDI again to find the logical channel.
Two details in 25.331 and 25.321 matter when you read a log. First, the DDI in the RB mapping info is a starting value. If an RB has more than one UL RLC PDU size, the other sizes use the following DDI values in order. Second, the value 63, binary 111111 or 0x3F, is reserved. The UE appends it at the end of the MAC-e header to show that a Scheduling Information is concatenated in the MAC-e PDU. That is why the DDI range in 25.331 stops at 62.
The includeInSchedulingInfo flag also acts on that Scheduling Information. The TEBS field of the Scheduling Information counts only the data of the logical channels for which RRC requested reporting. A logical channel with FALSE, such as SRB2 in the capture above, adds nothing to TEBS.
Since Release 8, the DDI is not the only option. With MAC-i/is, RRC can choose the flexibleSize branch of the RLC PDU size instead of a fixed size list. The MAC-i header then carries a 4-bit LCH-ID and an 11-bit length field for each MAC-is SDU. That is why the fixedSize branch in the Release 8 IE keeps the ddi field and the flexibleSize branch has none.
The DDI lets the Node B work without RLC knowledge : DDI and N together give the size of each MAC-es PDU and the Iub bearer it belongs to.DDI 63 marks Scheduling Information : Configured DDI values therefore run from 0 to 62 only.Several RLC sizes use consecutive DDIs : The ddi in RRC is the first value of the block.MAC-i replaces the DDI with LCH-ID and L : A flexible RLC PDU size has no DDI.
Which RRC IEs carry the mapping ?
The capture above follows the Release 6 structure, UL-LogicalChannelMapping-r6. The current 25.331 still carries that IE unchanged, and it adds the Release 8 version with the choice between a fixed and a flexible RLC PDU size. Let's compare the two e-dch branches and the simple types that set the value ranges seen in the diagram.
Following is based on
UL-LogicalChannelMapping-r6 ::= SEQUENCE {
ul-TrCH-Type CHOICE {
dch-rach-usch SEQUENCE {
-- TABULAR: UL-TransportChannelType contains TransportChannelIdentity as well.
ul-TransportChannelType UL-TransportChannelType,
logicalChannelIdentity LogicalChannelIdentity OPTIONAL,
rlc-SizeList CHOICE {
allSizes NULL,
configured NULL,
explicitList RLC-SizeExplicitList
}
},
e-dch SEQUENCE {
logicalChannelIdentity LogicalChannelIdentity,
e-DCH-MAC-d-FlowIdentity E-DCH-MAC-d-FlowIdentity,
ddi DDI,
rlc-PDU-SizeList RLC-PDU-SizeList,
includeInSchedulingInfo BOOLEAN
}
},
mac-LogicalChannelPriority MAC-LogicalChannelPriority
}
UL-LogicalChannelMapping-r8 ::= SEQUENCE {
ul-TrCH-Type CHOICE {
dch-rach-usch SEQUENCE {
-- TABULAR: UL-TransportChannelType contains TransportChannelIdentity as well.
ul-TransportChannelType UL-TransportChannelType,
logicalChannelIdentity LogicalChannelIdentity OPTIONAL,
rlc-SizeList CHOICE {
allSizes NULL,
configured NULL,
explicitList RLC-SizeExplicitList
}
},
e-dch SEQUENCE {
logicalChannelIdentity LogicalChannelIdentity,
e-DCH-MAC-d-FlowIdentity E-DCH-MAC-d-FlowIdentity,
rlc-PDU-Size CHOICE {
fixedSize SEQUENCE {
ddi DDI,
rlc-PDU-SizeList RLC-PDU-SizeList
},
flexibleSize RLC-PDU-SizeConstraint
},
includeInSchedulingInfo BOOLEAN
}
},
mac-LogicalChannelPriority MAC-LogicalChannelPriority
}
LogicalChannelIdentity ::= INTEGER (1..15)
E-DCH-MAC-d-FlowIdentity ::= INTEGER (0..maxE-DCHMACdFlow-1)
DDI ::= INTEGER (0..62)
RLC-PDU-Size ::= OctetModeRLC-SizeInfoType1
MAC-LogicalChannelPriority ::= INTEGER (1..8)
In the r6 branch, ddi and rlc-PDU-SizeList are mandatory, so every E-DCH logical channel gets a DDI. In the r8 branch, they move inside fixedSize, and flexibleSize takes an RLC-PDU-SizeConstraint instead. RLC-PDU-Size is OctetModeRLC-SizeInfoType1, and its sizeType1 branch gives the actual size as (8 x sizeType1) + 16 bits. This is the formula used for the 144 bits in the capture. The upper bound maxE-DCHMACdFlow-1 is 7, which gives the eight MAC-d flows of the diagram.
The r6 IE is still in the current specification : A Release 6 style log is still valid ASN.1 today.The r8 IE makes the DDI optional in practice : Only the fixedSize branch carries it.Value ranges come from simple types : LogicalChannelIdentity 1 to 15, E-DCH-MAC-d-FlowIdentity 0 to 7, DDI 0 to 62 and MAC-LogicalChannelPriority 1 to 8.
Reference
- 3GPP TS 25.321 v19.0.0 : Medium Access Control (MAC) protocol specification
- 3GPP TS 25.331 v19.0.1 : Radio Resource Control (RRC); Protocol specification