UM stands for “Unacknowledged Mode”.
In UM mode, RLC adds protocol header to RLC SDU and if required SDU can be segmented.
The transmitting entity performs the below operation:
1. Buffering of the data and generate RLC header.
2. Segmentation and modify RLC header
3. Add RLC header.
The receiving entity performs the below operation:
1. Buffering of the data.
2. Reordering
3. Remove RLC header.
4. Reassembly.
UM Data Transfer Procedure
State variables for Transmitting UM entity
TX_Next: This variable indicates the SN (Sequence Number) of the next UMD PDU that contains the RLC SDU segment to be constructed.
It will be updated every time the last segment is reached.
State variables for Receiving UM entity
RX_Next_Reassembly: This variable points to the earliest SN among all packets to be reassembled.
RX_Timer_Trigger: This variable points to the SN+1 of the packet that triggered the timer t-Reassembly.
RX_Next_Highest: This variable points to the largest SN+1 among all UMD PDU received. It is the upper boundary of the receiving window
UM_Window_Size: The constant is the size of the reassembly window, 32 for 6 bit SN, and 2048 for 12 bit SN;
RX_Next_Highest – UM_Window_Size: The upper boundary – the window size will give the lower boundary for reassembly.
RLC UM Timer:
t-Reassembly: This timer is used at the receiving end to detect whether there is a packet loss.
It means, if a packet is not received, then receiving entity cannot wait indefinitely.
UM transmit operations
If the UMD PDU contains a segment of a RLC SDU then it will set the SN of the UMD PDU to TX_Next. i.e TX_Next = SN.
If the UMD PDU contains a segment that maps to the last byte of an RLC SDU, then increment TX_Next by one.
UM Receive operations
There are 3 different cases on how to handle UM Receive Operations as below:
1. Actions when an UMD PDU is received from lower layer
2. Actions when an UMD PDU is placed in the reception buffer
3. Actions when t-Reassembly expires
1. Actions when an UMD PDU is received from lower layer
If the UMD PDU does not have an SN, it means that the UMD PDU is a complete RLC SDU, and the RLC header is removed and sent to the PDCP immediately.
If (RX_Next_Highest – UM_Window_Size) <= SN < RX_Next_Reassembly, then discard the packet. Because the SN is smaller than RX_Next_Reassembly, WKT RX_Next_Reassembly is the smallest SN of the packets to be reassembled.
else, put the UMD PDU to reception buffer.
There is no need to submit the packets in order.
The reassemble window can be moved depending on the RX_Next_Highest variable
2. Actions when an UMD PDU is placed in the reception buffer
Consider an UMD PDU with SN = x and is placed in reception buffer, then:
1. If all the segments are received, then it will be sent to PDCP layer after header removal. Then update RX_Next_Highest to SN + 1.
Example: If the largest SN received before = 5, then RX_Next_Highest=6, if SN=8 is received, update RX_Next_Highest=9.
But the packets between SN=5 and SN =8, might be lost, UM mode will not guarantee the packet loss.
2. If x = RX_Next_Reassembly, then update the RX_Next_Reassembly to the SN of the first SN > current RX_Next_Reassembly that has not been reassembled and delivered to upper layer.
3. If x falls outside the reassembly window, then update RX_Next_Highest to x + 1 and discard any UMD PDUs with SN that falls outside of the reassembly window;
The receiving window maintains as follows:
(RX_Next_Highest – UM_Window_Size) <= SN <RX_Next_Highest
It means, the receiving window can be moved on the update of the upper boundary i.e RX_Next_Highest.
t-Reassembly timer start and stop conditions
Start Condition:
If t-Reassembly timer is not running, then start the timer, if any of the conditions are met:
1. RX_Next_Highest > RX_Next_Reassembly + 1. It means, for example, if the packet with SN = 8 is received, RX_Next_Highest = 9 is updated, since the previous packet is SN=5, RX_Next_Reassembly=6, the condition is met, start the timer, and update RX_Timer_Trigger=9.
2. if RX_Next_Highest = RX_Next_Reassembly + 1 and there is at least one missing byte segment of the RLC SDU associated with SN = RX_Next_Reassembly before the last byte of all received segments of this RLC SDU.
It means, for example, we receive a packet for SN =6 and the segment with SN= 6 is not received completely, update RX_Next_Highest=7, the previous packet is SN=5, RX_Next_Reassembly=6, and the conditions are met , Start the timer, update RX_Timer_Trigger=7.
Stop Condition:
1. RX_Timer_Trigger <= RX_Next_Reassembly
2. if RX_Timer_Trigger falls outside of the reassembly window and RX_Timer_Trigger is not equal to RX_Next_Highest
3. if RX_Next_Highest = RX_Next_Reassembly + 1 and there is no missing byte segment of the RLC SDU associated with SN = RX_Next_Reassembly before the last byte of all received segments of this RLC SDU:
Actions when t-Reassembly expires
1. Update the RX_Next_Reassembly to the SN of the first SN >= RX_Timer_Trigger that has not been reassembled;
2. Discard all segments with SN < updated RX_Next_Reassembly.
RLC UM PDU
Here:
Segment Offset (SO) field
Segmentation Info (SI) field
Sequence Number (SN) field
Reserved (R) field
There are different types of UMD PDU as discussed below:
1. The RLC header has only SI field and R field and has no SN field.
2. UMD PDU header contains the SN field only when the
corresponding RLC SDU is segmented. An UMD PDU carrying the first segment of an RLC SDU does not carry the
SO field in its header. The length of the SO field is 16 bits
3. Below UMD PDU has both SN and SO.
So indicates that this PDU carries a segment of an SDU and as the SO is present, it is not the first segment.
Image source TS 38.322