You already know what handover is. It is a cell change while the UE stays in connected mode. The network decides the right moment and tells the UE to move from one cell to another.
Conditional handover is different. If you put it literally, it means handover that happens under specific conditions. It does not happen right away when the network prepares it. The network gives the UE a handover command in advance and also gives the condition for when to use it. The UE keeps this information and monitors the radio environment. When the condition is satisfied, the UE executes the handover by itself without waiting for another command from the network.
This makes the handover faster and more robust in fast-changing radio environments. The execution timing is controlled by the UE instead of the gNB. The network prepares the target cell early, and the UE chooses the right moment (i.e, the specific situation to meet the specific conditions defined by gNB) to make the switch. This is the core idea of conditional handover.
- Fundamental difference between Conventional Handover and Condition Handover
- Why CHO ?
- Signaling Flow
- RRC Parameters
- UE Capability Information
- Examples
Fundamental difference between Conventional Handover and Condition Handover
The basic difference between conventional handover and conditional handover can be seen from multiple perspectives such as who decides the timing of execution, how the handover message is structured, and how the signaling flows between UE and the network. In a conventional handover, the gNB controls the entire process. The UE sends a measurement report when a specific event, such as A3, is triggered. The gNB decides whether to hand over and when to do it. Once the decision is made, the gNB sends an RRC Reconfiguration message containing the handover command, and the UE executes the handover immediately. The handover timing is tightly coupled to the moment when the gNB makes its decision.
In a conditional handover, the process is split. The gNB still makes the initial decision on which cells to prepare as handover candidates, but it does not decide the exact moment of execution. Instead, the gNB provides the UE with the handover command in advance together with the execution condition and validity timer. The UE stores this configuration and monitors the radio link. When the pre-defined condition is met, the UE executes the handover on its own without waiting for another network command. This shifts the execution timing from network control to UE control.
This change also impacts the message flow. In conventional handover, the handover command comes after the measurement report and the decision, which means the signaling chain directly determines the HO timing. In conditional handover, the UE receives the configuration earlier and the execution happens locally, so the HO is not bound by network signaling latency. It also affects how multiple targets are handled. Conventional handover usually involves a single target cell at decision time. Conditional handover can involve multiple candidate cells provided to the UE at once, and the UE executes toward whichever meets the condition first.
The result is that conventional handover provides tight network control and simpler resource handling but can be vulnerable to delay and failure in fast mobility. Conditional handover increases execution flexibility and reliability in high-mobility or uncertain radio conditions but requires more preparation and context management at the network side. The most fundamental difference is simple: in conventional handover, the network decides when to execute. In conditional handover, the UE decides when to execute.

-
In conventional handover, the gNB controls the execution timing.
- The UE sends a measurement report when a specific event like A3 is triggered.
- The gNB decides whether to hand over and when to do it.
- Once the decision is made, the gNB sends an RRC Reconfiguration message containing the handover command.
- The UE executes the handover immediately after receiving the command.
- The handover timing is tightly coupled with the network decision.
-
In conditional handover, the execution timing shifts to the UE.
- The gNB determines candidate cells and prepares the CHO configuration.
- The UE receives the handover command together with the execution condition and validity timer.
- The UE monitors the radio condition locally.
- When the condition is met, the UE executes the handover without waiting for further signaling.
- This allows faster and more robust execution, especially in high-mobility scenarios.
-
The message structure and signaling flow are also different.
- In conventional HO, the handover command follows the measurement report and decision.
- In CHO, the configuration is sent in advance, and execution is decoupled from the signaling chain.
- This reduces signaling latency during handover execution.
-
The handling of multiple targets is different as well.
- Conventional HO usually involves one target cell chosen at decision time.
- CHO can include multiple candidate cells, and the UE selects the one that meets the condition first.
-
The network impact also differs.
- Conventional HO offers tighter network control and simpler resource handling.
- CHO requires more preparation and context management but increases handover reliability in fast-changing environments.
-
The most fundamental difference is simple and clear:
- In conventional HO, the network decides when to execute.
- In CHO, the UE decides when to execute.
Why CHO ?
Conventional handover works well when the radio condition is stable and the UE is not moving too fast. But it can become fragile when the UE moves quickly or when the signal fluctuates rapidly around the cell border. In these situations, the handover timing decided by the network may not match the best radio moment for the UE. Even a small delay in signaling can cause the UE to lose coverage or hit radio link failure before the handover completes.
CHO addresses this problem by shifting the execution timing from the network to the UE. The network prepares the handover in advance and provides the target information and the execution condition. The UE monitors the radio environment and executes the handover at the optimal moment, without waiting for a new command. This reduces latency, minimizes failure due to late execution, and improves robustness in mobility scenarios such as highway movement, high-speed trains, and cell-edge fluctuations.
Another reason for CHO is flexibility. The network can prepare multiple candidate cells in one step. The UE can choose the most appropriate one at runtime, depending on which signal becomes strongest first. This avoids unnecessary handover retries and helps reduce ping-pong effects.
From a performance perspective, CHO is especially beneficial when the handover margin is narrow, the UE speed is high, or the radio environment changes fast. It provides more control to the UE while reducing time-critical dependency on network signaling. The end result is faster handover execution and better mobility stability.
- CHO is introduced to make handover more reliable in conditions where conventional handover can be too slow or too rigid.
- It reduces the dependency on network signaling timing and allows the UE to choose the best execution moment.
- It minimizes handover failure caused by late execution or unstable cell edge signal.
- It improves mobility performance especially for high-speed UEs such as vehicles and trains.
- It gives flexibility by allowing the network to configure multiple candidate cells in advance.
- It helps avoid ping-pong and unnecessary retries by letting the UE pick the best cell at runtime.
- It improves overall handover latency and stability in rapidly changing radio environments.
Signaling Flow
Conditional Handover is a mobility procedure that prepares the UE and the network before any actual handover is needed, so the whole operation can happen instantly when the right condition is met. The whole flow consists of four major phases. The first phase is the CHO configuration phase where the source gNB sends the RRCReconfiguration with the CHO configuration, including target cells, trigger conditions, and dedicated RACH resources. The second phase is the UE monitoring phase where the UE applies the configuration and autonomously checks the neighbor cells to see if the condition is satisfied. The third phase is the CHO execution phase where the UE detects that the CHO condition is met and immediately sends the dedicated RACH preamble to the target gNB without waiting for any new command. The final phase is the post-handover cleanup where the UE completes the connection on the target side, the data path is switched, and the old resources are released. This structure allows very fast and reliable mobility because preparation happens early and execution happens only at the optimal moment.

The diagram can be described as below
Phase 1: CHO Configuration Phase - This phase sets the stage before any handover is actually needed.
- Network Configures the UE: The Source gNB sends an RRCReconfiguration message to the UE. This message contains the CHO Config, which includes:
- A list of candidate target cells.
- The specific trigger conditions the UE must monitor.
- Dedicated RACH resources for quick access to target cells.
- UE Acknowledges: UE applies the configuration and sends RRCReconfigurationComplete to the Source gNB.
- Backend Preparation: Source gNB prepares handover with potential Target gNBs.
- Handover Request: Source gNB sends HandoverRequest to a Target gNB.
- Target Acceptance: Target gNB responds with HandoverRequestAcknowledge, providing configuration details.
Phase 2: UE Monitoring & Triggering Phase - The network is now prepared, and the onus shifts to the UE.
- Autonomous Monitoring: UE continuously monitors neighbor cells and evaluates CHO conditions.
- Optional Reporting: UE may send MeasurementReport messages if configured, but these are not required for CHO execution.
Phase 3: CHO Execution Phase (Condition Met) - This phase begins once CHO criteria are met.
- Trigger Event: UE internally determines that CHO Condition is met for a target cell.
- UE Initiates Access: UE sends a Random Access Preamble (Dedicated RACH) directly to the pre-selected Target gNB.
- Target Responds: Target gNB replies with Random Access Response (RAR).
- Handover Complete: UE sends RRCReconfigurationComplete (HO Complete) to the Target gNB.
Phase 4: Post-Handover Phase - Cleanup phase after successful handover.
- Data Path Switch: Network switches user-plane traffic to the Target gNB.
- Resource Release: Target gNB sends UEContextRelease to Source gNB to free old resources.
RRC Parameters
CHO related RRC parameters define how the network delivers conditional handover configurations to the UE. They are carried in the RRC Reconfiguration message and provide all the information the UE needs to store, manage, and execute a conditional handover without waiting for further commands. In a conventional handover, the network decides the target and timing, then instructs the UE to execute. But in CHO, the network prepares the configuration early and lets the UE decide when to execute based on radio conditions.
Some parameters define when and how the UE should attempt CHO after a failure. Others define the candidate cells to be added or removed, the shared reference configurations, and the security context needed for smooth execution. Certain fields are specifically related to security handling and key derivation, especially in inter-node scenarios. Together, these fields allow the network to hand over decision timing to the UE while keeping full control of target preparation, security, and resource management. This structure is what makes CHO both fast and reliable in challenging mobility situations.
Following is based on
ConditionalReconfiguration-r16 ::= SEQUENCE {
attemptCondReconfig-r16 ENUMERATED {true} OPTIONAL, -- Cond CHO
condReconfigToRemoveList-r16 CondReconfigToRemoveList-r16 OPTIONAL, -- Need N
condReconfigToAddModList-r16 CondReconfigToAddModList-r16 OPTIONAL, -- Need N
...,
[[
scpac-ReferenceConfiguration-r18 SetupRelease {ReferenceConfiguration-r18} OPTIONAL, -- Need M
servingSecurityCellSetId-r18 SecurityCellSetId-r18 OPTIONAL, -- Need M
sk-CounterConfiguration-r18 SK-CounterConfiguration-r18 OPTIONAL -- Need M
]]
}
CondReconfigToRemoveList-r16 ::= SEQUENCE (SIZE (1.. maxNrofCondCells-r16)) OF CondReconfigId-r16
SK-CounterConfiguration-r18 ::= SEQUENCE {
sk-CounterConfigToReleaseList-r18 SEQUENCE (SIZE (1..maxSecurityCellSet-r18)) OF SecurityCellSetId-r18 OPTIONAL, -- Need N
sk-CounterConfigToAddModList-r18 SEQUENCE (SIZE (1..maxSecurityCellSet-r18)) OF SK-CounterConfig-r18 OPTIONAL -- Need N
}
SK-CounterConfig-r18 ::= SEQUENCE {
securityCellSetId-r18 SecurityCellSetId-r18,
sk-CounterList-r18 SEQUENCE (SIZE (1..maxSK-Counter-r18)) OF SK-Counter
}
SecurityCellSetId-r18 ::= INTEGER (1.. maxSecurityCellSet-r18)
Followings are brief descriptions of these parameters
-
attemptCondReconfig : If present, the UE shall perform conditional reconfiguration if selected cell is a target candidate cell and it is the first cell selection after failure as described in clause 5.3.7.3.
- This flag indicates whether the UE should attempt CHO immediately after a failure, such as an RLF or RRC re-establishment.
- It allows the UE to re-use existing CHO configuration to speed up recovery and avoid going through a full reconfiguration again.
- This reduces the interruption time by letting UE directly execute handover to one of the previously configured candidate cells.
-
condReconfigToAddModList : List of the configuration of candidate SpCells to be added or modified for CHO, CPA or CPC.
- This list contains one or more conditional reconfiguration entries that the UE will store and monitor.
- Each entry corresponds to a candidate SpCell that may be used for conditional handover or related conditional procedures.
- It provides the full configuration required for the UE to execute HO without additional network signaling.
-
condReconfigToRemoveList : List of the configuration of candidate SpCells to be removed.
- This list tells the UE which previously configured candidate cells should be deleted from its conditional configuration storage.
- It ensures that outdated or unused CHO candidates are cleared out, avoiding confusion or invalid execution triggers.
- This is important for maintaining consistency when new CHO configurations are added.
-
scpac-ReferenceConfiguration : Includes the reference configuration for the candidate supporting subsequent CPAC.
- This field provides reference parameters that are shared across multiple candidates supporting Conditional PCell Addition or Change (CPAC).
- It allows the network to avoid repeating identical configuration for each candidate cell.
- This makes signaling more efficient and keeps the CHO configuration compact.
-
servingSecurityCellSetId : This field identifies the security cell set for serving PSCell. The network does not provide this field for the conditional reconfiguration(s) generated by the SN.
- This parameter links the conditional configuration to the correct security context of the serving cell.
- It ensures that key material and security associations remain valid when UE executes CHO.
- It is provided only when the configuration originates from the MN, not from the SN.
-
sk-counterConfiguration : Includes a list of sk-Counter from which the UE should select the sk-counter used to derive S-KgNB for inter-SN subsequent CPAC. The network does not provide this field for the conditional reconfiguration(s) generated by the SN.
- This parameter gives the UE a set of counters used to derive the key S-KgNB for security context at the target cell.
- It ensures secure handover execution across nodes, especially in inter-SN mobility scenarios.
- As with servingSecurityCellSetId, this is provided only when the configuration originates from the MN.
UE Capability Informations
UE capability information plays a critical role in determining whether the network can use conditional handover for a specific UE. Unlike conventional handover, CHO requires the UE to store configuration, monitor execution conditions, and autonomously trigger the handover at the right moment. Not every device can support these functions, so the gNB must know in advance what the UE is capable of. This is done through capability signaling, where the UE advertises its support for CHO features as part of its radio access capability information.
The capability information not only indicates basic CHO support but also specifies the details of what the UE can handle. This includes whether it supports multiple trigger events, different types of execution conditions such as measurement-based, location-based, or time-based triggers, and whether it can handle CHO across duplex modes or frequency ranges. It also covers support for advanced configurations such as dual connectivity scenarios with NR, EN-DC, or NE-DC. These capabilities give the network a clear view of how flexible the UE is in handling CHO.
With this information, the gNB can decide if CHO should be configured, how many candidate cells can be used, and which trigger mechanisms are appropriate. It can also determine whether to apply CHO in inter-band or dual connectivity scenarios. In short, the UE capability information defines the boundary of what can be configured, ensuring the network uses CHO only when the UE can handle it properly. This makes CHO configuration more efficient, more reliable, and well aligned with the actual capabilities of the device.
-
condHandover-r16 : Indicates whether the UE supports conditional handover including execution condition, candidate cell configuration and maximum 8 candidate cells. Except for NTN bands, UE shall set the capability value consistently for all FDD-FR1 bands, all TDD-FR1 bands, all TDD-FR2-1 bands and all TDD-FR2-2 bands respectively. For NTN, UE shall set the capability value consistently for all FDD-FR1 NTN bands.
- This is the main capability flag indicating whether the UE supports CHO in general.
- When this feature is supported, the UE can receive and store conditional handover configurations with up to eight candidate cells.
- The consistency requirement ensures that the capability is applied uniformly across all frequency ranges and duplex modes, avoiding partial implementation per band.
- For NTN (Non-Terrestrial Network) operation, this consistency rule applies specifically to FDD-FR1 NTN bands.
-
condHandoverTwoTriggerEvents-r16 : Indicates whether the UE supports 2 trigger events for same execution condition. This feature is mandatory supported if the UE supports condHandover-r16. Except for NTN bands, UE shall set the capability value consistently for all FDD-FR1 bands, all TDD-FR1 bands, all TDD-FR2-1 bands and all TDD-FR2-2 bands respectively. For NTN, UE shall set the capability value consistently for all FDD-FR1 NTN bands.
- This capability allows the UE to monitor two different measurement events for the same CHO execution condition.
- It increases flexibility and robustness by letting the UE trigger CHO from multiple measurement perspectives, for example both A3 and A5 events.
- It is a mandatory feature for any UE that declares CHO support since it enhances mobility performance in dynamic radio environments.
-
condHandoverFailure-r16 : Indicates whether the UE supports conditional handover during re-establishment procedure when the selected cell is configured as candidate cell for condition handover. Except for NTN bands, UE shall set the capability value consistently for all FDD-FR1 bands, all TDD-FR1 bands, all TDD-FR2-1 bands and all TDD-FR2-2 bands respectively. For NTN, UE shall set the capability value consistently for all FDD-FR1 NTN bands.
- This feature allows the UE to reuse CHO configuration during RRC re-establishment, for example after a radio link failure.
- It prevents unnecessary fallback to idle or full reconnection if the previously configured candidate is still valid.
- It helps improve recovery time and reliability in case of link interruption during CHO preparation.
-
eventA4BasedCondHandover-r17 : Indicates whether the UE supports Event A4 based conditional handover in NTN bands, i.e., CondEvent A4 as specified in TS 38.331 [9]. A UE supporting this feature shall also indicate the support of condHandover-r16 for NTN bands and the support of nonTerrestrialNetwork-r17. UE shall set the capability value consistently for all FDD-FR1 NTN bands.
- This capability extends CHO support to Event A4 triggering conditions for NTN systems.
- It means the UE can perform CHO based on absolute signal level thresholds rather than relative comparisons (as in A3).
- It is specific to Non-Terrestrial Networks and must be reported consistently across all FDD-FR1 NTN bands.
-
locationBasedCondHandover-r17 : Indicates whether the UE supports location based conditional handover, i.e., CondEvent D1 as specified in TS 38.331 [9]. A UE supporting this feature shall also indicate the support of condHandover-r16 for NTN bands and the support of nonTerrestrialNetwork-r17. UE shall set the capability value consistently for all FDD FR1 NTN bands.
- This capability enables CHO triggered by location-based conditions rather than purely by radio measurements.
- The UE uses its position information to determine when to execute the handover.
- This is useful for NTN systems where geographic movement rather than signal fluctuation may be the main mobility factor.
-
timeBasedCondHandover-r17 : Indicates whether the UE supports time based conditional handover, i.e., CondEvent T1 as specified in TS 38.331 [9]. A UE supporting this feature shall also indicate the support of condHandover-r16 for NTN bands and the support of nonTerrestrialNetwork-r17. UE shall set the capability value consistently for all FDD-FR1 NTN bands.
- This allows CHO to be triggered at a specific time or after a predefined duration, rather than by radio measurement.
- It is designed mainly for NTN scenarios where satellite movement and timing predictability play a key role.
- It complements measurement-based triggers and provides deterministic HO timing for predictable orbits.
-
condHandoverFDD-TDD-r16 : Indicates whether the UE supports conditional handover between FDD and TDD cells. The parameter can only be set if condHandover-r16 is set for both FDD and TDD. The UE that indicates support of this feature shall also indicate support of handoverFDD-TDD.
- This defines whether the UE can perform CHO across duplexing modes, from FDD to TDD or vice versa.
- It is important for inter-mode mobility in mixed deployments, especially in FR1 where both FDD and TDD coexist.
- The support must align with general inter-mode HO capability (handoverFDD-TDD).
-
condHandoverFR1-FR2-r16 : Indicates whether the UE supports conditional handover HO between FR1 and FR2. The parameter can only be set if condHandover-r16 is set for both FR1 and FR2. The UE that indicates support of this feature shall also indicate support of handoverFR1-FR2.
- This enables CHO between low and high frequency ranges, such as between sub-6 GHz (FR1) and mmWave (FR2).
- It allows UEs to handle wideband mobility with preconfigured CHO conditions across frequency ranges.
- It must be aligned with inter-frequency HO capability between FR1 and FR2.
-
condHandoverWithSCG-NRDC-r17 : Indicates whether the UE supports conditional handover with NR SCG configuration for NR-DC. The UE indicating support of this feature shall also indicate the support of condHandover-r16 and support of at least one NR-DC band combination.
- This enables CHO operation for NR Dual Connectivity (NR-DC), where the UE maintains both Master and Secondary NR cells.
- It allows CHO to be executed even when an NR SCG configuration is active.
- The feature improves seamless mobility between dual-connected NR networks.
-
condHandoverWithSCG-ENDC-r17 : Indicates whether the UE supports conditional handover with NR SCG configuration for EN-DC. The UE indicating support of this feature shall also indicate the support of cho-r16 as specified in TS 36.306 [15] and at least one ENDC band combination.
- This extends CHO support to E-UTRA and NR Dual Connectivity (EN-DC) scenarios.
- It allows UEs with LTE primary and NR secondary cells to perform conditional HO using preconfigured NR SCG settings.
- This enables smooth mobility between mixed LTE-NR deployments while maintaining data continuity.
-
condHandoverWithSCG-NEDC-r17 : Indicates whether the UE supports conditional handover with E-UTRA SCG configuration for NE-DC. The UE indicating support of this feature shall also indicate the support of condHandover-r16 and at least one NE-DC band combination.
- This capability applies to New E-UTRA Dual Connectivity (NE-DC), enabling CHO when LTE secondary cells are used alongside NR master cells.
- It ensures the UE can maintain dual connectivity context during CHO execution.
- It is mainly intended for transitional deployments where NR is dominant but LTE cells are still used as secondary carriers.
Examples
The sections above explain CHO in general terms. The example below comes from a real log of an Amarisoft gNB. It starts with a message sequence table. It then decodes every step with the IEs that matter for the conditional handover, taken from the log as they are.
Example 1 : CHO with Power Change
This example is a conditional handover between two NR SA cells of one Amarisoft gNB. Cell 0x01 is PCI 500 on band n7, NR-ARFCN 526000, with its SSB at 524890. Cell 0x02 is PCI 501 on band n3, NR-ARFCN 368500, with its SSB at 367450. Both cells are FDD with 106 PRB at 15 kHz SCS, which is 20 MHz. One UE registers on cell 0x01 and gets a CHO configuration for cell 0x02. About 25 seconds later the cell power changes, the condition becomes true, and the UE moves to cell 0x02 by itself.
Figure 1. Trigger profile of Example 1. The UE executes only after cell 02 stays more than 3 dB above cell 01 for 100 ms. The power change behind it is not in the gNB log, so the curves are schematic.
Both cells belong to the same gNB, so the preparation described in Signaling Flow happens inside the gNB. No XnAP or NGAP message appears during the CHO. The only NGAP traffic in the log is NG setup, registration, PDU session setup and the final deregistration. In place of HANDOVER REQUEST and HANDOVER REQUEST ACKNOWLEDGE, the gNB simply allocates a UE context on the target cell. That allocation comes before the CHO command, which is the order of TS 38.300 clause 9.2.3.4.2. The execution uses contention based random access, because the candidate configuration has no rach-ConfigDedicated. After the CHO the gNB configures a second CHO back toward cell 0x01. That one is set up but never executed before the UE deregisters.
The sequence below lists only the messages that drive the CHO. The step number links to the decoded message further down. Dir gives the sender and the receiver. Cell 01 is the source cell and Cell 02 is the candidate cell. "gNB internal" marks a log line where the gNB changes its own UE context without sending anything over the air. PHY and MAC lines are kept only for the random access on the candidate cell. The power change itself is not in this gNB log. It was made in the test setup, so it has no row.
Step # | Dir | Message | Comment |
|---|---|---|---|
Cell 01 -> UE | RRCReconfiguration | Measurement setup after registration. MO 1 = SSB 524890 (n7), MO 2 = SSB 367450 (n3). Event A2 with a2-Threshold rsrp 96 on MO 1. | |
UE -> Cell 01 | MeasurementReport | The A2 report on measId 1. Serving PCI 500 rsrp 94. | |
Cell 01 -> Cell 02 (gNB internal) | MAC: Allocating new UE 0002 | Candidate context created on cell 02. No XnAP or NGAP preparation. | |
Cell 01 -> UE | RRCReconfiguration with conditionalReconfiguration-r16 | CHO command. Candidate PCI 501, condReconfigId 1, condEventA3 with a3-Offset 6 (3 dB), newUE-Identity 17922 (0x4602). | |
UE -> Cell 01 | RRCReconfigurationComplete | The UE stores the candidate. No handover yet. | |
UE -> Cell 02 | PRACH sequence_index=3 | Condition met 25.4 s after Step 5. Contention based preamble, snr 29.1, ta 1. | |
Cell 02 -> UE | RAR rapid=3 | Random access response with tc-rnti 0x4603. | |
UE -> Cell 02 | Msg3 with C-RNTI MAC CE 4602 | The gNB matches C-RNTI 0x4602 and resumes UE 0002. | |
UE -> Cell 02 | RRCReconfigurationComplete | CHO complete, 19 ms after the preamble. | |
Cell 01 (gNB internal) | MAC: Freeing UE 0001 on cell 01 | PDCP state copied to the target, source context released. | |
UE -> Cell 02 | MeasurementReport | The A2 report from the candidate measConfig. PCI 501 rsrp 91. | |
Cell 02 -> Cell 01 (gNB internal) | MAC: Allocating new UE 0004 | Candidate context for the way back, on cell 01. | |
Cell 02 -> UE | RRCReconfiguration with conditionalReconfiguration-r16 | Second CHO command. Candidate PCI 500, newUE-Identity 17924 (0x4604). | |
UE -> Cell 02 | RRCReconfigurationComplete | Second candidate stored. It is not executed in this log. |
Step 1. Source cell sets up the A2 measurement
Right after registration the gNB sends an RRCReconfiguration on cell 01. Its measConfig defines both frequencies and one event. The same message carries the Registration Accept and the cell group configuration, which are left out below.
Amarisoft gNB log, cell 01, RRCReconfiguration, measConfig part
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
... (hex dump not shown)
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 524890,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 7
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 367450,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 3
}
}
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType eventTriggered: {
eventId eventA2: {
a2-Threshold rsrp: 96,
reportOnLeave FALSE,
hysteresis 0,
timeToTrigger ms256
},
rsType ssb,
reportInterval ms120,
reportAmount r1,
reportQuantityCell {
rsrp TRUE,
rsrq TRUE,
sinr TRUE
},
maxReportCells 1,
includeBeamMeasurements FALSE
}
}
}
},
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
... (nonCriticalExtension: masterCellGroup and dedicatedNAS-MessageList not shown)
}
}
}
The first object, measObject 1, is the serving SSB frequency 524890 on band 7. The second, measObject 2, is SSB 367450 on band 3, where cell 0x02 lives. Only one report configuration exists. It is event A2 with a2-Threshold rsrp 96, hysteresis 0 and timeToTrigger ms256. The link measId 1 ties A2 to the serving frequency. No measurement gap is configured yet.
The rsrp value is an RSRP report index. Index n means -157+n to -156+n dBm, so index 96 is -61 to -60 dBm. That is a very high threshold for a live network. In this test it makes the A2 event fire almost at once.
Step 2. UE reports A2 on the serving cell
The UE sends the A2 report 440 ms after the PDU session setup is complete. This report is what starts the CHO preparation in this gNB.
Amarisoft gNB log, cell 01, MeasurementReport
[RRC] UL 0001 01 DCCH-NR: Measurement report
0000: 00 00 00 05 f4 5e f4 1f 40 .....^..@
{
message c1: measurementReport: {
criticalExtensions measurementReport: {
measResults {
measId 1,
measResultServingMOList {
{
servCellId 0,
measResultServingCell {
physCellId 500,
measResult {
cellResults {
resultsSSB-Cell {
rsrp 94,
rsrq 65,
sinr 122
}
}
}
}
}
}
}
}
}
}
The report carries measId 1, the A2 event. Serving cell PCI 500 is at rsrp 94, which is -63 to -62 dBm and below the threshold of 96. RSRQ is 65 and SINR is 122. There is no neighbour list, because A2 looks only at the serving cell.
So this gNB starts CHO from an A2 event, not from an A3 event. It does not wait for a report that names a neighbour. The candidate cell comes from its own configuration, and the comparison with the neighbour is left to the UE in Step 4.
Step 3. gNB prepares the candidate on cell 02
Within the same millisecond as the report, the gNB creates a UE context on cell 02. This line stands in for the preparation that two separate gNBs would do with XnAP HANDOVER REQUEST and HANDOVER REQUEST ACKNOWLEDGE.
Amarisoft gNB log, MAC context line
[MAC] - 0002 02 Allocating new UE
The new context gets ue_id 0002 on cell 02. The C-RNTI reserved for it is 0x4602, which appears as newUE-Identity in the next step. The context now waits for a UE that may or may not arrive, because the UE decides when to execute. This is the extra network cost of CHO that Fundamental difference between Conventional Handover and Condition Handover refers to.
Step 4. Source cell sends the CHO command
Now the gNB sends the CHO configuration. It has two parts. The outer measConfig tells the UE what to evaluate while it stays on cell 01. The conditionalReconfiguration-r16 holds the complete handover command for cell 02, which the UE stores and applies only when the condition is met.
Amarisoft gNB log, cell 01, RRCReconfiguration with conditionalReconfiguration-r16, shortened
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
... (hex dump not shown)
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventA3: {
a3-Offset rsrp: 6,
hysteresis 0,
timeToTrigger ms100
},
rsType-r16 ssb
}
}
}
},
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
}
},
measGapConfig {
gapUE setup: {
gapOffset 16,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 367450,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 3
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 524890,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 7
}
}
},
reportConfigToRemoveList {
1
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType eventTriggered: {
eventId eventA2: {
a2-Threshold rsrp: 96,
reportOnLeave FALSE,
hysteresis 0,
timeToTrigger ms256
},
rsType ssb,
reportInterval ms120,
reportAmount r1,
reportQuantityCell {
rsrp TRUE,
rsrq TRUE,
sinr TRUE
},
maxReportCells 1,
includeBeamMeasurements FALSE
}
}
}
},
measIdToRemoveList {
1
},
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
... (RLC bearers, MAC and physical cell group configuration)
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 367450,
frequencyBandList {
3
},
... (rest of the target downlink and uplink common configuration, including rach-ConfigCommon)
ssb-PositionsInBurst shortBitmap: '8'H,
ssb-periodicityServingCell ms20,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower -60
},
newUE-Identity 17922,
t304 ms1000,
smtc {
periodicityAndOffset sf20: 0,
duration sf1
}
},
... (spCellConfigDedicated: target cell dedicated PDCCH, PDSCH, PUCCH, PUSCH, SRS and CSI configuration)
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
The outer measConfig replaces reportConfig 1. It is now a condTriggerConfig-r16 with condEventA3, a3-Offset rsrp 6, hysteresis 0 and timeToTrigger ms100. The offset is coded in 0.5 dB steps, so 6 is 3 dB. Then measId 1 is re-linked to measObject 2, the n3 frequency. So the old A2 measurement disappears, and measId 1 becomes the execution condition. A condTriggerConfig produces no MeasurementReport. That is why no report arrives before the execution in Step 6. A measurement gap is set up as well, with mgl ms6 and mgrp ms40, because the n3 frequency needs a gap.
Inside conditionalReconfiguration-r16, attemptCondReconfig-r16 is true. So if the UE ever hits a failure and selects this candidate, it may run the stored configuration instead of a plain re-establishment. The only entry has condReconfigId-r16 1. Its condExecutionCond-r16 lists measId 1, the condEventA3 above.
The condRRCReconfig-r16 is a full RRCReconfiguration in itself. The radioBearerConfig re-establishes PDCP for SRB 1, SRB 2 and DRB 1. Its measConfig is the configuration for after the CHO: the two measObjects swap, so measObject 1 becomes SSB 367450 on n3. The A2 event comes back on measId 1, and the gap is released. The reconfigurationWithSync names physCellId 501 with absoluteFrequencySSB 367450 on band 3. It gives newUE-Identity 17922 (0x4602) and t304 ms1000. The masterKeyUpdate has keySetChangeIndicator FALSE and nextHopChainingCount 0, so the key for cell 02 is derived from the current key.
The candidate carries rach-ConfigCommon only, with no rach-ConfigDedicated. So the execution uses a contention based preamble. The flow in Signaling Flow shows a dedicated RACH, but a dedicated preamble is optional in CHO.
Full RRCReconfiguration (CHO command), about 1120 lines, click to expand or collapse
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
0000: 00 28 52 00 04 10 18 24 02 00 00 02 04 06 03 61 .(R....$.......a
0010: 0a 80 01 44 40 0a 18 01 03 ae 2a a5 04 40 40 3f ...D@.....*..@@?
0020: 60 40 04 10 1e 00 02 cd ad 04 01 00 00 90 02 80 `@..............
0030: 20 05 e0 00 40 12 d0 40 10 00 09 00 28 06 00 00 ...@..@....(...
0040: 00 02 02 60 01 c0 38 00 00 00 00 02 01 01 80 50 ...`..8........P
0050: 24 60 66 17 01 14 68 3c 14 e0 28 10 61 e0 00 50 $`f...h<..(.a..P
0060: a0 cb c0 00 fc 04 00 45 c0 1e b5 00 02 4e 73 13 .......E.....Ns.
0070: ea d1 66 d6 80 04 2c c0 00 00 00 34 b3 86 58 af ..f...,....4..X.
0080: d8 0d c1 00 80 00 08 02 00 01 04 1a 02 8d 80 01 ................
0090: 0a 9b 90 00 00 0d 2e 70 cb 12 00 80 07 f5 c4 a3 .......p........
00a0: 1e 00 49 42 20 db b5 6c 6a 04 20 00 8c 05 41 c0 ..IB ..lj. ...A.
00b0: 15 00 01 25 c2 cb c0 01 7f ff c0 00 00 00 82 0d ...%............
00c0: c2 20 80 00 40 05 00 a5 80 b0 c8 20 00 02 06 00 . ..@...... ....
00d0: 02 30 20 22 91 40 05 49 02 00 40 00 09 9a bf 34 .0 ".@.I..@....4
00e0: 20 e0 00 82 06 10 28 60 e4 62 04 8a 16 88 dc 01 .....(`.b......
00f0: a4 00 46 80 60 4d 20 02 b4 03 04 69 00 19 a0 18 ..F.`M ....i....
0100: 33 48 00 8d 01 c2 1a 40 05 68 0e 14 d2 00 33 40 3H.....@.h....3@
0110: 70 c6 90 01 1a 05 87 34 80 0a d0 2c 40 04 d0 82 p......4...,@...
0120: 18 90 09 a1 04 b1 40 13 42 0a 62 c0 26 84 16 c6 ......@.B.b.&...
0130: 1a 40 06 68 16 34 02 68 41 81 a0 00 82 06 10 28 .@.h.4.hA......(
0140: 60 e2 04 8a 16 30 6c 09 08 60 50 03 00 09 34 36 `....0l..`P...46
0150: 92 48 5c f8 30 43 80 00 00 00 00 48 ff d2 94 9c .H\.0C.....H....
0160: e7 3f 78 00 16 00 00 21 97 60 00 00 00 00 00 00 .?x....!.`......
0170: 00 95 b0 0f a8 84 ca 82 80 31 17 f9 e0 10 c0 0c .........1......
0180: 12 6a 00 2a 21 f5 90 20 0c 04 04 29 00 0a 88 7d .j.*!.. ...)...}
0190: 64 08 03 02 01 12 40 02 a2 1f 59 02 00 c0 c0 42 d.....@...Y....B
01a0: 90 00 a8 87 d6 41 00 30 40 11 24 00 2a 21 f5 90 .....A.0@.$.*!..
01b0: 40 01 00 00 40 80 c1 01 00 00 00 10 43 01 02 03 @...@.......C...
01c0: 04 04 00 40 e0 88 00 2a 48 10 00 00 00 00 00 08 ...@...*H.......
01d0: 01 00 02 01 80 02 02 40 08 81 00 02 08 02 d0 00 .......@........
01e0: 00 8e 04 03 4e 31 f8 1a 40 00 00 00 46 08 03 40 ....N1..@...F..@
01f0: 10 .
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventA3: {
a3-Offset rsrp: 6,
hysteresis 0,
timeToTrigger ms100
},
rsType-r16 ssb
}
}
}
},
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
}
},
measGapConfig {
gapUE setup: {
gapOffset 16,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 367450,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 3
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 524890,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 7
}
}
},
reportConfigToRemoveList {
1
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType eventTriggered: {
eventId eventA2: {
a2-Threshold rsrp: 96,
reportOnLeave FALSE,
hysteresis 0,
timeToTrigger ms256
},
rsType ssb,
reportInterval ms120,
reportAmount r1,
reportQuantityCell {
rsrp TRUE,
rsrq TRUE,
sinr TRUE
},
maxReportCells 1,
includeBeamMeasurements FALSE
}
}
}
},
measIdToRemoveList {
1
},
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 1,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 1,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
},
mac-CellGroupConfig {
schedulingRequestConfig {
schedulingRequestToAddModList {
{
schedulingRequestId 0,
sr-TransMax n64
}
},
schedulingRequestToReleaseList {
0
}
},
bsr-Config {
periodicBSR-Timer sf20,
retxBSR-Timer sf320
},
tag-Config {
tag-ToReleaseList {
0
},
tag-ToAddModList {
{
tag-Id 0,
timeAlignmentTimer infinity
}
}
},
phr-Config setup: {
phr-PeriodicTimer sf500,
phr-ProhibitTimer sf200,
phr-Tx-PowerFactorChange dB3,
multiplePHR FALSE,
dummy FALSE,
phr-Type2OtherCell FALSE,
phr-ModeOtherCG real
},
skipUplinkTxDynamic FALSE
},
physicalCellGroupConfig {
pdsch-HARQ-ACK-Codebook dynamic
},
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 367450,
frequencyBandList {
3
},
absoluteFrequencyPointA 366592,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 106
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 28875,
subcarrierSpacing kHz15
},
pdcch-ConfigCommon setup: {
controlResourceSetZero 6,
searchSpaceZero 0,
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 40
}
}
}
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
3
},
absoluteFrequencyPointA 347592,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 106
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 28875,
subcarrierSpacing kHz15
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 7,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
prach-RootSequenceIndex l839: 1,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -84
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 11,
pucch-GroupHopping neither,
p0-nominal -96
}
},
dummy ms500
},
ssb-PositionsInBurst shortBitmap: '8'H,
ssb-periodicityServingCell ms20,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower -60
},
newUE-Identity 17922,
t304 ms1000,
smtc {
periodicityAndOffset sf20: 0,
duration sf1
}
},
spCellConfigDedicated {
initialDownlinkBWP {
pdcch-Config setup: {
controlResourceSetToAddModList {
{
controlResourceSetId 2,
frequencyDomainResources '111111111111111110000000000000000000000000000'B,
duration 1,
cce-REG-MappingType nonInterleaved: NULL,
precoderGranularity sameAsREG-bundle
}
},
controlResourceSetToReleaseList {
2
},
searchSpacesToAddModList {
{
searchSpaceId 2,
controlResourceSetId 2,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n4,
aggregationLevel4 n0,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType ue-Specific: {
dci-Formats formats0-1-And-1-1
}
}
},
searchSpacesToReleaseList {
2
}
},
pdsch-Config setup: {
dmrs-DownlinkForPDSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos1
},
tci-StatesToAddModList {
{
tci-StateId 0,
qcl-Type1 {
referenceSignal ssb: 0,
qcl-Type typeD
}
}
},
tci-StatesToReleaseList {
0
},
resourceAllocation resourceAllocationType1,
rbg-Size config1,
mcs-Table qam256,
prb-BundlingType staticBundling: {
bundleSize wideband
},
zp-CSI-RS-ResourceToAddModList {
{
zp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row4: '001'B,
nrofPorts p4,
firstOFDMSymbolInTimeDomain 4,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
periodicityAndOffset slots80: 1
}
},
zp-CSI-RS-ResourceToReleaseList {
0
},
p-ZP-CSI-RS-ResourceSet setup: {
zp-CSI-RS-ResourceSetId 0,
zp-CSI-RS-ResourceIdList {
0
}
}
}
},
firstActiveDownlinkBWP-Id 0,
uplinkConfig {
initialUplinkBWP {
pucch-Config setup: {
resourceSetToAddModList {
{
pucch-ResourceSetId 0,
resourceList {
0,
1,
2,
3,
4,
5,
6,
7
}
},
{
pucch-ResourceSetId 1,
resourceList {
8,
9,
10,
11
}
}
},
resourceSetToReleaseList {
0,
1
},
resourceToAddModList {
{
pucch-ResourceId 0,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 1,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 2,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 3,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 4,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 5,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 6,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 7,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 8,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 0
}
},
{
pucch-ResourceId 9,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 2
}
},
{
pucch-ResourceId 10,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 4
}
},
{
pucch-ResourceId 11,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 6
}
},
{
pucch-ResourceId 12,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 13,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
}
},
resourceToReleaseList {
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13
},
format1 setup: {
},
format2 setup: {
maxCodeRate zeroDot25
},
schedulingRequestResourceToAddModList {
{
schedulingRequestResourceId 1,
schedulingRequestID 0,
periodicityAndOffset sl40: 0,
resource 12
}
},
schedulingRequestResourceToReleaseList {
1
},
dl-DataToUL-ACK {
4
}
},
pusch-Config setup: {
txConfig codebook,
dmrs-UplinkForPUSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos1,
transformPrecodingDisabled {
}
},
pusch-PowerControl {
msg3-Alpha alpha1,
p0-AlphaSets {
{
p0-PUSCH-AlphaSetId 0,
p0 0,
alpha alpha1
}
},
pathlossReferenceRSToAddModList {
{
pusch-PathlossReferenceRS-Id 0,
referenceSignal ssb-Index: 0
}
},
pathlossReferenceRSToReleaseList {
0
},
sri-PUSCH-MappingToAddModList {
{
sri-PUSCH-PowerControlId 0,
sri-PUSCH-PathlossReferenceRS-Id 0,
sri-P0-PUSCH-AlphaSetId 0,
sri-PUSCH-ClosedLoopIndex i0
}
},
sri-PUSCH-MappingToReleaseList {
0
}
},
resourceAllocation resourceAllocationType1,
mcs-Table qam256,
mcs-TableTransformPrecoder qam256,
codebookSubset nonCoherent,
maxRank 1,
uci-OnPUSCH setup: {
betaOffsets semiStatic: {
betaOffsetACK-Index1 9,
betaOffsetACK-Index2 9,
betaOffsetACK-Index3 9,
betaOffsetCSI-Part1-Index1 7,
betaOffsetCSI-Part1-Index2 7,
betaOffsetCSI-Part2-Index1 7,
betaOffsetCSI-Part2-Index2 7
},
scaling f1
}
},
srs-Config setup: {
srs-ResourceSetToReleaseList {
0
},
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType aperiodic: {
aperiodicSRS-ResourceTrigger 1,
slotOffset 7
},
usage codebook,
p0 -84,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToReleaseList {
0
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n2: {
combOffset-n2 0,
cyclicShift-n2 0
},
resourceMapping {
startPosition 0,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 9,
freqHopping {
c-SRS 22,
b-SRS 3,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType aperiodic: {
},
sequenceId 501
}
}
}
},
firstActiveUplinkBWP-Id 0,
pusch-ServingCellConfig setup: {
}
},
pdcch-ServingCellConfig setup: {
},
pdsch-ServingCellConfig setup: {
nrofHARQ-ProcessesForPDSCH n16,
maxMIMO-Layers 2
},
csi-MeasConfig setup: {
nzp-CSI-RS-ResourceToAddModList {
{
nzp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation other: '000001'B,
nrofPorts p2,
firstOFDMSymbolInTimeDomain 3,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 1,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 5,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 2,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 9,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 3,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 5,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots80: 2,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 4,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 9,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots80: 2,
qcl-InfoPeriodicCSI-RS 0
}
},
nzp-CSI-RS-ResourceToReleaseList {
0,
1,
2,
3,
4
},
nzp-CSI-RS-ResourceSetToAddModList {
{
nzp-CSI-ResourceSetId 0,
nzp-CSI-RS-Resources {
0
}
},
{
nzp-CSI-ResourceSetId 1,
nzp-CSI-RS-Resources {
1,
2,
3,
4
},
trs-Info true
}
},
nzp-CSI-RS-ResourceSetToReleaseList {
0,
1
},
csi-IM-ResourceToAddModList {
{
csi-IM-ResourceId 0,
csi-IM-ResourceElementPattern pattern1: {
subcarrierLocation-p1 s0,
symbolLocation-p1 4
},
freqBand {
startingRB 0,
nrofRBs 108
},
periodicityAndOffset slots80: 1
}
},
csi-IM-ResourceToReleaseList {
0
},
csi-IM-ResourceSetToAddModList {
{
csi-IM-ResourceSetId 0,
csi-IM-Resources {
0
}
}
},
csi-IM-ResourceSetToReleaseList {
0
},
csi-ResourceConfigToAddModList {
{
csi-ResourceConfigId 0,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
0
}
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 1,
csi-RS-ResourceSetList csi-IM-ResourceSetList: {
0
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 2,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
1
}
},
bwp-Id 0,
resourceType periodic
}
},
csi-ResourceConfigToReleaseList {
0,
1,
2
},
csi-ReportConfigToAddModList {
{
reportConfigId 0,
resourcesForChannelMeasurement 0,
csi-IM-ResourcesForInterference 1,
reportConfigType periodic: {
reportSlotConfig slots80: 1,
pucch-CSI-ResourceList {
{
uplinkBandwidthPartId 0,
pucch-Resource 13
}
}
},
reportQuantity cri-RI-PMI-CQI: NULL,
reportFreqConfiguration {
cqi-FormatIndicator widebandCQI,
pmi-FormatIndicator widebandPMI
},
timeRestrictionForChannelMeasurements notConfigured,
timeRestrictionForInterferenceMeasurements notConfigured,
codebookConfig {
codebookType type1: {
subType typeI-SinglePanel: {
nrOfAntennaPorts two: {
twoTX-CodebookSubsetRestriction '111111'B
},
typeI-SinglePanel-ri-Restriction '03'H
},
codebookMode 1
}
},
groupBasedBeamReporting disabled: {
},
cqi-Table table2,
subbandSize value1
}
},
csi-ReportConfigToReleaseList {
0
}
},
tag-Id 0,
servingCellMO 1
}
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Step 5. UE confirms the CHO configuration
The UE answers on cell 01, 40 ms after the command. This complete message confirms the outer part of the reconfiguration. It is not a handover complete.
Amarisoft gNB log, cell 01, RRCReconfigurationComplete
[RRC] UL 0001 01 DCCH-NR: RRC reconfiguration complete
0000: 08 00 ..
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
}
}
}
The rrc-TransactionIdentifier is 0, the same as in the command. From here the UE stays on cell 01 with user data scheduled as usual. It evaluates condEventA3 on n3 in the background. The stored condRRCReconfig-r16 is not applied yet.
Step 6. UE sends a preamble on cell 02
For the next 25.4 seconds there is no RRC message at all. During this time the cell power in the test setup changes, so that cell 02 becomes at least 3 dB stronger than cell 01 for 100 ms. The UE then applies the stored command and sends a preamble on cell 02.
Amarisoft gNB log, cell 02, PRACH and MAC context line
[PHY] UL - 02 - 945.1 PRACH: sequence_index=3 ta=1 prb=7:6 snr=29.1 p=-29.5 [MAC] - 0003 02 Allocating new UE
The preamble is sequence_index 3, received with snr 29.1 dB and ta 1. It is a contention based preamble, so the gNB does not know yet which UE it is. It allocates a temporary context 0003 for it. Cell 01 gets no message about the execution at this point.
Amarisoft gNB log, cell 01, downlink to the UE after the preamble
[MAC] DL 0001 01 TAG:0 ta=31 PAD:len=266 [PHY] DL 0001 01 4601 946.8 PDCCH: ss_id=2 cce_index=4 al=2 dci=1_1 [PHY] DL 0001 01 4601 946.8 PDSCH: harq=0 prb=105 symb=1:13 k1=4 nl=2 CW0: tb_len=269 mod=8 rv_idx=0 cr=0.94 retx=0
Cell 01 still sends a timing advance command and a PDSCH to C-RNTI 0x4601, 13 ms after the preamble on cell 02. The source cell learns about the execution only when the UE completes on the target in Step 9. This is the price of letting the UE choose the moment.
Step 7. Cell 02 sends the random access response
The RAR follows one millisecond after the preamble, well inside ra-ResponseWindow sl10 from the candidate rach-ConfigCommon.
Amarisoft gNB log, cell 02, RAR
[MAC] DL - 02 RAR: rapid=3
rapid=3
ta=1
ul_grant:
hopping_flag=0
riv=0x2
time_domain_rsc=0
mcs=4
tpc_command=3
csi_request=0
tc-rnti=0x4603
The RAR answers rapid 3 with ta 1 and gives a temporary C-RNTI 0x4603. Its ul_grant carries mcs 4 and time_domain_rsc 0 for Msg3.
Step 8. UE identifies itself with C-RNTI 0x4602
In Msg3 the UE does not use the temporary C-RNTI as its identity. It sends a C-RNTI MAC CE with the value it got as newUE-Identity in Step 4.
Amarisoft gNB log, cell 02, Msg3
[PHY] UL 0003 02 4603 946.2 PUSCH: harq=0 prb=2 symb=0:14 CW0: tb_len=9 mod=2 rv_idx=0 cr=0.30 retx=0 crc=OK snr=50.3 epre=-48.9 ta=0.3 [MAC] - 0003 02 mac_crnti=0x4602: resuming connection of ue_id=0x0002 [MAC] UL 0002 02 CRNTI:4602 LBSR:bitmap=81 bs(0)=5 bs(7)=7 PAD:len=0 [MAC] - 0003 02 Freeing UE
Msg3 is decoded with crc OK and snr 50.3. The MAC CE CRNTI:4602 matches the candidate context of Step 3. So the gNB resumes ue_id 0002 and frees the temporary context 0003. This is the contention resolution for the CHO.
Step 9. UE completes the CHO on cell 02
The RRCReconfigurationComplete arrives on cell 02, 19 ms after the preamble. It answers the stored condRRCReconfig-r16, not the message of Step 4.
Amarisoft gNB log, cell 02, RRCReconfigurationComplete
[RRC] UL 0002 02 DCCH-NR: RRC reconfiguration complete
0000: 08 55 00 10 04 02 00 c0 .U......
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
needForGapsInfoNR-r16 {
intraFreq-needForGap-r16 {
{
servCellId-r16 0,
gapIndicationIntra-r16 no-gap
}
},
interFreq-needForGap-r16 {
{
bandNR-r16 3,
gapIndication-r16 gap
},
{
bandNR-r16 7,
gapIndication-r16 gap
}
}
}
}
}
}
}
}
}
The message carries needForGapsInfoNR-r16, because the candidate configuration set needForGapsConfigNR-r16. The UE reports no-gap for its new serving cell. For inter-frequency measurement it needs a gap on band 3 and on band 7.
Step 10. gNB releases the source context
Right after the complete message, the gNB moves the DRB state and releases the source side. In a two gNB case this would be SN STATUS TRANSFER, PATH SWITCH REQUEST and UE CONTEXT RELEASE.
Amarisoft gNB log, PDCP and MAC context lines
[PDCP] - 0001 DRB1 copy state: source [PDCP] - 0001 DRB1 copy state: destination [MAC] - 0001 01 Freeing UE
The PDCP state of DRB 1 is copied from the source to the destination, and the UE context on cell 01 is freed. After this, the log lines for the UE carry ue_id 0001 on cell 02 with C-RNTI 0x4602. No NGAP message is needed, because the gNB does not change.
Step 11. UE reports A2 on the new serving cell
The UE now uses the measConfig that came inside the candidate. Its A2 event is on the new serving frequency, and it fires 378 ms after the CHO.
Amarisoft gNB log, cell 02, MeasurementReport
[RRC] UL 0001 02 DCCH-NR: Measurement report
0000: 00 00 00 05 f5 5e dc 1f c0 .....^...
{
message c1: measurementReport: {
criticalExtensions measurementReport: {
measResults {
measId 1,
measResultServingMOList {
{
servCellId 0,
measResultServingCell {
physCellId 501,
measResult {
cellResults {
resultsSSB-Cell {
rsrp 91,
rsrq 65,
sinr 126
}
}
}
}
}
}
}
}
}
}
The report again carries measId 1, but measId 1 now means A2 on SSB 367450. Serving cell PCI 501 is at rsrp 91, which is -66 to -65 dBm and below the threshold of 96.
Step 12. gNB prepares the candidate on cell 01
The A2 report starts the same preparation as in Step 3, now in the other direction.
Amarisoft gNB log, MAC context line
[MAC] - 0004 01 Allocating new UE
The new candidate context is ue_id 0004 on cell 01. Its C-RNTI is 0x4604, which shows up as newUE-Identity 17924 in the next step.
Step 13. Cell 02 sends the CHO command for the way back
The second CHO command has the same structure as Step 4. Only the candidate and its identity are different, so the decode below is shortened more.
Amarisoft gNB log, cell 02, RRCReconfiguration with conditionalReconfiguration-r16, shortened
[RRC] DL 0001 02 DCCH-NR: RRC reconfiguration
... (hex dump not shown)
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventA3: {
a3-Offset rsrp: 6,
hysteresis 0,
timeToTrigger ms100
},
rsType-r16 ssb
}
}
}
},
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
}
},
measGapConfig {
gapUE setup: {
gapOffset 16,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
... (radioBearerConfig and measConfig of the candidate, same structure as Step 4)
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
... (RLC bearers, MAC and physical cell group configuration)
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 500,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 524890,
frequencyBandList {
7
},
... (rest of the target downlink and uplink common configuration, including rach-ConfigCommon)
ssb-PositionsInBurst shortBitmap: '8'H,
ssb-periodicityServingCell ms20,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower -60
},
newUE-Identity 17924,
t304 ms1000,
smtc {
periodicityAndOffset sf20: 0,
duration sf1
}
},
... (spCellConfigDedicated: target cell dedicated PDCCH, PDSCH, PUCCH, PUSCH, SRS and CSI configuration)
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
The outer measConfig is the same as in Step 4: condEventA3 with a3-Offset rsrp 6 on measId 1, linked to measObject 2. In the candidate measConfig, measObject 2 is now SSB 524890 on n7. The candidate is physCellId 500 with absoluteFrequencySSB 524890 on band 7. It gives newUE-Identity 17924 (0x4604) and t304 ms1000.
Full RRCReconfiguration (second CHO command), about 1120 lines, click to expand or collapse
[RRC] DL 0001 02 DCCH-NR: RRC reconfiguration
0000: 00 28 52 00 04 10 18 24 02 00 00 02 04 06 03 61 .(R....$.......a
0010: 0a 80 01 44 40 0a 18 01 03 ae 2a a5 04 40 40 3f ...D@.....*..@@?
0020: 60 40 04 10 1e 00 04 01 2d 04 01 00 00 90 02 80 `@......-.......
0030: 60 05 e0 00 2c da d0 40 10 00 09 00 28 02 00 00 `...,..@....(...
0040: 00 02 02 60 01 c0 38 00 00 00 00 02 01 01 80 50 ...`..8........P
0050: 24 60 66 17 01 14 68 3c 14 e0 28 10 61 e0 00 50 $`f...h<..(.a..P
0060: a0 cb c0 00 fc 04 00 45 c0 1e b5 00 02 4e 73 13 .......E.....Ns.
0070: e8 d2 00 96 80 0c 3f f9 e0 00 00 34 b3 86 58 af ......?....4..X.
0080: d8 0d c1 00 80 00 08 02 00 01 04 1a 02 8d 80 03 ................
0090: 0f 42 f8 00 00 0d 2e 70 cb 12 00 80 07 f5 c4 a3 .B.....p........
00a0: 1e 00 49 42 20 db b5 6c 6a 04 20 00 8c 09 41 c0 ..IB ..lj. ...A.
00b0: 15 00 01 25 c2 cb c0 01 7f ff c0 00 00 00 82 0d ...%............
00c0: c2 20 80 00 40 05 00 a5 80 b0 c8 20 00 02 06 00 . ..@...... ....
00d0: 02 30 20 28 91 40 05 49 02 00 40 00 09 9a bf 34 .0 (.@.I..@....4
00e0: 20 e0 00 82 06 10 28 60 e4 62 04 8a 16 88 dc 01 .....(`.b......
00f0: a4 00 46 80 60 4d 20 02 b4 03 04 69 00 19 a0 18 ..F.`M ....i....
0100: 33 48 00 8d 01 c2 1a 40 05 68 0e 14 d2 00 33 40 3H.....@.h....3@
0110: 70 c6 90 01 1a 05 87 34 80 0a d0 2c 40 04 d0 82 p......4...,@...
0120: 18 90 09 a1 04 b1 40 13 42 0a 62 c0 26 84 16 c6 ......@.B.b.&...
0130: 1a 40 06 68 16 34 02 68 41 81 a0 00 82 06 10 28 .@.h.4.hA......(
0140: 60 e2 04 8a 16 30 6c 09 08 60 50 03 00 09 34 36 `....0l..`P...46
0150: 92 48 5c f8 30 43 80 00 00 00 00 48 ff d2 94 9c .H\.0C.....H....
0160: e7 3f 78 00 16 00 00 21 97 60 00 00 00 00 00 00 .?x....!.`......
0170: 00 95 b0 0f a0 84 ca 82 80 31 17 f9 e0 10 c0 0d .........1......
0180: 02 6a 00 2a 21 f4 90 20 0c 04 10 29 00 0a 88 7d .j.*!.. ...)...}
0190: 24 08 03 02 04 12 40 02 a2 1f 49 02 00 c0 c1 02 $.....@...I.....
01a0: 90 00 a8 87 d2 41 00 30 40 41 24 00 2a 21 f4 90 .....A.0@A$.*!..
01b0: 40 01 00 00 40 80 c1 01 00 00 00 10 43 01 02 03 @...@.......C...
01c0: 04 04 00 40 e0 c8 00 2a 48 10 00 00 00 00 00 08 ...@...*H.......
01d0: 01 00 02 01 80 02 02 40 08 81 00 02 08 02 d0 00 .......@........
01e0: 00 8e 04 03 4e 31 f8 1a 40 00 00 00 46 08 03 40 ....N1..@...F..@
01f0: 10 .
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventA3: {
a3-Offset rsrp: 6,
hysteresis 0,
timeToTrigger ms100
},
rsType-r16 ssb
}
}
}
},
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
}
},
measGapConfig {
gapUE setup: {
gapOffset 16,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 524890,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 7
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 367450,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf20: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 3
}
}
},
reportConfigToRemoveList {
1
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType eventTriggered: {
eventId eventA2: {
a2-Threshold rsrp: 96,
reportOnLeave FALSE,
hysteresis 0,
timeToTrigger ms256
},
rsType ssb,
reportInterval ms120,
reportAmount r1,
reportQuantityCell {
rsrp TRUE,
rsrq TRUE,
sinr TRUE
},
maxReportCells 1,
includeBeamMeasurements FALSE
}
}
}
},
measIdToRemoveList {
1
},
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 1,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 1,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
},
mac-CellGroupConfig {
schedulingRequestConfig {
schedulingRequestToAddModList {
{
schedulingRequestId 0,
sr-TransMax n64
}
},
schedulingRequestToReleaseList {
0
}
},
bsr-Config {
periodicBSR-Timer sf20,
retxBSR-Timer sf320
},
tag-Config {
tag-ToReleaseList {
0
},
tag-ToAddModList {
{
tag-Id 0,
timeAlignmentTimer infinity
}
}
},
phr-Config setup: {
phr-PeriodicTimer sf500,
phr-ProhibitTimer sf200,
phr-Tx-PowerFactorChange dB3,
multiplePHR FALSE,
dummy FALSE,
phr-Type2OtherCell FALSE,
phr-ModeOtherCG real
},
skipUplinkTxDynamic FALSE
},
physicalCellGroupConfig {
pdsch-HARQ-ACK-Codebook dynamic
},
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 500,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 524890,
frequencyBandList {
7
},
absoluteFrequencyPointA 524092,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 106
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 28875,
subcarrierSpacing kHz15
},
pdcch-ConfigCommon setup: {
controlResourceSetZero 6,
searchSpaceZero 0,
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 40
}
}
}
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
7
},
absoluteFrequencyPointA 500092,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 106
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 28875,
subcarrierSpacing kHz15
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 7,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
prach-RootSequenceIndex l839: 1,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -84
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 11,
pucch-GroupHopping neither,
p0-nominal -96
}
},
dummy ms500
},
ssb-PositionsInBurst shortBitmap: '8'H,
ssb-periodicityServingCell ms20,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower -60
},
newUE-Identity 17924,
t304 ms1000,
smtc {
periodicityAndOffset sf20: 0,
duration sf1
}
},
spCellConfigDedicated {
initialDownlinkBWP {
pdcch-Config setup: {
controlResourceSetToAddModList {
{
controlResourceSetId 2,
frequencyDomainResources '111111111111111110000000000000000000000000000'B,
duration 1,
cce-REG-MappingType nonInterleaved: NULL,
precoderGranularity sameAsREG-bundle
}
},
controlResourceSetToReleaseList {
2
},
searchSpacesToAddModList {
{
searchSpaceId 2,
controlResourceSetId 2,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n4,
aggregationLevel4 n0,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType ue-Specific: {
dci-Formats formats0-1-And-1-1
}
}
},
searchSpacesToReleaseList {
2
}
},
pdsch-Config setup: {
dmrs-DownlinkForPDSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos1
},
tci-StatesToAddModList {
{
tci-StateId 0,
qcl-Type1 {
referenceSignal ssb: 0,
qcl-Type typeD
}
}
},
tci-StatesToReleaseList {
0
},
resourceAllocation resourceAllocationType1,
rbg-Size config1,
mcs-Table qam256,
prb-BundlingType staticBundling: {
bundleSize wideband
},
zp-CSI-RS-ResourceToAddModList {
{
zp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row4: '100'B,
nrofPorts p4,
firstOFDMSymbolInTimeDomain 4,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
periodicityAndOffset slots80: 1
}
},
zp-CSI-RS-ResourceToReleaseList {
0
},
p-ZP-CSI-RS-ResourceSet setup: {
zp-CSI-RS-ResourceSetId 0,
zp-CSI-RS-ResourceIdList {
0
}
}
}
},
firstActiveDownlinkBWP-Id 0,
uplinkConfig {
initialUplinkBWP {
pucch-Config setup: {
resourceSetToAddModList {
{
pucch-ResourceSetId 0,
resourceList {
0,
1,
2,
3,
4,
5,
6,
7
}
},
{
pucch-ResourceSetId 1,
resourceList {
8,
9,
10,
11
}
}
},
resourceSetToReleaseList {
0,
1
},
resourceToAddModList {
{
pucch-ResourceId 0,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 1,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 2,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 0
}
},
{
pucch-ResourceId 3,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 4,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 5,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 1
}
},
{
pucch-ResourceId 6,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 1,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 7,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 5,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 8,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 0
}
},
{
pucch-ResourceId 9,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 2
}
},
{
pucch-ResourceId 10,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 4
}
},
{
pucch-ResourceId 11,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 6
}
},
{
pucch-ResourceId 12,
startingPRB 105,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format1: {
initialCyclicShift 9,
nrofSymbols 14,
startingSymbolIndex 0,
timeDomainOCC 2
}
},
{
pucch-ResourceId 13,
startingPRB 1,
intraSlotFrequencyHopping enabled,
secondHopPRB 104,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
}
},
resourceToReleaseList {
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13
},
format1 setup: {
},
format2 setup: {
maxCodeRate zeroDot25
},
schedulingRequestResourceToAddModList {
{
schedulingRequestResourceId 1,
schedulingRequestID 0,
periodicityAndOffset sl40: 0,
resource 12
}
},
schedulingRequestResourceToReleaseList {
1
},
dl-DataToUL-ACK {
4
}
},
pusch-Config setup: {
txConfig codebook,
dmrs-UplinkForPUSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos1,
transformPrecodingDisabled {
}
},
pusch-PowerControl {
msg3-Alpha alpha1,
p0-AlphaSets {
{
p0-PUSCH-AlphaSetId 0,
p0 0,
alpha alpha1
}
},
pathlossReferenceRSToAddModList {
{
pusch-PathlossReferenceRS-Id 0,
referenceSignal ssb-Index: 0
}
},
pathlossReferenceRSToReleaseList {
0
},
sri-PUSCH-MappingToAddModList {
{
sri-PUSCH-PowerControlId 0,
sri-PUSCH-PathlossReferenceRS-Id 0,
sri-P0-PUSCH-AlphaSetId 0,
sri-PUSCH-ClosedLoopIndex i0
}
},
sri-PUSCH-MappingToReleaseList {
0
}
},
resourceAllocation resourceAllocationType1,
mcs-Table qam256,
mcs-TableTransformPrecoder qam256,
codebookSubset nonCoherent,
maxRank 1,
uci-OnPUSCH setup: {
betaOffsets semiStatic: {
betaOffsetACK-Index1 9,
betaOffsetACK-Index2 9,
betaOffsetACK-Index3 9,
betaOffsetCSI-Part1-Index1 7,
betaOffsetCSI-Part1-Index2 7,
betaOffsetCSI-Part2-Index1 7,
betaOffsetCSI-Part2-Index2 7
},
scaling f1
}
},
srs-Config setup: {
srs-ResourceSetToReleaseList {
0
},
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType aperiodic: {
aperiodicSRS-ResourceTrigger 1,
slotOffset 7
},
usage codebook,
p0 -84,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToReleaseList {
0
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n2: {
combOffset-n2 0,
cyclicShift-n2 0
},
resourceMapping {
startPosition 0,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 9,
freqHopping {
c-SRS 22,
b-SRS 3,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType aperiodic: {
},
sequenceId 500
}
}
}
},
firstActiveUplinkBWP-Id 0,
pusch-ServingCellConfig setup: {
}
},
pdcch-ServingCellConfig setup: {
},
pdsch-ServingCellConfig setup: {
nrofHARQ-ProcessesForPDSCH n16,
maxMIMO-Layers 2
},
csi-MeasConfig setup: {
nzp-CSI-RS-ResourceToAddModList {
{
nzp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation other: '010000'B,
nrofPorts p2,
firstOFDMSymbolInTimeDomain 3,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 500,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 1,
resourceMapping {
frequencyDomainAllocation row1: '4'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 5,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 500,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 2,
resourceMapping {
frequencyDomainAllocation row1: '4'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 9,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 500,
periodicityAndOffset slots80: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 3,
resourceMapping {
frequencyDomainAllocation row1: '4'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 5,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 500,
periodicityAndOffset slots80: 2,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 4,
resourceMapping {
frequencyDomainAllocation row1: '4'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 9,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 108
}
},
powerControlOffset 0,
scramblingID 500,
periodicityAndOffset slots80: 2,
qcl-InfoPeriodicCSI-RS 0
}
},
nzp-CSI-RS-ResourceToReleaseList {
0,
1,
2,
3,
4
},
nzp-CSI-RS-ResourceSetToAddModList {
{
nzp-CSI-ResourceSetId 0,
nzp-CSI-RS-Resources {
0
}
},
{
nzp-CSI-ResourceSetId 1,
nzp-CSI-RS-Resources {
1,
2,
3,
4
},
trs-Info true
}
},
nzp-CSI-RS-ResourceSetToReleaseList {
0,
1
},
csi-IM-ResourceToAddModList {
{
csi-IM-ResourceId 0,
csi-IM-ResourceElementPattern pattern1: {
subcarrierLocation-p1 s8,
symbolLocation-p1 4
},
freqBand {
startingRB 0,
nrofRBs 108
},
periodicityAndOffset slots80: 1
}
},
csi-IM-ResourceToReleaseList {
0
},
csi-IM-ResourceSetToAddModList {
{
csi-IM-ResourceSetId 0,
csi-IM-Resources {
0
}
}
},
csi-IM-ResourceSetToReleaseList {
0
},
csi-ResourceConfigToAddModList {
{
csi-ResourceConfigId 0,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
0
}
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 1,
csi-RS-ResourceSetList csi-IM-ResourceSetList: {
0
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 2,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
1
}
},
bwp-Id 0,
resourceType periodic
}
},
csi-ResourceConfigToReleaseList {
0,
1,
2
},
csi-ReportConfigToAddModList {
{
reportConfigId 0,
resourcesForChannelMeasurement 0,
csi-IM-ResourcesForInterference 1,
reportConfigType periodic: {
reportSlotConfig slots80: 1,
pucch-CSI-ResourceList {
{
uplinkBandwidthPartId 0,
pucch-Resource 13
}
}
},
reportQuantity cri-RI-PMI-CQI: NULL,
reportFreqConfiguration {
cqi-FormatIndicator widebandCQI,
pmi-FormatIndicator widebandPMI
},
timeRestrictionForChannelMeasurements notConfigured,
timeRestrictionForInterferenceMeasurements notConfigured,
codebookConfig {
codebookType type1: {
subType typeI-SinglePanel: {
nrOfAntennaPorts two: {
twoTX-CodebookSubsetRestriction '111111'B
},
typeI-SinglePanel-ri-Restriction '03'H
},
codebookMode 1
}
},
groupBasedBeamReporting disabled: {
},
cqi-Table table2,
subbandSize value1
}
},
csi-ReportConfigToReleaseList {
0
}
},
tag-Id 0,
servingCellMO 1
}
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Step 14. UE confirms the second CHO configuration
The UE confirms the second configuration 40 ms after the command, the same as in Step 5. It now holds a stored candidate for cell 01.
Amarisoft gNB log, cell 02, RRCReconfigurationComplete
[RRC] UL 0001 02 DCCH-NR: RRC reconfiguration complete
0000: 08 00 ..
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
}
}
}
The condition for this candidate never becomes true in this log. About 25 seconds later the UE sends a Deregistration Request on cell 02, and the gNB releases both the UE and the waiting context 0004 on cell 01. A CHO candidate that is never used costs a reserved context and C-RNTI on the target until the network removes it.
CHO preparation can start from an A2 event : this gNB prepares the candidate when the serving cell gets weak, before any neighbour is reportedA condTriggerConfig produces no report : the UE stays silent for 25.4 s and the first sign of execution is a preamble on the candidateThe source cell learns about the execution late : cell 01 still schedules the UE after the preamble on cell 02The candidate carries the next measConfig : the measObjects swap and the A2 event is ready on the new serving frequency
Example 2 : CHO with Event D1
This example is a conditional handover between two NTN cells of one Amarisoft gNB. Cell 0x01 is PCI 500, NR-ARFCN 437000, with its SSB at 437090. Cell 0x02 is PCI 501, NR-ARFCN 437980, with its SSB at 438010. Both cells are FDD on band n256 with 25 PRB at 15 kHz SCS, which is 5 MHz. Each cell is served by its own LEO satellite, and both cells broadcast SIB19. One UE registers on cell 0x01 and gets a CHO configuration for cell 0x02 with two triggering events, condEventA3 and condEventD1. About 23 seconds later the UE moves to cell 0x02 by itself.
Figure 2. Trigger profile of Example 2 along the line between the two reference points. The condEventD1 entering condition holds only from about 183 km to 262 km from point 1, and condEventA3 must hold at the same time.
The classification is the same as in Example 1. Both cells belong to one gNB, so no XnAP or NGAP message appears during the CHO, and the preparation is a context allocation inside the gNB. Two things are different. First, the gNB sends the CHO command together with the PDU session setup, with no MeasurementReport at all before it. Second, the execution condition needs the UE location as well as the radio measurement. The UE location is not in this gNB log. So the log cannot show which of the two events became true last. The candidate removes every measurement after the CHO, and no further CHO follows in the log.
The table follows the same layout as in Example 1. Cell 01 is the source cell and Cell 02 is the candidate cell. PHY and MAC lines are kept only for the random access on the candidate cell. The gNB also writes NTN lines with the satellite geometry of each cell. One pair of them is shown in Step 6, because it explains why the candidate satellite is the better one.
Step # | Dir | Message | Comment |
|---|---|---|---|
Cell 01 -> UE | SIB19 | NTN assistance for the serving satellite. Its referenceLocation is 42N 15E. Neighbour PCI 501 on SSB 438010. | |
Cell 01 -> UE | RRCReconfiguration | Measurement setup after registration. MO 1 = SSB 437090, MO 2 = SSB 438010. Report configs condEventA3 and condEventD1. No measId yet. | |
Cell 01 -> Cell 02 (gNB internal) | MAC: Allocating new UE 0002 | Candidate context created on cell 02, with no measurement report before it. | |
Cell 01 -> UE | RRCReconfiguration with DRB 1 and conditionalReconfiguration-r16 | CHO command in the PDU session setup. Execution needs measId 1 (A3) and measId 2 (D1). Candidate PCI 501, newUE-Identity 17922 (0x4602), t304 ms2000. | |
UE -> Cell 01 | RRCReconfigurationComplete | DRB 1 and the candidate are stored. No handover yet. | |
UE -> Cell 02 | PRACH sequence_index=0 | Both events met 23.2 s after Step 5. Contention based preamble, ta 40, snr 29.0. | |
Cell 02 -> UE | RAR rapid=0 | Random access response with tc-rnti 0x4603. | |
UE -> Cell 02 | Msg3 with C-RNTI MAC CE 4602 | Arrives 46 ms after the RAR. The gNB resumes UE 0002. | |
UE -> Cell 02 | RRCReconfigurationComplete | CHO complete, 91 ms after the preamble. The same PUSCH carries a TA Report. | |
Cell 01 (gNB internal) | MAC: Freeing UE 0001 on cell 01 | PDCP state copied to the target, source context released. |
Step 1. Serving cell broadcasts SIB19
An NTN UE needs SIB19 before it can even send a preamble, because it has to pre-compensate the timing and the Doppler shift of the satellite link. For CHO with condEventD1 the message has one more job. It tells the UE where the serving cell is.
Amarisoft gNB log, cell 01, SystemInformation with SIB19
[RRC] DL - 01 BCCH-NR: SIB
{
message c1: systemInformation: {
criticalExtensions systemInformation: {
sib-TypeAndInfo {
sib19-v1700: {
ntn-Config-r17 {
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1670101,
ta-CommonDrift-r17 194527,
ta-CommonDriftVariant-r17 2211
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 757,
longitude-r17 126755400,
inclination-r17 37277430,
meanAnomaly-r17 72642257
},
ta-Report-r17 enabled
},
t-Service-r17 397453196982,
referenceLocation-r17 {
latitudeSign north,
degreesLatitude 3914683,
degreesLongitude 699050
},
ntn-NeighCellConfigList-r17 {
{
ntn-Config-r17 {
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1428950,
ta-CommonDrift-r17 -179067,
ta-CommonDriftVariant-r17 3902
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 757,
longitude-r17 126755400,
inclination-r17 37277430,
meanAnomaly-r17 62817563
},
ta-Report-r17 enabled
},
carrierFreq-r17 438010,
physCellId-r17 501
}
}
}
}
}
}
}
Its ntn-Config-r17 carries the serving satellite ephemeris and the common TA. The value semiMajorAxis-r17 100729583 is 6500000 m + 100729583 x 4.249 mm, which is about 6928 km. That is a LEO orbit roughly 550 km above the Earth surface. Its cellSpecificKoffset-r17 is 36 slots and ntn-UlSyncValidityDuration-r17 is s5, so the UE has to reacquire this assistance information within 5 seconds of epochTime.
The referenceLocation-r17 of cell 01 is latitudeSign north, degreesLatitude 3914683 and degreesLongitude 699050. These fields follow the Ellipsoid-Point format of TS 37.355. Latitude is the field value x 90 / 223 degrees and longitude is the field value x 360 / 224 degrees. So the reference point of cell 01 is 42.0 N, 15.0 E. Cell 02 broadcasts degreesLatitude 3728270 in its own SIB19, which is 40.0 N on the same longitude. The ntn-NeighCellConfigList-r17 already lists PCI 501 on SSB 438010 with the ephemeris of the second satellite.
Step 2. Source cell defines the two conditional events
Right after registration the gNB sends an RRCReconfiguration on cell 01 with a measConfig. It defines both frequencies and two condTriggerConfig report configurations, but it does not link any of them to a measId yet.
Amarisoft gNB log, cell 01, RRCReconfiguration, measConfig part
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 437090,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf5: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 256
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 438010,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf5: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 256
}
}
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventA3: {
a3-Offset rsrp: 2,
hysteresis 1,
timeToTrigger ms100
},
rsType-r16 ssb
}
}
},
{
reportConfigId 2,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventD1-r17: {
distanceThreshFromReference1-r17 1000,
distanceThreshFromReference2-r17 800,
referenceLocation1-r17 {
latitudeSign north,
degreesLatitude 3914683,
degreesLongitude 699050
},
referenceLocation2-r17 {
latitudeSign north,
degreesLatitude 3728270,
degreesLongitude 699050
},
hysteresisLocation-r17 50,
timeToTrigger-r17 ms0
},
rsType-r16 ssb
}
}
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
filterCoefficientRSRQ fc2,
filterCoefficientRS-SINR fc2
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
... (nonCriticalExtension: masterCellGroup with tar-Config-r17, and dedicatedNAS-MessageList not shown)
}
}
}
The first object, measObject 1, is the serving SSB frequency 437090. The second, measObject 2, is SSB 438010, where cell 0x02 lives. Both are on band 256 and use an SMTC of sf5.
The report configuration reportConfig 1 is condEventA3 with a3-Offset rsrp 2, hysteresis 1 and timeToTrigger ms100. These values are in 0.5 dB steps, so the neighbour must be 1 dB better than the serving cell, plus 0.5 dB of hysteresis. That is a small margin.
The second one, reportConfig 2, is condEventD1-r17. The distanceThreshFromReference1-r17 is 1000 and distanceThreshFromReference2-r17 is 800. Each step is 50 m, so the thresholds are 50 km and 40 km. Its referenceLocation1-r17 is 42.0 N, 15.0 E, the same point that cell 01 broadcasts in SIB19. Its referenceLocation2-r17 is 40.0 N, 15.0 E, the point of cell 02. The hysteresisLocation-r17 of 50 is 500 m, because the unit is 10 m. The timeToTrigger-r17 is ms0.
So the D1 entering condition reads like this. The UE is more than 50 km + 500 m away from the cell 01 point, and less than 40 km - 500 m away from the cell 02 point. The two points are 2 degrees of latitude apart, which is about 222 km. So the condition becomes true only after the UE has moved well into the area of cell 02.
Step 3. gNB prepares the candidate on cell 02
The candidate context on cell 02 is created at the same moment as the PDU session setup. This is the difference from Example 1, where an A2 report triggered the preparation.
Amarisoft gNB log, MAC context line
[MAC] - 0002 02 Allocating new UE
The context gets ue_id 0002 and the C-RNTI 0x4602. No measurement report arrived before it. With D1 in the condition, the network does not need a report to know that a CHO toward cell 02 may be needed later. Each cell has a fixed reference point on the ground, so the network can plan a CHO toward cell 02 from the start.
Step 4. Source cell sends the CHO command with the PDU session
This RRCReconfiguration does two jobs at once. It sets up DRB 1 for the PDU session, and it delivers the CHO configuration. The decode below is shortened. The full message follows it.
Amarisoft gNB log, cell 01, RRCReconfiguration with DRB 1 and conditionalReconfiguration-r16, shortened
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 2
}
},
drb-ToAddModList {
{
cnAssociation sdap-Config: {
pdu-Session 1,
sdap-HeaderDL absent,
sdap-HeaderUL present,
defaultDRB TRUE,
mappedQoS-FlowsToAdd {
1
}
},
drb-Identity 1,
pdcp-Config {
drb {
discardTimer infinity,
pdcp-SN-SizeUL len18bits,
pdcp-SN-SizeDL len18bits,
headerCompression notUsed: NULL,
statusReportRequired true
},
t-Reordering ms3000
}
}
}
},
measConfig {
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
},
{
measId 2,
measObjectId 1,
reportConfigId 2
}
},
measGapConfig {
gapUE setup: {
gapOffset 7,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
... (masterCellGroup: RLC bearer and logical channel configuration for DRB 1 and SRB 2)
... (dedicatedNAS-MessageList with the PDU Session Establishment Accept)
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1,
2
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
reportConfigToRemoveList {
1,
2
},
measIdToRemoveList {
1,
2
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
... (RLC bearers, MAC and physical cell group configuration of the candidate)
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 438010,
frequencyBandList {
256
},
... (rest of the target downlink and uplink common configuration, including rach-ConfigCommon)
ssb-PositionsInBurst shortBitmap: '8'H,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower 50,
ntn-Config-r17 {
epochTime-r17 {
sfn-r17 72,
subFrameNR-r17 0
},
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1335563,
ta-CommonDrift-r17 -170082,
ta-CommonDriftVariant-r17 4793
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 1103,
longitude-r17 126754983,
inclination-r17 37277430,
meanAnomaly-r17 63326484
},
ta-Report-r17 enabled
}
},
newUE-Identity 17922,
t304 ms2000,
smtc {
periodicityAndOffset sf5: 0,
duration sf1
}
},
... (spCellConfigDedicated: target cell dedicated PDCCH, PDSCH, PUCCH, PUSCH, SRS and CSI configuration)
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
The radioBearerConfig adds SRB 2 and DRB 1 for PDU session 1. Then the measConfig links the report configurations of Step 2. The link measId 1 ties measObject 2 to reportConfig 1, the condEventA3. The link measId 2 ties measObject 1 to reportConfig 2, the condEventD1. A measurement gap is set up with mgl ms6 and mgrp ms40, because SSB 438010 is on a different frequency.
Inside conditionalReconfiguration-r16, the entry condReconfigId-r16 1 has condExecutionCond-r16 with two values, 1 and 2. TS 38.331 clause 5.3.5.13.4 executes the candidate only when the events of all measIds in condExecutionCond are fulfilled. So both A3 and D1 must hold at the same time. A UE can be in the right place while the candidate satellite is still weak. It can also see a strong candidate from the wrong place. Neither of these triggers the CHO.
The condExecutionCond field description in TS 38.331 also says that when two triggering events are configured for a candidate, the network ensures that both refer to the same measObject. In this message measId 1 refers to measObject 2 and measId 2 refers to measObject 1. For D1 the measObject has no influence on the distance, but the configuration does not follow that sentence. The UE in this test accepted it and executed the CHO.
The condRRCReconfig-r16 is the command for after the execution. Its measConfig removes both measObjects, both reportConfigs and both measIds, and it releases the gap. So the UE has no measurement configured on cell 02. The reconfigurationWithSync names physCellId 501 on SSB 438010 in band 256. It gives newUE-Identity 17922 (0x4602) and t304 ms2000, twice the value of Example 1. The longer t304 leaves room for the satellite round trip delay during the random access.
The spCellConfigCommon of the candidate carries its own ntn-Config-r17. This gives the UE the ephemeris and the common TA of the cell 02 satellite, so it can pre-compensate the uplink before its first preamble. The candidate has no rach-ConfigDedicated, so the access in Step 6 is contention based.
Full RRCReconfiguration (PDU session setup and CHO command), about 1090 lines, click to expand or collapse
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 2
}
},
drb-ToAddModList {
{
cnAssociation sdap-Config: {
pdu-Session 1,
sdap-HeaderDL absent,
sdap-HeaderUL present,
defaultDRB TRUE,
mappedQoS-FlowsToAdd {
1
}
},
drb-Identity 1,
pdcp-Config {
drb {
discardTimer infinity,
pdcp-SN-SizeUL len18bits,
pdcp-SN-SizeDL len18bits,
headerCompression notUsed: NULL,
statusReportRequired true
},
t-Reordering ms3000
}
}
}
},
measConfig {
measIdToAddModList {
{
measId 1,
measObjectId 2,
reportConfigId 1
},
{
measId 2,
measObjectId 1,
reportConfigId 2
}
},
measGapConfig {
gapUE setup: {
gapOffset 7,
mgl ms6,
mgrp ms40,
mgta ms0
}
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
servedRadioBearer drb-Identity: 1,
rlc-Config am: {
ul-AM-RLC {
sn-FieldLength size18,
t-PollRetransmit ms80,
pollPDU p64,
pollByte kB125,
maxRetxThreshold t4
},
dl-AM-RLC {
sn-FieldLength size18,
t-Reassembly ms150,
t-StatusProhibit ms20
}
},
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
servedRadioBearer srb-Identity: 2,
rlc-Config am: {
ul-AM-RLC {
sn-FieldLength size12,
t-PollRetransmit ms80,
pollPDU infinity,
pollByte infinity,
maxRetxThreshold t8
},
dl-AM-RLC {
sn-FieldLength size12,
t-Reassembly ms35,
t-StatusProhibit ms0
}
},
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
}
},
dedicatedNAS-MessageList {
'7E02BC06D08A037E006801006A2E0101C211000901000631300101FF0106061388047A125932290501C0A803022201018179000601204101010A7B00188080210A0300000A810608080808000D040808080800110025200C6E746E2D696E7465726E6574066D6E63303031066D636330303104677072731201'H
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1,
2
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
reportConfigToRemoveList {
1,
2
},
measIdToRemoveList {
1,
2
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 1,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 1,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
},
mac-CellGroupConfig {
schedulingRequestConfig {
schedulingRequestToAddModList {
{
schedulingRequestId 0,
sr-ProhibitTimer ms16,
sr-TransMax n64
}
},
schedulingRequestToReleaseList {
0
}
},
bsr-Config {
periodicBSR-Timer sf20,
retxBSR-Timer sf80
},
tag-Config {
tag-ToReleaseList {
0
},
tag-ToAddModList {
{
tag-Id 0,
timeAlignmentTimer infinity
}
}
},
phr-Config setup: {
phr-PeriodicTimer infinity,
phr-ProhibitTimer sf20,
phr-Tx-PowerFactorChange dB3,
multiplePHR FALSE,
dummy FALSE,
phr-Type2OtherCell FALSE,
phr-ModeOtherCG real
},
skipUplinkTxDynamic FALSE,
tar-Config-r17 setup: {
offsetThresholdTA-r17 ms0dot5,
timingAdvanceSR-r17 enabled
}
},
physicalCellGroupConfig {
pdsch-HARQ-ACK-Codebook dynamic
},
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 438010,
frequencyBandList {
256
},
absoluteFrequencyPointA 437530,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 25
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 6600,
subcarrierSpacing kHz15
},
pdcch-ConfigCommon setup: {
controlResourceSetZero 1,
searchSpaceZero 0,
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 53
}
}
}
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
256
},
absoluteFrequencyPointA 399530,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 25
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 6600,
subcarrierSpacing kHz15
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 2,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
prach-RootSequenceIndex l839: 1,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 55
},
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -90
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 0,
pucch-GroupHopping neither,
p0-nominal -96
}
},
dummy ms500
},
ssb-PositionsInBurst shortBitmap: '8'H,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower 50,
ntn-Config-r17 {
epochTime-r17 {
sfn-r17 72,
subFrameNR-r17 0
},
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1335563,
ta-CommonDrift-r17 -170082,
ta-CommonDriftVariant-r17 4793
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 1103,
longitude-r17 126754983,
inclination-r17 37277430,
meanAnomaly-r17 63326484
},
ta-Report-r17 enabled
}
},
newUE-Identity 17922,
t304 ms2000,
smtc {
periodicityAndOffset sf5: 0,
duration sf1
}
},
spCellConfigDedicated {
initialDownlinkBWP {
pdcch-Config setup: {
controlResourceSetToAddModList {
{
controlResourceSetId 2,
frequencyDomainResources '111100000000000000000000000000000000000000000'B,
duration 2,
cce-REG-MappingType nonInterleaved: NULL,
precoderGranularity sameAsREG-bundle
}
},
controlResourceSetToReleaseList {
2
},
searchSpacesToAddModList {
{
searchSpaceId 2,
controlResourceSetId 2,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n4,
aggregationLevel4 n0,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType ue-Specific: {
dci-Formats formats0-1-And-1-1
}
}
},
searchSpacesToReleaseList {
2
}
},
pdsch-Config setup: {
dmrs-DownlinkForPDSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos3
},
tci-StatesToAddModList {
{
tci-StateId 0,
qcl-Type1 {
referenceSignal ssb: 0,
qcl-Type typeD
}
}
},
tci-StatesToReleaseList {
0
},
resourceAllocation resourceAllocationType1,
rbg-Size config1,
mcs-Table qam256,
prb-BundlingType staticBundling: {
bundleSize wideband
},
zp-CSI-RS-ResourceToAddModList {
{
zp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row4: '001'B,
nrofPorts p4,
firstOFDMSymbolInTimeDomain 4,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
periodicityAndOffset slots40: 1
}
},
zp-CSI-RS-ResourceToReleaseList {
0
},
p-ZP-CSI-RS-ResourceSet setup: {
zp-CSI-RS-ResourceSetId 0,
zp-CSI-RS-ResourceIdList {
0
}
}
}
},
firstActiveDownlinkBWP-Id 0,
uplinkConfig {
initialUplinkBWP {
pucch-Config setup: {
resourceSetToAddModList {
{
pucch-ResourceSetId 0,
resourceList {
0,
1,
2,
3,
4,
5,
6,
7
}
},
{
pucch-ResourceSetId 1,
resourceList {
8,
9,
10,
11
}
}
},
resourceSetToReleaseList {
0,
1
},
resourceToAddModList {
{
pucch-ResourceId 0,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 0
}
},
{
pucch-ResourceId 1,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 1
}
},
{
pucch-ResourceId 2,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 2
}
},
{
pucch-ResourceId 3,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 3
}
},
{
pucch-ResourceId 4,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 4
}
},
{
pucch-ResourceId 5,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 5
}
},
{
pucch-ResourceId 6,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 6
}
},
{
pucch-ResourceId 7,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 7
}
},
{
pucch-ResourceId 8,
startingPRB 0,
intraSlotFrequencyHopping enabled,
secondHopPRB 24,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
},
{
pucch-ResourceId 9,
startingPRB 0,
intraSlotFrequencyHopping enabled,
secondHopPRB 24,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 10
}
},
{
pucch-ResourceId 10,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
},
{
pucch-ResourceId 11,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 10
}
},
{
pucch-ResourceId 12,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 13
}
},
{
pucch-ResourceId 13,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 12
}
}
},
resourceToReleaseList {
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13
},
format2 setup: {
maxCodeRate zeroDot25
},
schedulingRequestResourceToAddModList {
{
schedulingRequestResourceId 1,
schedulingRequestID 0,
periodicityAndOffset sl40: 1,
resource 12
}
},
schedulingRequestResourceToReleaseList {
1
},
dl-DataToUL-ACK {
4
}
},
pusch-Config setup: {
txConfig codebook,
dmrs-UplinkForPUSCH-MappingTypeA setup: {
transformPrecodingDisabled {
}
},
pusch-PowerControl {
msg3-Alpha alpha1,
p0-AlphaSets {
{
p0-PUSCH-AlphaSetId 0,
p0 0,
alpha alpha1
}
},
pathlossReferenceRSToAddModList {
{
pusch-PathlossReferenceRS-Id 0,
referenceSignal ssb-Index: 0
}
},
pathlossReferenceRSToReleaseList {
0
},
sri-PUSCH-MappingToAddModList {
{
sri-PUSCH-PowerControlId 0,
sri-PUSCH-PathlossReferenceRS-Id 0,
sri-P0-PUSCH-AlphaSetId 0,
sri-PUSCH-ClosedLoopIndex i0
}
},
sri-PUSCH-MappingToReleaseList {
0
}
},
resourceAllocation resourceAllocationType1,
mcs-Table qam256,
mcs-TableTransformPrecoder qam256,
codebookSubset nonCoherent,
maxRank 1,
uci-OnPUSCH setup: {
betaOffsets semiStatic: {
betaOffsetACK-Index1 9,
betaOffsetACK-Index2 9,
betaOffsetACK-Index3 9,
betaOffsetCSI-Part1-Index1 7,
betaOffsetCSI-Part1-Index2 7,
betaOffsetCSI-Part2-Index1 7,
betaOffsetCSI-Part2-Index2 7
},
scaling f1
}
},
srs-Config setup: {
srs-ResourceSetToReleaseList {
0
},
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType periodic: {
},
usage codebook,
p0 -90,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToReleaseList {
0
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n4: {
combOffset-n4 0,
cyclicShift-n4 1
},
resourceMapping {
startPosition 1,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 2,
freqHopping {
c-SRS 5,
b-SRS 3,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType periodic: {
periodicityAndOffset-p sl40: 0
},
sequenceId 501
}
}
}
},
firstActiveUplinkBWP-Id 0,
pusch-ServingCellConfig setup: {
}
},
pdcch-ServingCellConfig setup: {
},
pdsch-ServingCellConfig setup: {
nrofHARQ-ProcessesForPDSCH n16,
maxMIMO-Layers 1
},
csi-MeasConfig setup: {
nzp-CSI-RS-ResourceToAddModList {
{
nzp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row2: '001'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 3,
cdm-Type noCDM,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 1,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 6,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 2,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 10,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 3,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 6,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 2,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 4,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 10,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 2,
qcl-InfoPeriodicCSI-RS 0
}
},
nzp-CSI-RS-ResourceToReleaseList {
0,
1,
2,
3,
4
},
nzp-CSI-RS-ResourceSetToAddModList {
{
nzp-CSI-ResourceSetId 0,
nzp-CSI-RS-Resources {
0
}
},
{
nzp-CSI-ResourceSetId 1,
nzp-CSI-RS-Resources {
1,
2,
3,
4
},
trs-Info true
}
},
nzp-CSI-RS-ResourceSetToReleaseList {
0,
1
},
csi-IM-ResourceToAddModList {
{
csi-IM-ResourceId 0,
csi-IM-ResourceElementPattern pattern1: {
subcarrierLocation-p1 s0,
symbolLocation-p1 4
},
freqBand {
startingRB 0,
nrofRBs 28
},
periodicityAndOffset slots40: 1
}
},
csi-IM-ResourceToReleaseList {
0
},
csi-IM-ResourceSetToAddModList {
{
csi-IM-ResourceSetId 0,
csi-IM-Resources {
0
}
}
},
csi-IM-ResourceSetToReleaseList {
0
},
csi-ResourceConfigToAddModList {
{
csi-ResourceConfigId 0,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
0
}
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 1,
csi-RS-ResourceSetList csi-IM-ResourceSetList: {
0
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 2,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
1
}
},
bwp-Id 0,
resourceType periodic
}
},
csi-ResourceConfigToReleaseList {
0,
1,
2
},
csi-ReportConfigToAddModList {
{
reportConfigId 0,
resourcesForChannelMeasurement 0,
csi-IM-ResourcesForInterference 1,
reportConfigType periodic: {
reportSlotConfig slots40: 2,
pucch-CSI-ResourceList {
{
uplinkBandwidthPartId 0,
pucch-Resource 13
}
}
},
reportQuantity cri-RI-PMI-CQI: NULL,
reportFreqConfiguration {
cqi-FormatIndicator widebandCQI,
pmi-FormatIndicator widebandPMI
},
timeRestrictionForChannelMeasurements notConfigured,
timeRestrictionForInterferenceMeasurements notConfigured,
groupBasedBeamReporting disabled: {
},
cqi-Table table2,
subbandSize value1
}
},
csi-ReportConfigToReleaseList {
0
}
},
tag-Id 0
}
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Step 5. UE confirms the configuration
The UE answers on cell 01, 79 ms after the command. This confirms DRB 1 and the stored candidate. It is not a handover complete.
Amarisoft gNB log, cell 01, RRCReconfigurationComplete
[RRC] UL 0001 01 DCCH-NR: RRC reconfiguration complete
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
}
}
}
From here the UE stays on cell 01 with DRB 1 in use. It evaluates condEventA3 on SSB 438010 and condEventD1 on its own position. No RRC message is exchanged for the next 23.2 seconds.
Step 6. UE sends a preamble on cell 02
The gNB writes the satellite geometry of each cell every 10 ms. The pair below is taken 5 ms before the preamble. It shows why cell 02 is the better choice at this moment, although it says nothing about where the UE is.
Amarisoft gNB log, NTN geometry lines of both cells
[PHY] DL - 01 - 350.0 NTN: ta_common=8174 ta_ue=11274 dl_freq_shift=-31814 ul_freq_shift=-29048 gain=-12.1 elevation=22.1 azimuth=89.2 [PHY] DL - 02 - 350.0 NTN: ta_common=4705 ta_ue=9143 dl_freq_shift=15908 ul_freq_shift=14528 gain=-11.1 elevation=49.9 azimuth=272.5
The satellite of cell 01 is at elevation 22.1 degrees and azimuth 89.2, low in the east. Its elevation drops slowly during the whole log, from 35.2 at the first line. The satellite of cell 02 is at elevation 49.9 degrees and azimuth 272.5, high in the west. So the serving satellite is setting while the candidate satellite is well above the horizon.
Amarisoft gNB log, cell 02, PRACH and MAC context line
[PHY] UL - 02 - 350.1 PRACH: sequence_index=0 ta=40 prb=2:6 snr=29.0 p=-16.4 [MAC] - 0003 02 Allocating new UE
The preamble is sequence_index 0, received with snr 29.0 dB. The timing value ta 40 is much larger than the ta 1 of Example 1. The UE pre-compensates the satellite delay with the ephemeris and the common TA, so this value covers only the part that the pre-compensation leaves. The gNB allocates a temporary context 0003 for the preamble.
Amarisoft gNB log, cell 01, downlink to the UE after the preamble
[MAC] DL 0001 01 TAG:0 ta=31 PAD:len=4 [PHY] DL 0001 01 4601 359.2 PDCCH: ss_id=2 cce_index=0 al=2 dci=1_1 [PHY] DL 0001 01 4601 359.2 PDSCH: harq=2 prb=23:2 symb=2:12 k1=24 CW0: tb_len=7 mod=2 rv_idx=0 cr=0.15 retx=0
Cell 01 still sends a timing advance command and a PDSCH to C-RNTI 0x4601, 87 ms after the preamble on cell 02. As in Example 1, the source cell learns about the execution only when the UE completes on the target. Here the gap is longer, because the whole access takes longer over the satellite.
Step 7. Cell 02 sends the random access response
The RAR follows one millisecond after the preamble in the gNB log. The delay seen by the UE is longer, because the RAR has to travel down the satellite link.
Amarisoft gNB log, cell 02, RAR
[MAC] DL - 02 RAR: rapid=0
rapid=0
ta=40
ul_grant:
hopping_flag=0
riv=0x1
time_domain_rsc=1
mcs=4
tpc_command=3
csi_request=0
tc-rnti=0x4603
The RAR answers rapid 0 with ta 40 and gives a temporary C-RNTI 0x4603. Its ul_grant carries mcs 4 and time_domain_rsc 1 for Msg3.
Step 8. UE identifies itself with C-RNTI 0x4602
Msg3 arrives 46 ms after the RAR. In Example 1 the same gap was 10 ms. The difference comes from the NTN timing: the Msg3 slot includes the cellSpecificKoffset of 36 slots, which is 36 ms at 15 kHz SCS.
Amarisoft gNB log, cell 02, Msg3
[PHY] UL 0003 02 4603 354.8 PUSCH: harq=0 prb=1 symb=0:14 CW0: tb_len=9 mod=2 rv_idx=0 cr=0.30 retx=0 crc=OK snr=49.7 epre=-34.8 ta=-0.2 [MAC] - 0003 02 mac_crnti=0x4602: resuming connection of ue_id=0x0002 [MAC] UL 0002 02 CRNTI:4602 LBSR:bitmap=81 bs(0)=4 bs(7)=7 PAD:len=0 [MAC] - 0003 02 Freeing UE
Msg3 is decoded with crc OK and snr 49.7. The MAC CE CRNTI:4602 matches the candidate context of Step 3. So the gNB resumes ue_id 0002 and frees the temporary context 0003. The first uplink grant to the resumed UE shows k2=40, against k2=4 in Example 1. The difference is the Koffset of 36.
Step 9. UE completes the CHO on cell 02
The RRCReconfigurationComplete arrives on cell 02, 91 ms after the preamble. The same PUSCH also carries a TA Report MAC CE.
Amarisoft gNB log, cell 02, PUSCH and MAC lines of the complete message
[PHY] UL 0002 02 4602 359.2 PUSCH: harq=0 prb=23 symb=0:14 CW0: tb_len=129 mod=8 rv_idx=0 cr=0.87 retx=0 crc=OK snr=42.9 epre=-34.9 ta=-0.7 [MAC] UL 0002 02 LCID:1 len=15 LCID:4 len=8 TA Report:13 LBSR:bitmap=81 bs(0)=0 bs(7)=0 SE PHR:ph=63 pc=53 PAD:len=90
Amarisoft gNB log, cell 02, RRCReconfigurationComplete
[RRC] UL 0002 02 DCCH-NR: RRC reconfiguration complete
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
needForGapsInfoNR-r16 {
intraFreq-needForGap-r16 {
{
servCellId-r16 0,
gapIndicationIntra-r16 no-gap
}
},
interFreq-needForGap-r16 {
{
bandNR-r16 256,
gapIndication-r16 gap
}
}
}
}
}
}
}
}
}
The UE sends the TA Report MAC CE because ta-Report-r17 is enabled in SIB19. The log shows its raw value, 13. The complete message carries needForGapsInfoNR-r16, because the candidate set needForGapsConfigNR-r16. This answers the stored condRRCReconfig-r16, not the message of Step 4.
Step 10. gNB releases the source context
Right after the complete message, the gNB moves the DRB state and releases the source side, the same way as in Example 1.
Amarisoft gNB log, PDCP and MAC context lines
[PDCP] - 0001 DRB1 copy state: source [PDCP] - 0001 DRB1 copy state: destination [MAC] - 0001 01 Freeing UE
The PDCP state of DRB 1 is copied from the source to the destination, and the UE context on cell 01 is freed. No NGAP message is needed, because the gNB does not change. Since the candidate removed every measurement, the UE now sits on cell 02 with no measurement and no new CHO candidate. If the satellite of cell 02 also sets later, the network has to send a new configuration first.
A CHO can be configured with no measurement report : the candidate comes with the PDU session setup, because the cell areas on the ground are knowncondExecutionCond can hold two events : here condEventA3 and condEventD1, and both must be fulfilled at the same timecondEventD1 uses fixed reference points : they match the referenceLocation each cell broadcasts in SIB19NTN stretches every step of the access : t304 ms2000, Koffset 36 slots, Msg3 46 ms after the RAR and completion 91 ms after the preamble
Example 3 : CHO with Event T1
This example uses the same two NTN cells as Example 2. Cell 0x01 is PCI 500 with its SSB at 437090, and cell 0x02 is PCI 501 with its SSB at 438010. Both are FDD on band n256 with 25 PRB at 15 kHz SCS. The difference is the execution condition. Here the CHO has a single triggering event, condEventT1, which is a time window. The UE executes the CHO when its clock enters that window, with no radio or location condition at all.
Figure 3. Trigger profile of Example 3. The T1 window opens 30.6 s after the CHO command and lasts 1 s. The preamble comes 11 ms into it, assuming a log clock of UTC+1.
The classification is the same as in Example 1 and Example 2. Both cells belong to one gNB, so no XnAP or NGAP message appears during the CHO. As in Example 2, the gNB sends the CHO command together with the PDU session setup, with no MeasurementReport before it. TS 38.331 allows a CHO with condEventT1 alone. It is one of the exceptions to the rule that a second event, condEventA3, A4 or A5, must be configured with it. The candidate removes every measurement after the CHO, and no further CHO follows in the log.
The table follows the same layout as in the examples above. Cell 01 is the source cell and Cell 02 is the candidate cell. PHY and MAC lines are kept only for the random access on the candidate cell, plus one pair of NTN geometry lines in Step 6. Steps 7 to 10 match Example 2 closely, so their explanations are shorter here.
Step # | Dir | Message | Comment |
|---|---|---|---|
Cell 01 -> UE | SIB19 | NTN assistance for the serving satellite, with t-Service-r17 and neighbour PCI 501. No referenceLocation. | |
Cell 01 -> UE | RRCReconfiguration | Measurement setup after registration. MO 1 = SSB 437090, MO 2 = SSB 438010. One report config, condEventT1. No measId yet. | |
Cell 01 -> Cell 02 (gNB internal) | MAC: Allocating new UE 0002 | Candidate context created on cell 02, with no measurement report before it. | |
Cell 01 -> UE | RRCReconfiguration with DRB 1 and conditionalReconfiguration-r16 | CHO command in the PDU session setup. Execution needs measId 1 (T1) only. Candidate PCI 501, newUE-Identity 17922 (0x4602), t304 ms2000. | |
UE -> Cell 01 | RRCReconfigurationComplete | DRB 1 and the candidate are stored. No handover yet. | |
UE -> Cell 02 | PRACH sequence_index=3 | T1 window entered, 30.6 s after Step 5. Contention based preamble, ta 72, snr 29.2. | |
Cell 02 -> UE | RAR rapid=3 | Random access response with tc-rnti 0x4603. | |
UE -> Cell 02 | Msg3 with C-RNTI MAC CE 4602 | Arrives 46 ms after the RAR. The gNB resumes UE 0002. | |
UE -> Cell 02 | RRCReconfigurationComplete | CHO complete, 91 ms after the preamble. The same PUSCH carries a TA Report. | |
Cell 01 (gNB internal) | MAC: Freeing UE 0001 on cell 01 | PDCP state copied to the target, source context released. |
Step 1. Serving cell broadcasts SIB19
The SIB19 of cell 01 carries the same kind of NTN assistance as in Example 2. One field is missing this time. There is no referenceLocation-r17, because a time based CHO does not need a reference point.
Amarisoft gNB log, cell 01, SystemInformation with SIB19
[RRC] DL - 01 BCCH-NR: SIB
{
message c1: systemInformation: {
criticalExtensions systemInformation: {
sib-TypeAndInfo {
sib19-v1700: {
ntn-Config-r17 {
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1671052,
ta-CommonDrift-r17 194573,
ta-CommonDriftVariant-r17 2207
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 761,
longitude-r17 127415455,
inclination-r17 37277430,
meanAnomaly-r17 72646935
},
ta-Report-r17 enabled
},
t-Service-r17 397453218172,
ntn-NeighCellConfigList-r17 {
{
ntn-Config-r17 {
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1428071,
ta-CommonDrift-r17 -178992,
ta-CommonDriftVariant-r17 3909
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 761,
longitude-r17 127415455,
inclination-r17 37277430,
meanAnomaly-r17 62822240
},
ta-Report-r17 enabled
},
carrierFreq-r17 438010,
physCellId-r17 501
}
}
}
}
}
}
}
The ntn-Config-r17 again describes a LEO satellite with semiMajorAxis-r17 100729583, cellSpecificKoffset-r17 36 and ntn-UlSyncValidityDuration-r17 s5. The ntn-NeighCellConfigList-r17 lists PCI 501 on SSB 438010 with the ephemeris of the second satellite.
The t-Service-r17 is 397453218172. It counts UTC time in 10 ms units since 00:00:00 on 1 January 1900, so it is 2025-12-12 12:43:01.72 UTC. This is the time when cell 01 stops serving its current area. The T1 threshold in Step 2 is well before it, so the CHO happens while cell 01 still serves the area.
Step 2. Source cell defines the time window
Right after registration the gNB sends an RRCReconfiguration on cell 01 with a measConfig. The measObjects are the same as in Example 2. The report configuration is a single condTriggerConfig with condEventT1.
Amarisoft gNB log, cell 01, RRCReconfiguration, measConfig part
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
measConfig {
measObjectToAddModList {
{
measObjectId 1,
measObject measObjectNR: {
ssbFrequency 437090,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf5: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 256
}
},
{
measObjectId 2,
measObject measObjectNR: {
ssbFrequency 438010,
ssbSubcarrierSpacing kHz15,
smtc1 {
periodicityAndOffset sf5: 0,
duration sf1
},
referenceSignalConfig {
ssb-ConfigMobility {
deriveSSB-IndexFromCell FALSE
}
},
quantityConfigIndex 1,
offsetMO {
},
freqBandIndicatorNR 256
}
}
},
reportConfigToAddModList {
{
reportConfigId 1,
reportConfig reportConfigNR: {
reportType condTriggerConfig-r16: {
condEventId condEventT1-r17: {
t1-Threshold-r17 397452594000,
duration-r17 10
},
rsType-r16 ssb
}
}
}
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
filterCoefficientRSRQ fc2,
filterCoefficientRS-SINR fc2
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
... (nonCriticalExtension: masterCellGroup with tar-Config-r17, and dedicatedNAS-MessageList not shown)
}
}
}
The t1-Threshold-r17 is 397452594000. It uses the same unit as t-Service, 10 ms since the start of 1900, so it is 2025-12-12 10:59:00.00 UTC. The duration-r17 is 10, and each step is 100 ms, so the window is 1 second long. TS 38.331 clause 5.5.4.16 defines the entering condition as Mt > Thresh1 and the leaving condition as Mt > Thresh1 + Duration. Here Mt is the time measured at the UE. So the CHO can execute only between 10:59:00.00 and 10:59:01.00 UTC.
Nothing in this event depends on RSRP or on where the UE is. The measObject only gives the measId something to link to. TS 38.331 notes that for a CHO with only condEventD1, condEventD2 or condEventT1, it is up to the UE implementation whether and how it detects the applicable cell.
Step 3. gNB prepares the candidate on cell 02
As in Example 2, the candidate context on cell 02 is created together with the PDU session setup, before any measurement report.
Amarisoft gNB log, MAC context line
[MAC] - 0002 02 Allocating new UE
The context gets ue_id 0002 and the C-RNTI 0x4602. With a T1 condition the network decides the handover time itself, so it knows the CHO toward cell 02 is coming. The context then waits about 30 seconds for the UE.
Step 4. Source cell sends the CHO command with the PDU session
This RRCReconfiguration sets up DRB 1 and delivers the CHO configuration, as in Example 2. The decode below is shortened. The full message follows it.
Amarisoft gNB log, cell 01, RRCReconfiguration with DRB 1 and conditionalReconfiguration-r16, shortened
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 2
}
},
drb-ToAddModList {
{
cnAssociation sdap-Config: {
pdu-Session 1,
sdap-HeaderDL absent,
sdap-HeaderUL present,
defaultDRB TRUE,
mappedQoS-FlowsToAdd {
1
}
},
drb-Identity 1,
pdcp-Config {
drb {
discardTimer infinity,
pdcp-SN-SizeUL len18bits,
pdcp-SN-SizeDL len18bits,
headerCompression notUsed: NULL,
statusReportRequired true
},
t-Reordering ms3000
}
}
}
},
measConfig {
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
}
},
nonCriticalExtension {
... (masterCellGroup: RLC bearer and logical channel configuration for DRB 1 and SRB 2)
... (dedicatedNAS-MessageList with the PDU Session Establishment Accept)
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
reportConfigToRemoveList {
1
},
measIdToRemoveList {
1
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
... (RLC bearers, MAC and physical cell group configuration of the candidate)
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 438010,
frequencyBandList {
256
},
... (rest of the target downlink and uplink common configuration, including rach-ConfigCommon)
ssb-PositionsInBurst shortBitmap: '8'H,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower 50,
ntn-Config-r17 {
epochTime-r17 {
sfn-r17 616,
subFrameNR-r17 0
},
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1375334,
ta-CommonDrift-r17 -174063,
ta-CommonDriftVariant-r17 3868
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 761,
longitude-r17 127415455,
inclination-r17 37277430,
meanAnomaly-r17 63106594
},
ta-Report-r17 enabled
}
},
newUE-Identity 17922,
t304 ms2000,
smtc {
periodicityAndOffset sf5: 0,
duration sf1
}
},
... (spCellConfigDedicated: target cell dedicated PDCCH, PDSCH, PUCCH, PUSCH, SRS and CSI configuration)
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
The outer measConfig adds only measId 1, which links measObject 1 to reportConfig 1, the condEventT1. Unlike Example 2, it sets up no measurement gap, because the UE has nothing to measure on the other frequency for this event.
Inside conditionalReconfiguration-r16, the entry condReconfigId-r16 1 has condExecutionCond-r16 with the single value 1. So the T1 window alone triggers the execution. The condRRCReconfig-r16 is almost the same as in Example 2. It removes both measObjects, reportConfig 1 and measId 1, and it releases the gap. The reconfigurationWithSync names physCellId 501 on SSB 438010 in band 256, with newUE-Identity 17922 (0x4602) and t304 ms2000. Its ntn-Config-r17 carries the ephemeris and the common TA of the cell 02 satellite. The candidate has no rach-ConfigDedicated.
Full RRCReconfiguration (PDU session setup and CHO command), about 1070 lines, click to expand or collapse
[RRC] DL 0001 01 DCCH-NR: RRC reconfiguration
{
message c1: rrcReconfiguration: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 2
}
},
drb-ToAddModList {
{
cnAssociation sdap-Config: {
pdu-Session 1,
sdap-HeaderDL absent,
sdap-HeaderUL present,
defaultDRB TRUE,
mappedQoS-FlowsToAdd {
1
}
},
drb-Identity 1,
pdcp-Config {
drb {
discardTimer infinity,
pdcp-SN-SizeUL len18bits,
pdcp-SN-SizeDL len18bits,
headerCompression notUsed: NULL,
statusReportRequired true
},
t-Reordering ms3000
}
}
}
},
measConfig {
measIdToAddModList {
{
measId 1,
measObjectId 1,
reportConfigId 1
}
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
servedRadioBearer drb-Identity: 1,
rlc-Config am: {
ul-AM-RLC {
sn-FieldLength size18,
t-PollRetransmit ms80,
pollPDU p64,
pollByte kB125,
maxRetxThreshold t4
},
dl-AM-RLC {
sn-FieldLength size18,
t-Reassembly ms150,
t-StatusProhibit ms20
}
},
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
servedRadioBearer srb-Identity: 2,
rlc-Config am: {
ul-AM-RLC {
sn-FieldLength size12,
t-PollRetransmit ms80,
pollPDU infinity,
pollByte infinity,
maxRetxThreshold t8
},
dl-AM-RLC {
sn-FieldLength size12,
t-Reassembly ms35,
t-StatusProhibit ms0
}
},
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
}
},
dedicatedNAS-MessageList {
'7E02527558D9037E006801006A2E0101C211000901000631300101FF0106061388047A125932290501C0A803022201018179000601204101010A7B00188080210A0300000A810608080808000D040808080800110025200C6E746E2D696E7465726E6574066D6E63303031066D636330303104677072731201'H
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
conditionalReconfiguration-r16 {
attemptCondReconfig-r16 true,
condReconfigToAddModList-r16 {
{
condReconfigId-r16 1,
condExecutionCond-r16 {
1
},
condRRCReconfig-r16 {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfiguration: {
radioBearerConfig {
srb-ToAddModList {
{
srb-Identity 1,
reestablishPDCP true
},
{
srb-Identity 2,
reestablishPDCP true
}
},
drb-ToAddModList {
{
drb-Identity 1,
reestablishPDCP true
}
}
},
measConfig {
measObjectToRemoveList {
1,
2
},
reportConfigToRemoveList {
1
},
measIdToRemoveList {
1
},
quantityConfig {
quantityConfigNR-List {
{
quantityConfigCell {
ssb-FilterConfig {
},
csi-RS-FilterConfig {
}
}
}
}
},
measGapConfig {
gapUE release: NULL
}
},
nonCriticalExtension {
masterCellGroup {
cellGroupId 0,
rlc-BearerToAddModList {
{
logicalChannelIdentity 4,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 13,
prioritisedBitRate kBps8,
bucketSizeDuration ms100,
logicalChannelGroup 7,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 1,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 1,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
},
{
logicalChannelIdentity 2,
reestablishRLC true,
mac-LogicalChannelConfig {
ul-SpecificParameters {
priority 3,
prioritisedBitRate infinity,
bucketSizeDuration ms5,
logicalChannelGroup 0,
schedulingRequestID 0,
logicalChannelSR-Mask FALSE,
logicalChannelSR-DelayTimerApplied FALSE
}
}
}
},
mac-CellGroupConfig {
schedulingRequestConfig {
schedulingRequestToAddModList {
{
schedulingRequestId 0,
sr-ProhibitTimer ms16,
sr-TransMax n64
}
},
schedulingRequestToReleaseList {
0
}
},
bsr-Config {
periodicBSR-Timer sf20,
retxBSR-Timer sf80
},
tag-Config {
tag-ToReleaseList {
0
},
tag-ToAddModList {
{
tag-Id 0,
timeAlignmentTimer infinity
}
}
},
phr-Config setup: {
phr-PeriodicTimer infinity,
phr-ProhibitTimer sf20,
phr-Tx-PowerFactorChange dB3,
multiplePHR FALSE,
dummy FALSE,
phr-Type2OtherCell FALSE,
phr-ModeOtherCG real
},
skipUplinkTxDynamic FALSE,
tar-Config-r17 setup: {
offsetThresholdTA-r17 ms0dot5,
timingAdvanceSR-r17 enabled
}
},
physicalCellGroupConfig {
pdsch-HARQ-ACK-Codebook dynamic
},
spCellConfig {
reconfigurationWithSync {
spCellConfigCommon {
physCellId 501,
downlinkConfigCommon {
frequencyInfoDL {
absoluteFrequencySSB 438010,
frequencyBandList {
256
},
absoluteFrequencyPointA 437530,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 25
}
}
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 6600,
subcarrierSpacing kHz15
},
pdcch-ConfigCommon setup: {
controlResourceSetZero 1,
searchSpaceZero 0,
commonSearchSpaceList {
{
searchSpaceId 1,
controlResourceSetId 0,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n0,
aggregationLevel4 n4,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType common: {
dci-Format0-0-AndFormat1-0 {
}
}
}
},
searchSpaceSIB1 0,
searchSpaceOtherSystemInformation 1,
pagingSearchSpace 1,
ra-SearchSpace 1
},
pdsch-ConfigCommon setup: {
pdsch-TimeDomainAllocationList {
{
mappingType typeA,
startSymbolAndLength 53
}
}
}
}
},
uplinkConfigCommon {
frequencyInfoUL {
frequencyBandList {
256
},
absoluteFrequencyPointA 399530,
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz15,
carrierBandwidth 25
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 6600,
subcarrierSpacing kHz15
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 16,
msg1-FDM one,
msg1-FrequencyStart 2,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl10
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
prach-RootSequenceIndex l839: 1,
restrictedSetConfig unrestrictedSet
},
pusch-ConfigCommon setup: {
pusch-TimeDomainAllocationList {
{
k2 4,
mappingType typeA,
startSymbolAndLength 55
},
{
k2 4,
mappingType typeA,
startSymbolAndLength 27
}
},
p0-NominalWithGrant -90
},
pucch-ConfigCommon setup: {
pucch-ResourceCommon 0,
pucch-GroupHopping neither,
p0-nominal -96
}
},
dummy ms500
},
ssb-PositionsInBurst shortBitmap: '8'H,
dmrs-TypeA-Position pos2,
ssbSubcarrierSpacing kHz15,
ss-PBCH-BlockPower 50,
ntn-Config-r17 {
epochTime-r17 {
sfn-r17 616,
subFrameNR-r17 0
},
ntn-UlSyncValidityDuration-r17 s5,
cellSpecificKoffset-r17 36,
ta-Info-r17 {
ta-Common-r17 1375334,
ta-CommonDrift-r17 -174063,
ta-CommonDriftVariant-r17 3868
},
ephemerisInfo-r17 orbital-r17: {
semiMajorAxis-r17 100729583,
eccentricity-r17 0,
periapsis-r17 761,
longitude-r17 127415455,
inclination-r17 37277430,
meanAnomaly-r17 63106594
},
ta-Report-r17 enabled
}
},
newUE-Identity 17922,
t304 ms2000,
smtc {
periodicityAndOffset sf5: 0,
duration sf1
}
},
spCellConfigDedicated {
initialDownlinkBWP {
pdcch-Config setup: {
controlResourceSetToAddModList {
{
controlResourceSetId 2,
frequencyDomainResources '111100000000000000000000000000000000000000000'B,
duration 2,
cce-REG-MappingType nonInterleaved: NULL,
precoderGranularity sameAsREG-bundle
}
},
controlResourceSetToReleaseList {
2
},
searchSpacesToAddModList {
{
searchSpaceId 2,
controlResourceSetId 2,
monitoringSlotPeriodicityAndOffset sl1: NULL,
monitoringSymbolsWithinSlot '10000000000000'B,
nrofCandidates {
aggregationLevel1 n0,
aggregationLevel2 n4,
aggregationLevel4 n0,
aggregationLevel8 n0,
aggregationLevel16 n0
},
searchSpaceType ue-Specific: {
dci-Formats formats0-1-And-1-1
}
}
},
searchSpacesToReleaseList {
2
}
},
pdsch-Config setup: {
dmrs-DownlinkForPDSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos3
},
tci-StatesToAddModList {
{
tci-StateId 0,
qcl-Type1 {
referenceSignal ssb: 0,
qcl-Type typeD
}
}
},
tci-StatesToReleaseList {
0
},
resourceAllocation resourceAllocationType1,
rbg-Size config1,
mcs-Table qam256,
prb-BundlingType staticBundling: {
bundleSize wideband
},
zp-CSI-RS-ResourceToAddModList {
{
zp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row4: '001'B,
nrofPorts p4,
firstOFDMSymbolInTimeDomain 4,
cdm-Type fd-CDM2,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
periodicityAndOffset slots40: 1
}
},
zp-CSI-RS-ResourceToReleaseList {
0
},
p-ZP-CSI-RS-ResourceSet setup: {
zp-CSI-RS-ResourceSetId 0,
zp-CSI-RS-ResourceIdList {
0
}
}
}
},
firstActiveDownlinkBWP-Id 0,
uplinkConfig {
initialUplinkBWP {
pucch-Config setup: {
resourceSetToAddModList {
{
pucch-ResourceSetId 0,
resourceList {
0,
1,
2,
3,
4,
5,
6,
7
}
},
{
pucch-ResourceSetId 1,
resourceList {
8,
9,
10,
11
}
}
},
resourceSetToReleaseList {
0,
1
},
resourceToAddModList {
{
pucch-ResourceId 0,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 0
}
},
{
pucch-ResourceId 1,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 1
}
},
{
pucch-ResourceId 2,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 2
}
},
{
pucch-ResourceId 3,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 3
}
},
{
pucch-ResourceId 4,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 4
}
},
{
pucch-ResourceId 5,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 5
}
},
{
pucch-ResourceId 6,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 6
}
},
{
pucch-ResourceId 7,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 7
}
},
{
pucch-ResourceId 8,
startingPRB 0,
intraSlotFrequencyHopping enabled,
secondHopPRB 24,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
},
{
pucch-ResourceId 9,
startingPRB 0,
intraSlotFrequencyHopping enabled,
secondHopPRB 24,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 10
}
},
{
pucch-ResourceId 10,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 8
}
},
{
pucch-ResourceId 11,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 10
}
},
{
pucch-ResourceId 12,
startingPRB 0,
format format0: {
initialCyclicShift 1,
nrofSymbols 1,
startingSymbolIndex 13
}
},
{
pucch-ResourceId 13,
startingPRB 24,
intraSlotFrequencyHopping enabled,
secondHopPRB 0,
format format2: {
nrofPRBs 1,
nrofSymbols 2,
startingSymbolIndex 12
}
}
},
resourceToReleaseList {
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13
},
format2 setup: {
maxCodeRate zeroDot25
},
schedulingRequestResourceToAddModList {
{
schedulingRequestResourceId 1,
schedulingRequestID 0,
periodicityAndOffset sl40: 1,
resource 12
}
},
schedulingRequestResourceToReleaseList {
1
},
dl-DataToUL-ACK {
4
}
},
pusch-Config setup: {
txConfig codebook,
dmrs-UplinkForPUSCH-MappingTypeA setup: {
transformPrecodingDisabled {
}
},
pusch-PowerControl {
msg3-Alpha alpha1,
p0-AlphaSets {
{
p0-PUSCH-AlphaSetId 0,
p0 0,
alpha alpha1
}
},
pathlossReferenceRSToAddModList {
{
pusch-PathlossReferenceRS-Id 0,
referenceSignal ssb-Index: 0
}
},
pathlossReferenceRSToReleaseList {
0
},
sri-PUSCH-MappingToAddModList {
{
sri-PUSCH-PowerControlId 0,
sri-PUSCH-PathlossReferenceRS-Id 0,
sri-P0-PUSCH-AlphaSetId 0,
sri-PUSCH-ClosedLoopIndex i0
}
},
sri-PUSCH-MappingToReleaseList {
0
}
},
resourceAllocation resourceAllocationType1,
mcs-Table qam256,
mcs-TableTransformPrecoder qam256,
codebookSubset nonCoherent,
maxRank 1,
uci-OnPUSCH setup: {
betaOffsets semiStatic: {
betaOffsetACK-Index1 9,
betaOffsetACK-Index2 9,
betaOffsetACK-Index3 9,
betaOffsetCSI-Part1-Index1 7,
betaOffsetCSI-Part1-Index2 7,
betaOffsetCSI-Part2-Index1 7,
betaOffsetCSI-Part2-Index2 7
},
scaling f1
}
},
srs-Config setup: {
srs-ResourceSetToReleaseList {
0
},
srs-ResourceSetToAddModList {
{
srs-ResourceSetId 0,
srs-ResourceIdList {
0
},
resourceType periodic: {
},
usage codebook,
p0 -90,
pathlossReferenceRS ssb-Index: 0
}
},
srs-ResourceToReleaseList {
0
},
srs-ResourceToAddModList {
{
srs-ResourceId 0,
nrofSRS-Ports port1,
transmissionComb n4: {
combOffset-n4 0,
cyclicShift-n4 3
},
resourceMapping {
startPosition 1,
nrofSymbols n1,
repetitionFactor n1
},
freqDomainPosition 0,
freqDomainShift 2,
freqHopping {
c-SRS 5,
b-SRS 3,
b-hop 0
},
groupOrSequenceHopping neither,
resourceType periodic: {
periodicityAndOffset-p sl40: 0
},
sequenceId 501
}
}
}
},
firstActiveUplinkBWP-Id 0,
pusch-ServingCellConfig setup: {
}
},
pdcch-ServingCellConfig setup: {
},
pdsch-ServingCellConfig setup: {
nrofHARQ-ProcessesForPDSCH n16,
maxMIMO-Layers 1
},
csi-MeasConfig setup: {
nzp-CSI-RS-ResourceToAddModList {
{
nzp-CSI-RS-ResourceId 0,
resourceMapping {
frequencyDomainAllocation row2: '001'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 3,
cdm-Type noCDM,
density one: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 1,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 6,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 2,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 10,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 1,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 3,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 6,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 2,
qcl-InfoPeriodicCSI-RS 0
},
{
nzp-CSI-RS-ResourceId 4,
resourceMapping {
frequencyDomainAllocation row1: '1'H,
nrofPorts p1,
firstOFDMSymbolInTimeDomain 10,
cdm-Type noCDM,
density three: NULL,
freqBand {
startingRB 0,
nrofRBs 28
}
},
powerControlOffset 0,
scramblingID 501,
periodicityAndOffset slots40: 2,
qcl-InfoPeriodicCSI-RS 0
}
},
nzp-CSI-RS-ResourceToReleaseList {
0,
1,
2,
3,
4
},
nzp-CSI-RS-ResourceSetToAddModList {
{
nzp-CSI-ResourceSetId 0,
nzp-CSI-RS-Resources {
0
}
},
{
nzp-CSI-ResourceSetId 1,
nzp-CSI-RS-Resources {
1,
2,
3,
4
},
trs-Info true
}
},
nzp-CSI-RS-ResourceSetToReleaseList {
0,
1
},
csi-IM-ResourceToAddModList {
{
csi-IM-ResourceId 0,
csi-IM-ResourceElementPattern pattern1: {
subcarrierLocation-p1 s0,
symbolLocation-p1 4
},
freqBand {
startingRB 0,
nrofRBs 28
},
periodicityAndOffset slots40: 1
}
},
csi-IM-ResourceToReleaseList {
0
},
csi-IM-ResourceSetToAddModList {
{
csi-IM-ResourceSetId 0,
csi-IM-Resources {
0
}
}
},
csi-IM-ResourceSetToReleaseList {
0
},
csi-ResourceConfigToAddModList {
{
csi-ResourceConfigId 0,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
0
}
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 1,
csi-RS-ResourceSetList csi-IM-ResourceSetList: {
0
},
bwp-Id 0,
resourceType periodic
},
{
csi-ResourceConfigId 2,
csi-RS-ResourceSetList nzp-CSI-RS-SSB: {
nzp-CSI-RS-ResourceSetList {
1
}
},
bwp-Id 0,
resourceType periodic
}
},
csi-ResourceConfigToReleaseList {
0,
1,
2
},
csi-ReportConfigToAddModList {
{
reportConfigId 0,
resourcesForChannelMeasurement 0,
csi-IM-ResourcesForInterference 1,
reportConfigType periodic: {
reportSlotConfig slots40: 2,
pucch-CSI-ResourceList {
{
uplinkBandwidthPartId 0,
pucch-Resource 13
}
}
},
reportQuantity cri-RI-PMI-CQI: NULL,
reportFreqConfiguration {
cqi-FormatIndicator widebandCQI,
pmi-FormatIndicator widebandPMI
},
timeRestrictionForChannelMeasurements notConfigured,
timeRestrictionForInterferenceMeasurements notConfigured,
groupBasedBeamReporting disabled: {
},
cqi-Table table2,
subbandSize value1
}
},
csi-ReportConfigToReleaseList {
0
}
},
tag-Id 0
}
}
},
masterKeyUpdate {
keySetChangeIndicator FALSE,
nextHopChainingCount 0
},
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
otherConfig-v1610 {
maxCC-PreferenceConfig-r16 release: NULL,
maxMIMO-LayerPreferenceConfig-r16 release: NULL,
releasePreferenceConfig-r16 release: NULL
},
needForGapsConfigNR-r16 setup: {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Step 5. UE confirms the configuration
The UE answers on cell 01, 79 ms after the command. This confirms DRB 1 and the stored candidate. It is not a handover complete.
Amarisoft gNB log, cell 01, RRCReconfigurationComplete
[RRC] UL 0001 01 DCCH-NR: RRC reconfiguration complete
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
}
}
}
From here the UE stays on cell 01 with DRB 1 in use and waits for the T1 window. No RRC message is exchanged for the next 30.6 seconds.
Step 6. UE sends a preamble on cell 02
The satellite geometry is close to Example 2. The pair of NTN lines below is taken 5 ms before the preamble.
Amarisoft gNB log, NTN geometry lines of both cells
[PHY] DL - 01 - 610.0 NTN: ta_common=8286 ta_ue=11353 dl_freq_shift=-32128 ul_freq_shift=-29334 gain=-12.1 elevation=21.6 azimuth=89.3 [PHY] DL - 02 - 610.0 NTN: ta_common=4628 ta_ue=9104 dl_freq_shift=15299 ul_freq_shift=13972 gain=-11.1 elevation=51.2 azimuth=272.7
The satellite of cell 01 is at elevation 21.6 degrees, low in the east, and the satellite of cell 02 is at 51.2 degrees, high in the west. With T1 the UE does not compare the two. The network chose the time in advance, and the geometry only shows that cell 02 is a sensible target at that time.
Amarisoft gNB log, cell 02, PRACH and MAC context line
[PHY] UL - 02 - 610.1 PRACH: sequence_index=3 ta=72 prb=2:6 snr=29.2 p=-16.5 [MAC] - 0003 02 Allocating new UE
The preamble is sequence_index 3, received with snr 29.2 dB and ta 72. The gNB allocates a temporary context 0003 for it.
The gNB log time of the preamble is 59 minutes, 0.011 seconds past the hour. The T1 window starts at 10:59:00.00 UTC. The minutes and seconds match, which points to a gNB log clock one hour ahead of UTC. If that is the offset, the preamble arrives 11 ms into the 1 second window. The log does not record the offset itself, so treat this as a reading of the two values, not as a measurement.
Amarisoft gNB log, cell 01, downlink to the UE after the preamble
[PHY] DL 0001 01 4601 617.0 PDSCH: harq=0 prb=0 symb=2:12 k1=24 CW0: tb_len=84 mod=8 rv_idx=0 cr=0.72 retx=3 [PHY] DL 0001 01 4601 618.3 PDCCH: ss_id=2 cce_index=2 al=2 dci=1_1 [PHY] DL 0001 01 4601 618.3 PDSCH: harq=1 prb=24 symb=2:12 k1=24 CW0: tb_len=13 mod=2 rv_idx=0 cr=0.50 retx=2
Cell 01 keeps sending PDSCH to C-RNTI 0x4601 for 78 ms after the preamble on cell 02. These are HARQ retransmissions, retx=3 and retx=2, of data the UE never acknowledged. The UE has already left cell 01. So the source cell learns about the execution only when the UE completes on the target, even though in this case the network chose the time itself.
Step 7. Cell 02 sends the random access response
The RAR follows one millisecond after the preamble in the gNB log, the same as in Example 2.
Amarisoft gNB log, cell 02, RAR
[MAC] DL - 02 RAR: rapid=3
rapid=3
ta=72
ul_grant:
hopping_flag=0
riv=0x1
time_domain_rsc=1
mcs=4
tpc_command=3
csi_request=0
tc-rnti=0x4603
The RAR answers rapid 3 with ta 72 and gives a temporary C-RNTI 0x4603. Its ul_grant carries mcs 4 and time_domain_rsc 1 for Msg3.
Step 8. UE identifies itself with C-RNTI 0x4602
Msg3 arrives 46 ms after the RAR. That is exactly the gap of Example 2, because the cellSpecificKoffset of 36 slots and the RAR grant are the same.
Amarisoft gNB log, cell 02, Msg3
[PHY] UL 0003 02 4603 614.8 PUSCH: harq=0 prb=1 symb=0:14 CW0: tb_len=9 mod=2 rv_idx=0 cr=0.30 retx=0 crc=OK snr=49.5 epre=-34.9 ta=0.3 [MAC] - 0003 02 mac_crnti=0x4602: resuming connection of ue_id=0x0002 [MAC] UL 0002 02 CRNTI:4602 LBSR:bitmap=81 bs(0)=4 bs(7)=7 PAD:len=0 [MAC] - 0003 02 Freeing UE
Msg3 is decoded with crc OK and snr 49.5. The MAC CE CRNTI:4602 matches the candidate context of Step 3, so the gNB resumes ue_id 0002 and frees the temporary context 0003.
Step 9. UE completes the CHO on cell 02
The RRCReconfigurationComplete arrives on cell 02, 91 ms after the preamble. As in Example 2, the same PUSCH carries a TA Report MAC CE.
Amarisoft gNB log, cell 02, PUSCH and MAC lines of the complete message
[PHY] UL 0002 02 4602 619.2 PUSCH: harq=0 prb=23 symb=0:14 CW0: tb_len=129 mod=8 rv_idx=0 cr=0.87 retx=0 crc=OK snr=38.8 epre=-34.9 ta=0.8 [MAC] UL 0002 02 LCID:1 len=15 LCID:4 len=8 TA Report:13 LBSR:bitmap=81 bs(0)=0 bs(7)=0 SE PHR:ph=63 pc=53 PAD:len=90
Amarisoft gNB log, cell 02, RRCReconfigurationComplete
[RRC] UL 0002 02 DCCH-NR: RRC reconfiguration complete
{
message c1: rrcReconfigurationComplete: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcReconfigurationComplete: {
nonCriticalExtension {
nonCriticalExtension {
nonCriticalExtension {
needForGapsInfoNR-r16 {
intraFreq-needForGap-r16 {
{
servCellId-r16 0,
gapIndicationIntra-r16 no-gap
}
},
interFreq-needForGap-r16 {
{
bandNR-r16 256,
gapIndication-r16 gap
}
}
}
}
}
}
}
}
}
The TA Report shows the raw value 13. The complete message carries needForGapsInfoNR-r16, because the candidate set needForGapsConfigNR-r16. It answers the stored condRRCReconfig-r16, not the message of Step 4.
Step 10. gNB releases the source context
Right after the complete message, the gNB moves the DRB state and releases the source side, the same way as in the examples above.
Amarisoft gNB log, PDCP and MAC context lines
[PDCP] - 0001 DRB1 copy state: source [PDCP] - 0001 DRB1 copy state: destination [MAC] - 0001 01 Freeing UE
The PDCP state of DRB 1 is copied from the source to the destination, and the UE context on cell 01 is freed. The UE now sits on cell 02 with no measurement and no new CHO candidate.
condEventT1 can be the only triggering event : TS 38.331 allows a CHO with T1 alone, with no A3, A4 or A5T1 is a time window, not a measurement : t1-Threshold in 10 ms UTC units and a duration in 100 ms steps, here 1 secondNo measurement gap is needed for T1 : the outer measConfig adds the measId and nothing elseThe source cell still learns about the execution late : cell 01 retransmits to the UE for 78 ms after the preamble on cell 02