>
Home5G NRRRC — Radio Resource ControlRRC Procedures
🗂️ RRC — Radio Resource ControlIntermediate

RRC Connection Procedures in 5G NR

Setup, reconfiguration, release, re-establishment and resume — the core RRC flows with exact IEs.

📚 3GPP-basedTS 38.331

TS 38.331 organises its normative behaviour into procedures, and almost every one of them has the same five parts. Learning the shape once means you can read a procedure you have never seen before and know what questions to ask of it:

Contents
  1. 01What an RRC Procedure Is, and the Shape They All Share
  2. 02The Master Message Table
  3. 03RRC Connection Establishment
  4. 04RRC Connection Resume
  5. 05RRC Connection Release
  6. 06RRC Connection Re-establishment
  7. 07RRC Reconfiguration: the Big One
  8. 08Delta Configuration: Add, Modify, Release and the Need Codes
  9. 09What the gNB Decides Before It Answers
  10. 10Security Mode Command
  11. 11UE Capability Enquiry and Transfer
  12. 12UE Information Request and Response
  13. 13The Smaller Procedures
  14. 14A Whole Session, Procedure by Procedure
  15. 15The RRC Timer Landscape
  16. 16Failure Modes and What Each One Means
  17. 17Configuration Reference (ASN.1)
  18. 18Illustrative Message Traces
  19. 19Release Deltas: Rel-15 to Rel-18
  20. 20Reading RRC Procedures in Logs: A Checklist
  21. 21Glossary
  22. 22References

1. What an RRC Procedure Is, and the Shape They All Share

TS 38.331 organises its normative behaviour into procedures, and almost every one of them has the same five parts. Learning the shape once means you can read a procedure you have never seen before and know what questions to ask of it:

PartWhat it isWhere to find itWhy it matters at 2am
TriggerThe condition that makes one side start the procedure. Either an upper-layer request, a timer, a measurement, or the arrival of a message.The initiation sub-clause, e.g. TS 38.331 cl. 5.3.3.2 for establishmentThe trigger decides what a failure means. The same four messages mean different things depending on why they started -- exactly as in the companion 03 Random Access.
Message exchangeOne to three messages, almost always request / response, occasionally request / response / complete.The actions sub-clauses and clause 6.2.2 for the encodingsKnowing the expected reply is what lets you notice its absence, which is RRC's main error signal.
Key IEsThe fields that actually carry the intent, as opposed to the wrapper.Clause 6.2.2 (messages) and 6.3.2 (information elements)Most procedures have one or two IEs that decide everything, and several dozen that are wrapper.
Governing timerA T3xx that bounds the wait for the response.Clause 7.1, plus the IE that configures itThe timer expiry is the error message. See §15.
Failure behaviourWhat the initiating side does when the response does not arrive or cannot be applied.The expiry and failure sub-clausesAlmost always: discard, revert, and either try something cheaper or fall back to RRC_IDLE.

Table 1. The anatomy of an RRC procedure. Every section from §3 to §13 is organised around these five questions.

Two structural facts about RRC procedures are worth stating before any specific one. First, almost all of them are network-initiated. The UE initiates exactly four: establishment, resume, re-establishment, and the unsolicited reports (MeasurementReport, UEAssistanceInformation, FailureInformation, SCGFailureInformation). Everything else starts at the gNB. Second, there is almost no way to say no. There is no reconfiguration failure message in NR at all: a UE that cannot apply an RRCReconfiguration received on SRB1 reverts to its previous configuration and initiates re-establishment TS 38.331 cl. 5.3.5.8, so the way you learn that a reconfiguration was refused is that the connection restarts. The only explicit negative responses anywhere in the protocol are SecurityModeFailure, SCGFailureInformation and MCGFailureInformation.

Every RRC Procedure in One Session, Start to FinishEvery RRC Procedure in One Session, Start to FinishEstablishSecureCapabilityConfigureOperateEndUEgNBAMFRRCSetupRequestSRB0 / CCCH -- starts T3001RRCSetupSRB0 -- stops T300RRCSetupCompleteSRB1 -- carries the NAS Registration RequestNGAP INITIAL UE MESSAGESecurityModeCommandSRB1 -- integrity protected, not ciphered2SecurityModeCompleteSRB1 -- integrity protected AND cipheredUECapabilityEnquirySRB1 -- rat-Type nr, eutra-nr3UECapabilityInformationSRB1 -- segmented if over 9000 octetsRRCReconfigurationSRB2 + DRB 1 + measConfig, in one message4RRCReconfigurationCompleteSRB1 -- same rrc-TransactionIdentifierdata flows; the next four repeat as conditions warrantDLInformationTransferSRB2 -- a NAS PDU, RRC does not read it5MeasurementReportSRB1 -- unsolicited, measId 1, event A3UEAssistanceInformationSRB1 -- overheatingAssistance, if enabledRRCReconfigurationwith reconfigurationWithSync -- starts T3046RRCReconfigurationCompletesent in the target cell -- stops T304end of the sessionRRCReleaseSRB1 -- with or without suspendConfig7Steps 1-4 happen once, near the start; steps 5-6 repeat; step 7 happens once. Every one of the seven is a separate RRCprocedure with its own timer and its own failure behaviour, and the rest of this document takes them one at a time.
Figure 1. Seven procedures in the order a real session runs them. §14 walks the same sequence with the decisions and alternatives at each step.
💡
Key Point

The absence of a cause value in RRC failure messages is a deliberate design choice, not an oversight: a UE that cannot parse or apply a configuration may not be able to describe why in terms the network would understand, and a wrong cause value is worse than none. The practical consequence is that diagnosing a refused configuration always means diffing what you sent against what the UE said it supports. Keep the UECapabilityInformation next to the reconfiguration when you investigate.

2. The Master Message Table

Every RRC message, with the four facts you need before you can read it in a log: which direction it travels, which logical channel and SRB carry it, which procedure owns it, and which timer it starts or stops. Downlink first.

MessageChannel / SRBOwning procedureTimer effectDetail in
MIB
BCCH-BCHSystem information broadcast--18 MIB and SIB1 IEs
SIB1, SystemInformationBCCH-DL-SCHSystem information broadcast--17 System Information
Paging
PCCHPaging--19 Paging
RRCSetup
DL-CCCH / SRB0Connection establishmentstops T300§3
RRCReject
DL-CCCH / SRB0Establishment or resumestops T300 / T319, starts T302§3, §4
RRCResume
DL-DCCH / SRB1Connection resumestops T319§4, 14 RRC States
RRCRelease
DL-DCCH / SRB1Connection releasestops T319; starts T380 if suspendConfig; starts T320 if cellReselectionPriorities§5
RRCReestablishment
DL-DCCH / SRB1Re-establishmentstops T301§6, 16 RLM and RLF
RRCReconfiguration
DL-DCCH / SRB1 or SRB3Reconfigurationstarts T304 if reconfigurationWithSync; stops T316§7
SecurityModeCommand
DL-DCCH / SRB1AS security activation--§10, 27 AS Security Mode
UECapabilityEnquiry
DL-DCCH / SRB1Capability transfer--§11, 26 UE Capability
UEInformationRequest
DL-DCCH / SRB1UE information--§12
CounterCheck
DL-DCCH / SRB1Counter check--§13.4
MobilityFromNRCommand
DL-DCCH / SRB1Mobility from NRstarts T304§13.5
DLInformationTransfer
DL-DCCH / SRB1 or SRB2NAS transport--§13.1
DLInformationTransferMRDC
DL-DCCH / SRB1MR-DC transport--22 Handover Overview
DLDedicatedMessageSegment
DL-DCCH / SRB1RRC segmentation--13 RRC Overview
LoggedMeasurementConfiguration
DL-DCCH / SRB1Logged measurement configurationstarts the loggingDuration timer20 Measurements and Events

Table 2. Downlink RRC messages. Note that only two messages ever travel on DL-CCCH, and both of them are answers to a CCCH request (§9).

MessageChannel / SRBOwning procedureTimer effectDetail in
RRCSetupRequest
UL-CCCH / SRB0, 48 bitsConnection establishmentstarts T300§3
RRCResumeRequest
UL-CCCH / SRB0, 48 bitsConnection resumestarts T319§4, 14 RRC States
RRCResumeRequest1
UL-CCCH1 / SRB0, 64 bitsConnection resumestarts T319§4, 14 RRC States
RRCReestablishmentRequest
UL-CCCH / SRB0, 48 bitsRe-establishmentstarts T301§6, 16 RLM and RLF
RRCSystemInfoRequest
UL-CCCH / SRB0On-demand system information--17 System Information
RRCSetupComplete
UL-DCCH / SRB1Connection establishment--§3
RRCResumeComplete
UL-DCCH / SRB1Connection resume--§4
RRCReestablishmentComplete
UL-DCCH / SRB1Re-establishment--§6
RRCReconfigurationComplete
UL-DCCH / SRB1 or SRB3Reconfigurationstops T304§7
SecurityModeComplete
UL-DCCH / SRB1AS security activation--§10
SecurityModeFailure
UL-DCCH / SRB1AS security activation--§10
UECapabilityInformation
UL-DCCH / SRB1Capability transfer--§11
UEInformationResponse
UL-DCCH / SRB1UE information--§12
CounterCheckResponse
UL-DCCH / SRB1Counter check--§13.4
MeasurementReport
UL-DCCH / SRB1Measurement reporting--§13.2, 20 Measurements and Events
UEAssistanceInformation
UL-DCCH / SRB1UE assistance--§13.3
FailureInformation
UL-DCCH / SRB1Failure information--§16
SCGFailureInformation
UL-DCCH / SRB1SCG failure--16 RLM and RLF
MCGFailureInformation
UL-DCCH / SRB1 or SRB3MCG failurestarts T31616 RLM and RLF
ULInformationTransfer
UL-DCCH / SRB1 or SRB2NAS transport--§13.1
ULDedicatedMessageSegment
UL-DCCH / SRB1RRC segmentation--13 RRC Overview
MeasurementReportAppLayer
UL-DCCH / SRB4Application-layer measurement reporting (Rel-17)--13 RRC Overview
DedicatedSIBRequest
UL-DCCH / SRB1Dedicated system information request--17 System Information
LocationMeasurementIndication
UL-DCCH / SRB1Location measurement----

Table 3. Uplink RRC messages. Only five travel on CCCH, all five are fixed-length or nearly so, and all five are sent before the UE has a usable dedicated channel.

🔍
What You See In Logs

The two tables above are the fastest way to sanity-check a log. If you see a message on an SRB it does not belong on, you are either looking at a mislabelled trace or at a genuine implementation bug -- and the second is more common than it should be in split-gNB deployments, where the SRB ID IE on F1AP decides which PDCP entity handles the container (see the companion 13 RRC Overview §12).

3. RRC Connection Establishment

PurposeCreate an RRC connection and SRB1 where none existed, so that NAS signalling and, later, bearers can be set up.
TriggerUpper layers request a connection: a NAS Service Request, a registration procedure, an answer to CN paging, an emergency call, or a periodic registration update. Also used as the fallback when a resume or re-establishment cannot use a stored context (§9).
MessagesRRCSetupRequest (SRB0) -> RRCSetup (SRB0) -> RRCSetupComplete (SRB1). Or RRCSetupRequest -> RRCReject.
Key IEsue-Identity (a 5G-S-TMSI-Part1 if the UE has one, else a 39-bit random value); establishmentCause; then in the response radioBearerConfig establishing SRB1 and masterCellGroup; then in the Complete selectedPLMN-Identity, dedicatedNAS-Message, registeredAMF and s-NSSAI-List.
TimerT300, started when the request is submitted to lower layers, stopped on RRCSetup or RRCReject.
FailureT300 expiry: reset MAC, release the connection, store a connEstFailReport, return to RRC_IDLE and reselect. RRCReject: start T302 and wait. Neither is a radio link failure.

Table 4. RRC connection establishment, TS 38.331 clause 5.3.3.

The interesting field is establishmentCause, because it is the only thing the network knows about the UE's intent before any NAS message arrives, and it drives admission control and prioritisation:

ValueMeaningTypical admission treatment
emergency
An emergency callNever rejected. Admitted even over capacity, and even for a UE that fails authentication.
highPriorityAccess
A UE with a high-priority access classPreferential admission; exempt from most barring.
mt-Access
Answering a pagePreferential -- the network asked for this one, so rejecting it wastes the paging it already spent.
mo-Signalling
UE-originated signalling with no user dataOrdinary. Registration and periodic updates arrive here.
mo-Data
UE-originated user dataOrdinary; the first to be rejected under load.
mo-VoiceCall
UE-originated voicePreferential over mo-Data in most policies.
mo-VideoCall, mo-SMSAs named (Rel-15 additions to the LTE set)Policy-dependent.
mps-PriorityAccess
Multimedia Priority ServicePreferential, by regulation in some markets.
mcs-PriorityAccess
Mission Critical ServicePreferential, by regulation.
spare6 .. spare1Reserved -- six of the sixteen codepointsNever sent by a compliant UE. Seeing one means a decoder offset error or a non-compliant device.

Table 5. EstablishmentCause, TS 38.331 clause 6.3.2. Sixteen enumerated values, four bits, no extension marker -- so the set is frozen for the life of the release.

📘
Spec Detail

establishmentCause is UE-asserted and unverified. It arrives on SRB0, before security, before authentication, before the network knows anything about the subscriber. A UE claiming emergency gets admitted on that claim alone, and the claim is checked -- if at all -- much later, at NAS level. This is by design (emergency calls must work for unauthenticated devices) and it is also why access-class barring and Unified Access Control operate on the broadcast side, in the UE, rather than on the network's evaluation of the cause.

One structural detail that matters when reading a split-gNB log: RRCSetup is built by the gNB-CU-CP but its masterCellGroup is authored by the gNB-DU and copied in verbatim. A malformed cell group in an RRCSetup is therefore a DU-side problem visible only in a CU-side decode. The companion 13 RRC Overview §12.2 has the full division of labour.

4. RRC Connection Resume

PurposeRestore a connection from RRC_INACTIVE using a context both sides already hold, instead of building a new one.
TriggerUplink data or signalling; an answer to RAN paging; T380 expiry or reselection out of the RAN Notification Area (in which case resumeCause is rna-Update).
MessagesRRCResumeRequest or RRCResumeRequest1 (SRB0) -> RRCResume (SRB1) -> RRCResumeComplete (SRB1). Also answerable with RRCSetup, RRCRelease or RRCReject -- see §9.
Key IEsresumeIdentity (the 24-bit shortI-RNTI or the 40-bit fullI-RNTI, chosen by whether the cell broadcasts useFullResumeID); resumeMAC-I, a 16-bit truncated MAC-I computed with the old K_RRCint; resumeCause. In the response, masterCellGroup, optional radioBearerConfig and measConfig, and optionally fullConfig.
TimerT319, started on sending the request.
FailureT319 expiry: go to RRC_IDLE with release cause RRC resume failure and discard the stored context. An RRCSetup answer means the context was unusable; an RRCReject answer leaves the UE in RRC_INACTIVE.

Table 6. RRC connection resume, TS 38.331 clause 5.3.13.

Resume is covered in depth in the companion 14 RRC States, including the key re-derivation, the RAN Notification Area, and the context fetch over Xn when the UE resumes at a different gNB. Two procedure-level points belong here.

A resume response may carry a full configuration. RRCResume is not obliged to restore the stored context unchanged. It can contain a radioBearerConfig, a masterCellGroup and a measConfig, and it can carry fullConfig, which tells the UE to throw the stored configuration away entirely and treat the message as absolute (§8.4). A network that has changed its bearer configuration since the UE was suspended uses exactly this.

The response arrives on SRB1, already protected. The UE restores SRB1 and derives the new keys before it has any response, which is why RRCResume and RRCRelease can be delivered protected on SRB1 while RRCSetup and RRCReject arrive in the clear on SRB0. In a log, the SRB the answer arrives on is a one-glance verdict on whether the stored context was used at all.

5. RRC Connection Release

PurposeEnd the RRC connection, either to RRC_IDLE or -- with suspendConfig -- to RRC_INACTIVE. Optionally also steer the UE's subsequent idle-mode behaviour.
TriggerAlways a network decision: an inactivity timer, admission or load control, a NAS-driven release, or a UE releasePreference the gNB chose to honour.
MessagesRRCRelease (SRB1). There is no response and no acknowledgement at RRC level.
Key IEssuspendConfig, redirectedCarrierInfo, cellReselectionPriorities (with t320), deprioritisationReq.
TimerStarts T380 if suspendConfig is present; starts T320 if cellReselectionPriorities is present; stops T319 if a resume was in progress.
FailureNone defined -- the message is unacknowledged. If it is lost, the UE stays where it was and eventually declares RLF.

Table 7. RRC connection release, TS 38.331 clause 5.3.8.

The three steering IEs are worth recognising in a log because each has an effect that outlives the connection by minutes:

IESub-fieldsDuration of the effectWhat it does to the UE
redirectedCarrierInfo
CHOICE of nr (CarrierInfoNR: carrierFreq, ssbSubcarrierSpacing, optional smtc) or eutra (EUTRA-CarrierInfo)One cell-selection attemptThe UE tries cell selection on the indicated carrier first, before falling back to its normal reselection priorities. A one-shot nudge, not a lasting policy.
cellReselectionPriorities
freqPriorityListNR, freqPriorityListEUTRA, t320t320: min5 .. min180Replaces the broadcast cellReselectionPriority per frequency with per-UE values. On t320 expiry the UE reverts to the broadcast set -- which looks like spontaneous re-steering if you are not watching for it.
deprioritisationReq
deprioritisationType = frequency or nr; deprioritisationTimer = min5, min10, min15, min305 to 30 minutesThe UE deprioritises either the current frequency or all of NR. The nr form moves the UE to LTE for the duration.
suspendConfig
See the companion 14 RRC States §4.1Until resumed or T319/T380 intervenesThe UE enters RRC_INACTIVE instead of RRC_IDLE.

Table 8. The four optional IEs of RRCRelease. A release with none of them is a plain release; a release with all four is a mobility policy.

⚠️
Common Pitfall

deprioritisationReq with deprioritisationType = nr is the most consequential single field in RRCRelease and the easiest to overlook. It removes the UE from NR for up to half an hour, and the effect on a KPI dashboard is both dramatic and delayed -- NR traffic falls for thirty minutes after whatever caused it, long after anyone would think to correlate the two. If NR attach rates dip on a schedule nobody can explain, count deprioritisationReq in your release messages first.

6. RRC Connection Re-establishment

PurposeRecover a connection after a failure, reusing the stored context, without going all the way back to RRC_IDLE and a NAS Service Request.
TriggerRadio link failure (T310 expiry, RLC maximum retransmissions, or random access problem on the SpCell); handover failure (T304 expiry); integrity check failure on an SRB; RRCReconfiguration failure. All of these are covered in the companion 16 RLM and RLF.
MessagesRRCReestablishmentRequest (SRB0, 48 bits) -> RRCReestablishment (SRB1) -> RRCReestablishmentComplete (SRB1). May instead be answered with RRCSetup.
Key IEsIn the request: c-RNTI and physCellId of the cell the UE failed in, a 16-bit shortMAC-I, and reestablishmentCause. In the response: only nextHopChainingCount.
TimerT311 bounds the cell selection that precedes the request; T301 bounds the wait for the response.
FailureT311 or T301 expiry: go to RRC_IDLE with release cause RRC connection failure and store an RLF report.

Table 9. RRC connection re-establishment, TS 38.331 clause 5.3.7.

💡
Key Point

RRCReestablishment carries nothing but the chaining count -- nextHopChainingCount and nothing else: no bearer configuration, no cell group, no measurement configuration. All it does is re-key SRB1. Everything else the UE needs comes in a separate RRCReconfiguration immediately afterwards, and until that arrives the UE has SRB1 and nothing else: SRB2 and every DRB are suspended. That is why a successful re-establishment still shows a user-plane gap, and why the reconfiguration that follows it usually carries fullConfig when the target gNB is not the one that failed.

reestablishmentCause has four codepoints -- reconfigurationFailure, handoverFailure, otherFailure and one spare -- so two bits. It is coarse on purpose: the detail lives in the RLF report the UE stores and later surrenders (§12), not in the request it sends before security is available. The 48-bit budget of the request and the shortMAC-I computation are worked through in the companion 16 RLM and RLF §9.

7. RRC Reconfiguration: the Big One

PurposeChange anything about the UE's configuration: add, modify or release bearers; reconfigure MAC, RLC, PDCP, SDAP and the physical layer; set up or change measurements; update security keys; and -- through reconfigurationWithSync -- move the UE to a different cell.
TriggerAnything the network decides. There is no single trigger, which is why the message is so hard to reason about generically.
MessagesRRCReconfiguration (SRB1, or SRB3 in NR-DC) -> RRCReconfigurationComplete. That is the only response; there is no failure message -- see the Failure row.
Key IEsradioBearerConfig, secondaryCellGroup, measConfig, and inside the Rel-15 non-critical extension masterCellGroup, fullConfig, dedicatedNAS-MessageList, masterKeyUpdate, otherConfig.
TimerT304 if reconfigurationWithSync is present. Otherwise none -- the procedure is bounded only by a gNB-internal guard timer.
FailureThe UE continues with the configuration in force before the message and initiates re-establishment TS 38.331 cl. 5.3.5.8 -- or, if the message arrived on SRB3, sends SCGFailureInformation with cause scg-reconfigFailure. If reconfigurationWithSync was present and random access at the target fails, T304 expiry instead: revert to the source configuration and re-establish.

Table 10. RRC reconfiguration, TS 38.331 clause 5.3.5. One message, essentially unlimited scope.

7.1 The IE tree

Structure of an RRCReconfigurationWhat Is Actually Inside an RRCReconfigurationBoth cell groups share one CellGroupConfig structure; masterCellGroup lives one level down the nonCriticalExtension chain, secondaryCellGroup does notMessageHeaderRoot IEsSecond levelCellGroupConfigDeepestRRCReconfigurationrrc-TransactionIdentifierINTEGER (0..3) -- 2 bitscriticalExtensionsCHOICE -- 1 bitradioBearerConfigNeed MsecondaryCellGroupNeed MmeasConfigNeed MnonCriticalExtv1530srb / drbToAddMod + ToRelease+ securityConfigCellGroupConfig(secondary)OCTET STRINGmeasObjectreportConfigmeasIdToAddMod + ToRemovemasterCellGroupfullConfigNAS listmasterKeyUpdaterlc-BearerToAddMod / ToReleaseone per bearer, per cell groupmac-CellGroupConfigDRX, BSR, PHR, SRphysicalCellGroupConfigHARQ ACK codebook, powerspCellConfig+ sCellToAddModListspCellConfigDedicated(ServingCellConfig)BWPs, PDCCH, PDSCH, PUCCH, PUSCH, CSIreconfigurationWithSyncnewUE-Identity, t304, rach-ConfigDedicatedThe asymmetry in the fourth row is a standardisation fossil: secondaryCellGroup is a root IE and masterCellGroup is a Rel-15non-critical extension, even though the master group is the one every UE always has. See the companion 13 RRC Overview,section 8.
Figure 2. The structure of an RRCReconfiguration. Both cell groups use the same CellGroupConfig type, but they enter the message at different depths -- secondaryCellGroup is a root IE and masterCellGroup is a Rel-15 non-critical extension.
IENeedContainsAuthored byWhat it configures
radioBearerConfig
Msrb-ToAddModList, srb3-ToRelease, drb-ToAddModList, drb-ToReleaseList, securityConfiggNB-CU-CPPDCP and SDAP per bearer, plus the security algorithms and keyToUse. This is the bearer half of a bearer change.
masterCellGroup
M (in the v1530 extension)An OCTET STRING containing a CellGroupConfig: rlc-BearerToAddModList / ToReleaseList, mac-CellGroupConfig, physicalCellGroupConfig, spCellConfig, sCellToAddModList / ToReleaseListgNB-DU, copied in verbatim by the CU-CPRLC, MAC and PHY for the master cell group. This is the lower-layer half of a bearer change.
secondaryCellGroup
MThe same CellGroupConfig type, for the SCG in NR-DCThe Secondary Node, relayed by the MNThe secondary cell group. Absent for a UE without dual connectivity.
measConfig
MmeasObjectToAddModList / ToRemoveList, reportConfigToAddModList / ToRemoveList, measIdToAddModList / ToRemoveList, quantityConfig, measGapConfig, s-MeasureConfiggNB-CU-CPWhat to measure, when to report it, and the measurement gaps. See the companion 20 Measurements and Events and 21 Measurement Gaps and SMTC.
masterKeyUpdate
N (v1530)keySetChangeIndicator, nextHopChainingCount, nas-ContainergNB-CU-CPRe-key the AS security context, horizontally or vertically. See the companion 27 AS Security Mode.
fullConfig
N (v1530)ENUMERATED {true} -- one bitgNB-CU-CPDiscard everything and treat the message as absolute (§8.4). The single most consequential bit in the message.
dedicatedNAS-MessageList
N (v1530)A list of OCTET STRINGsthe AMF, relayedPiggybacks NAS messages so a bearer setup and its NAS accept arrive together.
otherConfig
M (v1530)delayBudgetReportingConfig, overheatingAssistanceConfig, and the Rel-16 preference configurationsgNB-CU-CPEnables the UE assistance reports of §13.3. Nothing the UE volunteers is volunteered unless enabled here.
conditionalReconfiguration
M (v1610)condReconfigToAddModList / ToRemoveList, each entry carrying execution conditions and a nested RRCReconfigurationgNB-CU-CPConditional handover: a whole reconfiguration stored for later, executed by the UE when a measurement condition fires. See the companion 25 Conditional HO and DAPS.

Table 11. The IEs of RRCReconfiguration that carry real intent. The Authored by column is what makes reconfiguration bugs hard in a split gNB: one message, three authors.

7.2 The two halves of a bearer change

A single logical change -- "add a DRB" -- requires edits in two different IEs authored by two different nodes. radioBearerConfig carries the PDCP and SDAP configuration and the DRB identity; masterCellGroup -> rlc-BearerToAddModList carries the RLC configuration and the logical channel, with a servedRadioBearer field pointing back at the DRB identity. The two must agree, and nothing in the protocol checks that they do.

⚠️
Common Pitfall

The classic failure is a half-done release: the gNB puts DRB 2 in drb-ToReleaseList but forgets the corresponding entry in rlc-BearerToReleaseList. A well-formed release populates both. The observable symptom is an RLC entity and logical channel that persist with nothing above them -- MAC continues to include the logical channel in logical channel prioritisation, and BSR reporting may account for a bearer that no longer exists. In a split gNB the two lists are authored by the CU-CP and the DU respectively, which is precisely why they drift apart.

7.3 reconfigurationWithSync

This is the only IE in RRC that makes a UE change cell. It lives deep: masterCellGroup -> spCellConfig -> reconfigurationWithSync. Its presence changes the whole character of the procedure -- the UE resets MAC, re-establishes PDCP and RLC, applies a new C-RNTI, runs random access on the target, and sends its RRCReconfigurationComplete in the target cell.

FieldTypeNeedWhat it does
spCellConfigCommon
ServingCellConfigCommon
MThe target cell's common configuration -- physCellId, SSB position, TDD pattern, initial BWPs, rach-ConfigCommon. Enough for the UE to access a cell it has only measured.
newUE-Identity
RNTI-Value, INTEGER (0..65535)mandatoryThe C-RNTI the UE will use in the target. Assigned before the UE has ever transmitted there, which is what makes contention-free access possible.
t304
ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, ms10000}
mandatoryBounds the whole execution. Expiry means handover failure.
rach-ConfigDedicated
CHOICE of uplink or supplementaryUplink, each a RACH-ConfigDedicatedNA dedicated preamble and occasion, i.e. contention-free random access. Absent means the UE uses contention-based access on the target -- slower and collision-prone. See the companion 03 Random Access.
smtc
SSB-MTC
S (extension)The SSB measurement timing configuration to use in the target before a measConfig arrives.

Table 12. ReconfigurationWithSync, TS 38.331 clause 6.3.2. Note that newUE-Identity and t304 are mandatory -- there is no cell-change without a pre-assigned identity and a deadline.

A Reconfiguration Carrying reconfigurationWithSyncA Reconfiguration Carrying reconfigurationWithSyncDecideReconfigureExecuteFailUEsource gNBtarget gNBRRC_CONNECTED on the source. SRB1, SRB2, DRB 1and DRB 2 active. C-RNTI 0x4601.MeasurementReportmeasId 1, event A3, neighbour PCI 118XnAP HANDOVER REQUESTthe source's view of the UE contextXnAP HANDOVER REQUEST ACKNOWLEDGEtarget-built RRCReconfiguration, in a containerRRCReconfigurationSRB1, built by the TARGET, relayed by the source1masterCellGroup -> spCellConfig -> reconfigurationWithSync:newUE-Identity 0x7C12 | t304 ms200 | spCellConfigCommon |rach-ConfigDedicated (CFRA preamble 48)apply the whole configuration, reset MAC,re-establish PDCP and RLC for SRB1 / SRB2 / DRBs,derive new keys from the NCC in masterKeyUpdateMSG1 CFRA preamble 48on the target -- see the companion 03 Random Access2MSG2 RARTA command + UL grant, C-RNTI 0x7C12 already known3RRCReconfigurationCompleteSRB1 on the target -- stops T3044failure variant -- T304 expiresCFRA attempts exhaustedno RAR, or no successful contention resolutionT304 expiry -> revert to the SOURCE configuration,then initiate re-establishment (T311, T301).Store a Radio Link Failure report.T304ms200reconfigurationWithSync is the only IE in RRC that makes the UE change cell. Note who authors the message: the targetbuilds it, the source only relays it -- so a malformed handover reconfiguration is a target-side bug seen in a source-sidelog. See the companion 22-25 handover documents.
Figure 3. A reconfiguration with reconfigurationWithSync, and its failure path. The message is built by the target and relayed unmodified by the source, so its contents are a target-side artefact appearing in a source-side log.
⚠️
Common Pitfall

rach-ConfigDedicated absent from a reconfigurationWithSync means the handover will use contention-based random access at the target. That is legal and it works, but it adds a contention-resolution round trip and a collision probability to a procedure bounded by T304 -- and T304 was probably sized assuming contention-free access. The symptom is handover failures that correlate with target-cell load rather than with radio conditions. Check whether the target is running out of dedicated preambles: totalNumberOfRA-Preambles in its RACH-ConfigCommon bounds the contention-based pool and the remainder is all the scheduler has to hand out.

7.4 What the first octet tells you

The First Two Octets of an RRCReconfiguration Tell You What Is In ItThe First Two Octets of an RRCReconfiguration Tell You What Is In ItUnaligned PER: two bits of transaction id, then presence bitmaps, and nothing is octet-alignedbit76543210Oct 1txnId = 01010101Oct 2010111len = 2Oct 3srb-ToAddModList content, then everything else ...Octet 1: gold = rrc-TransactionIdentifier (2 bits). Purple = the criticalExtensions CHOICE index (0 = rrcReconfiguration).Then the five-bit preamble bitmap of RRCReconfiguration-IEs -- green radioBearerConfig present, teal secondaryCellGroupabsent, orange measConfig present, grey lateNonCriticalExtension absent and nonCriticalExtension present. Octet 2: blue =RadioBearerConfig's extension bit, then its own five-bit preamble (srb-ToAddModList, srb3-ToRelease, drb-ToAddModList,drb-ToReleaseList, securityConfig), then the list-length determinant.
Figure 4. The presence bitmaps at the front of an RRCReconfiguration. Everything about which IEs are in the message is decided in the first eight bits, before any content.
🧮
Worked Calculation

Bit budget for the header of an RRCReconfiguration:

rrc-TransactionIdentifier INTEGER (0..3) ............ 2 bits

criticalExtensions CHOICE, 2 alternatives ............ 1 bit

RRCReconfiguration-IEs preamble bitmap:

radioBearerConfig present? ......................... 1 bit

secondaryCellGroup present? ....................... 1 bit

measConfig present? ............................... 1 bit

lateNonCriticalExtension present? ................. 1 bit

nonCriticalExtension present? ..................... 1 bit

--------------------------------------------------------------

Header total ....................................... 8 bits

Exactly one octet, and it answers "what is in this message" without decoding any content. The second octet then opens RadioBearerConfig: one extension-marker bit plus its own five-bit preamble (srb-ToAddModList, srb3-ToRelease, drb-ToAddModList, drb-ToReleaseList, securityConfig), leaving two bits for the first list's length determinant.

8. Delta Configuration: Add, Modify, Release and the Need Codes

RRC configuration is a delta protocol. An RRCReconfiguration does not describe the configuration the UE should have; it describes the change from the configuration the network believes the UE already has. Two mechanisms express that delta, and misunderstanding either produces bugs that surface several messages later.

8.1 The list mechanism

Every collection in RRC configuration is expressed as a pair of lists: an add-or-modify list keyed by an identity, and a release-or-remove list of bare identities. The rules are simple and the consequences are not:

1. Release lists are processed first. Within each list-based IE the UE handles the ToReleaseList or ToRemoveList before the ToAddModList TS 38.331 cl. 5.3.5.5, 5.3.5.6, 5.5.2. Releasing and re-adding the same identity in one message is therefore a legal, well-defined way to replace an object.

2. An entry in an add-or-modify list whose identity already exists is a modification, not a replacement. Fields present in the entry are applied; fields absent from it follow their own Need codes. It is not a clean slate.

3. An identity absent from both lists is untouched. This is the default and it is why a reconfiguration that adds one bearer can be eighty octets rather than two thousand.

4. The naming is inconsistent across the spec. radioBearerConfig and CellGroupConfig use ToReleaseList; measConfig uses ToRemoveList. Grepping for the wrong one is a genuine and common waste of an afternoon.

8.2 The Need codes

The list mechanism handles collections. Individual optional fields are governed by Need codes, which are ASN.1 comments in TS 38.331 and carry no encoding at all -- they exist only in the specification text, and they define what the absence of a field means:

CodeFull nameAbsent meansTypical useThe mistake it causes
Need MMaintainKeep the currently configured value. The field is genuinely optional on a modification.measConfig, radioBearerConfig, mac-CellGroupConfig -- anything you might want to leave aloneNone, usually. This is the intuitive behaviour and the one people assume applies everywhere.
Need NNo actionNo action. The field is a one-shot instruction that has no persistent state.reestablishPDCP, recoverPDCP, fullConfig, redirectedCarrierInfo, dedicatedNAS-MessageListExpecting a Need N field to persist. reestablishPDCP re-establishes PDCP once; it is not a mode.
Need RReleaseRelease the corresponding configuration. Absence is an instruction, not silence.t380 in suspendConfig, suspendConfig in RRCRelease, outOfOrderDelivery in PDCP-ConfigThe expensive one. Omitting a Need R field deletes what it configured. A gNB that rebuilds a suspendConfig without t380 has just disabled periodic RAN Notification Area updates.
Need SSpecified elsewhereThe value is specified somewhere else -- a default in the spec, or another IE.t-Reordering in PDCP-Config, rlmInSyncOutOfSyncThresholdAssuming a spec default is a vendor default. Read the clause.
Cond XConditional presencePresence is mandatory under condition X and absent otherwise. Most commonly Cond Setup: mandatory when the object is created, omissible when it is modified.discardTimer, pdcp-SN-SizeUL and pdcp-SN-SizeDL in PDCP-Config; cnAssociation in DRB-ToAddModSending a modification without a Cond Setup field and expecting a reset. It keeps the old value -- which is usually what you wanted, but it is not a reset.

Table 13. The Need codes, TS 38.331 clause 6.1. These are comments in the ASN.1 and are the entire definition of delta semantics. Two fields side by side in the same SEQUENCE can behave completely differently when absent.

How a UE Applies a Reconfiguration, and What Happens When It CannotHow a UE Applies a Reconfiguration, and What Happens When It CannotTS 38.331 cl. 5.3.5.3 and the Need codes of cl. 6.1RRCReconfiguration received on SRB1yesRelease the whole dedicatedconfiguration except SRB1and the security context;apply the default configfullConfigpresent?no -> deltaProcess every ToReleaseList / ToRemoveList first:release each listed identityThen every ToAddModList: if the identity exists,modify it; if it does not, add itFor every absent optional field, apply its Need code:M keep / N no action / R release / S defaultyesCommit. SendRRCReconfigurationCompletewith the same transaction idnoRevert to the configuration in forcebefore this message, then re-establish(cl. 5.3.5.8). No failure message exists.Every field comprehended,in range and supported?Two things decide almost every delta-configuration bug. Release lists are processed before add/modify lists, so releasingand re-adding the same identity in one message is a legal way to replace it -- and an absent field does not mean"unchanged", it means whatever that field's Need code says.
Figure 5. The order the UE applies things in, and the two ways out. The revert-on-failure at the bottom right is atomic: the UE either applies the whole message or none of it.

8.3 A worked example

This is where delta configuration is best understood: one starting configuration, one message, and the resulting configuration worked out field by field. Start with a UE that has three DRBs and three measurement identities.

BEFORE -- the configuration in force
SRBs .................. SRB1, SRB2

DRBs
  DRB 1   pdu-Session 1, QoS flow 1   pdcp: discardTimer ms100,
                                            SN-SizeUL/DL len18bits
  DRB 2   pdu-Session 1, QoS flow 2   pdcp: discardTimer ms50,
                                            SN-SizeUL/DL len12bits
  DRB 3   pdu-Session 2, QoS flow 5   pdcp: discardTimer infinity,
                                            SN-SizeUL/DL len18bits

RLC bearers (in masterCellGroup)
  LCID 4 -> DRB 1     LCID 5 -> DRB 2     LCID 6 -> DRB 3

measConfig
  measObjectId 1   NR, ARFCN 632628 (f1)
  measObjectId 2   NR, ARFCN 646666 (f2)
  reportConfigId 1 eventA3, offset 3 dB, hysteresis 1 dB, TTT 320 ms
  reportConfigId 2 eventA2, threshold -110 dBm
  measId 1  ->  measObjectId 1,  reportConfigId 1
  measId 2  ->  measObjectId 2,  reportConfigId 1
  measId 3  ->  measObjectId 1,  reportConfigId 2

Listing 1. The starting configuration. Everything below is expressed relative to this.

Now the reconfiguration. Note how little it says:

THE MESSAGE -- an 88-octet delta
RRCReconfiguration
  rrc-TransactionIdentifier ......... 2
  radioBearerConfig
    drb-ToReleaseList ............... { 2 }
    drb-ToAddModList
      DRB-ToAddMod
        drb-Identity ................ 3        -- exists -> MODIFY
        pdcp-Config
          drb  discardTimer ......... ms100    -- was infinity
               headerCompression ... notUsed
          -- pdcp-SN-SizeUL/DL absent: Cond Setup, so KEPT at len18bits
      DRB-ToAddMod
        drb-Identity ................ 4        -- new -> ADD
        cnAssociation = sdap-Config
          pdu-Session ............... 2
          sdap-HeaderDL/UL .......... present
          mappedQoS-FlowsToAdd ...... { 6 }
        pdcp-Config
          drb  discardTimer ......... ms100
               pdcp-SN-SizeUL/DL .... len18bits   -- mandatory at setup
               headerCompression ... notUsed
  nonCriticalExtension
    masterCellGroup
      rlc-BearerToReleaseList ....... { 5 }     -- the other half of
                                                -- releasing DRB 2
      rlc-BearerToAddModList
        RLC-BearerConfig  logicalChannelIdentity 7
                          servedRadioBearer = drb-Identity 4
  measConfig
    measObjectToRemoveList .......... { 2 }
    measObjectToAddModList
      MeasObjectToAddMod  measObjectId 3, NR ARFCN 620000 (f3)
    reportConfigToAddModList
      ReportConfigToAddMod  reportConfigId 3, eventA5
    measIdToAddModList
      MeasIdToAddMod  measId 4 -> measObjectId 3, reportConfigId 3

Listing 2. The reconfiguration. Six list entries, and note what is not here: no mention of DRB 1, of SRB1 or SRB2, of measId 1, 2 or 3, or of quantityConfig.

And the result, worked out one object at a time:

ObjectAppears in the message asResultWhy
SRB1, SRB2not mentionedunchangedAbsent from both lists means untouched.
DRB 1not mentionedunchangedSame. discardTimer stays ms100, SN stays 18 bits.
DRB 2
drb-ToReleaseList { 2 }
releasedPDCP and SDAP entities released, drb-Identity 2 freed.
LCID 5
rlc-BearerToReleaseList { 5 }
releasedThe other half of releasing DRB 2 -- a separate list in a separate IE (§7.2).
DRB 3drb-ToAddModList, identity existsdiscardTimer becomes ms100; the SN size stays at len18bitsThe identity exists, so this is a modification. pdcp-SN-SizeUL/DL are Cond Setup: absent on a modification means keep.
DRB 4drb-ToAddModList, identity is newaddedNew identity, so cnAssociation and the SN sizes are mandatory and present.
LCID 7
rlc-BearerToAddModList
added, serving DRB 4servedRadioBearer ties it to drb-Identity 4.
measObject 1not mentionedunchangedUntouched.
measObject 2
measObjectToRemoveList { 2 }
removedExplicit.
measObject 3
measObjectToAddModList
addedExplicit.
reportConfig 1, 2not mentionedunchangedUntouched.
reportConfig 3
reportConfigToAddModList
addedExplicit.
measId 1not mentionedunchangedUntouched.
measId 2not mentioned anywhereremovedIt referenced measObjectId 2. Removing a measObject removes every measId associated with it TS 38.331 cl. 5.5.2.4. Nothing in the message says so.
measId 3not mentionedunchangedUntouched.
measId 4
measIdToAddModList
addedExplicit.
quantityConfig, measGapConfignot mentionedunchangedBoth are Need M.

Table 14. The resulting configuration, object by object. Sixteen objects, one of which changed without appearing in the message at all.

🧮
Worked Calculation

Accounting for the message:

list entries carried in the message ............... 6

drb-ToReleaseList 1

drb-ToAddModList 2

rlc-BearerToReleaseList 1

rlc-BearerToAddModList 1

measObjectToRemoveList 1 ... plus 3 add/mod entries

objects whose state actually changed .............. 8

released: DRB 2, LCID 5, measObject 2, measId 2

modified: DRB 3

added: DRB 4, LCID 7, measObject 3, reportConfig 3, measId 4

The discrepancy is measId 2, removed as a side effect of removing the measObject it pointed at. If the network wanted to keep measuring f2 under a different object identity, it had to re-add measId 2 in the same message -- and if it wanted to modify measObject 2 rather than replace it, it should have put measObject 2 in measObjectToAddModList and not in measObjectToRemoveList at all. Those two routes produce an identical measObject and completely different measId sets.

⚠️
Common Pitfall

Remove-and-re-add is not equivalent to modify, and the difference is invisible in the resulting object. Putting measObjectId 2 in the remove list and then in the add/mod list gives you a measObject 2 identical to a modified one -- and silently destroys every measId that referenced it. Symptom: a measurement report you configured and tested that stops firing after some unrelated reconfiguration, with no error anywhere. Always prefer modification over remove-and-re-add for measurement objects, and if you must remove one, re-add its measIds explicitly.

8.4 fullConfig, and when to reach for it

fullConfig is an ENUMERATED {true} -- one bit -- that switches the message from delta to absolute. When it is present the UE releases the entire dedicated configuration, applies the default configuration from TS 38.331 clause 9.2, and then applies the message. Two things survive: SRB1's PDCP and RLC entities, and the AS security context, because both are needed to have delivered the message in the first place.

Delta reconfigurationfullConfig reconfiguration
Typical encoded size50 - 300 octets1500 - 4000 octets, sometimes more
What the UE keepsEverything not mentionedOnly SRB1 and the security context
User-plane interruptionNone, unless reestablishPDCP or recoverPDCP is set per bearerEvery DRB is released and re-established: PDCP state, ROHC context and reordering buffers all reset
When it is correctAny change within one gNB that has a coherent view of the UE's configurationInter-RAT handover into NR; handover between nodes that cannot exchange a delta; re-establishment at a node that lacks the full context; recovery from a suspected configuration mismatch
When it is a mistakeWhen the two sides' views have already diverged -- a delta against the wrong baseline compounds the problemAny routine change. It works, which is exactly why it gets used as a reflex, and it costs a user-plane gap every time

Table 15. Delta versus full. fullConfig is the correct answer to "I do not know what this UE has" and the wrong answer to everything else.

🧮
Worked Calculation

Cost of reaching for fullConfig when a delta would do. Take the worked example of §8.3 -- add one DRB, modify one, release one:

as a delta ................................ 88 octets

as fullConfig, the same end state must restate

SRB2, DRB 1, DRB 3, DRB 4, the whole

masterCellGroup and the whole measConfig .. ~2 100 octets

size ratio ................................ ~24x

On the air that is one PDSCH transmission against two or three, which nobody would notice. The cost that matters is different: fullConfig releases and re-establishes every DRB, so PDCP state, ROHC context and reordering buffers all reset on all of them. A delta with no reestablishPDCP causes zero interruption. The ratio in bytes is 24:1; the ratio in user-visible interruption is not a ratio at all, because one of the two numbers is zero.

8.5 The failure path, and why it is so expensive

If the UE cannot comply with any part of the message it must apply none of it. It continues with the configuration that was in force before the message arrived -- and then, because NR provides no reconfiguration failure message, it initiates the connection re-establishment procedure TS 38.331 cl. 5.3.5.8.

Where the message arrivedWhat the UE doesWhat you see
SRB1, MCG transmission not suspendedContinue with the pre-message configuration, then initiate re-establishment (clause 5.3.7)An RRCReestablishmentRequest on SRB0 in some cell, with reestablishmentCause = reconfigurationFailure. Seconds of user-plane outage.
SRB1, MCG transmission suspendedContinue with the pre-message configuration, then report an MCG failure or, if that is not possible, go to RRC_IDLEMCGFailureInformation over the SCG, or a UE that simply disappears.
SRB3, i.e. the reconfiguration was for the secondary cell groupContinue with the pre-message configuration, then initiate the SCG failure information procedureSCGFailureInformation with failureType = scg-reconfigFailure. The MCG connection survives.

Table 16. What happens when a UE cannot comply, TS 38.331 clause 5.3.5.8. Only the SRB3 case produces a message that names the problem, and only because the SCG failure procedure already existed.

💡
Key Point

NR has no reconfiguration failure message at all -- there is no RRCReconfigurationFailure anywhere in TS 38.331. This surprises people who come to the protocol from the abstract, and it changes the diagnostic picture completely: a reconfiguration the UE cannot apply does not cost you a message, it costs you the connection. The evidence is an RRCReestablishmentRequest carrying reestablishmentCause = reconfigurationFailure, and that two-bit cause value is the entire error report. If you are looking for a failure message and not finding one, look for a re-establishment instead.

Reversion is atomic and it is the UE's obligation, but the network has no way to confirm it happened. After a refused reconfiguration the two sides should agree on the pre-message configuration -- and if the UE's revert was partial, they do not, and every subsequent delta is computed against a baseline the UE does not have. Since the recovery path is a re-establishment anyway, the target gNB will normally follow RRCReestablishment with a fullConfig reconfiguration: it costs an interruption that has already been paid for, and it guarantees agreement.

9. What the gNB Decides Before It Answers

Three of the five uplink CCCH messages are requests for a connection, and the gNB has to choose its answer before it knows very much. The choice is worth drawing out because the answer is the most informative single field in any access trace.

gNB answer selection for a CCCH requestWhat the gNB Decides Before It Answers a CCCH RequestTS 38.331 cl. 5.3.3, 5.3.13 and 5.3.7 -- three requests, five possible answersA UL-CCCH message arrives in MSG3 or MSGAwhich message?Admission andload OK?Context found ANDresumeMAC-I verifies?Context found ANDshortMAC-I verifies?RRCSetupRequestRRCResumeRequest[1]RRCReestablishmentRequestyesRRCSetupon SRB0noRRCReject+ waitTime-> T302yesRRCResume on SRB1 --or RRCRelease, with orwithout suspendConfig,if the gNB declinesyesRRCReestablishmenton SRB1 -- carriesonly the NCC, nobearer configurationAny verification failure -> fall back toRRCSetup, in the clear on SRB0nonoBoth verification branches converge on the same fallback, which is why a fallback RRCSetup is ambiguous evidence: it says thenetwork could not use a stored context, not which context it was looking for. The SRB the answer arrives on resolves the rest --an answer on SRB0 means no context was used at all.
Figure 6. The answer selection. The two verification branches converge, which is why a fallback RRCSetup tells you that a stored context was unusable but not which one.
RequestWhat the gNB must checkAnswer if it passesAnswer if it failsWhere the answer travels
RRCSetupRequest
Admission control, cell load, Unified Access Control policy, whether the AMF is reachable
RRCSetup
RRCReject with a waitTimeSRB0 either way
RRCResumeRequest[1]That the I-RNTI resolves to a context (locally or over Xn), and that resumeMAC-I verifies against the stored K_RRCintRRCResume, or RRCRelease (with or without suspendConfig) if the gNB does not want the connectionRRCSetup -- fall back to establishmentSRB1 on success, SRB0 on fallback
RRCReestablishmentRequest
That the c-RNTI and physCellId identify a context, and that shortMAC-I verifiesRRCReestablishment, carrying only the NCCRRCSetup -- fall back to establishmentSRB1 on success, SRB0 on fallback

Table 17. Three requests, and what has to be true for each to be granted. The last column is the diagnostic shortcut: an answer on SRB0 means no stored context was used.

🔍
What You See In Logs

The SRB the answer arrives on is a free, unambiguous verdict, and it costs nothing to check. RRCResume, RRCRelease and RRCReestablishment are DL-DCCH messages and arrive on SRB1, integrity-protected under a key derived from a stored context -- so their arrival proves the context was found and verified. RRCSetup and RRCReject are DL-CCCH messages and arrive in the clear on SRB0. If your log records the logical channel, you never have to guess whether a resume actually resumed.

The gNB also chooses between delta and full configuration on every reconfiguration, and the criterion is not load or size but confidence -- see §8.4. In practice three situations force fullConfig: inbound inter-RAT handover, handover between nodes that cannot exchange a delta configuration, and re-establishment or resume at a node that retrieved a context it does not fully trust.

10. Security Mode Command

PurposeActivate AS-level integrity protection and ciphering on SRBs, and select the algorithms.
TriggerThe gNB, after it has received the AS security context from the AMF in the NGAP INITIAL CONTEXT SETUP REQUEST. Always before SRB2 or any DRB is configured.
MessagesSecurityModeCommand (SRB1) -> SecurityModeComplete (SRB1), or -> SecurityModeFailure (SRB1).
Key IEssecurityConfigSMC -> securityAlgorithmConfig, carrying cipheringAlgorithm and integrityProtAlgorithm.
TimerNone in TS 38.331. Bounded only by a gNB-internal guard timer.
FailureSecurityModeFailure: the UE could not apply the configuration and continues with the previous security configuration, which for an initial activation means no security at all. It does not release the connection.

Table 18. AS security mode command, TS 38.331 clause 5.3.4. Full treatment in the companion 27 AS Security Mode.

The asymmetry in how the two messages are protected is the part worth remembering, because it is a landmark in any log:

MessageIntegrity protected?Ciphered?Why
SecurityModeCommand
Yes, with the new K_RRCintNoThe UE must be able to read the algorithm selection before it can apply ciphering. Integrity protection is applied immediately because the UE derives the key from material it already has from NAS.
SecurityModeComplete
YesYesBy the time the UE answers it has applied both. This is the first fully protected uplink RRC message in the connection.
SecurityModeFailure
NoNoSent unprotected precisely because the UE could not apply the security configuration. That is also why it cannot be trusted, and why a gNB should treat it as a reason to release rather than to retry.

Table 19. Protection of the security mode messages, per TS 33.501. Downlink ciphering begins after the gNB receives SecurityModeComplete.

AlgorithmCipheringIntegrityNotes
Null
nea0
nia0
nea0 (no ciphering) is deployable and used in some networks. nia0 (no integrity) is permitted only for unauthenticated emergency calls.
SNOW 3G
nea1
nia1
Inherited from LTE.
AES
nea2
nia2
128-NEA2 / 128-NIA2. The most widely deployed pair.
ZUC
nea3
nia3
Mandatory to support in some markets.
Reservedspare4 .. spare1spare4 .. spare1Four spare codepoints each; three bits of the enumeration are unused.

Table 20. CipheringAlgorithm and IntegrityProtAlgorithm, TS 38.331 clause 6.3.3. Both are eight-member enumerations, so three bits each on the wire.

🔍
What You See In Logs

The first non-zero MAC-I on SRB1 is your marker for where AS security actually took effect. Before SecurityModeComplete, PDCP still emits a four-octet MAC-I trailer on every SRB PDU, padded with zeros TS 38.323. A trailer of zeros in RRCSetupComplete is correct; a trailer of zeros in a message after SecurityModeComplete is not, and points at a security configuration that was accepted and not applied.

11. UE Capability Enquiry and Transfer

PurposeFind out what the UE supports, per radio access technology, so that every optional feature can be gated on the answer.
TriggerThe gNB, normally once per connection soon after security activation, or when it needs a capability set it does not have cached.
MessagesUECapabilityEnquiry (SRB1) -> UECapabilityInformation (SRB1), the latter often segmented.
Key IEsue-CapabilityRAT-RequestList, each entry carrying a rat-Type and an optional capabilityRequestFilter; the response carries a ue-CapabilityRAT-ContainerList of opaque containers.
TimerNone in TS 38.331.
FailureSilence. If the response never arrives -- because it was too large to send, or because segment reassembly failed -- the gNB must proceed on a default assumption.

Table 21. UE capability transfer, TS 38.331 clause 5.6.1. Full treatment in the companion 26 UE Capability.

rat-Type
What it asks forContainer contents
nr
NR standalone capabilitiesUE-NR-Capability: bands, band combinations, feature sets, per-feature-set-per-CC capabilities
eutra-nr
EN-DC and NE-DC capabilitiesUE-MRDC-Capability: the band combinations that span both RATs
eutra
E-UTRA capabilitiesAn UE-EUTRA-Capability encoded per TS 36.331, nested inside an NR message
utra-fdd
UTRA FDD capabilities (Rel-16)For inter-RAT mobility to UMTS, where it still exists

Table 22. RAT-Type, TS 38.331 clause 6.3.3. The containers are opaque OCTET STRINGs so that a Rel-15 decoder can pass a Rel-18 capability set through without understanding it.

⚠️
Common Pitfall

capabilityRequestFilter exists because the unfiltered answer is enormous. A UE supporting many bands encodes band combinations combinatorially, and tens of kilobytes is routine. The filter lets the gNB say "only the bands I actually operate", which is the difference between a segmented multi-kilobyte response and a single PDSCH. A gNB that omits the filter and then cannot reassemble the response has caused its own problem -- and the failure is silent, because reassembly gaps produce no error message (see the companion 13 RRC Overview §11).

12. UE Information Request and Response

PurposeRetrieve diagnostic information the UE stored during an earlier failure, so the network can find out what went wrong after the fact.
TriggerThe gNB, after the UE indicated in a Complete message that a report is available. Never spontaneous.
MessagesUEInformationRequest (SRB1) -> UEInformationResponse (SRB1). Rel-16 promoted both into RRC proper.
Key IEsBoolean request flags -- rlf-ReportReq, rach-ReportReq, connEstFailReportReq and their later companions -- and the correspondingly named report structures in the response.
TimerNone.
FailureAn empty response. A report that has already been handed over is gone, and there is no way to distinguish "already given away" from "never had one".

Table 23. UE information, TS 38.331 clause 5.7.10. The report contents are covered in the companion 16 RLM and RLF.

Retrieving an RLF Report with UEInformationRequestRetrieving an RLF Report with UEInformationRequestUEnew gNBOAM / TCEEarlier: T310 expired, re-establishment failed,the UE went to RRC_IDLE and stored an RLF reportsome time later, on a different cellRRCSetupCompleteSRB1 -- no report is volunteered here1The UE signals availability by setting theRLF-report availability indication; the gNB mustthen ask for itUEInformationRequestSRB1 -- rlf-ReportReq true, rach-ReportReq true2UEInformationResponseSRB1 -- rlf-Report + rach-Report3rlf-Report carries: the failed cell, its measurements at the moment of failure,the neighbour measurements, the connection failure type (rlf or hof), the timesince failure, and the previous PCell -- see the companion 16 RLM and RLFthe stored report is discarded once it has been sent,so exactly one gNB ever sees itforwarded for analysisoutside the scope of TS 38.331failure variantUEInformationRequestsent after the UE already gave the report awayUEInformationResponserlf-Report absent -- no errorThe report is single-use and pull-only. A gNB that does not ask loses it permanently, and there is no message that says so --an empty UEInformationResponse is indistinguishable from a UE that never had a failure.
Figure 7. Retrieving an RLF report. The whole mechanism is pull-only and single-use, which makes the gNB's decision to ask -- or not -- the thing that determines whether the failure is ever diagnosed.
ReportRequested byStored whenWhat it tells you
RLF report
rlf-ReportReq
The UE declared radio link failure or handover failureThe failed cell and its measurements at the moment of failure, the neighbour measurements, whether it was an RLF or a handover failure, the time since failure, and the previous PCell. The single most useful diagnostic object in NR.
Connection establishment failure report
connEstFailReportReq
T300 expired, or random access exhausted during establishmentThe cell the UE failed to access, its measured RSRP and RSRQ, and how many preambles were sent. See the companion 03 Random Access.
Random access report
rach-ReportReq
Any random access procedure completedAttempt counts, whether contention-free or contention-based resources were used, and whether the procedure fell back. Useful for tuning rach-ConfigCommon without a drive test.
Logged measurement resultsthe logged-measurement request flagA LoggedMeasurementConfiguration was in forceImmobile MDT-style measurement logs collected in RRC_IDLE or RRC_INACTIVE. See the companion 20 Measurements and Events.
Successful handover reportthe Rel-17 request flagA handover completed but only justThe complement of the RLF report: handovers that worked but were close to failing, which is where mobility tuning actually pays.

Table 24. What a UE will surrender if asked. Every one of these is pull-only and single-use.

💡
Key Point

A report a gNB does not ask for is lost permanently. The UE holds it until either someone asks or its validity period expires, and it discards it the moment it has been sent, so exactly one gNB ever sees any given report. There is no message that says "I had one and you did not ask". If your network is not requesting RLF reports as a matter of policy, then every radio link failure it has ever had is undiagnosable, and no amount of network-side logging will recover the UE-side view.

13. The Smaller Procedures

13.1 NAS transport: DL and UL Information Transfer

The simplest procedures in RRC. Both messages are envelopes: they carry a dedicatedNAS-Message, which is an OCTET STRING, and RRC does not look inside it. They exist for NAS PDUs that have no RRC message to piggyback on -- unlike the initial NAS message, which rides in RRCSetupComplete, and unlike accept messages, which often ride in RRCReconfiguration's dedicatedNAS-MessageList.

DLInformationTransferULInformationTransfer
SRBSRB2 once it exists, SRB1 before thatSRB2 once it exists, SRB1 before that
rrc-TransactionIdentifier
PresentAbsent
CorrelationNone available -- the uplink message is not a replyNone. NAS does its own correlation at NAS level, invisible to RRC.
Rel-16 additionsreferenceTimeInfo, for delivering an accurate time reference to the UE--
Failure behaviourNone. Unacknowledged at RRC level; NAS retransmits if it cares.None.

Table 25. The two NAS transport messages. The transaction identifier asymmetry catches people: DLInformationTransfer has one and ULInformationTransfer does not, so the two cannot be paired at RRC level at all.

13.2 Measurement report

MeasurementReport is UE-initiated and unsolicited: no request precedes it and no transaction identifier correlates it. It carries a measResults structure whose first field is the measId that triggered it, and that measId is the only link back to the measConfig that configured the event. Correlate on measId, and keep the measConfig that established it -- a report against a measId you cannot find in your configuration means the configuration you think the UE has is not the one it has. Full treatment in the companion 20 Measurements and Events.

13.3 UE assistance information

UEAssistanceInformation is the UE telling the network what it would prefer. It is UE-initiated and unsolicited -- but only for the report types the network has explicitly enabled in otherConfig. Nothing here is volunteered by default.

ReportReleaseWhat the UE is sayingEnabled byWhat a network usually does
delayBudgetReport
Rel-15A preferred adjustment to the connected-mode DRX cycle, as a signed offset from -1280 ms to +1280 ms in seventeen stepsdelayBudgetReportingConfig in otherConfigAdjust drx-LongCycle. Mostly used by devices trading latency for battery.
overheatingAssistance
Rel-15The UE is thermally limited and would like fewer carriers, less bandwidth or fewer MIMO layers: reducedMaxCCs, reducedMaxBW-FR1/FR2, reducedMaxMIMO-LayersFR1/FR2
overheatingAssistanceConfig
Honour it. A UE that overheats will throttle anyway, and it will do so less gracefully.
idc-Assistance
Rel-16In-device coexistence: which carrier frequencies and combinations are being interfered with by the device's own Bluetooth, WLAN or GNSS
idc-AssistanceConfig
Avoid the named frequencies in measurement and carrier configuration.
drx-Preference
Rel-16Preferred drx-InactivityTimer, long cycle, short cycle and short cycle timer
drx-PreferenceConfig
Feed into the DRX configuration. See the companion 11 DRX.
maxBW-Preference
Rel-16A preferred reduced aggregated bandwidth per frequency range
maxBW-PreferenceConfig
Reduce the configured bandwidth part or carrier set.
releasePreference
Rel-16The UE would like the connection released, and names a preferred RRC state: idle, inactive, connected or outOfConnected
releasePreferenceConfig
The closest the UE gets to asking to be suspended -- and it is a hint, not a request. See the companion 14 RRC States.

Table 26. UEAssistanceInformation report types. Every one is gated on a matching configuration in otherConfig, and every one has a prohibit timer that suppresses repeats.

⚠️
Common Pitfall

If a UE never sends the assistance report you are waiting for, check otherConfig before you check the UE. Each report type needs its own enabling configuration, and each carries a prohibit timer -- overheatingIndicationProhibitTimer and its equivalents -- that suppresses a repeat for a configured interval after each report. A prohibit timer set to sixty seconds means a UE that is heating up rapidly reports once and then goes quiet for a minute, which reads exactly like the problem having gone away.

13.4 Counter check

A rarely-used integrity auxiliary. DRBs are usually ciphered but not integrity-protected, which leaves room for an attacker to insert or delete packets: the ciphering keystream stays synchronised only if both sides have processed the same number of PDUs, so an inserted or dropped packet shifts the COUNT. CounterCheck asks the UE to confirm its counters match.

DirectionMessageFieldWidthWhy
gNB -> UE
CounterCheck
drb-CountMSB-InfoList, each entry drb-Identity + countMSB-Uplink + countMSB-DownlinkINTEGER (0..33554431) -- the 25 most significant bits of the 32-bit COUNTOnly the MSBs are checked, so ordinary in-flight skew of up to 127 PDUs does not raise a false alarm.
UE -> gNB
CounterCheckResponse
drb-CountInfoList, each entry drb-Identity + count-Uplink + count-DownlinkINTEGER (0..4294967295) -- the full 32-bit COUNTThe UE returns the whole value so the gNB can see exactly how far apart the two are.

Table 27. Counter check, TS 38.331 clause 5.3.6. The MSB-only request and full-value response is deliberate: it makes the check insensitive to normal skew and precise about real divergence.

If the counts differ, TS 38.331 leaves the reaction to the network. In practice a mismatch is treated as evidence of tampering and the connection is released. The procedure is cheap to run and almost never run, which means that when you do see it in a log it is either a conformance test or somebody's security policy, not a routine event.

13.5 Mobility from NR

PurposeHand the UE over to another radio access technology -- in practice E-UTRA.
TriggerThe gNB, on a B1 or B2 inter-RAT measurement event, or on coverage or policy grounds.
MessagesMobilityFromNRCommand (SRB1). There is no NR-side response: success is the UE appearing on the target RAT.
Key IEstargetRAT-Type; targetRAT-MessageContainer, an OCTET STRING holding a complete target-RAT RRC message; nas-SecurityParamFromNR.
TimerT304.
FailureT304 expiry: revert to the NR configuration and initiate re-establishment. There is no failure message on the NR side.

Table 28. Mobility from NR, TS 38.331 clause 5.4.3.

🔍
What You See In Logs

targetRAT-MessageContainer holds an entire E-UTRA RRCConnectionReconfiguration with mobilityControlInfo, encoded per TS 36.331 and completely opaque to the NR decoder. Your NR-side tool will show it as a blob. To read it you need an LTE decoder and the container's octets -- and that is the only place the target configuration exists, so a failed inter-RAT handover cannot be diagnosed from an NR-only trace at all.

14. A Whole Session, Procedure by Procedure

Putting the pieces together, this is what a typical session actually runs, with the decisions and the alternatives at each step:

#ProcedureWhat happensTimerAlternative outcome
1Establishment (§3)RRCSetupRequest / RRCSetup / RRCSetupComplete. The Complete carries the first NAS message.
T300
RRCReject and T302; or T300 expiry, a connEstFailReport and a return to RRC_IDLE.
2Security mode (§10)SecurityModeCommand / SecurityModeComplete. Integrity and ciphering become active on SRB1.noneSecurityModeFailure, and the connection continues unprotected -- which the gNB should not accept.
3Capability transfer (§11)UECapabilityEnquiry / UECapabilityInformation, possibly segmented.noneSilence, and the gNB proceeds on defaults -- under-configuring everything.
4Reconfiguration (§7)One RRCReconfiguration sets up SRB2, the first DRBs and the measurement configuration.noneThe UE cannot comply: it reverts -- at this point to a connection with no bearers at all -- and re-establishes.
5NAS transport (§13.1)DLInformationTransfer / ULInformationTransfer carry NAS throughout the session.noneNone at RRC level.
6Measurement reporting (§13.2)MeasurementReport whenever a configured event fires.noneNone -- unsolicited and unacknowledged.
7Reconfiguration with sync (§7.3)RRCReconfiguration with reconfigurationWithSync moves the UE to another cell.
T304
T304 expiry: revert to the source configuration and re-establish.
8Re-establishment (§6)Only if something failed: RRCReestablishmentRequest / RRCReestablishment / Complete, then a reconfiguration to restore the bearers.T311, T301Fallback RRCSetup, or RRC_IDLE and an RLF report.
9UE information (§12)UEInformationRequest / Response retrieves whatever the UE stored from step 8.noneAn empty response.
10Release (§5)RRCRelease, with suspendConfig for RRC_INACTIVE or without it for RRC_IDLE.starts T380 or T320Message lost: the UE stays connected and eventually declares RLF.

Table 29. A session's procedures in order, with the alternative outcome for each. Steps 1-4 happen once, 5-7 repeat, 8-9 happen only on failure, and 10 happens once.

💡
Key Point

Steps 1 to 4 are worth memorising as a block, because their order is load-bearing. Security must precede SRB2 and any DRB; capability should precede any feature-dependent configuration; and the reconfiguration that sets up bearers must come after both. A gNB that reorders these produces a revert-and-re-establish at step 4, and the symptom looks like a bearer problem. Check the order before you check the configuration.

15. The RRC Timer Landscape

The RRC Timer Landscape: Every Configurable Range on One AxisThe RRC Timer Landscape: Every Configurable Range on One AxisTS 38.331 cl. 7.1, plus t304 in ReconfigurationWithSync, t320 in CellReselectionPriorities and t380 in SuspendConfig50 ms500 ms2 s10 s1 min10 min3 h100 ms - 2 sT300100 ms - 2 sT301100 ms - 2 sT31950 ms - 10 sT3040 (!) - 2 sT3101 s - 30 sT31150 ms - 2 sT3161 s - 16 sT3024 s - 512 sT3905 min - 180 minT3205 min - 720 minT380Configurable range, logarithmic. Each bar prints its own limits; positions are comparable, the axis is not linear.Establish / resumeMobilityFailure detection and recoveryAccess controlIdle / inactive housekeepingFour orders of magnitude separate T310 from T380. The three timers on the right belong to the non-connected statesand are covered in the companion 14 RRC States; the eight on the left bound procedures in this document. T310'slowest value is literally ms0.
Figure 8. Every configurable RRC timer range on one logarithmic axis. The eight on the left bound procedures in this document; the three on the right belong to the non-connected states.
TimerStarted byStopped byOn expiryConfigured in
T300
Sending RRCSetupRequestReceiving RRCSetup or RRCRejectReset MAC, release resources, store a connEstFailReport, go to RRC_IDLEUE-TimersAndConstants in SIB1
T301
Sending RRCReestablishmentRequestReceiving RRCReestablishment or RRCSetupGo to RRC_IDLE, release cause RRC connection failure
UE-TimersAndConstants
T302
Receiving RRCReject with a waitTimeCell reselection, or PLMN selectionBarring lifts for the access categoryRRCReject waitTime, 1-16 s
T304
Receiving reconfigurationWithSync, or MobilityFromNRCommandSuccessful random access at the target and the Complete messageHandover failure: revert to the source configuration and re-establish
ReconfigurationWithSync t304
T310
N310 consecutive out-of-sync indicationsN311 in-sync indications, or handover, or re-establishmentDeclare radio link failure
UE-TimersAndConstants
T311
Initiating re-establishmentSelecting a suitable cell and sending the requestGo to RRC_IDLE
UE-TimersAndConstants
T316
Sending MCGFailureInformation over the SCGReceiving reconfigurationWithSync or RRCReleaseDeclare full RLF and re-establishRLF-TimersAndConstants (Rel-16)
T319
Sending RRCResumeRequest[1]Receiving RRCResume, RRCSetup, RRCRelease or RRCRejectGo to RRC_IDLE; discard the stored AS context
UE-TimersAndConstants
T320
Receiving dedicated cellReselectionPrioritiesNew priorities, or entering RRC_CONNECTEDRevert to the broadcast reselection priorities
CellReselectionPriorities t320
T380
Entering RRC_INACTIVELeaving RRC_INACTIVEInitiate a periodic RAN Notification Area Update
SuspendConfig t380
T390
An access barring check failing for an access categoryBarring being liftedAccess is allowed again for that categoryUAC-BarringInfoSet uac-BarringTime, scaled by a random factor

Table 30. RRC timers, TS 38.331 clause 7.1. Every one of these is the error message for the procedure it bounds -- RRC has no others.

⚠️
Common Pitfall

Sizing T319 against your Xn context-fetch round-trip time is the single most commonly-missed timer interaction in this table. T319 bounds the UE's wait for a resume response, and if the UE resumed at a gNB that does not hold its context, that response cannot be produced until an XnAP RETRIEVE UE CONTEXT exchange completes. T319 = ms100 and an Xn round trip of 60 ms under load is a resume procedure that succeeds when the network is quiet and fails when it is busy -- which is indistinguishable from a capacity problem and is a timer problem. See the companion 14 RRC States §10.

16. Failure Modes and What Each One Means

FailureDetected byWhat happensObservable asDiagnostic pointer
The UE cannot comply with an RRCReconfigurationUE RRCApplies none of the message, keeps the previous configuration, and initiates re-establishment (§8.5)An RRCReestablishmentRequest with reestablishmentCause = reconfigurationFailure. No failure message exists.Diff the configuration you sent against UECapabilityInformation. The usual culprits are an unsupported SN size, an unsupported band combination in secondaryCellGroup, or a bandwidth part the UE cannot form.
SecurityModeFailure
UE RRCThe UE continues with the previous security configuration -- which on initial activation means noneAn unprotected uplink message on SRB1An algorithm the UE does not support, or a key derivation mismatch. The gNB should release rather than retry (§10).
T304 expiryUE RRCRevert to the source configuration and initiate re-establishmentA gap, then RRCReestablishmentRequest in some cellRandom access at the target failed. Check whether rach-ConfigDedicated was present -- contention-based access at the target inside a T304 sized for contention-free access is a common cause (§7.3).
T300 / T301 / T319 expiryUE RRCGo to RRC_IDLE and, for T319, discard the stored contextA request with no answer, then a fresh RRCSetupRequestEither the request never arrived, or the network took too long. §15 for the timer sizing that causes the second case.
RRCReject
gNBThe UE starts T302 and waits. From RRC_INACTIVE, it stays there.An explicit downlink message on SRB0 with a waitTimeAdmission or load control. A rising RRCReject rate against a flat RRCSetupRequest rate is a capacity signal, not a radio one.
A measId removed as a side effectNobodyThe measId disappears because the measObject it referenced was removedA measurement report that stops firing, with no error anywhereThe highest-value item in this table. Diff the measId set before and after every reconfiguration that touches measObjectToRemoveList (§8.3).
A DRB released without its RLC bearerNobodyThe PDCP and SDAP entities go away; the RLC entity and logical channel remainA logical channel that MAC still schedules with nothing above itdrb-ToReleaseList and rlc-BearerToReleaseList are separate lists in separately-authored IEs. Populate both (§7.2).
fullConfig used where a delta would doNobodyEvery DRB is released and re-establishedA user-plane gap of tens of milliseconds on every bearer, on a reconfiguration that should have been transparentLook for fullConfig in routine reconfigurations. It is a reflex in some implementations (§8.4).
rrc-TransactionIdentifier reusegNBA Complete cannot be attributed to a RequestBehaviour matching the previous configuration after a reconfiguration that appeared to succeedOnly four identifier values exist. Serialise reconfigurations per bearer. See the companion 13 RRC Overview §10.
FailureInformation from the UEUE RLC or PDCPThe UE reports a failure on one specific RLC bearer rather than declaring RLFAn uplink message naming a cellGroupId, a logicalChannelIdentity and a failureTypeRel-16. It lets a single-bearer RLC failure be repaired with a reconfiguration instead of costing the whole connection.
A capability response that never arrivesgNB, by timeoutThe gNB proceeds on a default capability assumptionSilence after UECapabilityEnquiryEither the response exceeded 9000 octets with no segmentation support, or segment reassembly failed. Count ULDedicatedMessageSegment messages and look for a segmentNumber gap (§11).
A UE assistance report that never arrivesNobodyThe UE was never enabled to send it, or a prohibit timer suppressed itThe absence of UEAssistanceInformationCheck otherConfig before you check the UE (§13.3).

Table 31. Procedure failure modes. Five of the twelve are detected by nobody at all -- they have no error message and no timer, and they surface as behaviour that is merely wrong.

💡
Key Point

The five silent rows in that table share a property worth naming: they are all cases where the message was legal, was applied successfully, and did something other than what the author intended. No protocol mechanism can catch those. The only defence is to compute the expected resulting configuration from the delta before you send it, and compare it against what you meant -- which is exactly the exercise of §8.3, and the reason it is worth doing by hand once.

17. Configuration Reference (ASN.1)

17.1 RRCReconfiguration and its extension chain

RRCReconfiguration ::= SEQUENCE {
    rrc-TransactionIdentifier  RRC-TransactionIdentifier,
    criticalExtensions         CHOICE {
        rrcReconfiguration         RRCReconfiguration-IEs,
        criticalExtensionsFuture   SEQUENCE {}
    }
}

RRCReconfiguration-IEs ::= SEQUENCE {
    radioBearerConfig        RadioBearerConfig        OPTIONAL, -- Need M
    secondaryCellGroup       OCTET STRING (CONTAINING CellGroupConfig)
                                                      OPTIONAL, -- Need M
    measConfig               MeasConfig               OPTIONAL, -- Need M
    lateNonCriticalExtension OCTET STRING             OPTIONAL,
    nonCriticalExtension     RRCReconfiguration-v1530-IEs OPTIONAL
}

RRCReconfiguration-v1530-IEs ::= SEQUENCE {
    masterCellGroup          OCTET STRING (CONTAINING CellGroupConfig)
                                                      OPTIONAL, -- Need M
    fullConfig               ENUMERATED {true}        OPTIONAL, -- Need N
    dedicatedNAS-MessageList SEQUENCE (SIZE(1..maxDRB)) OF
                                 DedicatedNAS-Message OPTIONAL, -- Need N
    masterKeyUpdate          MasterKeyUpdate          OPTIONAL, -- Need N
    dedicatedSIB1-Delivery   OCTET STRING (CONTAINING SIB1)
                                                      OPTIONAL, -- Need N
    dedicatedSystemInformationDelivery OCTET STRING
                                 (CONTAINING SystemInformation)
                                                      OPTIONAL, -- Need N
    otherConfig              OtherConfig              OPTIONAL, -- Need M
    nonCriticalExtension     RRCReconfiguration-v1540-IEs OPTIONAL
}

-- ... the chain continues through v1540, v1560, v1610 (which adds
-- conditionalReconfiguration and daps-Config), v1640, v1650, v1660,
-- v1700 and beyond.

Listing 3. Abridged from TS 38.331 clause 6.2.2. masterCellGroup lives in the v1530 extension while secondaryCellGroup is a root IE -- an ordering fossil, not a hierarchy.

17.2 The list-based IEs

RadioBearerConfig ::= SEQUENCE {
    srb-ToAddModList     SRB-ToAddModList     OPTIONAL, -- Need N
    srb3-ToRelease       ENUMERATED {true}    OPTIONAL, -- Need N
    drb-ToAddModList     DRB-ToAddModList     OPTIONAL, -- Need N
    drb-ToReleaseList    DRB-ToReleaseList    OPTIONAL, -- Need N
    securityConfig       SecurityConfig       OPTIONAL, -- Need M
    ...
}

DRB-ToAddMod ::= SEQUENCE {
    cnAssociation CHOICE {
        eps-BearerIdentity  INTEGER (0..15),
        sdap-Config         SDAP-Config
    }                                     OPTIONAL, -- Cond DRBSetup
    drb-Identity          DRB-Identity,   -- INTEGER (1..32)
    reestablishPDCP       ENUMERATED {true} OPTIONAL, -- Need N
    recoverPDCP           ENUMERATED {true} OPTIONAL, -- Need N
    pdcp-Config           PDCP-Config       OPTIONAL, -- Cond PDCP
    ...
}

CellGroupConfig ::= SEQUENCE {
    cellGroupId              CellGroupId,
    rlc-BearerToAddModList   SEQUENCE (SIZE(1..maxLC-ID)) OF
                                 RLC-BearerConfig  OPTIONAL, -- Need N
    rlc-BearerToReleaseList  SEQUENCE (SIZE(1..maxLC-ID)) OF
                                 LogicalChannelIdentity
                                                   OPTIONAL, -- Need N
    mac-CellGroupConfig      MAC-CellGroupConfig   OPTIONAL, -- Need M
    physicalCellGroupConfig  PhysicalCellGroupConfig
                                                   OPTIONAL, -- Need M
    spCellConfig             SpCellConfig          OPTIONAL, -- Need M
    sCellToAddModList        SEQUENCE (SIZE (1..maxNrofSCells)) OF
                                 SCellConfig       OPTIONAL, -- Need N
    sCellToReleaseList       SEQUENCE (SIZE (1..maxNrofSCells)) OF
                                 SCellIndex        OPTIONAL, -- Need N
    ...
}

MeasConfig ::= SEQUENCE {
    measObjectToRemoveList    MeasObjectToRemoveList   OPTIONAL, -- Need N
    measObjectToAddModList    MeasObjectToAddModList   OPTIONAL, -- Need N
    reportConfigToRemoveList  ReportConfigToRemoveList OPTIONAL, -- Need N
    reportConfigToAddModList  ReportConfigToAddModList OPTIONAL, -- Need N
    measIdToRemoveList        MeasIdToRemoveList       OPTIONAL, -- Need N
    measIdToAddModList        MeasIdToAddModList       OPTIONAL, -- Need N
    s-MeasureConfig CHOICE { ssb-RSRP RSRP-Range,
                             csi-RSRP RSRP-Range }     OPTIONAL, -- Need M
    quantityConfig            QuantityConfig           OPTIONAL, -- Need M
    measGapConfig             MeasGapConfig            OPTIONAL, -- Need M
    measGapSharingConfig      MeasGapSharingConfig     OPTIONAL, -- Need M
    ...
}

Listing 4. Abridged from TS 38.331 clause 6.3.2. Note the naming: bearers and cell groups use ToReleaseList, measurements use ToRemoveList. Same mechanism, two words.

17.3 The mobility and synchronisation IEs

SpCellConfig ::= SEQUENCE {
    servCellIndex             ServCellIndex   OPTIONAL, -- Cond SCG
    reconfigurationWithSync   ReconfigurationWithSync
                                              OPTIONAL, -- Cond ReconfWithSync
    rlf-TimersAndConstants    SetupRelease {RLF-TimersAndConstants}
                                              OPTIONAL, -- Need M
    rlmInSyncOutOfSyncThreshold ENUMERATED {n1}
                                              OPTIONAL, -- Need S
    spCellConfigDedicated     ServingCellConfig
                                              OPTIONAL, -- Need M
    ...
}

ReconfigurationWithSync ::= SEQUENCE {
    spCellConfigCommon   ServingCellConfigCommon  OPTIONAL, -- Need M
    newUE-Identity       RNTI-Value,             -- INTEGER (0..65535)
    t304                 ENUMERATED {ms50, ms100, ms150, ms200, ms500,
                                     ms1000, ms2000, ms10000},
    rach-ConfigDedicated CHOICE {
        uplink               RACH-ConfigDedicated,
        supplementaryUplink  RACH-ConfigDedicated
    }                                          OPTIONAL, -- Need N
    ...,
    [[
    smtc                 SSB-MTC                OPTIONAL  -- Need S
    ]]
}

MobilityFromNRCommand-IEs ::= SEQUENCE {
    targetRAT-Type            ENUMERATED {eutra, spare3, spare2,
                                          spare1, ..., utra-fdd-v1610},
    targetRAT-MessageContainer OCTET STRING,
    nas-SecurityParamFromNR   OCTET STRING     OPTIONAL, -- Cond
    lateNonCriticalExtension  OCTET STRING     OPTIONAL,
    nonCriticalExtension      SEQUENCE {}      OPTIONAL
}

RRCReestablishment-IEs ::= SEQUENCE {
    nextHopChainingCount      NextHopChainingCount,  -- INTEGER (0..7)
    lateNonCriticalExtension  OCTET STRING     OPTIONAL,
    nonCriticalExtension      SEQUENCE {}      OPTIONAL
}

Listing 5. Abridged from TS 38.331 clause 6.2.2 and 6.3.2. RRCReestablishment-IEs is shown in full -- it really does carry nothing but the chaining count.

18. Illustrative Message Traces

🔍
About These Traces

Illustrative trace. Field names and encodings follow 3GPP; the values are constructed for this document and are not a capture from any deployed or lab network.

18.1 The delta reconfiguration of §8.3, as a log

[RRC] A delta reconfiguration, applied
09:15:22.104  [CU-CP RRC-DL] DL-DCCH-Message on SRB1, LCID 1, 88 octets
              c1 = rrcReconfiguration
                rrc-TransactionIdentifier ......... 2
                radioBearerConfig
                  drb-ToReleaseList ............... { 2 }
                  drb-ToAddModList
                    [0] drb-Identity .............. 3   -- MODIFY
                        pdcp-Config.drb.discardTimer  ms100
                        pdcp-Config.drb.headerCompression  notUsed
                    [1] drb-Identity .............. 4   -- ADD
                        cnAssociation.sdap-Config
                          pdu-Session ............. 2
                          mappedQoS-FlowsToAdd .... { 6 }
                        pdcp-Config.drb.pdcp-SN-SizeUL  len18bits
                        pdcp-Config.drb.pdcp-SN-SizeDL  len18bits
                nonCriticalExtension          -- v1530
                  masterCellGroup  (OCTET STRING, 31 octets)
                    cellGroupId ................... 0
                    rlc-BearerToReleaseList ....... { 5 }
                    rlc-BearerToAddModList
                      [0] logicalChannelIdentity .. 7
                          servedRadioBearer = drb-Identity 4
                measConfig
                  measObjectToRemoveList .......... { 2 }
                  measObjectToAddModList
                    [0] measObjectId .............. 3   (NR, 620000)
                  reportConfigToAddModList
                    [0] reportConfigId ............ 3   (eventA5)
                  measIdToAddModList
                    [0] measId 4 -> measObjectId 3, reportConfigId 3

09:15:22.131  [UE RRC] applying, in order:
              drb-ToReleaseList  { 2 }      -> DRB 2 released
              rlc-BearerToRelease { 5 }     -> LCID 5 released
              measObjectToRemove { 2 }      -> measObject 2 removed
                                            -> measId 2 removed as a
                                               consequence (cl. 5.5.2.4)
              drb-ToAddModList              -> DRB 3 modified, DRB 4 added
              rlc-BearerToAddMod            -> LCID 7 added
              measObject/reportConfig/measId add lists applied
              DRB 3 pdcp-SN-Size unchanged (Cond Setup, absent = keep)

09:15:22.138  [UE RRC-UL] rrcReconfigurationComplete  txn 2  on SRB1

-- Resulting measId set: { 1, 3, 4 }.  measId 2 is gone and no list in
-- the message mentioned it. This is the bug class of section 8.3.

Listing 6. The worked example as it appears in a CU-CP log, with the UE's application order shown. The last three lines are the whole point of §8.

18.2 A reconfiguration with sync, and its failure

[RRC/MAC] reconfigurationWithSync, success and T304 expiry
10:41:07.882  [RRC-UL] measurementReport
                measResults.measId ................ 1
                measResultServingMOList[0] RSRP ... -104 dBm
                measResultNeighCells.measResultListNR
                  [0] physCellId 118, RSRP ........ -96 dBm

10:41:07.905  [RRC-DL] rrcReconfiguration  txn 3  on SRB1, 1412 octets
                nonCriticalExtension.masterCellGroup
                  spCellConfig
                    reconfigurationWithSync
                      spCellConfigCommon
                        physCellId ................ 118
                        downlinkConfigCommon.frequencyInfoDL
                          absoluteFrequencySSB .... 632640
                      newUE-Identity ................ 0x7C12
                      t304 .......................... ms200
                      rach-ConfigDedicated.uplink
                        cfra.occasions ............ (dedicated)
                        cfra.resources.ssb
                          ssb-ResourceList[0]
                            ra-PreambleIndex ...... 48
                  masterKeyUpdate
                    keySetChangeIndicator ........... false
                    nextHopChainingCount ............ 5
              -- T304 (ms200) starts on receipt

10:41:07.912  [UE RRC]  reset MAC; re-establish PDCP+RLC for SRB1, SRB2,
                        DRB 1, DRB 2; derive K_gNB* with NCC 5;
                        apply spCellConfigCommon; C-RNTI := 0x7C12
10:41:07.921  [MAC-UL] PCI 118: CFRA preamble 48, RA-RNTI 1417
10:41:07.929  [MAC-DL] PCI 118: RAR, TA 212, UL grant
10:41:07.938  [RRC-UL] rrcReconfigurationComplete  txn 3  on SRB1
              -- T304 stopped at 33 ms of 200. Handover complete.

-- The same handover, with the CFRA resource unavailable:
11:02:44.610  [RRC-DL] rrcReconfiguration  txn 1
                      reconfigurationWithSync
                        newUE-Identity .............. 0x33A0
                        t304 ........................ ms200
                        rach-ConfigDedicated ........ ABSENT
              -- no dedicated preamble: the UE must use CBRA at the target
11:02:44.620  [MAC-UL] PCI 118: CBRA preamble 19 (random), attempt 1
11:02:44.641  [MAC-UL] PCI 118: CBRA preamble 44, attempt 2
11:02:44.669  [MAC-UL] PCI 118: CBRA preamble 07, attempt 3
11:02:44.810  [UE RRC] T304 expired (200 ms)
              -> revert to the SOURCE configuration
              -> initiate re-establishment: T311 started
              -> store an RLF report, connectionFailureType = hof
11:02:44.980  [RRC-UL] rrcReestablishmentRequest on SRB0, PCI 41,
                       c-RNTI 0x4601, reestablishmentCause handoverFailure

Listing 7. A handover that works, and the same handover without a dedicated preamble. The second one fails on contention, inside a T304 that was sized for contention-free access.

18.3 A reconfiguration the UE refuses, and its real cost

[RRC] A refused reconfiguration, and what it actually costs
12:18:03.441  [RRC-DL] rrcReconfiguration  txn 0  on SRB1
                radioBearerConfig
                  drb-ToAddModList
                    [0] drb-Identity .............. 5
                        pdcp-Config.drb.pdcp-SN-SizeUL  len18bits
                        pdcp-Config.drb.pdcp-SN-SizeDL  len18bits
                nonCriticalExtension.secondaryCellGroup
                  sCellToAddModList
                    [0] sCellIndex ................ 3
                    [1] sCellIndex ................ 4

12:18:03.459  [UE RRC] evaluating the message
              drb-Identity 5, 18-bit UL SN ......... supported
              sCellIndex 3 ......................... supported
              sCellIndex 4 ......................... NOT supported on
                                                     this band combination
              -> cannot comply with the whole message
              -> revert to the configuration in force before txn 0
                 (DRB 5 is NOT added; SCell 3 is NOT added)

              -> NR has no reconfiguration failure message, so:
              -> initiate re-establishment      (TS 38.331 cl. 5.3.5.8)

12:18:03.463  [UE RRC] T311 started; cell selection
12:18:03.508  [RRC-UL] rrcReestablishmentRequest on SRB0 (same cell)
                c-RNTI ............................ 0x4601
                physCellId ........................ 41
                shortMAC-I ........................ 0x2F81
                reestablishmentCause .............. reconfigurationFailure
              -- two bits of cause value. That is the entire error report.

12:18:03.541  [RRC-DL] rrcReestablishment  txn 0  on SRB1
                nextHopChainingCount .............. 6
              -- and nothing else: SRB2 and every DRB are still suspended
12:18:03.559  [RRC-UL] rrcReestablishmentComplete  txn 0

12:18:03.572  [RRC-DL] rrcReconfiguration  txn 1
                nonCriticalExtension.fullConfig ..... true
                (2088 octets: SRB2, DRB 1, DRB 2, whole masterCellGroup,
                 whole measConfig -- all restated absolutely)
12:18:03.688  [RRC-UL] rrcReconfigurationComplete  txn 1
              -- 247 ms of user-plane outage, for one unsupported SCell

Listing 8. The real cost of a refused reconfiguration: not a failure message but a re-establishment and a full reconfiguration. Note that SCell 3 was not added even though the UE supported it -- the message is applied whole or not at all -- and that reestablishmentCause is the only diagnostic the network ever receives.

18.4 Retrieving the RLF report the handover failure produced

[RRC] UEInformationRequest / Response
11:03:02.118  [RRC-UL] rrcSetupComplete on SRB1
              -- the UE indicates that an RLF report is available

11:03:02.204  [RRC-DL] ueInformationRequest  txn 1  on SRB1
                rlf-ReportReq ..................... true
                rach-ReportReq .................... true
                connEstFailReportReq .............. true

11:03:02.281  [RRC-UL] ueInformationResponse  txn 1  on SRB1
                rlf-Report
                  measResultLastServCell
                    rsrpResult ................... -118 dBm
                    rsrqResult ................... -19 dB
                  measResultNeighCells
                    [0] physCellId 118, rsrp ..... -96 dBm
                  c-RNTI ......................... 0x4601
                  previousPCellId ................ PCI 41
                  failedPCellId .................. PCI 118
                  connectionFailureType .......... hof
                  timeSinceFailure ............... 18 s
                rach-Report
                  numberOfPreamblesSent .......... 3
                  contentionDetected ............. true
                connEstFailReport ................ ABSENT

-- Read together: the target (PCI 118) was measured at -96 dBm, which is
-- fine, and three contention-based preambles collided. So the handover
-- decision was correct and the execution failed on contention -- which
-- points at the absent rach-ConfigDedicated of 18.2, not at coverage.
-- connEstFailReport is absent because there was no establishment failure,
-- not because the request was refused.

Listing 9. The RLF and RACH reports together, and the conclusion they support. Either report alone would have been misleading.

18.5 UE assistance information, and the prohibit timer

[RRC] UEAssistanceInformation with prohibit timers
13:44:19.006  [RRC-DL] rrcReconfiguration  txn 2
                nonCriticalExtension.otherConfig
                  overheatingAssistanceConfig = setup
                    overheatingIndicationProhibitTimer  s30
                  releasePreferenceConfig-r16 = setup
                    releasePreferenceProhibitTimer      s10
              -- until this message, the UE was not permitted to send
              -- either report at all

13:47:52.330  [RRC-UL] ueAssistanceInformation on SRB1
                overheatingAssistance
                  reducedMaxCCs
                    reducedCCsDL ................. 1
                    reducedCCsUL ................. 1
                  reducedMaxMIMO-LayersFR1
                    reducedMIMO-LayersFR1-DL ..... 2
              -- prohibit timer s30 starts; no repeat before 13:48:22

13:47:58.114  [UE internal] temperature still rising
              -- a second report would be sent now, but the prohibit
              -- timer suppresses it. The network sees nothing further.

13:48:05.900  [RRC-DL] rrcReconfiguration  txn 3
                sCellToReleaseList ................ { 3, 4 }
              -- gNB honours the request: two SCells released

13:49:31.442  [RRC-UL] ueAssistanceInformation on SRB1
                releasePreference
                  preferredRRC-State ............. inactive
              -- a hint, not a request. The gNB may ignore it entirely.
13:49:31.610  [RRC-DL] rrcRelease  txn 4
                suspendConfig ..................... present
              -- honoured: the UE goes to RRC_INACTIVE

Listing 10. The whole assistance loop: enable, report, prohibit, act. The suppressed second report at 13:47:58 is invisible to the network and reads exactly like the problem resolving itself.

19. Release Deltas: Rel-15 to Rel-18

ReleaseChangeWhy it matters when reading procedures
Rel-15Every procedure in §3 to §13 in its base form: establishment, resume, release, re-establishment, reconfiguration, security mode, capability transfer, counter check, NAS transport, measurement reporting, mobility from NRThe baseline. Note that the uplink c1 message-type CHOICE is already full at sixteen entries.
Rel-16RRC segmentation in both directionsA capability response or a large reconfiguration can now arrive in pieces, and a reassembly gap is a new silent failure mode.
Rel-16UEInformationRequest / UEInformationResponse promoted into RRC, carrying RLF, RACH and connEstFail reportsThe UE becomes a queryable diagnostic store (§12). Before this, the UE-side view of a failure was simply unavailable.
Rel-16conditionalReconfiguration: a whole RRCReconfiguration stored for later execution against measurement conditionsA reconfiguration can now be nested inside a reconfiguration, and the executing message never travels on the air at execution time. See the companion 25 Conditional HO and DAPS.
Rel-16DAPS handover: daps-Config per bearer, daps-SourceReleaseThe UE keeps the source connection while establishing the target, so a handover reconfiguration no longer implies a clean break.
Rel-16MCGFailureInformation and T316An MCG radio problem reported over the SCG instead of declaring RLF -- a whole new recovery path with its own timer (§15).
Rel-16FailureInformation with failureInfoRLC-BearerA single-bearer RLC failure can be repaired with a reconfiguration instead of costing the connection (§16).
Rel-16UEAssistanceInformation extensions: idc-Assistance, drx-Preference, maxBW-Preference, maxCC-Preference, maxMIMO-LayerPreference, minSchedulingOffsetPreference, releasePreferenceSeven new report types, each with its own enabling configuration and prohibit timer (§13.3).
Rel-16DedicatedSIBRequest, dedicatedSIB1-Delivery, LoggedMeasurementConfigurationSystem information over dedicated signalling, so the absence of a broadcast SIB no longer implies the UE lacks it.
Rel-17SRB4 and MeasurementReportAppLayer for application-layer / QoE reportingA fifth SRB with its own priority, carrying reports RRC does not interpret.
Rel-17Small Data Transmission from RRC_INACTIVEA completed random access no longer implies a state transition or a resume procedure. See the companion 14 RRC States.
Rel-17SCG activation and deactivation; MUSIM release request; successful-handover reporting; NR positioning proceduresMore procedures that produce no failure and no timer -- they simply change what the UE does.
Rel-18L1/L2-triggered mobility (LTM): cell switch executed by a MAC CE against candidates preconfigured by RRCThe most significant change to reconfiguration since Rel-15: a cell change with no RRC message at all at the execution point -- no RRCReconfiguration is sent. T304 does not apply.
Rel-18Network energy saving, network-controlled repeaters, AI/ML measurement reportingNew measConfig and otherConfig extensions, deeper in the nonCriticalExtension chain.

Table 32. Procedure changes by release. Feature presence must be confirmed against the capability exchange, never inferred from a successful Complete -- see the companion 26 UE Capability.

20. Reading RRC Procedures in Logs: A Checklist

1. Pair every request with its response, or name the timer. RRC has no generic error message, so a missing response plus an expired timer is the error. §15 maps every procedure to its timer.

2. Match on message type *and* transaction identifier. There are only four identifier values, and a SecurityModeCommand and an RRCReconfiguration can legitimately share one (§2, and the companion 13 RRC Overview §10).

3. Read the SRB the answer arrived on. An answer to a CCCH request on SRB1 means a stored context was found and verified; an answer on SRB0 means it was not. This one check resolves most resume and re-establishment questions instantly (§9).

4. On every reconfiguration, decode the first octet first. In an RRCReconfiguration, two bits of transaction identifier, one CHOICE bit and five presence bits tell you what is in the message before you decode any content (§7.4).

5. Look for a synchronised reconfiguration before anything else. The presence of reconfigurationWithSync turns a configuration change into a cell change, starts T304, and means the Complete will arrive in a different cell (§7.3).

6. Check whether the message is absolute. fullConfig is one bit that changes the message from delta to absolute and costs a PDCP re-establishment on every bearer. In a routine reconfiguration it is a smell (§8.4).

7. For any list-based change, compute the resulting configuration. Release lists apply before add/modify lists, absent fields follow their Need codes, and a measId can vanish because the measObject it pointed at was removed. Do the §8.3 exercise on anything suspicious.

8. Check that bearer changes touch both halves. A DRB lives in radioBearerConfig and its RLC bearer lives in CellGroupConfig, and in a split gNB the two are authored by different nodes (§7.2).

9. Find the first non-zero integrity trailer on SRB1. The first non-zero MAC-I is where AS security actually took effect, regardless of what the SecurityModeComplete claims (§10).

10. When a UE never sends something, check whether it was enabled. UEAssistanceInformation report types need otherConfig; capability responses need a capabilityRequestFilter small enough to encode; RLF reports need somebody to ask (§11, §12, §13.3).

11. Ask for the reports. An RLF report a gNB does not request is gone forever, and no network-side logging replaces it (§12).

21. Glossary

TermExpansionMeaning in this document
Procedure--A named message exchange in TS 38.331 with a trigger, a governing timer and a defined failure behaviour (§1).
Delta configuration--The principle that an RRCReconfiguration describes the change from an assumed current configuration, not the configuration itself (§8).
ToAddModList / ToReleaseList--The add-or-modify and release list pair that expresses a delta on a collection. measConfig calls the second one ToRemoveList (§8.1).
Need codeNeed M / N / R / SAn ASN.1 comment defining what absence of an optional field means: maintain, no action, release, or specified elsewhere (§8.2).
Cond XConditional presencePresence is mandatory under condition X. Cond Setup means mandatory at creation and omissible at modification (§8.2).
fullConfig
--A one-bit IE switching a reconfiguration from delta to absolute, at the cost of releasing and re-establishing every bearer (§8.4).
reconfigurationWithSync
--The only IE that makes a UE change cell. Carries newUE-Identity, t304 and optionally a dedicated random access configuration (§7.3).
masterCellGroup / secondaryCellGroup--The two CellGroupConfig instances. Both carry RLC, MAC and PHY configuration; the master one lives in a Rel-15 non-critical extension (§7.1).
rrc-TransactionIdentifier
--INTEGER (0..3). The whole of RRC's transaction state, echoed by the UE in a reply (§2).
resumeMAC-I / shortMAC-I--16-bit truncated message authentication codes proving possession of an old key, used in resume and re-establishment requests respectively (§4, §6).
establishmentCause / resumeCause / reestablishmentCause--UE-asserted, unverified reasons for a CCCH request. The first has sixteen codepoints, the second sixteen, the third four (§3, §6).
COUNT
--The 32-bit PDCP counter (HFN concatenated with the sequence number) that CounterCheck compares (§13.4).
otherConfig
--The IE that enables each UEAssistanceInformation report type and sets its prohibit timer. Nothing is volunteered without it (§13.3).
targetRAT-MessageContainer
--An OCTET STRING inside MobilityFromNRCommand holding a complete message from another RAT's RRC, opaque to NR decoders (§13.5).

22. References

  • 3GPP TS 38.331 -- NR RRC protocol specification. Clause 5.3.3 (connection establishment and T300), 5.3.4 (AS security mode command), 5.3.5 (connection reconfiguration, including 5.3.5.3 the application order, 5.3.5.5 cell group configuration, 5.3.5.6 radio bearer configuration, and 5.3.5.11 full configuration), 5.3.6 (counter check), 5.3.7 (connection re-establishment), 5.3.8 (connection release), 5.3.13 (connection resume), 5.3.15 (RRCReject), 5.4.3 (mobility from NR), 5.5.2 (measurement configuration, including 5.5.2.4 measurement object removal), 5.6.1 (UE capability transfer), 5.7.4 (UE assistance information), 5.7.10 (UE information), 6.1 (Need codes and general IE conventions), 6.2.2 (message definitions), 6.3.2 (information elements), 7.1 (UE timers and constants), 9.2 (default configurations).
  • 3GPP TS 38.300 -- NR and NG-RAN overall description. Clause 9.2 (RRC procedures in the overall architecture, and the interaction with NGAP and XnAP).
  • 3GPP TS 33.501 -- Security architecture and procedures for 5G System. Clause 6.7 (security mode command procedure and the protection asymmetry of §10), clause 6.9 (key handling at handover), clause 6.11 (RRC_INACTIVE security).
  • 3GPP TS 38.323 -- PDCP specification. The MAC-I field, the 9000-octet maximum SDU size that forces segmentation, and PDCP re-establishment and recovery -- what reestablishPDCP and recoverPDCP actually do.
  • 3GPP TS 38.322 -- RLC specification. RLC re-establishment, and the maximum retransmission condition that is one of the RLF triggers.
  • 3GPP TS 38.321 -- NR MAC protocol specification. Clause 5.1 (random access, which every CCCH procedure runs first), and logical channel prioritisation, which the SRB priorities feed.
  • 3GPP TS 38.473 / TS 38.463 / TS 38.423 / TS 38.413 -- F1AP, E1AP, XnAP and NGAP. RRC messages travel inside all four as opaque containers; see the companion 13 RRC Overview §12.
  • 3GPP TS 36.331 -- E-UTRA RRC protocol specification. Needed to decode the targetRAT-MessageContainer of MobilityFromNRCommand (§13.5).
  • ITU-T X.680 / X.691 -- ASN.1 notation and Packed Encoding Rules. The preamble bitmaps and extension additions of §7.4.

Companion documents in this set

  • 13 RRC Overview -- the layer, the SRBs, unaligned PER, the full message catalogue, transaction correlation, segmentation and the CU/DU split.
  • 14 RRC States -- the state machine, suspendConfig, resume in depth, RAN Notification Areas and cell reselection.
  • 01 Registration Process -- steps 1 to 4 of §14 in their NAS context, message by message.
  • 03 Random Access -- every CCCH procedure begins with a RACH, and the rach-ConfigDedicated of §7.3 is its contention-free form.
  • 09 LCP -- logical channel prioritisation, which is what the RLC bearer configuration of §7.2 feeds.
  • 11 DRX -- mac-CellGroupConfig -> drx-Config, and the DRX preferences of §13.3.
  • 16 RLM and RLF -- T310, T311, T301, shortMAC-I, and the contents of the RLF report that §12 retrieves.
  • 17 System Information -- UE-TimersAndConstants, where most of §15's timers are configured, and the UAC barring behind T390.
  • 20 Measurements and Events -- measConfig and MeasurementReport in full, including the event definitions behind the worked example of §8.3.
  • 21 Measurement Gaps and SMTC -- measGapConfig and the smtc in reconfigurationWithSync.
  • 22-25 Handover family -- reconfigurationWithSync in its mobility context, conditional reconfiguration and DAPS.
  • 26 UE Capability -- what UECapabilityInformation contains, why it needs segmentation, and why a capability bit is the only proof a feature is active.
  • 27 AS Security Mode -- the key hierarchy, masterKeyUpdate, and the algorithms of §10.