LTE MDT
The purpose of this tutorial is to show how to configure and trigger MDT (Minimization of Driving Test). 'Drive Test' is a kind of testing in which you drive a testing vehicle around a certain route measuring various network performance (e.g, Cell Power, Interference) or UE performance (e.g, Call Drop, Throughput, Handover performance, Cell Reselection Performance etc). Usually during this period, you would collect a lot of protocol logs from UE and analyze by yourself or send them to developers when they have serious problems.
MDT is a feature introduced in 3GPP with the attempt to utilize normal UEs in the field to collect those information and report it to network which hopefully replace driving test as much as possible. According to 37.320, MDT has very wide spectrum as follows.
- Measurement Report from Network : Measurement that should be done by network (eNB) such as M3,4,5,6,7
- Measurement Report from UE : Measurement that should be done and reported to eNB such as M1,2,8,9
The MDT that Amarisoft support is Measurement Report from UE and this tutorial is also about this category.
Table of Contents
- LTE MDT
Test Setup
Test setup for this tutorial is as shown below.
Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
- Configuration Parameter
- Remote API
Test 1 : Logged Measurement Report
In this test, I am going to show you the most basic method of operation for MDT. High level sequence of operation in this test is
- Step 1 : Configure LoggedMeasurement Report
- Step 2 : Lower the cell power to cause RLF(Radio Link Failure) and Call drop
- Step 3 : Increase cell power and let UE attach to the cell. At this time of attach, UE notifies eNB that it has logged measurement
- Step 4 : eNB retrieves the logged measurement from UE via RRC message
Configuration
For Callbox (eNB) configuration, I used enb-mdt.cfg which is copied and modified from enb.default.cfg
In terms of configuration, it is super simple to enable tun setup for each UE. There is only one parameter to configure. It is automatic_ue_info_request. Setting this to true will let eNB to send a request to UE asking for the logged measurement when UE notifies to eNB the presence of the logged measurement result.
Perform the test
First make it sure that UE is in connected mode with eNB or gNB.
Power on UE and wait until the call gets connected.
Then trigger the logged measurement using Remote API '{"message":"rrc_logged_meas_config", ...}
[root@CBC-2023010100 enb]# ./ws.js enb '{"message":"rrc_logged_meas_config", ran_ue_id:1, trace_reference: { plmn: "00101", trace_id: 0x10 }, trace_recording_session_ref: 0x8000, tce_id: 5, logging_duration: 10, logging_interval: 5120, type: "periodical"}' WebSocket remote API tool version 2024-12-09, Copyright (C) 2012-2024 Amarisoft [0.003] ### Connected to 127.0.0.1:9001 [0.003] ### Ready: name=ENB, type=ENB, version=2024-12-09 [0.022] <== Send message rrc_logged_meas_config id#1 [0.033] ==> Message received { "message": "rrc_logged_meas_config", "message_id": "id#1", "time": 2235.031, "utc": 1733842472.612 } |
Now reduce the cell power to the point where UE start loosing connection and generate RLF (Radio Link Failure).
Then power cycle UE and perform the normal attach and establish connection.
Log Analysis
eNB sends UE capability enquiry.
Check if UE support loggedMeasurementIdle capability.
Once you run RemoteAPI "rrc_logged_meas_config", eNB send loggedMeasurementConfiguration message.
Decrease Cell Power to cause RLF (RadioLink Failure) and power cycle UE to reattach.
UE should notify the presence of the logged measurement (rlf-InfoAvailable in this case) in RRC Connection Setup Complete message.
As a response to rlf-InfoAvailable in RRC Connection Setup Complete message, eNB send out ueInformationRequest message to retrieve the RLF information (rlf-ReportRes)
Then UE sends the logged measurement data (rlf-Report in this case) to eNB.
RRC / NAS Signaling
loggedMeasurementConfiguration
{
message c1: loggedMeasurementConfiguration-r10: {
criticalExtensions c1: loggedMeasurementConfiguration-r10: {
traceReference-r10 {
plmn-Identity-r10 {
mcc {
0,
0,
1
},
mnc {
0,
1
}
},
traceId-r10 '000010'H
},
traceRecordingSessionRef-r10 '8000'H,
tce-Id-r10 '05'H,
absoluteTimeInfo-r10 '241210174337'H,
loggingDuration-r10 min10,
loggingInterval-r10 ms5120
}
}
}
ueInformationRequest
{
message c1: ueInformationRequest-r9: {
rrc-TransactionIdentifier 0,
criticalExtensions c1: ueInformationRequest-r9: {
rach-ReportReq-r9 FALSE,
rlf-ReportReq-r9 TRUE
}
}
}
ueInformationRequest
{
message c1: ueInformationResponse-r9: {
rrc-TransactionIdentifier 0,
criticalExtensions c1: ueInformationResponse-r9: {
rlf-Report-r9 {
measResultLastServCell-r9 {
rsrpResult-r9 8,
rsrqResult-r9 0
},
measResultNeighCells-r9 {
measResultListEUTRA-r9 {
{
carrierFreq-r9 3350,
measResultList-r9 {
{
physCellId 445,
measResult {
rsrpResult 18,
rsrqResult 13
}
},
{
physCellId 447,
measResult {
rsrpResult 16,
rsrqResult 3
}
},
{
physCellId 427,
measResult {
rsrpResult 14,
rsrqResult 5
}
},
{
physCellId 429,
measResult {
rsrpResult 13,
rsrqResult 7
}
}
}
}
}
},
failedPCellId-r10 cellGlobalId-r10: {
plmn-Identity {
mcc {
0,
0,
1
},
mnc {
0,
1
}
},
cellIdentity '1A2D001'H
},
connectionFailureType-r10 rlf,
basicFields-r11 {
c-RNTI-r11 '003D'H,
rlf-Cause-r11 t310-Expiry,
timeSinceFailure-r11 18
},
failedPCellId-v1250 {
tac-FailedPCell-r12 '0001'H
}
}
}
}
}