RRC Connection Reconfiguration in a nutshell


  • RRCConnectionReconfiguration in LTE does everything required to establish NR NSA
  • In NSA setup, this is the most important and complicated message you need to understand
  • Followings are several important configurations in this message
    • Measurement for NR cell : B1-NR event
    • NR Cell Information : Band, Frequency, SSB location, RACH configuration, Split Bearer Configuration
    • NR Carrier Aggregation (if NR CA is to be applied)

RRC ConnectionReconfiguration in Detail

As in LTE, RRC Reconfiguration is the most important steps in establishing Radio Connection between UE and Network. Understanding every details of RRC Reconfiguration would imply understanding almost everything in NR Radio Stack.  I would take around an year to get the understandings on the details of this single message to a certain degree and you would need to keep learning further details and new things throughout the whole life cycles of 5G/NR. So.. don't be too hurry trying to understand everything at a time and read / think on small pieces and analyze the protocol log when available whenever you have chance. This page also will be updated piece by piece and linked to many other pages for the details.

Overall Sequence of RRC Reconfiguration for NR

Following sequence shows what triggers NR RRC Reconfiguration on UE. As you see here, this can be triggered by LTE (in NSA(Non-Standalone) deployment) or by NR (in SA(Standalone) deployment).

  • Both processes start with an "Initial Setup" phase, where the UE establishes an initial connection with the network (eNB or gNB).
  • After this, both systems undergo a "RRC Connection Reconfiguration".
    • In LTE, this is detailed as an RRCConnectionReconfiguration message including 'v15x0-IEs' (which likely refers to certain information elements specific to the version 15.x of the LTE standard).
    • In 5G, this step is simply labeled as "RRC Reconfiguration".
  •  Following the reconfiguration command, there is an acknowledgment step labeled "RRC Connection Reconfiguration Complete" in LTE and "RRC Reconfiguration Complete" in 5G, indicating that the reconfiguration process has been acknowledged by the UE.

NOTE : In both case, NR RACH process are crucial and understanding the procedure is super important. (In NSA case, the NR RACH process happens after RRC Connection Reconfiguration. In SA, it happens as a part of Initial Attach). For further details, check out the followings

Purpose (Function) of RRC Reconfiguration

As you can guess from the word itself, the major functionality of RrcReconfiguration is to setup or modify RRC configuration. This imply that there should have already been some RRC Configuration process before this message. It is true. In LTE, there is a step RrcConnectionSetup message before RrcConnectionReconfiguration and in NR there is RRC Setup message before RrcReconfiguration.

The major functionality of RRC Reconfiguration are to configure following RRC Components/Functions

  •   Radio Bearer
  •   Measurement
  •   Scells or Cell Group Configuration

For each of the RRC Component/Functions, RrcReconfiguration message can do following operations

  • Radio Bearer
    • Establish
    • Modify
    • Release
  • Measurement
    • Setup
    • Modify
    • Release
  • Scells or Cell Group
    •   Add
    •   Modify
    •   Release

What should UE do when it gets  RRCReconfiguration message ?

What should a UE do when it gets RrcReconfiguration message ? The answer is simple. Do whatever the message tell you to do. I know this is not the answer you want to hear :). Like in LTE, RRCReconfiguration is the most complicated message in NR. Understanding this message in full detail is like understanding the full protocol stack of NR. You will see a good framework or starting point of understanding this message in 3GPP 38.331 - Reception of an RRCReconfiguration by the UE. Followings are some of the highest level IE(Information Elements) that you may start with.

Since this message carries too many parameters (Information Elements), you would easily get lost if you try to go through each and every items from the beginning. I would suggest you to pick up any one of the high level items from the items listed above and try to understand the overall functionality of the high level item ,and then move to next item and get an overview and so on. When you have overall understandings on every items listed above, then move down to next level (one-step down) in each section.

RRC Reconfiguration Message structure

Followings are RRC Reconfiguration Message structure from 38.331. (NOTE : This is not necessarily from the latest specification. So just get the overal structure from this note and double check with 3GPP document version that you are specifically interested in).

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                    SEQUENCE {} OPTIONAL 

< RadioBearerConfig >

The radio bearer configuration process allows the network to establish, modify, and release radio bearers for the UE. the radio bearer configuration procedure allows the network to control the radio bearers used by the UE to meet the QoS and service requirements. It is a key part of RRC connection establishment, reconfiguration, and mobility procedures.

Here is a brief overview of what radio bearer configuration does:

  • Radio bearers carry user plane data between the UE and the network. The SRBs (Signaling Radio Bearers) carry control plane data like RRC messages, while the DRBs (Data Radio Bearers) carry user plane data.
  • The network uses the RadioBearerConfig information element to configure the radio bearers for the UE. This allows the network to setup, modify or release SRBs, DRBs, and multicast MRBs.
  • Through this configuration, the network can control the QoS profile, security parameters, PDCP configuration etc for each radio bearer.
  • The network can add new radio bearers, modify the configuration of existing ones, or release radio bearers that are no longer needed.
  • The UE is required to act on the RadioBearerConfig IE and setup, modify or release bearers accordingly. This allows the UE and network to establish the necessary radio bearers to support the desired services.

Here goes a little bit detailed summary based on 38.331-

The UE performs actions to configure radio bearers based on the RadioBearerConfig IE received from the network. This includes SRB release, SRB addition/modification, DRB release, DRB addition/modification, multicast MRB release, and multicast MRB addition/modification. Followings are summary based on each sections under 38.331-

    1> SRB Release

    • Release PDCP entity and srb-Identity for SRB3 if srb3-ToRelease is included
    • Release PDCP entity and srb-Identity for SRB4 if srb4-ToRelease is included

    2> SRB Addition/Modification

    • Establish PDCP entity for target cell group for each SRB if DAPS bearer configured
    • Configure security (ciphering/integrity) based on target RAT
    • Establish PDCP entity and configure it for each new srb-Identity
    • Reconfigure PDCP for existing srb-Identity if included

    3> DRB Release

    • Release PDCP entity and drb-Identity for each drb-Identity included
    • Indicate DRB release to SDAP and upper layers

    4> DRB Addition/Modification

    • Establish PDCP entity and configure it for each new drb-Identity
    • Configure security (ciphering/integrity) based on target RAT
    • Establish SDAP entity if needed
    • Associate eps-BearerIdentity for DRB if included
    • Reconfigure PDCP for existing drb-Identity configured as DAPS bearer
    • Re-establish or recover PDCP for existing drb-Identity based on flags
    • Reconfigure SDAP entity if sdap-Config included

    5> Multicast MRB Release

    • Release PDCP entity and mrb-Identity for each mrb-Identity included

    6> Multicast MRB Addition/Modification

    • Reconfigure/re-establish/recover PDCP for existing mrb-Identity
    • Establish PDCP entity and configure it for each new mrb-Identity
    • Establish SDAP entity if needed
    • Update mrb-Identity if mrb-IdentityNew included

Followings are the Information Elements for RadioBearerConfig

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, -- Cond M

SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod

SRB-ToAddMod ::=    SEQUENCE {
    srb-Identity        SRB-Identity,
    reestablishPDCP     ENUMERATED{true}    OPTIONAL, - Need N
    discardOnPDCP       ENUMERATED{true}    OPTIONAL, -- Need N
    pdcp-Config         PDCP-Config     OPTIONAL, -- Cond PDCP

DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod

    cnAssociation                           CHOICE {
        eps-BearerIdentity                  INTEGER (0..15)      OPTIONAL,      
        sdap-Config                         SDAP-Config     OPTIONAL  
    drb-Identity                            DRB-Identity,
    reestablishPDCP                         ENUMERATED{true}     OPTIONAL, 
    recoverPDCP                             ENUMERATED{true}     OPTIONAL,     
    pdcp-Config                             PDCP-Config          OPTIONAL, 

SDAP-Config ::= SEQUENCE {
   pdu-Session                PDU-SessionID,
   sdap-HeaderDL              ENUMERATED {present, absent},
   sdap-HeaderUL              ENUMERATED {present, absent},
   defaultDRB                 BOOLEAN,
   mappedQoS-FlowsToAdd       SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, 
   mappedQoS-FlowsToRelease   SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, 

QFI ::= INTEGER (0..maxQFI)
PDU-SessionID ::= INTEGER (0..255)

PDCP-Config ::= SEQUENCE {
    drb SEQUENCE {
        discardTimer ENUMERATED {ms10, ms20, ms30, ms40, ms50, ms60, ms75, ms100, ms150, ms200,
                            ms250, ms300, ms500, ms750, ms1500, infinity} OPTIONAL, --Cond Setup
        pdcp-SN-SizeUL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2
        pdcp-SN-SizeDL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2
        headerCompression CHOICE {
        notUsed NULL,
        rohc SEQUENCE {
            maxCID INTEGER (1..16383) DEFAULT 15,
            profiles SEQUENCE {
                profile0x0001 BOOLEAN,
                profile0x0002 BOOLEAN,
                profile0x0003 BOOLEAN,
                profile0x0004 BOOLEAN,
                profile0x0006 BOOLEAN,
                profile0x0101 BOOLEAN,
                profile0x0102 BOOLEAN,
                profile0x0103 BOOLEAN,
                profile0x0104 BOOLEAN
            drb-ContinueROHC ENUMERATED { true } OPTIONAL -- Need N
        uplinkOnlyROHC SEQUENCE {
            maxCID INTEGER (1..16383) DEFAULT 15,
            profiles SEQUENCE {
                profile0x0006 BOOLEAN
            drb-ContinueROHC ENUMERATED { true } OPTIONAL -- Need N
        integrityProtection ENUMERATED { enabled } OPTIONAL, -- Cond ConnectedTo5GC
        statusReportRequired ENUMERATED { true } OPTIONAL, -- Cond Rlc-AM
        outOfOrderDelivery ENUMERATED { true } OPTIONAL -- Need R
    } OPTIONAL, -- Cond DRB
    moreThanOneRLC SEQUENCE {
        primaryPath SEQUENCE {
            cellGroup              CellGroupId               OPTIONAL, -- Need R
            logicalChannel         LogicalChannelIdentity    OPTIONAL -- Need R
        ul-DataSplitThreshold      UL-DataSplitThreshold     OPTIONAL, -- Cond SplitBearer
        pdcp-Duplication           BOOLEAN                   OPTIONAL -- Need R
    } OPTIONAL, 
    t-Reordering ENUMERATED {
                        ms0, ms1, ms2, ms4, ms5, ms8, ms10, ms15, ms20, ms30, ms40,
                        ms50, ms60, ms80, ms100, ms120, ms140, ms160, ms180, ms200, ms220,
                        ms240, ms260, ms280, ms300, ms500, ms750, ms1000, ms1250,
                        ms1500, ms1750, ms2000, ms2250, ms2500, ms2750,
                        ms3000, spare28, spare27, spare26, spare25, spare24,
                        spare23, spare22, spare21, spare20,
                        spare19, spare18, spare17, spare16, spare15, spare14,
                        spare13, spare12, spare11, spare10, spare09,
                        spare08, spare07, spare06, spare05, spare04, spare03,
                        spare02, spare01 } OPTIONAL, -- Need S
    cipheringDisabled ENUMERATED {true} OPTIONAL -- Cond ConnectedTo5GC

UL-DataSplitThreshold ::= ENUMERATED {
    b0, b100, b200, b400, b800, b1600, b3200, b6400, b12800, b25600, b51200, b102400, b204800,
    b409600, b819200, b1228800, b1638400, b2457600, b3276800, b4096000, b4915200, b5734400,
    b6553600, infinity, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}

DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity

SecurityConfig ::= SEQUENCE {  
    securityAlgorithmConfig                 SecurityAlgorithmConfig    OPTIONAL, 
    keyToUse                                ENUMERATED{KeNB, S-KgNB}   OPTIONAL

SecurityAlgorithmConfig ::= SEQUENCE {
    cipheringAlgorithm           CipheringAlgorithm,
    integrityProtAlgorithm       IntegrityProtAlgorithm  OPTIONAL,   -- Need R   

IntegrityProtAlgorithm ::=  ENUMERATED {
                    nia0, nia1, nia2, nia3, spare4, spare3,
                    spare2, spare1, ...}

CipheringAlgorithm ::=  ENUMERATED {
                    nea0, nea1, nea2, nea3, spare4, spare3,
                    spare2, spare1, ...}

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

MAC-CellGroupConfig ::=     SEQUENCE {
    drx-Config                  SetupRelease { DRX-Config } OPTIONAL, -- Need M
    schedulingRequestConfig     SchedulingRequestConfig     OPTIONAL, -- Need M
    bsr-Config                  BSR-Config                  OPTIONAL, -- Need M
    tag-Config                  TAG-Config                  OPTIONAL, -- Need M 
    phr-Config                  SetupRelease { PHR-Config } OPTIONAL, -- Need M
    skipUplinkTxDynamic         BOOLEAN,
    cs-RNTI                     SetupRelease { RNTI-Value } OPTIONAL -- Need M

DRX-Config ::= SEQUENCE {
    drx-onDurationTimer     CHOICE {
                               subMilliSeconds INTEGER (1..31),
                               milliSeconds    ENUMERATED {
                                   ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, 
                                   ms40, ms50, ms60, ms80, ms100, ms200, ms300, ms400, ms500,
                                   ms600, ms800, ms1000, ms1200, ms1600, spare9, spare8, spare7,
                                   spare6, spare5, spare4, spare3, spare2, spare1 }
    drx-InactivityTimer        ENUMERATED { 
                                   ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, 
                                   ms40, ms50, ms60, ms80, ms100, ms200, ms300, ms500, ms750,
                                   ms1280, ms1920, ms2560, spare9, spare8, spare7, spare6, 
                                   spare5, spare4, spare3, spare2, spare1},
    drx-HARQ-RTT-TimerDL         INTEGER (0..56),
    drx-HARQ-RTT-TimerUL         INTEGER (0..56),
    drx-RetransmissionTimerDL    ENUMERATED { 
                                   sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64,
                                   sl80, sl96, sl112, sl128, sl160, sl320, spare15, spare14,
                                   spare13, spare12, spare11, spare10, spare9, spare8, spare7,
                                   spare6, spare5, spare4, spare3, spare2, spare1},
    drx-RetransmissionTimerUL    ENUMERATED {
                                   sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64,
                                   sl80, sl96, sl112, sl128, sl160, sl320, spare15, spare14,
                                   spare13, spare12, spare11, spare10, spare9, spare8, spare7,
                                   spare6, spare5, spare4, spare3, spare2, spare1 },
    drx-LongCycleStartOffset        CHOICE {
        ms10                            INTEGER(0..9),
        ms20                            INTEGER(0..19),
        ms32                            INTEGER(0..31),
        ms40                            INTEGER(0..39),
        ms60                            INTEGER(0..59),
        ms64                            INTEGER(0..63),
        ms70                            INTEGER(0..69),
        ms80                            INTEGER(0..79),
        ms128                           INTEGER(0..127),
        ms160                           INTEGER(0..159),
        ms256                           INTEGER(0..255),
        ms320                           INTEGER(0..319),
        ms512                           INTEGER(0..511),
        ms640                           INTEGER(0..639),
        ms1024                          INTEGER(0..1023),
        ms1280                          INTEGER(0..1279),
        ms2048                          INTEGER(0..2047),
        ms2560                          INTEGER(0..2559),
        ms5120                          INTEGER(0..5119),
        ms10240                         INTEGER(0..10239)
    shortDRX  SEQUENCE {
        drx-ShortCycle        ENUMERATED  {
                                  ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, 
                                  ms30, ms32, ms35, ms40, ms64, ms80, ms128, ms160, ms256, 
                                  ms320, ms512, ms640, spare9, spare8, spare7, spare6, spare5,
                                  spare4, spare3, spare2, spare1 },
        drx-ShortCycleTimer                 INTEGER (1..16)
    }       OPTIONAL,         -- Need R
    drx-SlotOffset                      INTEGER (0..31)


PHR-Config ::= SEQUENCE {
    phr-PeriodicTimer           ENUMERATED {sf10, sf20, sf50, sf100, sf200,sf500, sf1000, infinity},
    phr-ProhibitTimer           ENUMERATED {sf0, sf10, sf20, sf50, sf100,sf200, sf500, sf1000},
    phr-Tx-PowerFactorChange    ENUMERATED {dB1, dB3, dB6, infinity},
    multiplePHR                 BOOLEAN,
    phr-Type2PCell              BOOLEAN,
    phr-Type2OtherCell          BOOLEAN,
    phr-ModeOtherCG             ENUMERATED {real, virtual}


TAG-Config ::=SEQUENCE {
    tag-ToReleaseList         SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-Id   OPTIONAL,-- Need N
    tag-ToAddModList          SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-ToAddMod OPTIONAL -- Need N

    tag-Id                      TAG-Id,
    timeAlignmentTimer          TimeAlignmentTimer,

TAG-Id ::= INTEGER (0..maxNrofTAGs-1)

TimeAlignmentTimer ::= ENUMERATED {ms500, ms750, ms1280, ms1920, ms2560, ms5120, 
                                        ms10240, infinity}

BSR-Config ::= SEQUENCE {
    periodicBSR-Timer        ENUMERATED {
                                sf1, sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128,
                                sf160, sf320, sf640, sf1280, sf2560, infinity},
    retxBSR-Timer            ENUMERATED { sf10, sf20, sf40, sf80, sf160, sf320, sf640, sf1280,
                                sf2560, sf5120, sf10240, spare5, spare4,spare3, spare2, spare1},
    logicalChannelSR-DelayTimer     ENUMERATED { sf20, sf40, sf64, sf128, sf512, sf1024, sf2560,
                                                spare1}    OPTIONAL    -- Need R

SchedulingRequestConfig ::= SEQUENCE {
    schedulingRequestToAddModList       SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF
                                                SchedulingRequestToAddMod    OPTIONAL, -- Need N
    schedulingRequestToReleaseList      SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF
                                                SchedulingRequestId          OPTIONAL  -- Need N

SchedulingRequestToAddMod ::=SEQUENCE {
    sr-ConfigIndex                      SchedulingRequestId,
    sr-ProhibitTimer                    ENUMERATED {ms1, ms2, ms4, ms8, ms16, 
                                                    ms32, ms64, ms128}  OPTIONAL,   -- Need S
    sr-TransMax                         ENUMERATED {n4,n8,n16,n32,n64,spare3,spare2,spare1}

SchedulingRequestId ::= INTEGER (0..7)

CellGroupId ::= INTEGER (1.. maxSCellGroups)

LCH-Config ::= SEQUENCE {
    logicalChannelIdentity                  LogicalChannelIdentity,
    servedRadioBearer                       INTEGER (1..32)       OPTIONAL,   
    reestablishRLC                          ENUMERATED {true}     OPTIONAL,   
    rlc-Config                              RLC-Config           OPTIONAL,  
    mac-LogicalChannelConfig                LogicalChannelConfig    OPTIONAL 

LogicalChannelIdentity ::= INTEGER (1..FFS)

PhysicalCellGroupConfig ::= SEQUENCE {
    harq-ACK-SpatialBundlingPUCCH       ENUMERATED {true}    OPTIONAL,   -- Need S
    harq-ACK-SpatialBundlingPUSCH       ENUMERATED {true}    OPTIONAL,   -- Need S
    p-NR                                P-Max                OPTIONAL,   -- Need R
    pdsch-HARQ-ACK-Codebook             ENUMERATED {semiStatic, dynamic},
    tpc-SRS-RNTI                        RNTI-Value           OPTIONAL,   -- Need R
    tpc-PUCCH-RNTI                      RNTI-Value           OPTIONAL,   -- Need R
    tpc-PUSCH-RNTI                      RNTI-Value           OPTIONAL,   -- Need R
    sp-CSI-RNTI                         RNTI-Value           OPTIONAL,   -- Cond SP-CSI-Report
    cs-RNTI                             SetupRelease { RNTI-Value }  OPTIONAL,    -- Need R

< MeasConfig >

MeasConfig is to specify various configurations for RRC level measurement like types of measurement, types of reference signal for the measurement etc. The details are specifed in 38.331-5.5

Types of Measurement

  • NR measurements;
  • Inter-RAT measurements of E-UTRA frequencies;
  • Inter-RAT measurements of UTRA-FDD frequencies;
  • NR sidelink measurements of L2 U2N Relay UEs.

Type of Reference signal for the measurement and corresponding measurement item. These measurements are performed only when they are configured in the RRC message.

  • SS/PBCH block(s):
    • Measurement results per SS/PBCH block;
    • Measurement results per cell based on SS/PBCH block(s);
    • SS/PBCH block(s) indexes.
  • CSI-RS resources:
    • Measurement results per CSI-RS resource;
    • Measurement results per cell based on CSI-RS resource(s);
    • CSI-RS resource measurement identifiers.
  • NR sidelink and V2X sidelink for Cross Link Interference:
    • CBR(Channel Busy Ratio) measurements.
  • SRS resources for Cross Link Interference(CLI):
    • Measurement results per SRS resource;
    • SRS resource(s) indexes.
  • CLI-RSSI (Cross Link Interference RSSI) resources:
    • Measurement results per CLI-RSSI resource;
    • CLI-RSSI resource(s) indexes.
  • CSI-RS for tracking or PRS:
    • UE Rx-Tx time difference measurement result.

Components of Measurement Configuration

This is a pretty huge topic and it is decribed in a separate note here.

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
MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxNrofObjectId)) OF MeasObjectId
MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF MeasId
ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId

MeasGapConfig ::= SEQUENCE {
    gapFR2 SetupRelease { GapConfig } OPTIONAL, -- Need M

GapConfig ::= SEQUENCE {
    gapOffset INTEGER (0..159),
    mgl ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6},
    mgrp ENUMERATED {ms20, ms40, ms80, ms160},
    mgta ENUMERATED {ms0, ms0dot25, ms0dot5},

MeasGapSharingConfig ::= SEQUENCE {
    gapSharingFR2 SetupRelease { MeasGapSharingScheme } OPTIONAL, -- Need M
MeasGapSharingScheme ::= ENUMERATED { scheme00, scheme01, scheme10, scheme11 }

QuantityConfig ::= SEQUENCE {
    quantityConfigNR-List       SEQUENCE (SIZE (1..maxNrofQuantityConfig)) 
                                       OF QuantityConfigNR OPTIONAL, -- Need M

QuantityConfigNR::= SEQUENCE {
    quantityConfigCell         QuantityConfigRS,
    quantityConfigRS-Index     QuantityConfigRS OPTIONAL -- Need M

QuantityConfigRS ::= SEQUENCE {
    ssb-FilterConfig           FilterConfig,
    cs-RS-FilterConfig         FilterConfig

FilterConfig ::= SEQUENCE {
    filterCoefficientRSRP      FilterCoefficient DEFAULT fc4,
    filterCoefficientRSRQ      FilterCoefficient DEFAULT fc4,
    filterCoefficientRS-SINR   FilterCoefficient DEFAULT fc4

< SpcellConfig >

 "spCell" stands for Special or Secondary Primary Cell. The term "spCell" refers to a specific or primary cell in a defined group within a cellular network. "spCell" is used to refer to a special cell for a defined group, making it the primary cell of that particular group. It's often mentioned in the context of Master Cell Group (MCG) and Secondary Cell Group (SCG), where it denotes the primary cell of these groups. In the context of NSA, spCell is the first NR cell added as SCG(Secondary Cell Group) to LTE anchor.

  • spCellConfig configures a special cell configuration for a defined group of cells in a 5G network. It essentially denotes the primary cell of a specified group, with mentions of Pcell for Master Cell Group (MCG) and PScell for Secondary Cell Group (SCG)
  • There are two specific configurations under spCellConfig: spCellConfigCommon and spCellConfigDedicated.
  • spCellConfigCommon is a common configuration available to all User Equipment (UE) for initial access to the network. It contains parameters used for initial Random Access Channel (RACH) synchronization with the Secondary Synchronization Signal Block (SSB). Parameters under this configuration are used for initial Bandwidth Part (BWP) calculations for both downlink (DL) and uplink (UL) which decide access to the NR cell after a specific trigger. This information is ideally sent as part of SIB1 in Standalone (SA) mode or via LTE RRC Signaling in an NR Container in case of EN-DC (E-UTRAN New Radio - Dual Connectivity).
  • spCellConfigDedicated is a dedicated configuration with specific parameters for a particular UE. It contains different configurations like CORESET/Searchspace, PUCCH allocations, PDSCH/PUSCH time domain allocation information, and it also allows the network to configure different BWPs for common and dedicated configurations
SpCellConfig ::=       SEQUENCE {
    servCellIndex                   ServCellIndex       OPTIONAL,   -- Cond SCG
    reconfigurationWithSync         ReconfigurationWithSync         OPTIONAL,  
    rlf-TimersAndConstants          etupRelease { RLF-TimersAndConstants } OPTIONAL,   -- Need M
    rlmInSyncOutOfSyncThreshold     INTEGER (0..1)                         OPTIONAL,   -- Need M
    spCellConfigDedicated           ServingCellConfig                   OPTIONAL,   -- Need M

ReconfigurationWithSync ::=         SEQUENCE {
    spCellConfigCommon                ServingCellConfigCommon       OPTIONAL,   -- Need M
    newUE-Identity                      RNTI-Value,
    t304                                ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000
                                                   , ms2000, ms10000},
    rach-ConfigDedicated              CHOICE {
            uplink                              RACH-ConfigDedicated,
            supplementaryUplink                 RACH-ConfigDedicated
    }                                 OPTIONAL,   -- Need N

ServingCellConfig ::=       SEQUENCE {
    tdd-UL-DL-ConfigurationDedicated    TDD-UL-DL-ConfigDedicated   OPTIONAL,-- Cond TDD
    initialDownlinkBWP                  BWP-DownlinkDedicated  OPTIONAL,  -- Cond ServCellAdd
    downlinkBWP-ToReleaseList           SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id  OPTIONAL,
    downlinkBWP-ToAddModList        SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Downlink OPTIONAL
    firstActiveDownlinkBWP-Id       BWP-Id      OPTIONAL,   -- Need R
    bwp-InactivityTimer         ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, 
                                            ms30, ms40,ms50, ms60, ms80, ms100, ms200, 
                                            ms300, ms500, ms750, ms1280, ms1920, ms2560, 
                                            spare10, spare9, spare8, spare7, spare6, 
                                            spare5, spare4, spare3, spare2, spare1 } OPTIONAL, 
    defaultDownlinkBWP-Id       BWP-Id      OPTIONAL,   -- Need M
    uplinkConfig                UplinkConfig    OPTIONAL, -- Cond ServCellAdd-UL
    supplementaryUplink         UplinkConfig    OPTIONAL, -- Cond ServCellAdd-SUL
    pdsch-ServingCellConfig     SetupRelease { PDSCH-ServingCellConfig } OPTIONAL, -- Need M
    csi-MeasConfig              SetupRelease { CSI-MeasConfig } OPTIONAL,   -- Need M
    carrierSwitching            SetupRelease { SRS-CarrierSwitching} OPTIONAL,  -- Need M
    sCellDeactivationTimer      ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240, ms320, 
                                            ms400, ms480, ms520, ms640, ms720, ms840, 
                                            ms1280, spare2,spare1} OPTIONAL,-- Cond     ServingCellWithoutPUCCH
    crossCarrierSchedulingConfig    CrossCarrierSchedulingConfig    OPTIONAL,   -- Need M 
    tag-Id                          TAG-Id,
    ue-BeamLockFunction             ENUMERATED {enabled}    OPTIONAL,   -- Need R
    pathlossReferenceLinking        ENUMERATED {pCell, sCell} OPTIONAL  -- Cond SCellOnly

PDSCH-ServingCellConfig ::= SEQUENCE {
    codeBlockGroupTransmission       SetupRelease { 
                                     }   OPTIONAL,   -- Need M
    xOverhead                        ENUMERATED { xOh6, xOh12, xOh18 }       OPTIONAL,-- Need S
    nrofHARQ-ProcessesForPDSCH       ENUMERATED {n2, n4, n6, n10, n12, n16}  OPTIONAL,-- Need S
    pucch-Cell                       ServCellIndex      OPTIONAL    ,   -- Cond SCellAddOnly

PDSCH-CodeBlockGroupTransmission ::= SEQUENCE {
    maxCodeBlockGroupsPerTransportBlock     ENUMERATED {n2, n4, n6, n8},
    codeBlockGroupFlushIndicator            BOOLEAN,

UplinkConfig ::=    SEQUENCE {
    initialUplinkBWP            BWP-UplinkDedicated OPTIONAL,   -- Cond ServCellAdd. 
    uplinkBWP-ToReleaseList     SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL,-- Need N
    uplinkBWP-ToAddModList      SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Uplink  OPTIONAL, 
    firstActiveUplinkBWP-Id     BWP-Id  OPTIONAL,   -- Need R
    pusch-ServingCellConfig     SetupRelease { PUSCH-ServingCellConfig } OPTIONAL, 

ServingCellConfigCommon ::= SEQUENCE {
    physCellId                  PhysCellId  
    downlinkConfigCommon        DownlinkConfigCommon, 
    uplinkConfigCommon          UplinkConfigCommon 
    supplementaryUplinkConfig   UplinkConfigCommon  
    n-TimingAdvanceOffset        ENUMERATED { n0, n25600, n39936 }
    ssb-PositionsInBurst        CHOICE {
        shortBitmap               BIT STRING (SIZE (4)),
        mediumBitmap              BIT STRING (SIZE (8)),
        longBitmap                BIT STRING (SIZE (64))
    }   OPTIONAL, -- Need R,
    ssb-periodicityServingCell      ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, 
                                                 spare2, spare1 }OPTIONAL,  -- Need S
    dmrs-TypeA-Position             ENUMERATED {pos2, pos3},
    lte-CRS-ToMatchAround           SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL,  
    rateMatchPatternToAddModList    SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF
    rateMatchPatternToReleaseList   SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF
    ssbsubcarrierSpacing            SubcarrierSpacing   
    tdd-UL-DL-ConfigurationCommon   TDD-UL-DL-ConfigCommon   
    ss-PBCH-BlockPower              INTEGER (-60..50),

RateMatchPatternLTE-CRS ::= SEQUENCE {
    carrierFreqDL                   INTEGER (0..16383),
    carrierBandwidthDL              ENUMERATED {n6, n15, n25, n50, n75, n100, spare2, spare1},
    mbsfn-SubframeConfigList        EUTRA-MBSFN-SubframeConfigList OPTIONAL, 
    nrofCRS-Ports                   ENUMERATED {n1, n2, n4},
    v-Shift                         ENUMERATED {n0, n1, n2, n3, n4, n5}

RateMatchPattern ::= SEQUENCE {
    rateMatchPatternId RateMatchPatternId,
    patternType CHOICE {
        bitmaps SEQUENCE {
        resourceBlocks              BIT STRING (SIZE (275)),
        symbolsInResourceBlock CHOICE {
            oneSlot                 BIT STRING (SIZE (14)),
            twoSlots                BIT STRING (SIZE (28))
        periodicityAndPattern CHOICE {
            n2                      BIT STRING (SIZE (2)),
            n4                      BIT STRING (SIZE (4)),
            n5                      BIT STRING (SIZE (5)),
            n8                      BIT STRING (SIZE (8)),
            n10                     BIT STRING (SIZE (10)),
            n20                     BIT STRING (SIZE (20)),
            n40                     BIT STRING (SIZE (40))
        } OPTIONAL, -- Need S
        controlResourceSet          ControlResourceSetId
        subcarrierSpacing           SubcarrierSpacing OPTIONAL, -- Cond CellLevel
        mode                        ENUMERATED { dynamic, semiStatic },

EUTRA-MBSFN-SubframeConfigList ::= 
            SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF EUTRA-MBSFN-SubframeConfig

EUTRA-MBSFN-SubframeConfig ::= SEQUENCE {
    radioframeAllocationPeriod          ENUMERATED {n1, n2, n4, n8, n16, n32},
    radioframeAllocationOffset          INTEGER (0..7),
    subframeAllocation CHOICE {
        oneFrame                        BIT STRING (SIZE(6)),
        fourFrames                      BIT STRING (SIZE(24))
    subframeAllocation-v1430 CHOICE {
        oneFrame-v1430                  BIT STRING (SIZE(2)),
        fourFrames-v1430                BIT STRING (SIZE(8))
    } OPTIONAL, -- Need R

SubcarrierSpacing ::=  ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1}

UplinkConfigCommon ::=      SEQUENCE {.
    frequencyInfoUL     FrequencyInfoUL     
    initialUplinkBWP    BWP-UplinkCommon    

FrequencyInfoDL ::=         SEQUENCE {
    absoluteFrequencySSB        ARFCN-ValueNR,
    frequencyBandList           MultiFrequencyBandListNR,
    absoluteFrequencyPointA     ARFCN-ValueNR,
    scs-SpecificCarrierList     SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,

SCS-SpecificCarrier ::=             SEQUENCE {
    offsetToCarrier                     INTEGER (0..2199),
    subcarrierSpacing                   SubcarrierSpacing,
    carrierBandwidth                    INTEGER (1..maxNrofPhysicalResourceBlocks),
    txDirectCurrentLocation-v1530   INTEGER (0..4095)  OPTIONAL            -- Need S

absoluteFrequencySSB : Frequency of the SSB to be used for this serving cell. SSB related parameters (e.g. SSB index) provided for a serving cell refer to this SSB frequency unless mentioned otherwise. The frequency provided in this field identifies the position of resource element RE=#0 (subcarrier #0) of resource block RB#10 of the SS block. The cell-defining SSB of the PCell is always on the sync raster. Frequencies are considered to be on the sync raster if they are also identifiable with a GSCN value. If the field is absent, the SSB related parameters should be absent, e.g. ssb-PositionsInBurst, ssb-periodicityServingCell and subcarrierSpacing in ServingCellConfigCommon IE. If the field is absent, the UE obtains timing reference from the SpCell. This is only supported in case the Scell is in the same frequency band as the SpCell

absoluteFrequencyPointA :  Absolute frequency position of the reference resource block (Common RB 0). Its lowest subcarrier is also known as Point A. Note that the lower edge of the actual carrier is not defined by this field but rather in the scs-SpecificCarrierList. Corresponds to L1 parameter 'offset-ref-low-scs-ref-PRB' . See this page for further details.

carrierBandwidth : Width of this carrier in number of PRBs (using the subcarrierSpacing defined for this carrier) Corresponds to L1 parameter 'BW

offsetToCarrier : Offset in frequency domain between Point A (lowest subcarrier of common RB 0) and the lowest usable subcarrier on this carrier in number of PRBs (using the subcarrierSpacing defined for this carrier). The maximum value corresponds to 275*8-1. Corresponds to L1 parameter 'offset-pointA-low-scs'

SubcarrierSpacing : Subcarrier spacing of this carrier. It is used to convert the offsetToCarrier into an actual frequency. Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable. The network configures all SCSs of configured BWPs configured in this serving cell. Corresponds to L1 parameter 'ref-scs'

txDirectCurrentLocation : Indicates the downlink Tx Direct Current location for the carrier. A value in the range 0..3299 indicates the subcarrier index within the carrier. The values in the value range 3301..4095 are reserved and ignored by the UE. If this field is absent, the UE assumes the default value of 3300 (i.e. "Outside the carrier").

offsetToPointA : The offset in PRB between the Point A and the lowest subcarrier of the lowest PRB of the cell-defining SSB after floating SSB is resolved. See this page for further details.


Example 01 : spCellConfig.FrequencyInfoDL


IE(Information Element)
















































FrequencyInfoUL ::=      SEQUENCE {
    frequencyBandList           MultiFrequencyBandListNR            
    absoluteFrequencyPointA     ARFCN-ValueNR                   
    scs-SpecificCarriers        SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
    additionalSpectrumEmission  AdditionalSpectrumEmission  
    p-Max               P-Max       
    frequencyShift7p5khz        ENUMERATED {true}

subcarrierSpacingCommon : Indicates Subcarrier spacing for SIB1, Msg.2/4 for initial access and SI-messages.

                            Values 15, and 30 kHz are applicable for carrier frequencies <6GHz;

                            Values 60 and 120 kHz are applicable for carrier frequencies >6GHz

ssb-subcarrieroffset :  The frequency domain offset between SSB and the overall resource block grid in number of subcarriers. Absence of the field indicates that no offset if applied (offset = 0). See 38.211,

ssb-PositionsInBurst : Indicates the time domain positions of the transmitted SS-blocks in an SS-burst. It corresponds to L1 parameter 'SSB-Transmitted' (see 38.213, section 4.1)

                         shortBitmap : bitmap for sub 3 GHz

                         mediumBitmap : bitmap for 3-6 GHz

                         longBitmap : bitmap for above 6 GHz

ssb-periodicityServingCell : The SSB periodicity in msec for the rate matching purpose (see 38.211-  

dmrs-TypeA-Position : Position of (first) DL DM-RS (see 38.211, section This field is usually in MIB. Assuming that the UE does not need to acquire MIB before sending RA to target cell, this parameter should also be here.

subcarrierSpacingSSB : Subcarrier spacing of SSB. Used only for non-initial access (e.g. SCells, PCell of SCG).

ss-PBCH-BlockPower : TX power that the NW used for SSB transmission. The UE uses it to estimate the RA preamble TX power

rach-ConfigCommon : Parameters that are also conveyed via system information (SIB1) but which are provided here to accelerate handover and to avoid that UEs need to read system information from SCells. See rach-ConfigCommon details in RACH page.

newUE-Identity : This is used as an RNTI assigning a C-RNTI to a UE. 38.331(v15.1)- states 'apply the value of the newUE-Identity as the C-RNTI for this cell group'

Example :

Example 01 : Initial NR Addition.

   You can get the entire procedure of how to test NSA and full log from this tutorial of Amarisoft Tech-Academy