Cell Reselection (Idle / Inactive) in 5G NR
Idle/inactive mobility — the S-criterion for suitability, the R-criterion ranking, frequency priorities, and intra-frequency, inter-frequency and inter-RAT reselection.
When a UE is connected, the network runs mobility: it says what to measure, it receives the reports, and it commands the handover. In RRC_IDLE and RRC_INACTIVE none of that exists. There is no measurement report, no handover command, and no signalling at all when a UE moves from one cell to another — the network finds out where the UE went the next time it needs to page it, and then only to the accuracy of a tracking area. Cell reselection is what the UE does instead, alone, from parameters that were broadcast to it before it needed them. Every one of those parameters exists to make an unsupervised UE behave sensibly: to stop it measuring when it does not need to, to stop it ping-ponging between two equally good cells, to steer it onto the frequency the operator wants it on, and to make it hold still long enough that a decision means something. This document works through the suitability gate, the measurement rules, the priority rules, the ranking criterion and the speed-dependent scaling in that order, with ten figures, six worked calculations, thirteen failure modes and a log-reading checklist.
Contents
- 01Why Reselection Exists, and Who Is Actually in Charge
- 02Reselection and Handover, Side by Side
- 03Camping: Selection, Reselection, and What Camped Means
- 04Suitable, Acceptable, Barred: the Three Categories of Cell
- 05The S-Criterion: Is This Cell Even a Candidate?
- 06The Camped-State Evaluation Loop
- 07Measurement Rules: When the UE Is Allowed Not To Look
- 08Frequency Priorities, and the Frequencies With None
- 09Dedicated Priorities, t320, and Deprioritisation
- 10The Three Reselection Rules
- 11The R-Criterion in Full
- 12q-Hyst, Ping-Pong, and the One-Second Rule
- 13Speed-Dependent Scaling and Mobility States
- 14Beam Consolidation: Where One Q_meas per Cell Comes From
- 15The SIB Tree That Feeds All of This
- 16Inter-RAT Reselection to E-UTRA and Back
- 17Reselection in RRC_INACTIVE, and the RNA Boundary
- 18What the Network Sees, and What It Does Not
- 19Parameter and Range Reference
- 20Timers and Counters
- 21Failure Modes and What Each One Means
- 22Configuration Reference (ASN.1)
- 23Six Worked Calculations
- 24Illustrative Message Traces
- 25Release Deltas: Rel-15 to Rel-18
- 26Reading Reselection in Logs: A Checklist
- 27Glossary
- 28References
1. Why Reselection Exists, and Who Is Actually in Charge
Most of the time a phone is switched on, it is not connected to anything. It has no radio bearer, no scheduled uplink, no C-RNTI and no ongoing conversation with a base station. It is nevertheless on a cell: it has picked one, it is reading that cell's broadcast information, and it is listening for paging messages at the times that cell told it to listen. That state is called camping, and the UE has to keep doing it correctly while its owner walks, drives or takes a train through a network of cells that come and go.
Somebody has to decide when to move the camp from one cell to another. In RRC_CONNECTED the network decides, because it is already talking to the UE and can afford to. In RRC_IDLE and RRC_INACTIVE it cannot: waking a UE up to ask it what it can hear, every time it can hear something, would cost far more energy and far more air time than the problem is worth. So the decision is delegated. The UE measures, the UE ranks, the UE decides, and the UE moves — and it tells nobody.
That delegation is the single fact this whole document hangs off. The network's only influence over an idle UE's mobility is the set of parameters it broadcast before the UE needed them, plus, in one special case, a short-lived list handed out in the message that released the UE from its last connection (§9). Once the UE is camped and idle, the network is a spectator. It has no way to nudge a particular UE, no way to observe its decisions, and no way to know it made one.
There is no such thing as a reselection failure visible to the network. A misconfigured reselection parameter does not produce an error message, a counter, or an alarm. It produces UEs that are camped somewhere slightly wrong, and the first symptom is usually a paging success rate that is a fraction of a percent worse than it should be, or a burst of registration updates from a place where nobody is moving. This is the reason to understand the mechanism properly rather than tuning it by feel.
Read the parameter set as four jobs rather than as a list. Almost every field in SIB2 to SIB5 that touches reselection is doing one of these four things, and knowing which one tells you what breaks if it is wrong:
| The job | How it is done | Main parameters | What a wrong value looks like |
|---|---|---|---|
| Stop the UE measuring when it plainly does not need to | Thresholds on the serving cell's own quality, below which neighbour measurement becomes mandatory and above which it is optional | s-IntraSearchP, s-IntraSearchQ, s-NonIntraSearchP, s-NonIntraSearchQ | Set too high: battery burned on searches that never find anything. Set too low: a better cell sits unmeasured next door (§7) |
| Stop the UE ping-ponging between two cells of similar strength | A hysteresis margin added to the serving cell, plus a timer the condition must survive | q-Hyst, t-ReselectionNR, the 1-second rule | Too small: several reselections a minute from a stationary UE, and mobility-state misclassification with it (§12) |
| Steer the UE onto a chosen frequency, regardless of what it can hear best | Per-frequency priorities, tested before any ranking, with a deliberately asymmetric pair of thresholds | cellReselectionPriority, threshX-HighP, threshServingLowP, threshX-LowP | A missing priority silently removes a whole carrier from consideration; a wrong one empties a layer (§8, §21) |
| Make the UE hold still long enough for a decision to mean something | Timers, scaled by the UE's own estimate of how fast it is moving | t-ReselectionNR, t-ReselectionNR-SF, mobilityStateParameters | Too long and the UE clings to a dying cell; too short and fading alone moves it (§13) |
Table 1. The four jobs every reselection parameter is doing. Nothing in TS 38.304 is there for elegance; each field is a defence against a specific way an unsupervised UE misbehaves.
What starts reselection is not an event but a standing obligation. A camped UE evaluates the reselection rules continuously, as often as its measurement duty cycle allows, for as long as it stays in RRC_IDLE or RRC_INACTIVE. There is no trigger message and no request. The relevant question is never "what triggered this reselection" but "which of the three rules fired, and which parameter let it".
2. Reselection and Handover, Side by Side
Reselection and handover are often described as "idle-mode mobility" and "connected-mode mobility", as though they were two settings of one mechanism. They are not. They share only the physical outcome: the UE ends up on a different cell. Everything about how that outcome is reached differs, including who is allowed to decide, what evidence the decision is based on, how long it takes, and what happens when it goes wrong.
| Cell reselection | Handover | |
|---|---|---|
| RRC state | RRC_IDLE, RRC_INACTIVE | RRC_CONNECTED |
| Who decides | The UE, alone | The network — the source gNB, from reported measurements |
| What the UE is told in advance | Broadcast parameters in SIB2-SIB5, identical for every UE in the cell; optionally a dedicated priority list in RRCRelease | A per-UE measConfig: which objects to measure, which events to report, with per-UE offsets and hysteresis |
| What is signalled at the moment of the change | Nothing. Not one bit on the air | MeasurementReport, RRCReconfiguration with reconfigurationWithSync, RACH at the target, RRCReconfigurationComplete, plus Xn or NG signalling |
| What the network knows afterwards | Only that the UE is somewhere in a tracking area (IDLE) or a RAN notification area (INACTIVE). Not which cell | Exactly which cell, within milliseconds, with the UE context and all bearers moved to it |
| Timescale | Seconds. t-ReselectionNR alone is 0-7 s, on top of the measurement period | Tens of milliseconds of interruption; the whole procedure inside T304, commonly 100-1000 ms |
| What happens to user data | There is none. No bearer exists to interrupt | It is buffered and forwarded; loss is what the packet-forwarding tunnel exists to prevent |
| Hysteresis mechanism | q-Hyst on the serving cell plus q-OffsetCell / q-OffsetFreq on the neighbour, evaluated by the UE | hysteresis and timeToTrigger inside a reportConfig, plus cellIndividualOffset in the measurement object |
| Failure mode | The UE camps on a cell that is worse than the best available, or on the wrong layer, silently and indefinitely | A dropped connection, then re-establishment or RRC setup — loud, counted and alarmed |
| How you detect a problem | Statistically, and usually from a different KPI: paging success, registration-update volume, accessibility on the wrong layer | Directly: handover failure counters, T304 expiries, re-establishment causes |
Table 2. Reselection against handover, row by row. The two rows that matter most to a test engineer are the last two: one mechanism reports its own failures and the other cannot.
Because reselection is silent, its parameters are the only self-documenting part of it. When a UE turns up unexpectedly on a particular cell or layer, the SIBs of the cell it came from are the evidence — not any log on the cell it arrived at. Capture the broadcast of the neighbourhood, not just of the cell under test.
The two mechanisms also differ in something subtler: what a measurement means. In connected mode the UE reports a filtered quantity, smoothed by the layer-3 filter coefficient the network configured, and the network compares it against an event threshold it also configured — see the companion 20 Measurements and Events. In idle mode there is no configurable L3 filter in the same sense; the measurement period and accuracy come from the requirements in TS 38.133, and the smoothing that prevents twitchy behaviour is provided by q-Hyst and t-ReselectionNR instead. Comparing an idle-mode threshold with a connected-mode event threshold is meaningless: they are not measured the same way, and they are not doing the same job.
3. Camping: Selection, Reselection, and What Camped Means
Two words that sound interchangeable are not. Cell selection is what a UE does when it has no cell: at power-on, on return from a coverage hole, or after a PLMN change. It searches, finds candidates, checks them and picks one. That procedure — the raster scan, the SSB detection, the PSS and SSS correlation, the MIB and SIB1 read — belongs to the companion 36 SSB and Cell Search, and is not repeated here. Cell reselection is what the UE does once it already has a cell and keeps it under review. It is a maintenance loop, not a search.
| Cell selection | Cell reselection | |
|---|---|---|
| When | No suitable cell is camped on: power-on, out of coverage, PLMN change, or recovery after leaving a cell | Continuously, while camped on a suitable cell |
| Starting knowledge | Possibly nothing at all; possibly stored frequency information from last time | The serving cell's SIBs, which list the neighbours and carriers worth looking at |
| Search scope | Every supported band, every allowed synchronisation raster point, until something is found | Only the frequencies the serving cell's system information names, and only those with a priority provided |
| Speed | Slow — bounded by the raster scan, and the reason a UE takes seconds to find service | Bounded by the measurement period and t-ReselectionNR, typically a few seconds |
| Decision rule | Any suitable cell will do; the S-criterion is the whole test (§5) | Suitability is only the entry ticket; priority and rank then decide between candidates (§10, §11) |
| Owned by | Companion 36 SSB and Cell Search | This document |
Table 3. Selection and reselection compared. Note the scope row: reselection is deliberately myopic, because a camped UE has been given a list and has no reason to look beyond it.
3.1 What camping actually consists of
"Camped on a cell" is a precise state, not a figure of speech. A UE camped normally on a cell is doing all of the following, and stops doing all of them for the old cell the instant it reselects:
- Monitoring paging on that cell, at the paging occasions derived from its own identity and that cell's
pcch-Config— see the companion 19 Paging. This is the reason camping matters at all: it is how the network reaches the UE. - Reading and re-reading system information from that cell, including the value tag that tells it whether anything changed, and acting on short-message change indications.
- Holding that cell's parameters as the basis for every reselection decision: its
q-Hyst, its search thresholds, its neighbour lists, its priorities. Reselecting means adopting a different set of them, which is why a UE's behaviour can change character the moment it crosses a boundary between two differently-configured cells. - Being able to originate: an access attempt, an emergency call, an RNA update or a resume all start on the camped cell, using its
rach-ConfigCommon— see the companion 03 Random Access. - Evaluating reselection, continuously, per §6.
TS 38.304 distinguishes camped normally, which is the state just described on a suitable cell, from camped on any cell, which is the limited-service state a UE falls into when it can find only an acceptable cell (§4). The difference is not cosmetic: a UE camped on any cell may make emergency calls and receive public warning messages, but it is not registered for normal service and the network will not page it for ordinary traffic.
4. Suitable, Acceptable, Barred: the Three Categories of Cell
Before any comparison between cells can happen, the UE has to sort them into categories. A cell that fails at this stage never enters the ranking at all, which is why a perfectly strong cell can be ignored completely — and why "the UE ignored a 20 dB better cell" is so often a barring or exclusion story rather than a threshold story.
| Category | What makes a cell this | What the UE may do with it |
|---|---|---|
| Suitable | The cell's PLMN is the selected, registered or an equivalent PLMN; the cell is not barred; the cell is not in a forbidden tracking area for that PLMN; and the S-criterion is satisfied (§5) | Camp normally: full service, paging, origination, and it participates in ranking |
| Acceptable | The cell is not barred and the S-criterion is satisfied, but it fails one of the other tests — wrong PLMN, forbidden tracking area, no valid subscription | Camp on any cell: emergency calls, public warning messages and system information only. Limited service |
| Barred | cellBarred in the MIB says barred, or the cell is reserved for operator use and the UE has no such access class | Nothing. Excluded as a candidate for 300 s, and if intraFreqReselection is notAllowed, so is every other cell on the same frequency |
| Excluded / not allowed | The cell's PCI falls in an intraFreqExcludedCellList or interFreqExcludedCellList from SIB3/SIB4, or is absent from an allowed list where one is provided | Never a reselection candidate on that frequency, whatever it measures. Still usable for initial selection in some cases |
Table 4. Cell categories, TS 38.304 cl. 5.2.1 and 5.3.1. The 300 s figure is a specification constant, not a broadcast parameter — it cannot be tuned.
4.1 cellBarred and intraFreqReselection, the two-bit sledgehammer
The MIB carries exactly two bits that matter here, and between them they can remove an entire carrier from a UE's world. cellBarred (barred / notBarred) bars this cell. intraFreqReselection (allowed / notAllowed) says what the UE may do next if this cell is barred: allowed means it may reselect to another cell on the same frequency, notAllowed means it may not, and must go to a different frequency or a different RAT. The field decode itself belongs to the companion 18 MIB and SIB1 IEs; what matters here is the consequence.
The combination cellBarred = barred with intraFreqReselection = notAllowed is the strongest tool in the broadcast set and the easiest to leave switched on by accident. It is intended for cases where the whole carrier is unusable in that area — a cell being commissioned, or a carrier temporarily withdrawn. Left set on one cell of a normal cluster, it does not merely take that cell out of service: every UE that reads that MIB bars the frequency for 300 s and leaves the layer entirely. The symptom is a whole carrier losing idle UEs in one geographic patch, with no fault on the cells that lost them.
Two adjacent mechanisms are often confused with barring and are worth separating cleanly:
- Unified Access Control (
uac-BarringInfoin SIB1) does not bar camping. A UE may camp normally on a cell whose UAC bars its access category; the barring check happens when it tries to access, and it fails the access attempt rather than the camp. UAC therefore does not appear anywhere in the reselection rules — see companions 18 MIB and SIB1 IEs and 36 SSB and Cell Search. - Cell reservation (
cellReservedForOtherUseper PLMN in SIB1) behaves like barring for an ordinary UE, but is per-PLMN rather than per-cell, so the same cell can be reserved for one PLMN of a shared RAN and open for another.
A cell whose access the UE has already failed on gets a temporary penalty rather than an exclusion: connEstFailureControl in SIB1 provides connEstFailOffset, which becomes the Qoffset_temp term in both S-criterion expressions for connEstFailOffsetValidity seconds (§5.4). It is the one part of the suitability test that reflects the UE's own recent history rather than the broadcast configuration.
5. The S-Criterion: Is This Cell Even a Candidate?
The S-criterion answers one question: is this cell good enough to be used at all? It is a pass/fail gate, not a comparison. A cell either has enough margin above the minimum the operator declared acceptable, in which case it can be camped on and can compete against other cells, or it does not, in which case it is invisible no matter how it compares with anything else.
Two independent tests must both pass. One is about level — is the signal strong enough — and the other about quality — is the signal clean enough. They are separate because a cell can be loud and useless: in a dense layer, a cell can deliver plenty of RSRP while its signal-to-interference ratio is hopeless, and a level test alone would happily camp a UE on it.
Srxlev = Q_rxlevmeas - (q-RxLevMin + q-RxLevMinOffset)
- P_compensation - Qoffset_temp
Squal = Q_qualmeas - (q-QualMin + q-QualMinOffset)
- Qoffset_temp
A cell passes the S-criterion when Srxlev > 0 AND Squal > 0
Q_rxlevmeas measured cell RSRP, derived from SSB beams (S14)
Q_qualmeas measured cell RSRQ, derived the same way
q-RxLevMin minimum required level, in 2 dB units
q-QualMin minimum required quality, in 1 dB units
q-RxLevMinOffset applied only while evaluating a higher-priority PLMN
from a VPLMN; 0 otherwise. In 2 dB units
q-QualMinOffset the same, for quality
P_compensation an uplink-limited correction (S5.2)
Qoffset_temp a temporary penalty after a failed access (S5.4)In words: take the level you measured, subtract the minimum level this cell says it needs, subtract anything that makes the uplink harder than the downlink suggests, subtract any penalty you owe this cell from a recent failure, and the answer must be positive. Then do the same thing again with quality instead of level. Srxlev and Squal are therefore margins in dB above the minimum, not measurements — a logged Srxlev of 12 does not mean −12 dBm of anything, it means the cell is 12 dB better than the floor the operator set for it.
q-RxLevMin is signalled in 2 dB units and q-RxLevMinOffset in 2 dB units too, while q-QualMin and q-QualMinOffset are plain dB. A logged q-RxLevMin of −60 means −120 dBm. Getting this wrong halves or doubles the margin and is the commonest arithmetic error in reading an idle-mode trace; the companion 18 MIB and SIB1 IEs owns the field decode and says the same thing more than once, for the same reason.
5.1 Where each term is broadcast
The same criterion is evaluated for the serving cell and for every neighbour, but the values come from different places depending on which cell is being tested. This is why one UE can compute a healthy margin for its serving cell and a failing one for a neighbour that measures identically:
| Cell being evaluated | Where q-RxLevMin and q-QualMin come from | Where the per-cell offsets come from |
|---|---|---|
| The serving cell, or an intra-frequency neighbour | SIB2 intraFreqCellReselectionInfo (SIB1 cellSelectionInfo for the serving cell during selection) | SIB3 intraFreqNeighCellList: q-RxLevMinOffsetCell, q-QualMinOffsetCell |
| An inter-frequency NR neighbour | SIB4, per carrier, in InterFreqCarrierFreqInfo | SIB4 interFreqNeighCellList, per PCI |
| An E-UTRA neighbour | SIB5, per carrier: q-RxLevMin, q-QualMin, p-MaxEUTRA | SIB5 eutra-FreqNeighCellList offsets, where present |
Table 5. Every carrier carries its own suitability floor. A neighbour carrier with a stricter q-RxLevMin than the serving carrier will look worse than it is, and that is a legitimate steering tool as well as a common misconfiguration.
5.2 P_compensation, and why an uplink term appears in a downlink test
P_compensation is the term that surprises people. Everything else in the S-criterion is measured on the downlink, and then this appears — a quantity derived from transmit powers, subtracted from a received-level margin. The reason is that camping on a cell is only useful if the UE can eventually talk to it. A cell that is comfortably audible but out of the UE's uplink reach is a trap: the UE would camp, be paged, attempt access, and fail. P_compensation shrinks the apparent downlink margin by the amount the uplink is short.
P_compensation = max( P_EMAX - P_PowerClass , 0 ) [dB]
P_EMAX the maximum UE output power the cell permits on this
carrier: p-Max, broadcast per cell / per carrier
P_PowerClass the maximum output power of this UE's power class
(23 dBm for the common power class 3)
For a UE supporting additional maximum power reduction, the higher of
the applicable P_EMAX values is used; for SUL, q-RxLevMinSUL replaces
q-RxLevMin and the SUL carrier's p-Max applies.In words: if the network allows more uplink power than this UE can produce, the shortfall is deducted from the cell's margin. If p-Max is at or below the UE's own capability, the term is zero and vanishes. The asymmetry is deliberate: the network is describing the link budget it designed for, and a UE that cannot meet it must discount the cell accordingly.
p-Max = 23 dBm, UE power class 3 (23 dBm):
P_compensation = max(23 − 23, 0) = 0 dB
Now the same cell with p-Max = 26 dBm, which an operator might set to allow higher-power devices on the carrier:
P_compensation = max(26 − 23, 0) = 3 dB
Every power-class-3 UE in that cell has just lost 3 dB of suitability margin, with no change to the radio, no change to q-RxLevMin, and no log entry anywhere. A power-class-2 UE (26 dBm) in the same place loses nothing. Two UEs, same spot, different verdicts on the same cell.
5.3 A worked S-criterion evaluation
Take one cell and walk the whole test, then walk it again at a weaker point so the failure is visible:
Broadcast: q-RxLevMin = −60 (so −120 dBm), q-QualMin = −18 dB, p-Max = 26 dBm, no offsets signalled. UE is power class 3.
Point A — measured RSRP −108 dBm, RSRQ −13 dB
P_compensation = max(26 − 23, 0) = 3 dB
Srxlev = −108 − (−120) − 3 − 0 = +9 dB > 0 PASS
Squal = −13 − (−18) − 0 = +5 dB > 0 PASS
The cell is suitable, by 9 dB of level and 5 dB of quality.
Point B — the UE walks on: RSRP −117 dBm, RSRQ −16 dB
Srxlev = −117 + 120 − 3 − 0 = 0 dB NOT > 0 FAIL
Squal = −16 + 18 − 0 = +2 dB > 0 pass
The level test fails by the narrowest possible margin — the criterion is strictly greater than zero — so the cell is not suitable, despite still having quality margin. Had p-Max been 23 dBm instead, Srxlev would have been +3 dB and the same cell would have remained suitable at the same spot.
Note what the failure does not do. It does not trigger anything by itself. If the UE is camped on that cell and it becomes unsuitable, the UE must find somewhere else to go, and if nothing else qualifies it enters cell selection — back to the procedure in companion 36 SSB and Cell Search — and may end up out of service. The S-criterion is a gate on candidacy, not a reselection trigger.
5.4 Qoffset_temp: the penalty for a recent failure
Qoffset_temp is the only history-dependent term in the criterion. When a UE fails connection establishment on a cell connEstFailCount times, it applies connEstFailOffset as Qoffset_temp to that cell for connEstFailOffsetValidity seconds, which reduces both Srxlev and Squal and can push a cell from suitable to unsuitable on the strength of the UE's own bad experience.
Qoffset_temp bites Squal before it bites Srxlev, in practice, because Squal's margins are usually the smaller of the two: RSRQ spans a much narrower useful range than RSRP. A connEstFailOffset chosen from the level margin alone can therefore make a cell fail on quality while looking perfectly healthy on level — and the failure is silent, because the UE simply stops considering the cell.
6. The Camped-State Evaluation Loop
Everything from here on is one loop, run by the UE, forever. It is worth seeing the shape of it before the individual rules, because the order of the steps explains several behaviours that look arbitrary in isolation — in particular why a UE can be sitting next to a better cell and not know it, and why the answer to "how quickly does a UE react" is never a single number.
- Re-evaluate the serving cell's own S-criterion. If the serving cell has become unsuitable, everything else is secondary — the UE needs somewhere to go, and if reselection cannot provide it, cell selection will have to.
- Apply the measurement rules (§7). Compare the serving cell's
SrxlevandSqualagainsts-IntraSearchP/s-IntraSearchQands-NonIntraSearchP/s-NonIntraSearchQ, and decide which classes of neighbour measurement are obligatory right now. Higher-priority frequencies are always obligatory. - Measure what is still required, at the rate TS 38.133 demands for the UE's current DRX cycle. This is where the wall-clock time goes: an idle UE with a long DRX cycle measures rarely, and its reselection reaction time is dominated by that, not by
t-ReselectionNR. - Derive one value per cell from the beams of that cell (§14). A cell is not a single measurement in NR; it is a set of SSB beams that must be consolidated into one number before any comparison is possible.
- Evaluate the three rules in priority order (§10): higher priority first, then rank among equals, then lower priority. The order is fixed and matters.
- If a rule is satisfied, check that it has been satisfied for its whole timer, that more than 1 s has elapsed since the UE camped on the current cell, and that the target is a legitimate candidate (§4). Only then reselect.
- Reselect: retune, acquire the new cell's MIB and SIB1, confirm it is genuinely suitable, adopt its parameters, and start monitoring its paging occasions. In RRC_INACTIVE, additionally check whether the new cell is inside the RAN notification area (§17).
Step 7 can fail. If the UE reselects to a cell and then finds it unsuitable on arrival — the SIBs say something different from what the neighbour list implied, or the cell turns out to be barred — the UE excludes that cell from candidacy for up to 300 s and re-evaluates TS 38.304 cl. 5.2.4.1. In a log this looks like a reselection that immediately reverses, followed by the same cell never being chosen again for five minutes. It is correct behaviour, not a loop.
7. Measurement Rules: When the UE Is Allowed Not To Look
This is the section people skip, and then cannot explain why a UE ignored a cell that was plainly better. The rule is simple and its consequences are not: while the serving cell is comfortably good, the UE does not have to measure its neighbours at all. Not "may measure less often" — may not measure them.
The reason is battery. A neighbour measurement on another frequency means retuning the receiver, waiting for an SSB burst, correlating, and coming back; on the serving frequency it is cheaper but still not free. A UE deep inside good coverage has nothing to gain from any of it, and there are a great many such UEs, each of them nominally idle for hours at a time. So TS 38.304 gives the operator two pairs of thresholds that buy silence.
| Threshold | Units | Governs | While the serving cell is above it |
|---|---|---|---|
s-IntraSearchP | ReselectionThreshold, 0-31, 2 dB units | Intra-frequency neighbour measurement, on level | The UE may choose not to perform intra-frequency measurements |
s-IntraSearchQ | ReselectionThresholdQ, 0-31, 1 dB units | The same, on quality | Both the P and Q conditions must hold before measurement may be skipped; if only P is signalled, only P applies |
s-NonIntraSearchP | 0-31, 2 dB units | Inter-frequency and inter-RAT measurement of equal or lower priority frequencies, on level | The UE may choose not to measure those frequencies |
s-NonIntraSearchQ | 0-31, 1 dB units | The same, on quality | As above, in combination with the P threshold |
| (none exists) | -- | Higher-priority NR frequencies and inter-RAT frequencies | The UE shall measure them regardless of how good the serving cell is TS 38.304 cl. 5.2.4.2 |
Table 6. Measurement rules, TS 38.304 cl. 5.2.4.2. The last row is not a parameter; it is the absence of one, and it is the most consequential row in the table.
The asymmetry is the mechanism. Equal- and lower-priority neighbours are only measured when the serving cell is poor, so a UE in good coverage never leaves its layer downwards or sideways. Higher-priority frequencies have no such gate: they are measured always, so a UE in excellent coverage will still find, and move to, a higher-priority carrier the moment that carrier is merely adequate. Everything an operator does to steer idle UEs onto a chosen layer — a new mid-band carrier, a lightly loaded n78, a slice-specific layer — rests on this one asymmetry. Set the priorities the wrong way round and the steering does not weaken, it reverses.
How often "always" is, in practice, comes from TS 38.133 rather than TS 38.304. The requirements are expressed as measurement periods scaled by the UE's DRX cycle, plus a specific obligation on higher-priority layers: a UE must search each higher-priority layer at least once every 60 × N_layers seconds, where N_layers is the number of such layers it has been given TS 38.133 cl. 4.2.2. Two consequences follow. First, steering onto a high-priority carrier can legitimately take a minute or more even in perfect coverage. Second, giving a UE many high-priority layers makes each one slower to be found, because the obligation is per set, not per layer.
7.1 Relaxed measurement, and the exception to the asymmetry
Rel-17 added a second, orthogonal way for a UE to measure less: relaxed measurement, aimed initially at RedCap and other battery-critical devices. Instead of asking "is the serving cell comfortable", it asks "has anything changed". If the UE's own measured level has not moved by more than s-SearchDeltaP over a period t-SearchDeltaP, the UE may treat itself as stationary and relax neighbour measurement; a separate cellEdgeEvaluation criterion lets it relax while it is comfortably inside a cell.
| IE | Criterion | What it lets the UE skip |
|---|---|---|
lowMobilityEvaluation (s-SearchDeltaP, t-SearchDeltaP) | Serving-cell level has varied by less than s-SearchDeltaP over t-SearchDeltaP | Neighbour measurements, on the grounds that the UE is not moving |
cellEdgeEvaluation (s-SearchThresholdP, s-SearchThresholdQ) | Serving-cell Srxlev / Squal above the given thresholds | Neighbour measurements, on the grounds that the UE is not near an edge |
combineRelaxedMeasCondition | Present: both criteria must hold. Absent: either suffices | Determines how conservative the relaxation is |
highPriorityMeasRelax | Present and permitted | Higher-priority measurements too — the one documented exception to the rule in the callout above |
Table 7. Rel-17 relaxed measurement in idle and inactive, from SIB2 relaxedMeasurement. Support is UE-capability-gated; a UE that does not signal the capability measures normally.
If a fleet of stationary devices stops following a priority steering policy after a software upgrade, highPriorityMeasRelax is the first thing to check. It is the only field in the broadcast set that can legally suspend the always-measure-higher-priority obligation, and its effect looks exactly like a priority misconfiguration.
8. Frequency Priorities, and the Frequencies With None
A network usually has more than one carrier, and rarely wants idle UEs spread evenly across them. A low band gives coverage and is precious; a mid-band carrier gives capacity and is where the operator would rather have UEs when they wake up; a millimetre-wave carrier is useful only where it is useful. Frequency priority is the tool that expresses that preference to UEs that nobody is supervising.
Each frequency is given an integer priority from 0 to 7, where 7 is the highest and 0 the lowest. The priority attaches to the frequency, not to the cell: every cell on the carrier inherits it. Rel-15 also allows a fractional refinement, cellReselectionSubPriority (oDot2, oDot4, oDot6, oDot8), which adds a fraction to the integer so two carriers can be ordered without either becoming equal to a third.
| Where signalled | IE | Applies to | Notes |
|---|---|---|---|
| SIB2 | cellReselectionServingFreqInfo -> cellReselectionPriority | The serving frequency | Mandatory in that IE — the serving frequency always has a priority |
| SIB4 | InterFreqCarrierFreqInfo -> cellReselectionPriority | One NR inter-frequency carrier | Optional. Absent means the carrier is not considered at all |
| SIB5 | CarrierFreqEUTRA -> cellReselectionPriority | One E-UTRA carrier | Optional, with the same consequence |
| SIB2/4/5 | cellReselectionSubPriority | Any of the above | Adds 0.2, 0.4, 0.6 or 0.8 to the integer priority. A carrier at 4 + oDot6 outranks one at 4 and is outranked by one at 5 |
RRCRelease | cellReselectionPriorities -> freqPriorityListNR / freqPriorityListEUTRA | Any listed frequency, for this UE only | Overrides the broadcast priorities entirely while t320 runs (§9) |
| SIB16 | nsag-CellReselectionPriority and its sub-priority (Rel-17) | A frequency, for UEs interested in a particular slice group | Slice-based reselection; capability-gated, see §25 |
Table 8. Where priorities come from. Note the asymmetry between SIB2 and SIB4/SIB5: the serving frequency's priority is mandatory, every other one is optional.
A frequency with no priority is not low priority. It does not exist. TS 38.304 is explicit: the UE only evaluates NR and inter-RAT frequencies that are given in system information and for which it has a priority provided. A SIB4 entry with a full set of thresholds, a correct q-RxLevMin, a neighbour list and no cellReselectionPriority is dead configuration. Every UE reads it, every UE ignores it, and nothing anywhere reports a problem. This is the single most common reselection misconfiguration in the field, and the hardest to see, because the SIB looks complete.
Two further rules are worth stating plainly because they are easy to assume the other way round:
- Priorities are not per cell. There is no way to give one cell of a carrier a different priority from its neighbours on the same carrier. Per-cell steering is done with offsets (§11), which act inside the ranking rather than above it.
- Equal priority is a real, distinct case. Two carriers at the same priority are compared by rank, exactly as if they were the same carrier, with
q-OffsetFreqavailable to bias the comparison. This is how an operator makes two carriers behave as one pooled layer.
9. Dedicated Priorities, t320, and Deprioritisation
Broadcast priorities are the same for every UE in the cell, which is occasionally not what the network wants. When it releases a specific UE it has a brief chance to say something to that UE alone, and RRCRelease is where it takes it. Two separate mechanisms live in that message: a full per-UE priority list, and a blunt request to avoid a frequency for a while.
9.1 cellReselectionPriorities and t320
cellReselectionPriorities in RRCRelease carries a list of NR frequencies and E-UTRA frequencies with priorities for this UE, plus the timer t320. While t320 runs, the UE uses the dedicated priorities and ignores the broadcast ones entirely — including for frequencies not mentioned in the dedicated list, which are treated as having no priority at all and therefore drop out of consideration.
| Aspect | Behaviour |
|---|---|
| Scope | This UE only. Nothing about the cell's broadcast changes |
| Lifetime | t320: min5, min10, min20, min30, min60, min120, min180 |
| Stopped early by | Entering RRC_CONNECTED, PLMN selection, or receiving a new dedicated priority list |
| On expiry | The UE discards the dedicated priorities and reverts to the broadcast ones — which may move it to a different layer immediately, with no signalling |
If t320 is absent | The priorities are still applied; they are released when the UE enters RRC_CONNECTED or selects a new PLMN |
Interaction with deprioritisationReq | Independent mechanisms, and they can be present in the same message |
Table 9. Dedicated priorities in RRCRelease, TS 38.331 CellReselectionPriorities and RRCRelease-IEs.
Why bother? Because release is the one moment the network knows something about this UE that it cannot express in a broadcast: which slice it was using, which layer served it well, whether it is a high-throughput device that belongs on capacity spectrum or a low-rate device that does not. Dedicated priorities are how load balancing and service-based steering reach an idle UE. They are also how a network hands a UE back to LTE after an NR session, by giving the E-UTRA carrier the higher priority on the way out.
Dedicated priorities that outlive their usefulness are a real operational problem. A UE released with t320 = min180 and a priority list built for the load conditions of three hours ago will keep following that list through a completely different traffic pattern, and will keep ignoring a carrier the network has since brought into service. Worse, the reversion at expiry is invisible: a population of UEs quietly migrates between layers three hours after a release burst, and nothing in any log connects the two events.
9.2 deprioritisationReq
The second mechanism is cruder and has a narrower purpose. deprioritisationReq in RRCRelease asks the UE to treat either the current frequency (deprioritisationType = frequency) or all NR frequencies (nr) as the lowest priority for the duration of deprioritisationTimer (min5, min10, min15, min30), tracked by T325. It carries no list and no per-frequency detail; it is a way of saying "go somewhere else for a few minutes".
frequencyis used to push a UE off a carrier that is congested or about to be taken out of service, without changing anything for other UEs.nrdeprioritises NR as a whole, which in practice sends the UE to E-UTRA. It exists for cases where the NR coverage itself is the problem — an early deployment with poor uplink, or a UE that keeps failing access.- The UE discards the deprioritisation on PLMN selection, on entering RRC_CONNECTED, or when T325 expires.
A UE that appears to refuse an NR carrier for exactly five, ten, fifteen or thirty minutes and then accepts it again has almost certainly been given a deprioritisationReq, not a bad measurement. The tell is the roundness of the duration and the fact that the broadcast configuration is provably unchanged across it.
10. The Three Reselection Rules
There are exactly three ways a camped UE can decide to move, and they are tried in a fixed order. First, is there anything better on a higher-priority frequency — and if so, go, whatever the serving cell is doing. Second, among frequencies of the same priority, including the serving one, is another cell ranked above the serving cell. Third, and only if the serving cell is genuinely poor, is there something usable on a lower-priority frequency to fall back to.
The order is what makes priority steering work. Rank is only consulted among equals, so a strong intra-frequency neighbour can never keep a UE away from a higher-priority carrier — the higher-priority test happened first and did not care.
t-ReselectionNR; only rule 3 requires anything of the serving cell.10.1 Higher priority: go, and never mind the serving cell
The UE reselects to a cell on a higher-priority frequency when, for the whole of t-ReselectionNR (or the inter-RAT equivalent), that cell's Srxlev exceeds threshX-HighP — or, where the quality-based variant is configured, its Squal exceeds threshX-HighQ — and more than one second has passed since the UE camped where it is TS 38.304 cl. 5.2.4.5.
Higher-priority reselection, level-based:
Srxlev_target > threshX-HighP held for t-ReselectionNR
Higher-priority reselection, quality-based (used where threshX-HighQ
is signalled for the target frequency):
Squal_target > threshX-HighQ held for t-ReselectionNR
There is NO term for the serving cell in either expression.In words: if a cell on a preferred frequency is merely good enough on its own account, and stays good enough for a couple of seconds, the UE goes there. The serving cell may be 20 dB stronger. It is not consulted. If several higher-priority frequencies qualify at once, the UE goes to the highest priority among them, and to the best-ranked suitable cell on that frequency.
This is the rule that produces the complaint "my UE left a perfect cell for a weak one". It is working correctly. threshX-HighP is the only control: it is an absolute quality bar on the target, and setting it low means UEs will jump onto the preferred layer at the edge of its coverage, where they will then be paged badly and access badly. Set it from the target carrier's own link budget, not from the serving carrier's.
10.2 Equal priority: rank them
For the serving frequency and for any frequency with the same priority as the serving frequency, there is no absolute threshold at all. The UE builds a ranking of the serving cell and the candidate neighbours using the R-criterion, and reselects to the best-ranked cell if it stays better than the serving cell for t-ReselectionNR. §11 works this through in full, because it is where the offsets live and where most practical tuning happens.
Intra-frequency neighbours are always in this case by definition: the serving frequency's priority is its own. Which is why intra-frequency reselection has no threshX parameters of any kind, and is governed entirely by q-Hyst, q-OffsetCell and t-ReselectionNR from SIB2 and SIB3.
10.3 Lower priority: the double condition
Going down in priority requires two things to be true at once, and this is the only rule with a term for the serving cell in it:
Lower-priority reselection, level-based:
Srxlev_serving < threshServingLowP AND
Srxlev_target > threshX-LowP both held for t-Reselection
Quality-based variant, where threshServingLowQ is signalled:
Squal_serving < threshServingLowQ AND
Squal_target > threshX-LowQ
and, as always, more than 1 s since the UE camped on the serving cell,
and no higher- or equal-priority cell meeting its own criteria.In words: the UE must be doing badly where it is, and the fallback must be doing well, before it will step down a layer. The asymmetry against rule 1 is the entire design. Upwards, the UE needs no excuse. Downwards, it needs a reason. Without the first condition a UE would oscillate between layers whenever the lower layer happened to look adequate — which, for a low band under a mid-band carrier, is almost everywhere.
| Rule | Condition on the serving cell | Condition on the target | Timer | Typical purpose |
|---|---|---|---|---|
| Higher priority | None | Srxlev_n > threshX-HighP, or Squal_n > threshX-HighQ | t-ReselectionNR of the target frequency | Steering onto a preferred or capacity layer; camping UEs where the operator wants them to wake up |
| Equal priority | Included in the ranking as Rs | Rn > Rs, by the R-criterion (§11) | t-ReselectionNR of the serving frequency for intra-frequency; of the neighbour frequency for inter-frequency | Ordinary mobility: following coverage across a layer |
| Lower priority | Srxlev_s < threshServingLowP, or Squal_s < threshServingLowQ | Srxlev_n > threshX-LowP, or Squal_n > threshX-LowQ | t-ReselectionNR of the target frequency | Coverage fallback: leaving a capacity layer for a coverage layer at its edge |
Table 10. The three rules in one table. Read the second column downwards: the presence or absence of a serving-cell term is what distinguishes steering from fallback.
The quality-based variants are not alternatives the UE chooses between. Whether a frequency is evaluated on level or on quality is decided by what the network signalled for that frequency: if threshX-HighQ and threshX-LowQ are present in the threshX-Q group for that carrier, the quality-based criteria apply to it; otherwise the level-based ones do. Mixing the two across carriers in one network is legal and makes traces confusing — always check which pair the carrier under investigation actually carries.
11. The R-Criterion in Full
Among frequencies of equal priority the UE has to choose between cells that are all, by definition, allowed. It does so by computing a single ranked value for each and picking the largest. The value is not the measurement: the serving cell gets a bonus, and each neighbour can be given a handicap or an advantage of its own. Those adjustments are the whole of practical reselection tuning.
For the serving cell:
Rs = Q_meas,s + Q_hyst - Qoffset_temp
For each neighbour cell n:
Rn = Q_meas,n - Q_offset - Qoffset_temp
where Q_offset is:
intra-frequency Qoffset(s,n) = q-OffsetCell of that cell
(0 if not signalled for the cell)
inter-frequency Qoffset(s,n) + Qfreq = q-OffsetCell of that cell
plus q-OffsetFreq of that carrier; Qfreq alone if
no per-cell offset is signalled
Q_meas RSRP, consolidated from the cell's beams (S14)
Q_hyst q-Hyst, plus the speed-dependent q-HystSF term
Qoffset_temp the failed-access penalty of S5.4In words: the serving cell is credited with q-Hyst decibels it has not earned, every neighbour is debited whatever offsets the network chose for it, and the UE then ranks what is left and takes the top one — provided it stays on top for t-ReselectionNR. Note the signs carefully: q-Hyst is added to the serving cell, and Q_offset is subtracted from the neighbour, so a positive q-OffsetCell makes a neighbour less attractive. This sign convention is inverted relative to the connected-mode cellIndividualOffset in a measurement object, which is added to the measurement — see companion 20 Measurements and Events. Confusing the two is how UEs get steered the wrong way.
q-Hyst, and the action happens 2 s later still because of t-ReselectionNR. Rn2's cell is the strongest in the area and never wins.11.1 Two neighbours, one serving cell, worked through
The figure is the same scenario as the arithmetic below. Three cells, one of them serving, with the offsets a real network would plausibly have configured:
Broadcast configuration in use
SIB2 q-Hyst .................... dB4
t-ReselectionNR ........... 2 -- seconds
cellReselectionPriority ... 5 -- serving frequency f1
SIB3 intraFreqNeighCellList
PCI 188 q-OffsetCell ... dB0 -- neighbour N1
SIB4 carrier f2 priority ...... 5 -- EQUAL priority to f1
q-OffsetFreq ............ dB2
interFreqNeighCellList
PCI 431 q-OffsetCell . dB3 -- neighbour N2
Measurements at t = 0 s
serving cell S (f1, PCI 12) .... RSRP -92 dBm, falling 0.8 dB/s
neighbour N1 (f1, PCI 188) .... RSRP -97 dBm, rising 0.7 dB/s
neighbour N2 (f2, PCI 431) .... RSRP -90 dBm, steadyRanked values at t = 0 s
Rs = −92 + 4 − 0 = −88 dBm
Rn1 = −97 − 0 − 0 = −97 dBm
Rn2 = −90 − (2 + 3) − 0 = −95 dBm
Ranking: S (−88) > N2 (−95) > N1 (−97). The UE stays where it is, and note that N2 — the strongest cell on air at −90 dBm — is already ranked below the serving cell by 7 dB, of which 5 dB is pure configuration.
At t = 6 s the serving cell has fallen to −96.8 dBm and N1 has risen to −92.8 dBm:
Rs = −96.8 + 4 = −92.8 dBm
Rn1 = −92.8 = −92.8 dBm
Rn2 = −90 − 5 = −95 dBm
N1 has just drawn level with the serving cell. t-ReselectionNR starts when it goes strictly better, an instant later.
At t = 8 s, 2 s later, the condition has held throughout:
Rs = −98.4 + 4 = −94.4 Rn1 = −91.4 Rn2 = −95
N1 is best-ranked and has been better than the serving cell for the whole of t-ReselectionNR, so the UE reselects to N1. It has reselected to a cell measuring −91.4 dBm while ignoring one measuring −90 dBm, and every step of that was intended by whoever set q-OffsetFreq to dB2 and q-OffsetCell to dB3.
Now change one number to see how sharp the tool is. Set N2's q-OffsetCell to dB-2 instead of dB3 — a legal value, since Q-OffsetRange runs from −24 dB to +24 dB — and its ranked value becomes −90 − (2 − 2) = −90 dBm, which beats the serving cell from t = 0 s. The same UE in the same place now leaves for a different carrier two seconds into the scenario. Nothing else changed.
A q-OffsetCell sign error is one of the few reselection faults that actively steers UEs the wrong way rather than merely failing to steer them. Because the offset is subtracted, a negative value makes a neighbour more attractive, and a planner used to connected-mode offsets will read dB-6 as a penalty when it is a 6 dB bonus. The symptom is a cell that accumulates idle UEs it should not have, visible only as an unexpected paging load and a strange distribution of access attempts.
11.2 The 1-second rule, and what it does and does not forbid
Every reselection case carries the same extra condition: more than one second must have elapsed since the UE camped on the current serving cell TS 38.304 cl. 5.2.4.1. The practical effect is a floor on how fast a UE can move: the shortest possible interval between two reselections is one second plus whatever t-ReselectionNR applies, so no configuration can make a UE hop faster than that.
What it is often described as — a rule forbidding the UE to go back to the cell it just left — is the consequence rather than the wording. There is no cell-specific memory in it; the guard applies to any reselection, including one that happens to return. Combined with q-Hyst, which is applied to whichever cell is currently serving, the pair does make an immediate return unlikely: after reselecting to N1, N1 is the cell that now gets the q-Hyst bonus, so the old serving cell has to become better than N1 plus q-Hyst to win it back.
12. q-Hyst, Ping-Pong, and the One-Second Rule
Two cells of genuinely equal strength are the worst case for any mobility mechanism. The measurements of both will wander by several decibels from fading alone, so whichever is compared first will sometimes look better, and a UE that reacted to every such moment would spend its life reselecting. q-Hyst is the defence: a deliberate, broadcast handicap given to whichever cell the UE is currently on.
q-Hyst is not optional. The difference between two co-sited cells wanders by ±3 dB with the UE standing still; a 4 dB deadband absorbs all of it, and a zero deadband converts every wander into a reselection.| q-Hyst value | Effect | Where it fits |
|---|---|---|
dB0 | No hysteresis at all. Every crossing of the ranked values qualifies, subject only to t-ReselectionNR and the 1 s guard | Almost never correct. Occasionally seen in lab configurations and left behind |
dB1 - dB3 | Narrower than typical fast fading on a moving UE | Macro layers with well-separated sites and slow-moving UEs; aggressive |
dB4 - dB6 | Absorbs ordinary fading; the common range | General-purpose. Many vendors ship a default in this band |
dB8 - dB12 | Strong resistance to change; the UE holds a cell well past the point where a neighbour is better | Dense small-cell layers, indoor systems, and anywhere ping-pong has been observed |
dB14 - dB24 | Very sticky. A UE will hold a decaying cell a long way into a neighbour's footprint | Rare. Risks UEs camped on cells they can barely hear, and paging failures with it |
Table 11. q-Hyst from ENUMERATED {dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24}. The commentary is operational, not normative.
The right value is the one that exceeds the measurement wander the UE will actually see, and that wander depends on the layer. Two co-sited sectors of the same site, or two indoor cells in one open-plan floor, produce far more crossing events than two macro cells 800 m apart, because the mean difference between them is near zero for a large area rather than at a single line.
Ping-pong costs more than the reselections themselves. Each reselection means acquiring the new cell's MIB and SIB1 before the UE can trust it, which is a burst of receiver activity far larger than the measurement that caused it. A UE ping-ponging every three seconds in a dense layer spends a substantial fraction of its idle-mode power budget reading system information it has read before — see companion 17 System Information for what an SI acquisition costs.
There is a second, less obvious cost. Reselections are counted for mobility-state estimation (§13), so ping-pong can convince a stationary UE that it is travelling fast, at which point it shortens its own reselection timers and ping-pongs harder. The specification blocks the simplest version of this loop — consecutive reselections back and forth between the same two cells are not counted — but a three-cell rotation in a dense cluster is counted in full, and that is exactly the topology where ping-pong happens.
A UE that reports itself in high-mobility state while sitting on a desk is not broken and its measurements are not wrong. It is in a cluster of three or more cells with q-Hyst set too low for the fading it sees. The fix is q-Hyst and, if needed, t-ReselectionNR — not mobilityStateParameters, which is only counting what it was told to count.
13. Speed-Dependent Scaling and Mobility States
A UE on a train and a UE on a sofa should not use the same timers. The one on the train needs to react quickly, because by the time a two second timer expires it has travelled a hundred metres and the cell it was evaluating may already be behind it. The one on the sofa wants the opposite: long timers, wide hysteresis, no unnecessary work.
The UE has no speedometer, and 3GPP did not give it one. What it has is a proxy: how often it has recently changed cell. Count the reselections in a window, and if there were a lot, the UE is probably moving fast. It is a crude measure and it is wrong in exactly the cases §12 describes, but it costs nothing and it needs no new measurement.
t-HystNormal, which stops the state flickering with the count.| IE | Spec symbol | Values | What it does |
|---|---|---|---|
t-Evaluation | T_CRmax | s30, s60, s120, s180, s240 | The sliding window over which reselections are counted |
t-HystNormal | T_CRmaxHyst | s30, s60, s120, s180, s240 | How long the medium and high criteria must both be unmet before the UE returns to normal state |
n-CellChangeMedium | N_CR_M | 1 - 16 | Exceeding this count within t-Evaluation puts the UE in medium mobility state |
n-CellChangeHigh | N_CR_H | 1 - 16 | Exceeding this count puts it in high mobility state |
Table 12. MobilityStateParameters, inside SIB2 speedStateReselectionPars. If the whole group is absent, the UE has no mobility states and no scaling.
13.1 What the scaling actually changes
Being in medium or high mobility state changes two things, and only two:
| Quantity | IE | Values | Effect |
|---|---|---|---|
| The reselection timer | t-ReselectionNR-SF (SpeedStateScaleFactors) with sf-Medium and sf-High | oDot25, oDot5, oDot75, lDot0 | Multiplies t-ReselectionNR. oDot25 turns a 2 s timer into 0.5 s, so a fast UE commits sooner |
| The hysteresis | q-HystSF with sf-Medium and sf-High | dB-6, dB-4, dB-2, dB0 | Added to q-Hyst. The values are negative or zero, so the effect is to shrink the serving cell's handicap, again making the fast UE readier to move |
Table 13. The two scalings. Both push the same way: a UE that believes it is moving fast lowers its own resistance to reselection. Note that q-HystSF values are offsets in dB, while t-ReselectionNR-SF values are multipliers.
sf-Medium the 1-second guard, not the timer, is what releases the reselection — scaling further buys nothing for a UE that has just arrived.13.2 A worked classification
The counting rule has one subtlety that changes results, so it is worth carrying real numbers through it. Consecutive reselections back and forth between the same two cells do not count TS 38.304 cl. 5.2.4.3:
Broadcast: t-Evaluation = s60, t-HystNormal = s120, n-CellChangeMedium = 4, n-CellChangeHigh = 8, t-ReselectionNR = 2 s, q-Hyst = dB4, sf-Medium = oDot5 with q-HystSF sf-Medium = dB-2.
In the last 60 s the UE reselected, in order: A→B, B→A, A→C, C→D, D→E, E→D.
A→B counted count = 1
B→A back to the cell just left -> not counted count = 1
A→C counted count = 2
C→D counted count = 3
D→E counted count = 4
E→D back to the cell just left -> not counted count = 4
Six reselections, four counted. The medium criterion is exceeding n-CellChangeMedium, and 4 does not exceed 4, so the UE is still in normal state and uses t-ReselectionNR = 2 s with q-Hyst = 4 dB.
One more reselection to a new cell, D→F, takes the count to 5, which does exceed 4:
state -> medium mobility
t-Reselection -> 2 s x 0.5 = 1 s
Q_hyst -> 4 dB + (−2 dB) = 2 dB
The UE has simultaneously halved the time it waits and halved the margin a neighbour must beat. In the §11 scenario, that moves the reselection from t = 8 s to roughly t = 5.3 s — the crossing now occurs at 2 dB of hysteresis instead of 4, and the timer that follows it is 1 s instead of 2 s.
To get back to normal state the UE must see neither criterion met for a full t-HystNormal = 120 s, which is twice the evaluation window.
Two counting details that decide arguments. First, the count is of reselections, so a UE that is moving fast through a large-cell layer and changing cell rarely stays in normal state — the mechanism measures cell changes, not speed, and a 300 km/h train under a macro umbrella can legitimately be classified normal. Second, in RRC_INACTIVE the same counting applies, so a UE ping-ponging inside its RAN notification area can promote itself without ever signalling anything.
Rel-16 added a refinement for the specific case the mechanism handles worst: high-speed rail. intraFreqNeighHSDN-CellList and its inter-frequency equivalent let the network mark which cells belong to a High Speed Dedicated Network, so a UE running along a rail corridor can count only those cells when estimating its mobility state and is not confused by the macro cells it passes underneath.
14. Beam Consolidation: Where One Q_meas per Cell Comes From
Every expression so far has used a single number per cell — Q_meas,s, Q_meas,n, Q_rxlevmeas. In NR no such number exists at the antenna. A cell transmits a set of SSB beams, and the UE measures each of them separately; how those become one value per cell is a broadcast decision, and it changes which cell wins a ranking.
The rule is: average the beams that are above a threshold, up to a maximum count; if none are above the threshold, use the strongest single beam TS 38.304 cl. 5.2.3.1. The parameters are per carrier — in SIB2 cellReselectionInfoCommon for the serving frequency and in each SIB4 carrier entry for the others. The measurement of the beams themselves belongs to the companion 36 SSB and Cell Search; what matters here is the consolidation.
| IE | Range | What it does | Consequence of getting it wrong |
|---|---|---|---|
nrofSS-BlocksToAverage | 2 - maxNrofSS-BlocksToAverage (16) | The maximum number of qualifying beams to average | Large values reward cells with many similar beams; a wide-beam cell and a narrow-beam cell in the same ranking are no longer compared like for like |
absThreshSS-BlocksConsolidation | ThresholdNR (an RSRP and/or RSRQ threshold) | The bar a beam must clear to be included in the average | Set too low, weak beams drag a strong cell's value down; set too high, no beam qualifies and the cell is represented by its single best beam |
| Neither present | -- | The cell is represented by the strongest beam alone | The most optimistic possible view of every cell, and the default behaviour many networks actually run |
Table 14. Beam consolidation parameters. They apply identically to the S-criterion and to the R-criterion, so a change here moves both the suitability gate and the ranking at once.
Consolidation parameters must be consistent across the cells a UE will compare, or the comparison is meaningless. Because they are broadcast per carrier by the serving cell, a UE evaluating an inter-frequency carrier uses the SIB4 entry the serving cell gave it — so two adjacent cells can hand a UE different consolidation rules for the same neighbour carrier. The result is a ranking that depends on where the UE is standing, not only on what it can hear.
Rel-16 added one more twist to the intra-frequency case. When rangeToBestCell is configured and the best-ranked cell is an intra-frequency neighbour, the UE does not simply take the top of the ranking: among the cells within rangeToBestCell decibels of the best, it prefers the one with the most beams above absThreshSS-BlocksConsolidation. The intent is to camp UEs on cells that will still serve them well when they move a few metres, rather than on a cell that happens to have one strong beam pointing at them.
15. The SIB Tree That Feeds All of This
None of the parameters in this document are configured in the UE. All of them arrive over the air, in four system information blocks and occasionally in one dedicated message, and each block has a clearly defined job. Knowing which block owns which field is most of the skill of reading an idle-mode problem: the fault is nearly always in a block you have not looked at. Acquisition and scheduling of these blocks — the SI windows, the value tags, on-demand SI — belong to the companion 17 System Information.
| Block | What it carries for reselection | Presence |
|---|---|---|
| MIB | cellBarred, intraFreqReselection — the two bits that can remove a cell or a whole frequency (§4) | Always. Read before anything else |
| SIB1 | cellSelectionInfo (q-RxLevMin, q-QualMin, offsets), p-Max, cellAccessRelatedInfo, connEstFailureControl | Always. Owns the S-criterion inputs for the serving cell — companion 18 MIB and SIB1 IEs |
| SIB2 | cellReselectionInfoCommon (q-Hyst, speedStateReselectionPars, beam consolidation, rangeToBestCell), cellReselectionServingFreqInfo (s-NonIntraSearchP/Q, threshServingLowP/Q, serving cellReselectionPriority), intraFreqCellReselectionInfo (q-RxLevMin, s-IntraSearchP/Q, t-ReselectionNR, t-ReselectionNR-SF, smtc, p-Max) | Should always be present in a mobile network. Its absence leaves the UE with no reselection configuration at all beyond SIB1 |
| SIB3 | intraFreqNeighCellList (per-PCI q-OffsetCell and the per-cell q-RxLevMin/q-QualMin offsets), intraFreqExcludedCellList, and from Rel-16 intraFreqAllowedCellList and the CAG list | Optional. Absent means no per-cell offsets and no exclusions, not no intra-frequency reselection — that is governed from SIB2 |
| SIB4 | One InterFreqCarrierFreqInfo per NR carrier: dl-CarrierFreq, q-RxLevMin, q-QualMin, p-Max, t-ReselectionNR (+SF), threshX-HighP, threshX-LowP, the threshX-Q group, cellReselectionPriority (+sub-priority), q-OffsetFreq, smtc, ssbSubcarrierSpacing, neighbour and excluded lists | Optional. Required for any inter-frequency reselection at all |
| SIB5 | carrierFreqListEUTRA, t-ReselectionEUTRA (+SF), and per carrier threshX-High, threshX-Low, q-RxLevMin, q-QualMin, p-MaxEUTRA, priority and neighbour/excluded lists | Optional. Required for reselection to LTE (§16) |
| SIB16 | sliceInfoList with per-NSAG priorities and cell lists (Rel-17) | Optional and capability-gated (§25) |
RRCRelease | cellReselectionPriorities with freqPriorityListNR / freqPriorityListEUTRA and t320; deprioritisationReq; redirectedCarrierInfo; suspendConfig with the RNA (§17) | Per UE, at release only (§9) |
Table 15. Which block owns what. The SIB2 row is the long one because SIB2 is where the serving cell describes both itself and the rules for its own frequency.
SIB3 and SIB4 are frequently confused when a neighbour "is not being reselected to". If the neighbour is on the same SSB frequency as the serving cell it is an intra-frequency neighbour and SIB3 is the only place it can appear — and it does not need to appear there at all, since the UE detects intra-frequency cells for itself. If it is on another carrier, SIB4 must both list the carrier and give it a priority before the neighbour can ever be considered.
16. Inter-RAT Reselection to E-UTRA and Back
In a non-standalone or early standalone deployment, LTE is not a legacy afterthought: it is where the coverage is. Idle-mode reselection between NR and E-UTRA is therefore load-bearing, and it works by the same three rules with a different set of broadcast fields.
| NR to E-UTRA | E-UTRA to NR | |
|---|---|---|
| Where the target carriers are listed | NR SIB5 carrierFreqListEUTRA | LTE SIB24 carrierFreqListNR (LTE SIB5 remains inter-frequency LTE) |
| Priority of the target | cellReselectionPriority per CarrierFreqEUTRA in SIB5 | Per NR carrier in LTE SIB24 |
| Thresholds | threshX-High and threshX-Low per carrier, plus the optional threshX-Q group | The equivalent fields in LTE SIB24 |
| Timer | t-ReselectionEUTRA, with t-ReselectionEUTRA-SF for speed scaling | t-ReselectionNR as signalled by LTE |
| Suitability | E-UTRA q-RxLevMin, q-QualMin and p-MaxEUTRA from SIB5, evaluated with the E-UTRA S-criterion | NR q-RxLevMin and q-QualMin as signalled by LTE |
| Measurement quantity | E-UTRA RSRP and RSRQ on CRS | NR RSRP and RSRQ on SSB |
Table 16. The two directions are configured in different radio access technologies' system information, which is why they are so often inconsistent with each other.
The priority interaction is the part that produces field problems. Priorities are a single 0-7 space shared across NR and E-UTRA frequencies, so an operator has to plan both technologies' priorities together. There is no separate NR priority space and no implicit preference for NR.
The classic inter-RAT ping-pong is an inconsistency, not a fault in either technology. Suppose NR SIB5 gives the LTE carrier priority 6 while NR's own carrier is priority 4, and LTE SIB24 gives the NR carrier priority 6 while LTE's own is 4. Each technology considers the other higher priority. A UE camped on either will find the other "higher priority", satisfy threshX-HighP easily in decent coverage, and reselect — then do the same thing in reverse from the other side, for as long as its battery lasts. Neither network element logs anything at all. The only cure is to plan the shared priority space once, centrally, and audit both technologies' broadcasts against the plan.
Two smaller points that matter when reading traces. First, the quality-based variant behaves differently across the boundary: E-UTRA RSRQ and NR RSRQ are defined over different reference signals and different bandwidths, so threshX-HighQ values are not transferable between the two directions even when the intent is symmetric. Second, redirectedCarrierInfo in RRCRelease can send a UE straight to an E-UTRA carrier at release, which is a redirection rather than a reselection — it happens once, immediately, and is not governed by any of the rules in §10.
17. Reselection in RRC_INACTIVE, and the RNA Boundary
RRC_INACTIVE is the state where a UE keeps its RRC context — its security keys, its bearers, its identity — while behaving, on the air, almost exactly like an idle UE. It reselects by precisely the rules in this document; TS 38.304 does not distinguish the two states in cl. 5.2.4 at all. The companion 14 RRC States owns the state machine itself and how a UE gets into and out of RRC_INACTIVE.
There is one difference, and it is the exception that proves the rule about reselection being invisible. A UE in RRC_INACTIVE was given a RAN Notification Area in the suspendConfig of its RRCRelease: a list of cells or RAN areas inside which it may move freely. After every reselection it checks whether the cell it has just camped on is inside that area. If it is, nothing happens, exactly as in RRC_IDLE. If it is not, the UE must perform an RNA update — which means a random access procedure, an RRCResumeRequest with resumeCause = rna-Update, and normally an RRCRelease with a fresh suspendConfig in reply.
| RRC_IDLE | RRC_INACTIVE | |
|---|---|---|
| Reselection rules | TS 38.304 cl. 5.2.4 | Identical |
| Parameters used | Broadcast, plus dedicated priorities while t320 runs | The same |
| Signalling on reselection inside the area | None | None |
| Boundary that triggers signalling | Tracking area: crossing it requires a registration update to the AMF (§18, companion 01 Registration Process) | RAN notification area: crossing it requires an RNA update to the anchor gNB |
| Who holds the context | The AMF. The RAN has nothing | The anchor gNB, plus the AMF |
| Periodic signalling | Periodic registration update, on the order of hours | Periodic RNA update on t380, on the order of minutes to hours |
| Paging that reaches it | CN paging, addressed to the whole tracking area list | RAN paging inside the RNA first; CN paging if that fails — companion 19 Paging |
Table 17. The two non-connected states from the point of view of reselection. Only the boundary rows differ.
This makes RRC_INACTIVE the one state where reselection does eventually produce signalling, and therefore the one place where a reselection problem shows up in a network log rather than being invisible. An RNA that is too small, or a reselection configuration that keeps pushing UEs across its edge, produces a stream of rna-Update resumes that look exactly like resume attempts in a KPI — which makes resume success rate look worse than it is, because an RNA update that ends in RRCRelease is a success that never reaches RRC_CONNECTED.
The design tension is worth stating. A large RNA means few RNA updates but expensive RAN paging, because the anchor must page across every cell in the area. A small RNA means cheap paging and a lot of RNA updates. Reselection configuration sits directly on top of that trade: a q-Hyst that is too small does not merely cost the UE battery in RRC_INACTIVE, it converts ping-pong across an RNA edge into signalling load on the anchor gNB.
18. What the Network Sees, and What It Does Not
It is worth being blunt about this, because it is the fact from which every operational consequence in this document follows. While a UE is in RRC_IDLE, the network does not know which cell it is on. Not approximately, not with a delay — not at all. It knows a list of tracking areas the UE was registered in the last time the UE told it anything, and that is the entire extent of its knowledge.
That is not a shortcoming; it is the point. Knowing the cell would require the UE to report every reselection, and reporting every reselection would cost a random access procedure and several messages each time — for a UE that may reselect a dozen times an hour and be paged once a day.
| Granularity | Who holds it | Refreshed when | What it costs |
|---|---|---|---|
| Cell | The UE alone, in RRC_IDLE | Never reported | Nothing at all |
| RAN notification area | The anchor gNB, in RRC_INACTIVE | On reselection out of the RNA, or on t380 expiry | One RACH plus an RRCResumeRequest / RRCRelease exchange |
| Tracking area list | The AMF, both states | On reselection into a TA not in the UE's registered list, or on the periodic registration timer | A full registration update: RACH, RRC setup, NAS exchange, release |
| Nothing | -- | -- | Paging has to be broadcast across every cell of every TA in the list |
Table 18. Location knowledge by granularity. Each row up costs signalling and buys paging efficiency; the whole design is a choice of where to sit on that curve.
18.1 Why a tracking-area boundary is expensive
A UE that reselects to a cell whose tracking area is not in its registered TA list must perform a mobility registration update before it has normal service there — see the companion 01 Registration Process for the procedure. That is not a cheap message: it is a random access, an RRC connection, a NAS exchange with the AMF and a release, for a UE that had no data to send. Every UE that crosses the line does it, and they all cross the same line.
A busy road, a station platform or a shopping-centre entrance sitting exactly on a tracking-area boundary is a classic and entirely self-inflicted signalling problem. Ten thousand crossings an hour, at roughly eleven Uu messages each, is about 110 000 messages an hour of pure registration churn — and if the two cells either side of the line also ping-pong because q-Hyst is small, each UE may cross it several times in a minute. The signature is a registration-update rate far above the mobility the area can justify, concentrated on two or three cells, with no accessibility or retainability problem to go with it.
The fixes are all in the planning, not in the protocol: put TA boundaries where people do not linger, make sure the cells either side of a boundary do not have overlapping best-server areas, and widen q-Hyst on cells that straddle one. Nothing in TS 38.304 can help — the UE has no idea a tracking area boundary exists until it has already reselected across it and read the new cell's SIB1.
19. Parameter and Range Reference
Every value below is as defined in TS 38.331. The "typical" column is operational commentary, not specification: it is the range many networks are found in, and a value outside it is a question rather than an error.
| Parameter | ASN.1 type / values | Units | Typical | Effect |
|---|---|---|---|---|
cellReselectionPriority | INTEGER (0..7) | priority level | 0-7 in use | Absolute frequency preference. Absent = frequency not considered |
cellReselectionSubPriority | ENUMERATED {oDot2, oDot4, oDot6, oDot8} | fraction of a level | rarely used | Fine ordering between carriers at the same integer priority |
q-Hyst | ENUMERATED {dB0, dB1, ..., dB6, dB8, ..., dB24} | dB | dB4 - dB6 | Bonus added to the serving cell in the R-criterion |
q-OffsetCell | Q-OffsetRange: dB-24 .. dB24 (1 dB steps to ±6 dB, 2 dB steps beyond) | dB | dB0 | Subtracted from that neighbour's Rn. Positive penalises the neighbour |
q-OffsetFreq | Q-OffsetRange, DEFAULT dB0 | dB | dB0 | Subtracted from every neighbour on that carrier, in addition to any per-cell offset |
threshX-HighP | ReselectionThreshold: INTEGER (0..31) | 2 dB steps, 0-62 dB | 8-16 | Srxlev a higher-priority target must exceed |
threshX-LowP | ReselectionThreshold | 2 dB steps | 2-8 | Srxlev a lower-priority target must exceed |
threshServingLowP | ReselectionThreshold | 2 dB steps | 2-8 | Srxlev below which the serving cell is poor enough to step down |
threshX-HighQ / LowQ | ReselectionThresholdQ: INTEGER (0..31) | 1 dB steps | signalled together | The quality-based equivalents, in the threshX-Q group |
threshServingLowQ | ReselectionThresholdQ | 1 dB steps | often absent | Quality equivalent of threshServingLowP |
s-IntraSearchP | ReselectionThreshold | 2 dB steps | 12-31 | Above this serving Srxlev, intra-frequency measurement is optional |
s-IntraSearchQ | ReselectionThresholdQ | 1 dB steps | often absent | Quality half of the same permission |
s-NonIntraSearchP | ReselectionThreshold | 2 dB steps | 8-20 | Above this, equal/lower-priority inter-frequency measurement is optional |
s-NonIntraSearchQ | ReselectionThresholdQ | 1 dB steps | often absent | Quality half |
q-RxLevMin | Q-RxLevMin: INTEGER (-70..-22) | 2 dBm steps: −140 .. −44 dBm | −60 (−120 dBm) | Suitability floor on level. Per carrier |
q-QualMin | Q-QualMin: INTEGER (-43..-12) | dB | −18 to −20 dB | Suitability floor on quality |
q-RxLevMinOffset | INTEGER (1..8) | 2 dB steps | absent | Applied only when evaluating a higher-priority PLMN from a VPLMN |
p-Max | P-Max: INTEGER (-30..33) | dBm | 23 | Feeds P_compensation. Above the UE's power class it costs margin |
nrofSS-BlocksToAverage | INTEGER (2..16) | beams | absent or 2 | Beams averaged into one Q_meas (§14) |
absThreshSS-BlocksConsolidation | ThresholdNR | RSRP / RSRQ | absent | Bar a beam must clear to join the average |
rangeToBestCell | Q-OffsetRange (Rel-16) | dB | absent | Window inside which beam count, not rank, picks the intra-frequency target |
deriveSSB-IndexFromCell | BOOLEAN | -- | true | Whether SSB timing may be derived from the serving cell — affects measurement effort, not the rules |
Table 19. Reselection parameters and their ranges. Watch the units column: three different step sizes appear in it, and two of the three most-misread fields are in it.
20. Timers and Counters
| Name | Where | Values | Started / stopped | What it governs |
|---|---|---|---|---|
t-ReselectionNR | SIB2 intraFreqCellReselectionInfo; SIB4 per carrier | T-Reselection: INTEGER (0..7) seconds | Started when a reselection condition becomes true; stopped if it stops being true | How long a condition must persist before the UE acts. The main anti-flap control after q-Hyst |
t-ReselectionEUTRA | SIB5 | INTEGER (0..7) seconds | As above | The same, for E-UTRA targets |
t-ReselectionNR-SF | SIB2, SIB4 | sf-Medium / sf-High in {oDot25, oDot5, oDot75, lDot0} | Applied continuously, per mobility state | Multiplies the timer above. Not a timer itself |
t-Evaluation | SIB2 mobilityStateParameters | s30, s60, s120, s180, s240 | Sliding window, always running | The window over which reselections are counted for mobility state |
t-HystNormal | SIB2 mobilityStateParameters | s30, s60, s120, s180, s240 | Started when neither the medium nor the high criterion is met | How long the UE must be quiet before returning to normal state |
t320 | RRCRelease cellReselectionPriorities | min5, min10, min20, min30, min60, min120, min180 | Started on receiving dedicated priorities; stopped on entering RRC_CONNECTED or on PLMN selection | Lifetime of the dedicated priority list. On expiry the UE reverts to broadcast priorities (§9) |
T325 | Governed by deprioritisationTimer in RRCRelease | min5, min10, min15, min30 | Started on receiving deprioritisationReq; stopped on PLMN selection or entering RRC_CONNECTED | How long a frequency, or all of NR, is treated as lowest priority |
t380 | suspendConfig in RRCRelease | min5 .. min720 | Started on entering RRC_INACTIVE, restarted on each RNA update | Periodic RNA update timer. Not a reselection timer, but reselection across the RNA edge pre-empts it (§17) |
| The 1-second guard | TS 38.304 cl. 5.2.4.1 — not signalled | 1 s, fixed | Starts when the UE camps on a cell | No reselection at all inside it. The hard floor on reselection rate |
| The 300-second exclusion | TS 38.304 cl. 5.2.4.1 / 5.3.1 — not signalled | 300 s, fixed | Starts when a cell is found barred, or unsuitable on arrival | That cell — and with intraFreqReselection = notAllowed, that frequency — is not a candidate |
n-CellChangeMedium / n-CellChangeHigh | SIB2 mobilityStateParameters | INTEGER (1..16) each | Counters, not timers | Reselection counts that promote the UE to medium and high mobility state (§13) |
Table 20. Timers and counters. Note that two of the most consequential values — the 1 s guard and the 300 s exclusion — are specification constants and cannot be configured at all.
t-ReselectionNR can legally be 0, which means the UE acts as soon as the condition is true, subject only to the 1-second guard and its own measurement period. That is occasionally deliberate on a high-speed corridor. It is much more often a leftover from a lab configuration, and it removes the second of the two anti-ping-pong defences while leaving the first in place — so the symptom is not continuous flapping but reselections that follow fading with no delay at all.
21. Failure Modes and What Each One Means
Reselection has an unusual failure profile. Almost nothing in it produces an error, because there is no protocol peer to report an error to. The honest answer in the "who detects it" column is usually nobody — the fault is discovered when a page goes unanswered, when a layer mysteriously empties, or when someone finally decodes the SIBs of a cell that was not under suspicion.
| What is wrong | Who detects it | What the UE does | Diagnostic signature |
|---|---|---|---|
A SIB4 carrier entry with no cellReselectionPriority | Nobody. No counter anywhere moves | Never considers that carrier for reselection. Ever | A whole layer with almost no idle UEs and normal connected-mode traffic. Decode SIB4 and check for the field's presence, not its value (§8) |
q-Hyst too small for the layer | The UE, implicitly, by promoting its own mobility state | Reselects repeatedly between cells of similar strength; re-reads MIB and SIB1 each time | Idle battery complaints; a high rna-Update rate in RRC_INACTIVE; reselection counts far above the mobility of the area (§12) |
t-ReselectionNR too long | Nobody, until a page fails | Holds a decaying cell for seconds past the point a neighbour was better; may lose the cell entirely and fall into cell selection | Paging failures concentrated at cell edges; UEs answering pages from the second-best cell; access attempts at unusually low RSRP |
s-NonIntraSearchP set very high (e.g. 31 = 62 dB) | Nobody | Never measures equal- or lower-priority inter-frequency neighbours, because the serving cell is always "comfortable" | Inter-frequency reselection essentially absent from drive tests while intra-frequency works; higher-priority steering still works, which makes the fault look selective (§7) |
A cell in intraFreqExcludedCellList that should not be | Nobody | Ignores that PCI on that frequency however strong it is | One cell that no idle UE ever camps on, with healthy connected-mode KPIs. Compare the excluded list against the PCI plan |
cellBarred = barred with intraFreqReselection = notAllowed | The UE, and only for 300 s at a time | Bars the cell and the whole frequency for 300 s and leaves the layer | A carrier losing idle UEs in one geographic patch; UEs appearing on another band or RAT with no other explanation (§4.1) |
A q-OffsetCell sign error | Nobody | Ranks the neighbour the opposite way from the intent — a negative offset is a bonus, not a penalty | A cell accumulating idle UEs it should not have, or shedding UEs it should keep. Recompute Rn by hand for the two cells (§11) |
| Dedicated priorities outliving their usefulness | Nobody | Follows a t320-scoped priority list for up to three hours, ignoring carriers brought into service since | A population of UEs migrating between layers at a fixed offset after a release burst, with no configuration change to explain it (§9.1) |
| Mobility-state misclassification of a stationary UE | The UE, wrongly | Shortens its own timer and shrinks its own hysteresis, so it ping-pongs harder | High-mobility behaviour from devices known to be fixed — sensors, desk phones, meters — in dense small-cell layers with three or more overlapping cells (§13) |
| A tracking-area boundary in a busy place | The core network, as signalling load | Performs a mobility registration update on every crossing, correctly | Registration-update rate far above the area's real mobility, concentrated on two or three cells (§18.1) |
| Inconsistent NR and E-UTRA priorities | Nobody. Both technologies believe they are correct | Reselects back and forth between RATs indefinitely | UEs alternating between NR and LTE in stable coverage; each technology's own configuration looks reasonable in isolation (§16) |
| Beam consolidation configured differently on adjacent cells | Nobody | Ranks the same neighbour carrier differently depending on which cell it is currently camped on | Reselection decisions that depend on the UE's starting cell rather than its position; hard to reproduce (§14) |
| SIB2 absent or unreadable | The UE, and it is the one case it can act on | Has no reselection configuration beyond SIB1, so intra-frequency reselection is effectively unconfigured | UEs that camp and then do not move at all until the cell becomes unsuitable, then fall into full cell selection |
Table 21. Thirteen reselection failure modes. Eight of them have "nobody" in the second column, which is the single most important thing to understand about operating this mechanism.
The diagnostic method that works, given all those "nobody" entries, is to stop looking for errors and start comparing intent with broadcast. Decode SIB1 through SIB5 from the cells around the problem area, tabulate the priorities, thresholds and offsets, and check them against what the plan says they should be. Most reselection faults are visible in thirty seconds that way and invisible for months any other way.
22. Configuration Reference (ASN.1)
Abridged from TS 38.331. ... marks omitted fields, omitted enumeration members and extension markers; the fields that matter for reselection are given in full, with their real types.
22.1 SIB2 — the serving cell describes itself and its own frequency
SIB2 ::= SEQUENCE {
cellReselectionInfoCommon SEQUENCE {
nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage)
OPTIONAL,
absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL,
rangeToBestCell Q-OffsetRange OPTIONAL,
q-Hyst ENUMERATED {dB0, dB1, dB2, dB3,
dB4, dB5, dB6, dB8,
dB10, dB12, dB14, dB16,
dB18, dB20, dB22, dB24},
speedStateReselectionPars SEQUENCE {
mobilityStateParameters MobilityStateParameters,
q-HystSF SEQUENCE {
sf-Medium ENUMERATED {dB-6, dB-4, dB-2, dB0},
sf-High ENUMERATED {dB-6, dB-4, dB-2, dB0}
}
} OPTIONAL,
...
},
cellReselectionServingFreqInfo SEQUENCE {
s-NonIntraSearchP ReselectionThreshold OPTIONAL,
s-NonIntraSearchQ ReselectionThresholdQ OPTIONAL,
threshServingLowP ReselectionThreshold,
threshServingLowQ ReselectionThresholdQ OPTIONAL,
cellReselectionPriority CellReselectionPriority,
cellReselectionSubPriority CellReselectionSubPriority
OPTIONAL,
...
},
intraFreqCellReselectionInfo SEQUENCE {
q-RxLevMin Q-RxLevMin,
q-RxLevMinSUL Q-RxLevMin OPTIONAL,
q-QualMin Q-QualMin OPTIONAL,
s-IntraSearchP ReselectionThreshold,
s-IntraSearchQ ReselectionThresholdQ OPTIONAL,
t-ReselectionNR T-Reselection,
frequencyBandList MultiFrequencyBandListNR-SIB
OPTIONAL,
p-Max P-Max OPTIONAL,
smtc SSB-MTC OPTIONAL,
ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL,
ssb-ToMeasure SSB-ToMeasure OPTIONAL,
deriveSSB-IndexFromCell BOOLEAN,
t-ReselectionNR-SF SpeedStateScaleFactors OPTIONAL,
...
},
...
}
MobilityStateParameters ::= SEQUENCE {
t-Evaluation ENUMERATED {s30, s60, s120, s180, s240,
spare3, spare2, spare1},
t-HystNormal ENUMERATED {s30, s60, s120, s180, s240,
spare3, spare2, spare1},
n-CellChangeMedium INTEGER (1..16),
n-CellChangeHigh INTEGER (1..16)
}
SpeedStateScaleFactors ::= SEQUENCE {
sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0},
sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0}
}Listing 1. SIB2. Everything governing intra-frequency reselection and the serving frequency's place in the priority order is in this one block.
22.2 SIB3 — intra-frequency neighbours and exclusions
SIB3 ::= SEQUENCE {
intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL,
intraFreqExcludedCellList IntraFreqExcludedCellList OPTIONAL,
lateNonCriticalExtension OCTET STRING OPTIONAL,
...,
[[ intraFreqNeighCellList-v1610 IntraFreqNeighCellList-v1610 OPTIONAL,
intraFreqAllowedCellList-r16 IntraFreqAllowedCellList-r16 OPTIONAL,
intraFreqCAG-CellList-r16 SEQUENCE (SIZE (1..maxPLMN)) OF
IntraFreqCAG-CellListPerPLMN-r16
OPTIONAL ]]
}
IntraFreqNeighCellInfo ::= SEQUENCE {
physCellId PhysCellId,
q-OffsetCell Q-OffsetRange,
q-RxLevMinOffsetCell INTEGER (1..8) OPTIONAL,
q-RxLevMinOffsetCellSUL INTEGER (1..8) OPTIONAL,
q-QualMinOffsetCell INTEGER (1..8) OPTIONAL,
...
}
IntraFreqExcludedCellList ::= SEQUENCE (SIZE (1..maxNrofPhysCellIdRange))
OF PCI-Range
-- note: q-OffsetCell is MANDATORY inside IntraFreqNeighCellInfo, so a
-- cell listed in SIB3 always has an explicit offset, while a cell that
-- is not listed uses 0 dB. Listing a neighbour purely to give it an
-- offset of dB0 is therefore redundant, and common.Listing 2. SIB3. Note what is not here: no thresholds, no timer, no priority. Intra-frequency reselection is configured from SIB2 and only adjusted from SIB3.
22.3 SIB4 — one entry per NR inter-frequency carrier
SIB4 ::= SEQUENCE {
interFreqCarrierFreqList InterFreqCarrierFreqList,
lateNonCriticalExtension OCTET STRING OPTIONAL,
...
}
InterFreqCarrierFreqInfo ::= SEQUENCE {
dl-CarrierFreq ARFCN-ValueNR,
frequencyBandList MultiFrequencyBandListNR-SIB OPTIONAL,
nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage)
OPTIONAL,
absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL,
smtc SSB-MTC OPTIONAL,
ssbSubcarrierSpacing SubcarrierSpacing,
ssb-ToMeasure SSB-ToMeasure OPTIONAL,
deriveSSB-IndexFromCell BOOLEAN,
ss-RSSI-Measurement SS-RSSI-Measurement OPTIONAL,
q-RxLevMin Q-RxLevMin,
q-RxLevMinSUL Q-RxLevMin OPTIONAL,
q-QualMin Q-QualMin OPTIONAL,
p-Max P-Max OPTIONAL,
t-ReselectionNR T-Reselection,
t-ReselectionNR-SF SpeedStateScaleFactors OPTIONAL,
threshX-HighP ReselectionThreshold,
threshX-LowP ReselectionThreshold,
threshX-Q SEQUENCE {
threshX-HighQ ReselectionThresholdQ,
threshX-LowQ ReselectionThresholdQ
} OPTIONAL,
cellReselectionPriority CellReselectionPriority OPTIONAL,
cellReselectionSubPriority CellReselectionSubPriority OPTIONAL,
q-OffsetFreq Q-OffsetRange DEFAULT dB0,
interFreqNeighCellList InterFreqNeighCellList OPTIONAL,
interFreqExcludedCellList InterFreqExcludedCellList OPTIONAL,
...
}Listing 3. SIB4. threshX-HighP and threshX-LowP are mandatory in the entry while cellReselectionPriority is optional — so the encoder cannot catch the one omission that disables the whole carrier.
22.4 The reselection types, and the dedicated priority list
CellReselectionPriority ::= INTEGER (0..7)
CellReselectionSubPriority ::= ENUMERATED {oDot2, oDot4, oDot6, oDot8}
ReselectionThreshold ::= INTEGER (0..31) -- in units of 2 dB
ReselectionThresholdQ ::= INTEGER (0..31) -- in units of 1 dB
T-Reselection ::= INTEGER (0..7) -- in seconds
Q-RxLevMin ::= INTEGER (-70..-22) -- units of 2 dBm
Q-QualMin ::= INTEGER (-43..-12) -- dB
P-Max ::= INTEGER (-30..33) -- dBm
Q-OffsetRange ::= ENUMERATED {
dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, dB-12, dB-10, dB-8, dB-6,
dB-5, dB-4, dB-3, dB-2, dB-1, dB0, dB1, dB2, dB3, dB4,
dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22,
dB24 }
-- 1 dB granularity between -6 and +6 dB, 2 dB granularity outside
-- dedicated priorities, in RRCRelease
CellReselectionPriorities ::= SEQUENCE {
freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL,
freqPriorityListNR FreqPriorityListNR OPTIONAL,
t320 ENUMERATED {min5, min10, min20, min30,
min60, min120, min180, spare1}
OPTIONAL,
...
}
FreqPriorityNR ::= SEQUENCE {
carrierFreq ARFCN-ValueNR,
cellReselectionPriority CellReselectionPriority,
cellReselectionSubPriority CellReselectionSubPriority OPTIONAL
}
-- and the blunt instrument, also in RRCRelease-IEs
deprioritisationReq SEQUENCE {
deprioritisationType ENUMERATED {frequency, nr},
deprioritisationTimer ENUMERATED {min5, min10, min15, min30}
} OPTIONALListing 4. The types. cellReselectionPriority is mandatory inside FreqPriorityNR — the dedicated list cannot contain a frequency without a priority, unlike SIB4.
23. Six Worked Calculations
The S-criterion and the R-criterion were worked through where they were introduced (§5.3 and §11.1). These six take the remaining arithmetic a reader will actually have to do at a desk: converting broadcast indices into decibels and dBm, checking whether a steering decision was correct, and turning a configuration into a reaction time and a signalling volume.
23.1 Turning broadcast indices into absolute levels
Every threshold in reselection is an index, and every index has to be multiplied by its step size and then referred to the carrier's own q-RxLevMin before it means anything in dBm. This is the calculation to do first, every time.
Broadcast on carrier f1: q-RxLevMin = −60, p-Max = 26 dBm, s-IntraSearchP = 15, s-NonIntraSearchP = 10, threshServingLowP = 5. UE is power class 3.
q-RxLevMin = −60 × 2 = −120 dBm
P_compensation = max(26 − 23, 0) = 3 dB
s-IntraSearchP = 15 × 2 = 30 dB of Srxlev
s-NonIntraSearchP = 10 × 2 = 20 dB of Srxlev
threshServingLowP = 5 × 2 = 10 dB of Srxlev
Converting each to the RSRP the UE must measure, using
RSRP = Srxlev + q-RxLevMin + P_compensation:
skip intra-frequency measurement above 30 − 120 + 3 = −87 dBm
skip inter-frequency measurement above 20 − 120 + 3 = −97 dBm
serving cell is "low" below 10 − 120 + 3 = −107 dBm
cell becomes unsuitable below 0 − 120 + 3 = −117 dBm
Those four numbers describe the whole of this cell's idle-mode behaviour, and none of them appear anywhere in the broadcast. Note that all four moved by 3 dB because of one p-Max value.
23.2 A higher-priority reselection that leaves a much stronger cell
Serving carrier f1: priority 4, q-RxLevMin = −60 (−120 dBm), p-Max = 23 dBm. Measured RSRP −85 dBm.
Target carrier f2 in SIB4: priority 6, q-RxLevMin = −62 (−124 dBm), p-Max = 23 dBm, threshX-HighP = 12, t-ReselectionNR = 3 s. Measured RSRP on the best f2 cell: −98 dBm.
Serving: Srxlev_s = −85 − (−120) − 0 = +35 dB
Target: Srxlev_n = −98 − (−124) − 0 = +26 dB
Threshold: threshX-HighP = 12 × 2 = 24 dB
Test: is Srxlev_n > 24 dB? 26 > 24 → yes
Serving-cell condition: there is none
After 3 s the UE reselects to f2, abandoning a cell that is 13 dB stronger in raw RSRP and has 9 dB more suitability margin. This is correct and intended.
To prevent it, threshX-HighP would have to exceed the target's Srxlev: index 13 gives 26 dB, and 26 > 26 is false, so index 13 blocks this particular case with nothing to spare. A planner wanting the f2 layer entered only well inside its coverage would set the index from f2's own link budget — index 16 (32 dB) means f2 must measure better than −92 dBm before a UE will move to it.
23.3 A lower-priority fallback, and why it usually does not fire
Serving carrier f2: priority 6, q-RxLevMin = −62 (−124 dBm), threshServingLowP = 5 → 10 dB.
Target E-UTRA carrier in SIB5: priority 3, q-RxLevMin = −61 (−122 dBm), threshX-Low = 4 → 8 dB, t-ReselectionEUTRA = 2 s. E-UTRA RSRP measured: −110 dBm.
Target: Srxlev_n = −110 − (−122) = +12 dB
12 > 8 → target condition met
Case A — serving RSRP −108 dBm
Srxlev_s = −108 − (−124) = +16 dB
Is 16 < 10? No → no reselection, even though the E-UTRA cell qualifies comfortably. The UE stays on a cell 16 dB above its floor.
Case B — serving RSRP −115 dBm
Srxlev_s = −115 + 124 = +9 dB
Is 9 < 10? Yes → both conditions hold; after 2 s the UE reselects down to E-UTRA.
The gap between case A and case B is 7 dB of serving-cell level in which the fallback exists, qualifies, and is deliberately not used. That gap is what threshServingLowP buys: UEs stay on the high-priority layer until it is genuinely marginal.
23.4 Sizing q-OffsetFreq to put a boundary where you want it
Offsets are usually tuned by trial. They do not need to be: the crossover point between two equal-priority carriers is a one-line calculation. Reselection to the neighbour happens when Rn > Rs, i.e. when Q_meas,n − Q_offset > Q_meas,s + Q_hyst, which rearranges to a required difference in measured level.
With q-Hyst = dB4 and no per-cell offset:
reselect when Q_meas,n − Q_meas,s > Q_hyst + q-OffsetFreq
= 4 + q-OffsetFreq [dB]
Goal 1 — the neighbour carrier should win only when it is 6 dB stronger (a reluctant, sticky boundary):
4 + q-OffsetFreq = 6 → q-OffsetFreq = dB2
Goal 2 — the neighbour carrier should win even when it is 2 dB weaker (an eager boundary, to shift idle load onto it):
4 + q-OffsetFreq = −2 → q-OffsetFreq = dB-6
Goal 3 — as goal 2, but for one cell of that carrier only: leave q-OffsetFreq at dB0 and give that PCI q-OffsetCell = dB-6 in the interFreqNeighCellList. The two offsets add, so setting both is a 12 dB bias and almost certainly not what was intended.
Sanity check on goal 2: a 2 dB-weaker cell wins the ranking, but it must still pass its own S-criterion, and it must still hold the condition for t-ReselectionNR. Ranking cannot promote an unsuitable cell.
23.5 How long a reselection actually takes, end to end
"How quickly does the UE react" has no single answer, because t-ReselectionNR is usually the smallest term in the budget. The measurement period dominates, and it scales with the UE's DRX cycle TS 38.133 cl. 4.2.2. The figures below are an order-of-magnitude budget, not a requirement, and are marked approximate for that reason.
A UE with an idle DRX cycle of 1.28 s, t-ReselectionNR = 2 s, reselecting to an intra-frequency neighbour it has not measured before:
detect and measure the new cell ~4-5 DRX cycles ≈ 5-6 s
condition becomes true, run timer t-ReselectionNR = 2 s
retune and acquire MIB 1-2 SSB periods ≈ 0.04 s
acquire SIB1 1 SI period ≈ 0.02-0.16 s
---------------------------------------------------------------
total, approximately ≈ 7-8 s
The same UE in high mobility state with sf-High = oDot25:
timer becomes 2 × 0.25 = 0.5 s, so the total falls to ≈ 6 s — a 20% improvement, because the measurement period did not change.
For comparison, a connected-mode handover of the same UE between the same two cells completes in tens of milliseconds of interruption, roughly two orders of magnitude faster, because the network already knows both cells and the UE is already measuring continuously.
And for a higher-priority carrier the UE has not yet found at all, the obligation in TS 38.133 is only to search each higher-priority layer once every 60 × N_layers seconds. With three such layers that is a worst case of 180 s before the search even happens.
23.6 What ping-pong at an RNA edge costs in signalling
In RRC_IDLE, ping-pong costs battery and nothing else. In RRC_INACTIVE it costs the network, because every excursion out of the RAN notification area produces an RNA update (§17). This is the arithmetic that turns a radio-planning oversight into a capacity problem.
Take the ping-pong of §12: a stationary UE crossing between two cells roughly every 3 s because q-Hyst is dB0. Suppose the two cells are on opposite sides of an RNA boundary, so every other crossing leaves the RNA.
crossings ≈ 20 per minute
excursions out of the RNA ≈ 10 per minute
RNA update cost = MSG1..MSG4 + RRCRelease = 5 Uu msgs
per UE: 10 × 5 × 60 = 3 000 Uu messages per hour
For 200 such devices on one station concourse:
200 × 3 000 = 600 000 Uu messages per hour
all of them saying "still here", none of them carrying a byte of user data, and all of them attributed in the KPIs to resume attempts rather than to reselection. Raising q-Hyst from dB0 to dB8 removes essentially all of it, because the fading that caused it is ±3 dB (§12).
Compare the same population with a t380 of min60 and no ping-pong: 200 UEs × 1 periodic update per hour × 5 messages = 1 000 messages per hour, which is 0.17% of the figure above.
24. Illustrative Message Traces
Illustrative trace. Field names and encodings follow 3GPP; the values are constructed for this document and are not a capture from any deployed or lab network.
Reselection traces are unusual in one respect: four of the six blocks below are UE-internal. There is no air-interface message to capture for a reselection, so what a UE-side log shows is the UE's own evaluation — which is exactly why UE-side logging is indispensable for this topic and why a gNB-side capture cannot substitute for it. The PCI, ARFCN and offset values are consistent across all six blocks and describe one small network: carrier f1 at ARFCN 632628 with cells PCI 12, 188 and 431, and carrier f2 at ARFCN 653952.
24.1 The serving cell's reselection configuration, decoded
10:14:02.117 [RRC-DL-BCCH] SIB2 (SI-window 1, si-Periodicity rf16)
cellReselectionInfoCommon
nrofSS-BlocksToAverage ............ (absent) -- strongest beam only
absThreshSS-BlocksConsolidation ... (absent)
q-Hyst ............................ dB4 -- serving-cell bonus
speedStateReselectionPars
mobilityStateParameters
t-Evaluation ..................... s60
t-HystNormal ..................... s120
n-CellChangeMedium ............... 4
n-CellChangeHigh ................. 8
q-HystSF
sf-Medium ........................ dB-2
sf-High .......................... dB-4
cellReselectionServingFreqInfo
s-NonIntraSearchP ................. 10 -- 20 dB of Srxlev
s-NonIntraSearchQ ................. (absent)
threshServingLowP ................. 5 -- 10 dB of Srxlev
threshServingLowQ ................. (absent)
cellReselectionPriority ........... 4 -- this frequency, f1
cellReselectionSubPriority ........ (absent)
intraFreqCellReselectionInfo
q-RxLevMin ........................ -60 -- = -120 dBm
q-QualMin ......................... -18 -- dB
s-IntraSearchP .................... 15 -- 30 dB of Srxlev
s-IntraSearchQ .................... (absent)
t-ReselectionNR ................... 2 -- seconds
t-ReselectionNR-SF
sf-Medium ........................ oDot5
sf-High .......................... oDot25
p-Max ............................. 26 -- dBm (see the note)
deriveSSB-IndexFromCell ........... true
smtc periodicityAndOffset sf20 = 0, duration sf5Listing 5. A complete serving-cell reselection configuration. Every number in §23.1 came from this block.
p-Max = 26 dBm in the block above is the whole of §5.2 in one field: every power-class-3 UE reading this SIB2 silently loses 3 dB of margin on every threshold in it. If the operator did not intend to support power-class-2 devices on this carrier, that single value has moved the cell's effective edge inwards by 3 dB.
24.2 The intra-frequency neighbour list and an exclusion
10:14:02.204 [RRC-DL-BCCH] SIB3 intraFreqNeighCellList IntraFreqNeighCellInfo[0] physCellId ....................... 188 q-OffsetCell ..................... dB0 -- no bias, N1 IntraFreqNeighCellInfo[1] physCellId ....................... 205 q-OffsetCell ..................... dB6 -- 6 dB penalty q-RxLevMinOffsetCell ............. 2 -- +4 dB on q-RxLevMin intraFreqExcludedCellList PCI-Range[0] start ............................ 300 range ............................ n4 -- PCI 300..303 excluded -- consequences the UE now applies on f1: -- PCI 188 ranked at its measured RSRP -- PCI 205 ranked 6 dB below its measured RSRP, AND needs 4 dB more -- level than other cells to pass the S-criterion at all -- PCI 300..303 never candidates, at any level
Listing 6. SIB3 doing all three of its jobs at once: a neutral neighbour, a penalised neighbour, and an exclusion range. q-Hyst is not here — it is in SIB2 and applies to whichever cell is serving.
24.3 An inter-frequency carrier entry
10:14:02.311 [RRC-DL-BCCH] SIB4
interFreqCarrierFreqList
InterFreqCarrierFreqInfo[0]
dl-CarrierFreq ................... 653952 -- f2, 3600.00 MHz
ssbSubcarrierSpacing ............. kHz30
deriveSSB-IndexFromCell .......... true
smtc periodicityAndOffset sf20 = 5, duration sf5
q-RxLevMin ....................... -62 -- = -124 dBm
q-QualMin ........................ -18
p-Max ............................ 23
t-ReselectionNR .................. 3 -- seconds
t-ReselectionNR-SF
sf-Medium ....................... oDot5
sf-High ......................... oDot25
threshX-HighP .................... 12 -- 24 dB of Srxlev
threshX-LowP ..................... 4 -- 8 dB of Srxlev
threshX-Q ........................ (absent) -- level-based only
cellReselectionPriority .......... 6 -- HIGHER than f1's 4
q-OffsetFreq ..................... dB2
interFreqNeighCellList
InterFreqNeighCellInfo[0]
physCellId ..................... 431
q-OffsetCell ................... dB3
-- the UE now MUST measure f2 continuously, whatever f1 looks like,
-- because f2 has the higher priority (S7). q-OffsetFreq and
-- q-OffsetCell are irrelevant while the priorities differ -- they only
-- enter the R-criterion, which is for EQUAL priorities.Listing 7. One SIB4 carrier entry. The last comment is the trap: offsets on a higher-priority carrier do nothing at all, and are often set in the belief that they moderate the steering.
24.4 The UE's own evaluation, second by second, ending in a reselection
-- UE-internal log. Serving PCI 12 on f1. Same scenario as S11.1 and
-- Figure 4. Srxlev shown for the serving cell, R values for ranking.
10:31:00.010 [IDLE] serving PCI 12 RSRP -92.0 Srxlev +25.0 Squal +7
Srxlev 25 < s-IntraSearchP 30 -> intra-freq
measurement REQUIRED
Srxlev 25 > s-NonIntraSearchP 20 -> equal/lower
priority inter-freq measurement not required
f2 priority 6 > f1 priority 4 -> f2 measured anyway
10:31:00.010 [IDLE] rank Rs(12) = -92.0 + 4.0 = -88.0
Rn(188) = -97.0 - 0.0 = -97.0
Rn(431) = -90.0 - (2+3) = -95.0 [f2, equal? NO
-- f2 is higher priority, rule 1 applies]
10:31:00.010 [IDLE] rule 1: Srxlev(431) = -90 + 124 = +34 > threshX-HighP 24
-> higher-priority condition TRUE, start t-ReselectionNR
(f2) = 3 s
10:31:01.020 [IDLE] f2 best cell PCI 431 RSRP -90.5 Srxlev +33.5 still > 24
10:31:02.020 [IDLE] f2 best cell PCI 431 RSRP -91.0 Srxlev +33.0 still > 24
10:31:03.015 [IDLE] t-ReselectionNR expired, condition held throughout
1 s guard since camping: satisfied (camped 10:28:41)
target suitable: Srxlev +33.0 > 0, Squal +6 > 0
target not barred, not in interFreqExcludedCellList
10:31:03.015 [IDLE] -> RESELECT to PCI 431 on ARFCN 653952 (f2)
10:31:03.061 [IDLE] MIB acquired cellBarred=notBarred
intraFreqReselection=allowed
10:31:03.144 [IDLE] SIB1 acquired TAC 0x000271 -- unchanged, no
registration update needed
10:31:03.145 [IDLE] camped normally on PCI 431, f2
now using f2's SIB2: q-Hyst dB6, t-ReselectionNR 3
10:31:03.145 [IDLE] mobility state: 3 counted reselections in last 60 s
3 <= n-CellChangeMedium 4 -> NORMAL state retained
-- note what is absent: no message was transmitted at any point.
-- The network's view of this UE is unchanged.Listing 8. A complete higher-priority reselection from the UE's side. The rank lines are computed but unused, because rule 1 fired first and rule 2 never ran.
24.5 Dedicated priorities in an RRCRelease
10:47:19.882 [RRC-DL-DCCH] RRCRelease
rrc-TransactionIdentifier ........... 1
criticalExtensions rrcRelease
redirectedCarrierInfo .............. (absent)
cellReselectionPriorities
freqPriorityListNR
FreqPriorityNR[0]
carrierFreq ..................... 632628 -- f1
cellReselectionPriority ......... 6 -- was 4 in SIB2
FreqPriorityNR[1]
carrierFreq ..................... 653952 -- f2
cellReselectionPriority ......... 3 -- was 6 in SIB4
freqPriorityListEUTRA ............. (absent)
t320 .............................. min60
deprioritisationReq ................ (absent)
suspendConfig ...................... (absent) -- to RRC_IDLE, not INACTIVE
-- this UE has just had the priority order of the two carriers REVERSED
-- for the next 60 minutes. Every other UE in the cell still reads
-- SIB2/SIB4 and prefers f2. The E-UTRA carriers of SIB5 are absent from
-- the dedicated list, so they now have NO priority for this UE and drop
-- out of consideration entirely until t320 expires.Listing 9. Dedicated priorities, with the two consequences that catch people: the reversal applies to one UE only, and frequencies omitted from the list become invisible rather than lowest.
24.6 Failure case: a better cell ignored because its frequency had no priority
-- UE-internal log at a location where carrier f3 (ARFCN 620000) is
-- 14 dB stronger than the serving carrier. f3 IS listed in SIB4.
11:02:44.300 [IDLE] SIB4 parsed, 2 carrier entries
[0] dl-CarrierFreq 653952 priority 6 -- f2
[1] dl-CarrierFreq 620000 priority ABSENT -- f3
11:02:44.300 [IDLE] carrier list built for reselection evaluation:
f1 632628 priority 4 (serving, from SIB2)
f2 653952 priority 6
-- f3 620000 NOT ADDED: no cellReselectionPriority
provided (TS 38.304 cl. 5.2.4.1)
11:02:44.300 [IDLE] measurement obligation:
f2 higher priority -> measure always
f3 not evaluated -> NOT MEASURED
11:02:51.118 [IDLE] serving PCI 12 RSRP -103.0 Srxlev +14.0
Srxlev 14 < s-IntraSearchP 30 -> intra measured
Srxlev 14 < s-NonIntraSearchP 20 -> inter measured
(equal/lower priority carriers only -- f3 still
excluded, it has no priority to compare)
11:02:51.118 [IDLE] f2 best cell PCI 431 RSRP -101.0 Srxlev +23.0
23 < threshX-HighP 24 -> rule 1 NOT satisfied
11:02:51.118 [IDLE] rank: Rs(12) = -103.0 + 4.0 = -99.0
Rn(188) = -104.5 = -104.5
no equal-priority cell better -> rule 2 not satisfied
11:02:51.118 [IDLE] rule 3: Srxlev_s 14 > threshServingLowP 10
-> serving cell not "low", rule 3 not evaluated
11:02:51.118 [IDLE] decision: STAY on PCI 12, RSRP -103.0 dBm
-- scanner at the same spot, same second:
-- f3 620000 PCI 77 RSRP -89.0 dBm (14 dB better than serving)
--
-- The UE is behaving exactly as specified. One optional field is
-- missing from one SIB4 entry, and an entire carrier is invisible to
-- every idle UE in this cell. Nothing logs an error, at either end.Listing 10. The most common reselection misconfiguration there is, seen from the only place it is visible: the UE's own evaluation, alongside a scanner that has no such rules.
25. Release Deltas: Rel-15 to Rel-18
| Release | Change | Why it matters when reading reselection |
|---|---|---|
| Rel-15 | The whole framework: S-criterion, priorities 0-7 with sub-priorities, the three rules, the R-criterion, mobility states and scaling, SIB2-SIB5, dedicated priorities with t320, deprioritisationReq | Everything in §4 to §13 is Rel-15. Reselection is one of the parts of NR that arrived essentially finished |
| Rel-16 | rangeToBestCell: among intra-frequency cells within a window of the best-ranked, prefer the one with the most qualifying beams (§14) | The chosen cell may no longer be the top of the ranking. A trace that shows the UE picking the second-ranked cell is not necessarily wrong |
| Rel-16 | NPN support: intraFreqCAG-CellList, allowed-cell lists in SIB3 and SIB4 | A cell can be a candidate for one UE and not for another in the same place, on subscription grounds rather than radio grounds |
| Rel-16 | HSDN cell lists (intraFreqNeighHSDN-CellList and the inter-frequency equivalent) for mobility-state estimation on high-speed lines | Mobility-state promotion can now be driven by a subset of cells, so the count in a log may not match the reselections you can see (§13) |
| Rel-16 | NR-U: reselection on unlicensed carriers, with the associated SSB and measurement adaptations | A neighbour that is present but not currently transmitting SSBs is normal, not a fault |
| Rel-17 | Relaxed measurement in idle and inactive: relaxedMeasurement with lowMobilityEvaluation, cellEdgeEvaluation, combineRelaxedMeasCondition and highPriorityMeasRelax (§7.1) | A UE may legitimately skip measurements the rules of §7 would otherwise make mandatory — including, with highPriorityMeasRelax, higher-priority ones |
| Rel-17 | Slice-based cell reselection: SIB16 carries per-NSAG priorities and sub-priorities with allowed/excluded cell lists, so UEs interested in a slice group can be steered separately | Two UEs in the same cell with the same capabilities can follow different priority orders. Support is capability-gated, so behaviour differs by device |
| Rel-17 | RedCap: cellBarredRedCap and intraFreqReselectionRedCap in SIB1, allowing a cell or a frequency to be barred for RedCap UEs specifically | A carrier can be open for ordinary UEs and closed for RedCap ones. A "missing" RedCap population on a layer is often this, not coverage |
| Rel-17 | NTN: SIB19 with ephemeris, epoch and t-Service; location-based and time-based conditions alongside the level-based ones | In a non-terrestrial cell the best cell changes because the satellite moved. Reselection may be driven by a service-end time rather than by any measurement, which no terrestrial intuition predicts |
| Rel-18 | Further NTN refinements, network energy saving (cell DTX and DRX), and eRedCap | A cell using aggressive energy-saving patterns is measurable less often, which lengthens the reaction-time budget of §23.5 without changing any reselection parameter |
| Rel-18 | LTM (L1/L2-triggered mobility) and other connected-mode mobility work | Does not apply to idle or inactive UEs. Mentioned because it is often assumed to: LTM changes handover, not reselection |
Table 22. Reselection-relevant changes by release. Feature presence should be confirmed against the UE capability exchange — see the companion 26 UE Capability. Rel-17 and Rel-18 items are summarised at feature level; check the current version of TS 38.304 and TS 38.331 for exact field names before configuring them.
26. Reading Reselection in Logs: A Checklist
Ordered so that the cheapest checks that eliminate the most possibilities come first. Steps 1 to 4 need only a SIB decode and can be done before anyone goes anywhere.
- Decode SIB4 and check for the presence of
cellReselectionPriorityon every carrier, not its value. A carrier without one is invisible, however complete the rest of its entry looks. Do the same for SIB5 and the E-UTRA carriers. This one check accounts for a large share of all "the UE ignored a better cell" reports (§8, §24.6). - Tabulate the priority order across all technologies. NR and E-UTRA share one 0-7 space. Then check the other technology's broadcast for the reverse direction — mutual higher-priority claims are the classic inter-RAT ping-pong and neither side looks wrong alone (§16).
- Convert every threshold index into dBm before believing anything. Multiply
ReselectionThresholdby 2 andq-RxLevMinby 2, addP_compensation, and write down the four RSRP values of §23.1. Most "wrong threshold" arguments dissolve at this step, and the two different step sizes cause more errors than any other detail here. - Check
p-Maxagainst the power class of the devices that matter. Anyp-Maxabove 23 dBm silently costs every power-class-3 UE margin on every threshold in the cell (§5.2). - Establish which rule should have fired, from the priorities. Higher priority means rule 1 and the serving cell is irrelevant; equal means rule 2 and offsets matter; lower means rule 3 and both conditions must hold. Applying R-criterion reasoning to a higher-priority carrier is the commonest analytical mistake in this area, and the offsets that look wrong are simply not being used (§10, §24.3).
- If it is rule 2, recompute
RsandRnby hand. Remember the signs:q-Hystis added to the serving cell,q-OffsetCellandq-OffsetFreqare subtracted from the neighbour, and the two offsets add. A negative offset is a bonus (§11). - Check the measurement rules before blaming the decision rules. If the serving cell's
Srxlevwas aboves-NonIntraSearchPat the relevant moment, the UE was entitled not to have measured the neighbour at all, and no threshold on that neighbour was ever evaluated (§7). - Count reselections in the last
t-Evaluationand work out the mobility state, excluding immediate returns between the same pair of cells. Then re-do steps 6 and 7 with the scaled timer and the adjustedq-Hyst— a medium-mobility UE is working to different numbers from the ones in the SIB (§13.2). - Look for a dedicated priority list. If the UE was in RRC_CONNECTED recently, capture the
RRCRelease. At320list overrides every broadcast priority and makes unlisted frequencies invisible;deprioritisationReqproduces suspiciously round durations of avoidance (§9). - Check the exclusion and allowed lists, and the MIB bits.
intraFreqExcludedCellListranges are (start, range) pairs and cover more PCIs than a casual read suggests.cellBarredwithintraFreqReselection = notAllowedremoves a frequency for 300 s (§4.1). - In RRC_INACTIVE, correlate
rna-Updateresumes against reselection. These are the only reselection-caused messages the network ever sees, and a raised rate on two adjacent cells is the strongest evidence of ping-pong you will get from a network-side log (§17). - If the symptom is signalling load rather than radio, plot registration updates per cell. A tracking-area boundary through a busy place produces a concentrated registration-update rate with no accessibility or retainability problem alongside it (§18.1).
27. Glossary
| Term | Expansion | Meaning in this document |
|---|---|---|
| Camping | -- | Being on a cell without a connection: monitoring its paging occasions, holding its parameters and evaluating reselection against them (§3) |
| Cell selection | -- | Finding and choosing a cell from nothing. Owned by companion 36 SSB and Cell Search |
| Cell reselection | -- | Moving the camp from one cell to another while already camped. This document |
| S-criterion | Cell selection criterion S | The pass/fail suitability gate: Srxlev > 0 and Squal > 0 (§5) |
Srxlev / Squal | -- | Margins in dB above the broadcast minimum level and quality. Not measurements |
Q_rxlevmeas / Q_qualmeas | -- | The measured cell RSRP and RSRQ, after beam consolidation (§14) |
P_compensation | -- | max(p-Max − P_PowerClass, 0). The uplink shortfall, deducted from the downlink margin (§5.2) |
Qoffset_temp | -- | A temporary per-cell penalty after repeated access failure, from connEstFailOffset (§5.4) |
| R-criterion | Ranking criterion R | The comparison used among equal-priority frequencies: Rs against Rn (§11) |
q-Hyst | -- | The bonus added to whichever cell is currently serving. The primary anti-ping-pong control (§12) |
q-OffsetCell / q-OffsetFreq | -- | Per-cell and per-carrier biases subtracted from a neighbour's rank. Positive penalises, negative rewards |
| Priority | cellReselectionPriority | 0-7 per frequency, tested before any ranking. Absent means the frequency is not considered at all (§8) |
threshX-HighP / threshX-LowP | -- | Absolute Srxlev bars a target must clear to be reselected up to, or down to |
threshServingLowP | -- | The Srxlev below which the serving cell counts as poor enough to justify stepping down a priority layer |
s-IntraSearch / s-NonIntraSearch | -- | Thresholds above which the UE need not measure intra-frequency, or equal/lower-priority inter-frequency, neighbours (§7) |
| Mobility state | -- | Normal, medium or high, derived by counting recent reselections; scales the timer and the hysteresis (§13) |
t-ReselectionNR | -- | How long a reselection condition must hold continuously before the UE acts. 0-7 s, scaled by mobility state |
| The 1-second guard | -- | No reselection within 1 s of camping. A specification constant, not a parameter (§11.2) |
| Suitable / acceptable / barred | -- | The three categories a cell can be in, deciding full service, limited service or nothing (§4) |
| RNA | RAN Notification Area | The area inside which an RRC_INACTIVE UE may reselect without telling anyone (§17) |
| TA | Tracking Area | The core network's granularity of UE location. Crossing its boundary forces a registration update (§18) |
| NSAG | Network Slice AS Group | The grouping used by Rel-17 slice-based reselection to give slice-specific frequency priorities (§25) |
28. References
- 3GPP TS 38.304 — UE procedures in idle mode and RRC_INACTIVE state. Clause 5.2.3 (cell selection: 5.2.3.1 measurement quantity and beam consolidation, 5.2.3.2 criterion S), clause 5.2.4 (cell reselection: 5.2.4.1 general and the 1-second and 300-second rules, 5.2.4.2 measurement rules, 5.2.4.3 speed-dependent scaling and mobility states, 5.2.4.4 to 5.2.4.5 priority-based reselection criteria, 5.2.4.6 ranking criterion R), clause 5.3 (camped states, 5.3.1 cell status and barring).
- 3GPP TS 38.331 — RRC protocol specification.
SIB2,SIB3,SIB4,SIB5,SIB16;CellReselectionPriority,CellReselectionSubPriority,Q-OffsetRange,ReselectionThreshold,ReselectionThresholdQ,T-Reselection,SpeedStateScaleFactors,MobilityStateParameters,Q-RxLevMin,Q-QualMin,P-Max;RRCReleasewithCellReselectionPriorities,deprioritisationReq,redirectedCarrierInfoandsuspendConfig. - 3GPP TS 38.133 — Requirements for support of radio resource management. Clause 4.2 (measurement requirements in RRC_IDLE and RRC_INACTIVE, including the intra-frequency and inter-frequency measurement periods as a function of DRX cycle, and the higher-priority-layer search obligation).
- 3GPP TS 38.213 — Physical layer procedures for control. Clause 4.1 (cell search and the SSB the measurements are made on).
- 3GPP TS 38.300 — NR overall description. Clause 9.2.1 (idle-mode and inactive-mode mobility in the overall architecture).
- 3GPP TS 38.215 — Physical layer measurements. The definitions of SS-RSRP, SS-RSRQ and SS-SINR that
Q_rxlevmeasandQ_qualmeasrefer to. - 3GPP TS 38.101-1 / -2 — UE radio transmission and reception, for the power classes that
P_compensationcomparesp-Maxagainst. - 3GPP TS 23.501 — System architecture for the 5G System. Tracking areas, registration areas and the location granularity of §18.
- 3GPP TS 36.304 / 36.331 — the E-UTRA equivalents, for the LTE-to-NR direction of §16 (LTE SIB24 and its
carrierFreqListNR).
Companion documents in this set
- 36 SSB and Cell Search — initial cell selection: the three rasters, the SS/PBCH block, PSS and SSS, the beam sweep and the search procedure. Everything up to the moment this document starts.
- 14 RRC States — what RRC_IDLE and RRC_INACTIVE are, how a UE enters and leaves them, and the survey-level view of reselection that this document expands.
- 18 MIB and SIB1 IEs — the field-by-field decode of
cellBarred,intraFreqReselection,cellSelectionInfo,q-RxLevMinand its units, andconnEstFailureControl. - 17 System Information — how SIB2 to SIB5 are scheduled, acquired and updated, and what an SI acquisition costs the UE.
- 19 Paging — what camping is for: paging occasions, paging frames and the difference between CN and RAN paging.
- 20 Measurements and Events — the connected-mode counterpart:
measConfig, the layer-3 filter, and the A1-A6 and B1-B2 events. Read it for the contrast in §2. - 21 Measurement Gaps and SMTC — the SSB measurement timing configuration that also appears in SIB2 and SIB4 as
smtc. - 22 Handover Overview — the connected-mode mobility mechanism this document is contrasted against throughout.
- 01 Registration Process — the mobility registration update a UE must perform when it reselects across a tracking-area boundary (§18).
- 03 Random Access — the procedure every RNA update and every registration update begins with.
- 26 UE Capability — where the Rel-16 to Rel-18 features of §25 are confirmed present or absent for a given device.