5G/NR  -  UE Assistance Information

 

 

 

UE Assistance Information

UE Assistance Information is a special RRC message (mechanism) by which UE can inform various internal status to the network so that Network can assign / control resources better fit for the specific moment of each connected UE.

Overall Procedure

The procedure is short, and what it leaves out is the interesting part. There is no request from the network and no permission granted at the moment of sending. The UE decides when to speak. The one precondition is set earlier, and 38.331 Figure 5.7.4.1-1 shows where.

As shown below (38.331-Figure 5.7.4.1-1: UE Assistance Information), UE may send UEAssistanceInformation after RRCReconfiguration.

38.331 Figure 5.7.4.1-1, a two-headed RRCReconfiguration arrow between UE and Network followed by a one-way UEAssistanceInformation arrow from UE to Network

Two lifelines and two arrows is all there is. The RRCReconfiguration arrow carries a head at each end, and the UEAssistanceInformation arrow points one way only, from UE to Network. That asymmetry is the point. The reconfiguration is an exchange, and the assistance report is a notification that expects no answer.

That RRCReconfiguration is doing something specific, and it is what makes the rest possible. It carries OtherConfig, and OtherConfig holds one SetupRelease entry per preference type. The Release 16 set is drx-PreferenceConfig-r16, maxBW-PreferenceConfig-r16, maxCC-PreferenceConfig-r16, maxMIMO-LayerPreferenceConfig-r16, minSchedulingOffsetPreferenceConfig-r16 and releasePreferenceConfig-r16, and later releases added more.

So the freedom is real but bounded. The UE picks the moment and the value, and the network picks which preferences exist at all. If the network never sets up drx-PreferenceConfig-r16, no amount of battery pressure will produce a DRX preference from that UE.

There is a rate limit as well, and it is the only thing those configurations contain. DRX-PreferenceConfig-r16 holds exactly one field, drx-PreferenceProhibitTimer-r16, an ENUMERATED running s0, s0dot5, s1 and on to s30. MaxBW-PreferenceConfig-r16 has the same shape. So the network grants a preference and sets how often the UE may repeat it, and that is the whole of its control.

  • The UE starts this one : no request and no grant, unlike UE capability, which the network has to ask for.
  • OtherConfig is the gate : a preference the network never set up is a preference the UE cannot report.
  • The configuration is only a prohibit timer : DRX-PreferenceConfig-r16 and MaxBW-PreferenceConfig-r16 each hold one timer field and nothing else.
  • Check the gate before the UE : when a preference never appears in a log, the missing SetupRelease entry is the first thing to look for.

In some aspect, you may consider the purpose of this message is similar to UE capability Information. Then, why we need this kind of new/additional signaling message. I think (in my personal opinion) there are some differences between UEassistanceInformation and UEcapabilityInformation).

  • UE capability Information can be sent only in response to the request from gNB whereas UEassistanceInformation can be sent whenever UE wants to send
  • UE capability Information is usually being sent before RRCReconfiguration to help gNB not to configure anything that is out of capability of the UE whereas UEassistanceInformation is sent after RRCReconfigure to help gNB to configure parameters best fit for the UE for the specific moment/duration.
  • UE capabilityInformation usually informs on its max capabilities whereas UE assistanceInformation informs the capabilities at a specific moments (UE capability Information is more of a set of static information whereas UEassistanceInformation is more of dynamic nature)

Types of UE Assistance Information

The information that can be informed by UEassistanceMessage can be categorized as follows (this table is based on 38.331-5.7.4.1). I think one of the strongest motivation for this message is for Power Saving and Heat Mitigation and I think those would be implemented with higher priority.

Application Purpose

Parameters

Power Saving

DRX parameters

maximum aggregated bandwidth

maximum number of secondary component carriers

maximum number of MIMO layers

minimum scheduling offset for cross-slot scheduling

Overheating Mitigation

overheating assistance information

Measurement

relaxation state for RLM measurements

relaxation state for BFD measurements

change of its fulfilment status for RRM measurement relaxation criterion

Others

delay budget report carrying desired increment/decrement in the connected mode DRX cycle length

overheating assistance information

IDC assistance information

preference on the RRC state

configured grant assistance information for NR sidelink communication

preference in being provisioned with reference time information

preference for FR2 UL gap

preference to transition out of RRC_CONNECTED state for MUSIM operation

preference on the MUSIM gaps

availability of data mapped to radio bearers which are not configured for SDT

preference for the SCG to be deactivated, or;

indicate that the UE has uplink data to transmit for a DRB for which there is no MCG RLC bearer while the

SCG is deactivated

Each row of that table lands somewhere specific in the ASN.1 further down, and the mapping is worth having before you read either one. Power saving is the Release 16 preference set : DRX-Preference-r16, MaxBW-Preference-r16, MaxCC-Preference-r16, MaxMIMO-LayerPreference-r16 and MinSchedulingOffsetPreference-r16.

Overheating mitigation is older than all of those. OverheatingAssistance arrived in UEAssistanceInformation-v1540-IEs, which is the first extension container in the chain. The measurement row is at the other end. All three of its fields arrived together in UEAssistanceInformation-v1700-IEs : rlm-MeasRelaxationState-r17, bfd-MeasRelaxationState-r17 and rrm-MeasRelaxationFulfilment-r17.

The long Others row is spread across the whole chain, and that is what makes it long. The field delayBudgetReport sits in the original UEAssistanceInformation-IEs. Then v1700 adds musim-Assistance-r17, scg-DeactivationPreference-r17 and nonSDT-DataIndication-r17. The Release 18 IDC fields are in v1800. It is much easier to read that row in release order than in table order.

  • The table is really a release history : the order of the rows says little, but the container each field sits in says when it arrived.
  • Overheating came first : OverheatingAssistance is in v1540-IEs, before the power-saving preferences existed.
  • The measurement row is Release 17 : all three relaxation fields arrived together in v1700-IEs.
  • Others is not one feature : it collects everything that did not fit the other three rows, from delay budget reporting to MUSIM.

What is gNB supposed to do ?

I think the end effect of the UE assisstant information was often done by some UE implementation even when we didn't have the feature like UE assisstant information. The tricks that some UE (modem) employed for heat mitigation (i.e, avoiding overheat). Simply put, the trick was to cheat gNB in such a way that gNB reduces physical resources (reduce throughput) for a UE. Some example of these trick was as follows.

  • UE report low RI even when the channel condition is good enough for higher value. It is expected for eNB/gNB to reduce the number of antenna for transmission and reduce heat generation / power consumption on UE
  • (If above does not work enough), UE report low CQI even when the channel condition is good enough for higher value. It is expected for eNB/gNB to reduce MCS value and reduce heat generation / power consumption on UE
  • When UE is in Carrier Aggregation, UE send scg-Failure and it is expected for gNB to remove the SCC.

I think major purpose of UE-Assisstance Information in NR is to make this kind of 'cheating process' an offical/formal processes. 3GPP specifies what kind of information a UE send / report by standard, but it doesn't seem (if I didn't miss anything) that there is clear statement about what gNB is supposed to do when it gets some message from UE. However I think the expectation from UE side would be similar to what they used to get when they were trying to cheat the gNB.  Some of examples of expectation would be as follows :

  • MaxMIMO-LayerPreference-r16 : Usually UE would report the MIMO config than what it has reported in UE capability information and it is expected for gNB to send RRCReconfig to downgrade the MIMO as UE report.
  • reducedMaxCCs : Usually UE would report the less number of CCs than the number of CC in the current setup and it is expected for gNB to reduce the number of CCs.
  • reducedMaxCCs : Usually UE would report the less number of CCs than the number of CC in the current setup and it is expected for gNB to reduce the number of CCs.
  • MinSchedulingOffsetPreference-r16 : Usually UE would report the larger values for k0 and k2 to have enough time to prepare PDSCH / PUSCH in response to DCI. In this case gNB may do two things. It just can put the requested value (any value greater than the requested value) in DCI without doing RRCReconfiguration. This can relax the required PDSCH/PUSCH preparation time, but it would not impact much on power saving on UE side.  If gNB explicitely change k0, k2 value in RRCReconfiguration, then UE can switch off some of the PHY process between DCI and PDSCH/PUSCH if k0 and k2 are explicitely specified long enough.

Examples

The sections above give the message, the rules and the structures. What they do not give is the shape of one exchange from beginning to end, so a short sequence for each assistance type follows. Every one of them covers a type that has its own SetupRelease entry in OtherConfig, because that gate is what makes the exchange possible at all.

They all share the same four beats, and it is worth seeing that before reading any of them. The network opens the gate, something changes inside the UE, the UE reports, and the network may or may not act. Only the third step is specified tightly. The fourth is The fourth is for the network to decide.

DRX Preference

The classic power-saving case. The UE would rather wake less often, and DRX saves more power than anything else it can ask for. Note that all four fields are OPTIONAL, so the UE can ask about the long cycle alone and say nothing about the rest.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up drx-PreferenceConfig-r16. Its only field is drx-PreferenceProhibitTimer-r16, which is how often the UE may repeat itself.

2

UE

-

Battery is low, or traffic has stopped, and the UE would rather sleep longer.

3

UE -> gNB

UEAssistanceInformation

drx-Preference-r16 carries preferredDRX-LongCycle-r16, and may add preferredDRX-InactivityTimer-r16, preferredDRX-ShortCycle-r16 and preferredDRX-ShortCycleTimer-r16.

4

gNB -> UE

RRCReconfiguration

If the gNB agrees, it rewrites DRX-Config. Nothing obliges it to.

Maximum Aggregated Bandwidth Preference

Bandwidth costs power in the receiver, so a UE under pressure may ask for less of it. The request is per frequency range, which matters because FR2 is usually the expensive one to keep open.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up maxBW-PreferenceConfig-r16, again holding only maxBW-PreferenceProhibitTimer-r16.

2

UE

-

The UE decides its current aggregated bandwidth is more than it wants to run.

3

UE -> gNB

UEAssistanceInformation

maxBW-Preference-r16 carries reducedMaxBW-FR1-r16 or reducedMaxBW-FR2-r16, each a ReducedMaxBW-FRx-r16.

4

gNB -> UE

RRCReconfiguration

The gNB may narrow the bandwidth part or drop a carrier.

Maximum Number of Component Carriers Preference

The same idea as bandwidth, applied to whole carriers rather than to one. Rather than narrowing a carrier the UE asks to run fewer of them, which is the cheaper thing to do when carrier aggregation is configured but not needed.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up maxCC-PreferenceConfig-r16.

2

UE

-

The UE is aggregating more carriers than its current traffic justifies.

3

UE -> gNB

UEAssistanceInformation

maxCC-Preference-r16 carries reducedMaxCCs-r16, which names a downlink and an uplink count.

4

gNB -> UE

RRCReconfiguration

The gNB may release secondary cells to match.

Maximum MIMO Layer Preference

Layers cost receive chains, and receive chains cost power. What is gNB supposed to do ? describes UEs achieving this for years by reporting a low rank. It is now a field of its own.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up maxMIMO-LayerPreferenceConfig-r16.

2

UE

-

The UE would rather run fewer layers than the channel could support.

3

UE -> gNB

UEAssistanceInformation

maxMIMO-LayerPreference-r16 carries reducedMaxMIMO-LayersFR1-r16 or the FR2 pair, each an INTEGER (1..8) downlink and INTEGER (1..4) uplink.

4

gNB -> UE

RRCReconfiguration

The gNB may reduce the configured rank, which also reduces its own transmit chains.

Minimum Scheduling Offset Preference

This one gives the UE time rather than resources. A larger k0 or k2 means more slots between the grant and the data, so the UE can leave parts of the receiver idle instead of holding them ready.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up minSchedulingOffsetPreferenceConfig-r16.

2

UE

-

The UE wants longer between the DCI and the PDSCH or PUSCH it schedules.

3

UE -> gNB

UEAssistanceInformation

minSchedulingOffsetPreference-r16 carries preferredK0-r16 and preferredK2-r16, given per subcarrier spacing : sl1, sl2, sl4, sl6 at 15 and 30 kHz, and sl2, sl4, sl8, sl12 at 60 and 120 kHz.

4

gNB -> UE

RRCReconfiguration

The gNB may set minimumSchedulingOffsetK0 and K2 accordingly.

Release Preference

Every other preference asks to stay connected on cheaper terms. This one asks to stop being connected at all, and it is the only preference whose value is a state rather than a quantity.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up releasePreferenceConfig-r16.

2

UE

-

The UE has nothing to send and no reason to hold the connection.

3

UE -> gNB

UEAssistanceInformation

releasePreference-r16 carries preferredRRC-State-r16, an ENUMERATED { idle, inactive, connected, outOfConnected }.

4

gNB -> UE

RRCReconfiguration

The gNB may release the UE to RRC_IDLE or RRC_INACTIVE, or ignore the request and keep it connected.

Overheating Assistance

The oldest of these, and the only one where the UE is reporting a physical problem rather than a preference. It arrived in UEAssistanceInformation-v1540-IEs, before the Release 16 preference set existed, which is why its field names carry no release suffix.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up overheatingAssistanceConfig.

2

UE

-

The UE has reached a temperature it cannot sustain.

3

UE -> gNB

UEAssistanceInformation

overheatingAssistance carries any of reducedMaxCCs, reducedMaxBW-FR1, reducedMaxBW-FR2, reducedMaxMIMO-LayersFR1 and reducedMaxMIMO-LayersFR2.

4

gNB -> UE

RRCReconfiguration

The gNB reduces whichever of those it configured.

5

UE -> gNB

UEAssistanceInformation

When the UE cools down it sends the message again with the fields absent, which is how it withdraws the request.

IDC Assistance

Here the interference is inside the handset. Another radio in the same device is colliding with NR, and it might be Bluetooth, WiFi or now UWB. Only the UE can see that it is happening.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up idc-AssistanceConfig-r16.

2

UE

-

The UE detects that one of its own other radios is interfering with an NR carrier.

3

UE -> gNB

UEAssistanceInformation

idc-Assistance-r16 carries affectedCarrierFreqList-r16 and affectedCarrierFreqCombList-r16, naming the NR frequencies that suffer.

4

UE

-

VictimSystemType-r16 inside those lists names the interferer. Release 18 added uwb-r18 to that list.

5

gNB -> UE

RRCReconfiguration

The gNB may move the UE off the affected frequency.

Delay Budget Report

This one predates the Release 16 set, and it sits in the original message body rather than in an extension container. It asks for the connected mode DRX cycle to move, and it can ask in either direction.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig carries delayBudgetReportingProhibitTimer directly, with an ENUMERATED { s0, s0dot4, s0dot8, s1dot6, s3, s6, s12, s30 }.

2

UE

-

The UE wants a longer or a shorter connected mode DRX cycle than it has.

3

UE -> gNB

UEAssistanceInformation

delayBudgetReport sits in UEAssistanceInformation-IEs itself, not in any of the v15xx or later containers.

4

gNB -> UE

RRCReconfiguration

The gNB may adjust the DRX cycle length.

Measurement Relaxation Reporting

These three are reports rather than requests. The UE is not asking for anything. It is telling the network which relaxations it has already applied, so that the network knows how current its measurements are.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up rlm-RelaxationReportingConfig-r17, bfd-RelaxationReportingConfig-r17 or rrm-MeasRelaxationReportingConfig-r17.

2

UE

-

The UE meets the relaxation criterion, for example it is stationary and in good coverage.

3

UE -> gNB

UEAssistanceInformation

rlm-MeasRelaxationState-r17 is a BOOLEAN, bfd-MeasRelaxationState-r17 is a BIT STRING with one bit per serving cell, and rrm-MeasRelaxationFulfilment-r17 is a BOOLEAN. All three sit in UEAssistanceInformation-v1700-IEs.

4

UE

-

The network now knows the UE is measuring less often, and can read its reports with that in mind.

MUSIM Assistance

Multi-SIM is the case where the UE has a commitment to another network. It needs either a gap to serve the other SIM, or permission to leave connected mode entirely, and both are requested through this message.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up musim-GapAssistanceConfig-r17 for gaps, or musim-LeaveAssistanceConfig-r17 for leaving.

2

UE

-

The other SIM needs the radio, either briefly or for longer.

3

UE -> gNB

UEAssistanceInformation

musim-Assistance-r17 in UEAssistanceInformation-v1700-IEs carries the gap request or the leave request.

4

gNB -> UE

RRCReconfiguration

The gNB may configure the gaps, or may release the UE.

SCG Deactivation Preference

Dual connectivity is expensive to keep alive when the secondary leg is idle. This preference is unusual in carrying an explicit way to say no preference, rather than relying on the field being absent.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets up scg-DeactivationPreferenceConfig-r17.

2

UE

-

The UE would rather the secondary cell group were deactivated.

3

UE -> gNB

UEAssistanceInformation

scg-DeactivationPreference-r17 carries an ENUMERATED { scg-DeactivationPreferred, noPreference }, in UEAssistanceInformation-v1700-IEs.

4

gNB -> UE

RRCReconfiguration

The master node may deactivate the SCG, which is cheaper than releasing and re-adding it.

FR2 UL Gap Preference

The last of the Release 17 set, and the shortest. Its gate is not even a structure : ul-GapFR2-PreferenceConfig-r17 is an ENUMERATED { true }, so the network either allows the report or it does not.

Step

Direction

Message

What happens

1

gNB -> UE

RRCReconfiguration

OtherConfig sets ul-GapFR2-PreferenceConfig-r17 to true.

2

UE

-

The UE wants an uplink gap on FR2, typically to calibrate or to retune.

3

UE -> gNB

UEAssistanceInformation

ul-GapFR2-Preference-r17 sits in UEAssistanceInformation-v1700-IEs.

4

gNB -> UE

RRCReconfiguration

The gNB may configure the FR2 uplink gap.

Take the thirteen together and two things are worth noticing. The first is how little the message itself varies : the same container, a different optional field, and the same prohibit timer discipline behind all of them. The second is that step 4 is never guaranteed. Every one of these is a preference, a report or an indication, and not one of them is a command.

  • Four beats, thirteen times : the gate, the trigger, the report, and a network response that may not come.
  • The gate is always OtherConfig : every type here has its own SetupRelease entry, and without it the UE stays quiet.
  • Absence is meaningful : sending the message again with a field omitted is how a UE withdraws a request it made earlier.
  • Two of them are not requests : the measurement relaxation fields report what the UE already did, and overheating reports a physical state.

UE Capability

Before any of this works, the UE has to declare that it can do it. The capability fields below are the second gate, sitting under the OtherConfig one. They are worth checking first when a preference never appears in a log. Without the capability declared, the UE will not send the report, however the network configures it.

Following is based on 38.331 v19.3.0 (Release 19)

UE-NR-Capability-v1610 ::=               SEQUENCE {
    inDeviceCoexInd-r16                     ENUMERATED {supported}                                        OPTIONAL,
    dl-DedicatedMessageSegmentation-r16     ENUMERATED {supported}                                        OPTIONAL,
    nrdc-Parameters-v1610                   NRDC-Parameters-v1610                                         OPTIONAL,
    powSav-Parameters-r16                   PowSav-Parameters-r16                                         OPTIONAL,
    fr1-Add-UE-NR-Capabilities-v1610        UE-NR-CapabilityAddFRX-Mode-v1610                             OPTIONAL,
    fr2-Add-UE-NR-Capabilities-v1610        UE-NR-CapabilityAddFRX-Mode-v1610                             OPTIONAL,
    bh-RLF-Indication-r16                   ENUMERATED {supported}                                        OPTIONAL,
    directSN-AdditionFirstRRC-IAB-r16       ENUMERATED {supported}                                        OPTIONAL,
    bap-Parameters-r16                      BAP-Parameters-r16                                            OPTIONAL,
    referenceTimeProvision-r16              ENUMERATED {supported}                                        OPTIONAL,
    sidelinkParameters-r16                  SidelinkParameters-r16                                        OPTIONAL,
    highSpeedParameters-r16                 HighSpeedParameters-r16                                       OPTIONAL,
    mac-Parameters-v1610                    MAC-Parameters-v1610                                          OPTIONAL,
    mcgRLF-RecoveryViaSCG-r16               ENUMERATED {supported}                                        OPTIONAL,
    resumeWithStoredMCG-SCells-r16          ENUMERATED {supported}                                        OPTIONAL,
    resumeWithStoredSCG-r16                 ENUMERATED {supported}                                        OPTIONAL,
    resumeWithSCG-Config-r16                ENUMERATED {supported}                                        OPTIONAL,
    ue-BasedPerfMeas-Parameters-r16         UE-BasedPerfMeas-Parameters-r16                               OPTIONAL,
    son-Parameters-r16                      SON-Parameters-r16                                            OPTIONAL,
    onDemandSIB-Connected-r16               ENUMERATED {supported}                                        OPTIONAL,
    nonCriticalExtension                    UE-NR-Capability-v1640                                        OPTIONAL
}

PowSav-Parameters-r16 ::=         SEQUENCE {
    powSav-ParametersCommon-r16               PowSav-ParametersCommon-r16                                        OPTIONAL,
    powSav-ParametersFRX-Diff-r16             PowSav-ParametersFRX-Diff-r16                                      OPTIONAL,
    ...
}

PowSav-Parameters-v1700 ::=     SEQUENCE {
    powSav-ParametersFR2-2-r17      PowSav-ParametersFR2-2-r17                                                   OPTIONAL,
    ...
}

PowSav-ParametersCommon-r16 ::=    SEQUENCE {
    drx-Preference-r16                        ENUMERATED {supported}                                             OPTIONAL,
    maxCC-Preference-r16                      ENUMERATED {supported}                                             OPTIONAL,
    releasePreference-r16                     ENUMERATED {supported}                                             OPTIONAL,
    -- R1 19-4a: UE assistance information
    minSchedulingOffsetPreference-r16         ENUMERATED {supported}                                             OPTIONAL,
    ...
}

PowSav-ParametersFRX-Diff-r16 ::=    SEQUENCE {
    maxBW-Preference-r16                      ENUMERATED {supported}                                             OPTIONAL,
    maxMIMO-LayerPreference-r16               ENUMERATED {supported}                                             OPTIONAL,
    ...
}

PowSav-ParametersFR2-2-r17 ::=      SEQUENCE {
    maxBW-Preference-r17                      ENUMERATED {supported}                                             OPTIONAL,
    maxMIMO-LayerPreference-r17               ENUMERATED {supported}                                             OPTIONAL,
    ...
}

Read those fields as a set of switches rather than as numbers. PowSav-Parameters-r16 splits into a common part and a per-frequency-range part, so a UE can support a preference on FR1 and not on FR2. PowSav-ParametersFR2-2-r17 then repeats the same split again for FR2-2, which is why the same capability appears three times under slightly different names.

One field sits outside that structure. The flag inDeviceCoexInd-r16 is declared directly in UE-NR-Capability-v1610 rather than under the power-saving branch, because in-device coexistence is not a power-saving feature. It is the switch that gates IDC-Assistance-r16.

  • Capability is the second gate : OtherConfig decides what the network will accept, and this decides what the UE can offer.
  • The split is per frequency range : support on FR1 says nothing about FR2, and FR2-2 is declared separately again.
  • IDC is declared on its own : inDeviceCoexInd-r16 sits at the top level, apart from the power-saving parameters.

RRC Parameters

What follows is the reference material for the whole page. It covers the message itself, the structures it carries, and the two configurations the network uses once it decides to act. They are grouped in that order, with a short note before each group so you can find the one you need without reading the rest.

Start with the message itself, because its shape explains everything after it. UEAssistanceInformation is a chain of extension containers rather than one flat structure. Each release attached its new preferences to the end through nonCriticalExtension, so reading it means following that chain from v1540 through to v1900.

Following is based on 38.331 v19.3.0 (Release 19)

UEAssistanceInformation ::=         SEQUENCE {
    criticalExtensions                  CHOICE {
        ueAssistanceInformation             UEAssistanceInformation-IEs,
        criticalExtensionsFuture            SEQUENCE {}
    }
}

UEAssistanceInformation-IEs ::=     SEQUENCE {
    delayBudgetReport                   DelayBudgetReport                   OPTIONAL,
    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
    nonCriticalExtension                UEAssistanceInformation-v1540-IEs   OPTIONAL
}

UEAssistanceInformation-v1540-IEs ::= SEQUENCE {
    overheatingAssistance               OverheatingAssistance               OPTIONAL,
    nonCriticalExtension                UEAssistanceInformation-v1610-IEs   OPTIONAL
}

OverheatingAssistance ::=           SEQUENCE {
    reducedMaxCCs                       ReducedMaxCCs-r16                   OPTIONAL,
    reducedMaxBW-FR1                    ReducedMaxBW-FRx-r16                OPTIONAL,
    reducedMaxBW-FR2                    ReducedMaxBW-FRx-r16                OPTIONAL,
    reducedMaxMIMO-LayersFR1            SEQUENCE {
        reducedMIMO-LayersFR1-DL            MIMO-LayersDL,
        reducedMIMO-LayersFR1-UL            MIMO-LayersUL
    } OPTIONAL,
    reducedMaxMIMO-LayersFR2            SEQUENCE {
        reducedMIMO-LayersFR2-DL            MIMO-LayersDL,
        reducedMIMO-LayersFR2-UL            MIMO-LayersUL
    } OPTIONAL
}

ReducedAggregatedBandwidth ::= ENUMERATED {mhz0, mhz10, mhz20, mhz30, mhz40, mhz50, mhz60, mhz80, mhz100, mhz200, mhz300, mhz400}

UEAssistanceInformation-v1610-IEs ::= SEQUENCE {
    idc-Assistance-r16                  IDC-Assistance-r16                  OPTIONAL,
    drx-Preference-r16                  DRX-Preference-r16                  OPTIONAL,
    maxBW-Preference-r16                MaxBW-Preference-r16                OPTIONAL,
    maxCC-Preference-r16                MaxCC-Preference-r16                OPTIONAL,
    maxMIMO-LayerPreference-r16         MaxMIMO-LayerPreference-r16         OPTIONAL,
    minSchedulingOffsetPreference-r16   MinSchedulingOffsetPreference-r16   OPTIONAL,
    releasePreference-r16               ReleasePreference-r16               OPTIONAL,
    sl-UE-AssistanceInformationNR-r16   SL-UE-AssistanceInformationNR-r16   OPTIONAL,
    referenceTimeInfoPreference-r16     BOOLEAN                             OPTIONAL,
    nonCriticalExtension                UEAssistanceInformation-v1700-IEs   OPTIONAL
}

UEAssistanceInformation-v1700-IEs ::= SEQUENCE {
    ul-GapFR2-Preference-r17              UL-GapFR2-Preference-r17              OPTIONAL,
    musim-Assistance-r17                  MUSIM-Assistance-r17                  OPTIONAL,
    overheatingAssistance-r17             OverheatingAssistance-r17             OPTIONAL,
    maxBW-PreferenceFR2-2-r17             MaxBW-PreferenceFR2-2-r17             OPTIONAL,
    maxMIMO-LayerPreferenceFR2-2-r17      MaxMIMO-LayerPreferenceFR2-2-r17      OPTIONAL,
    minSchedulingOffsetPreferenceExt-r17  MinSchedulingOffsetPreferenceExt-r17  OPTIONAL,
    rlm-MeasRelaxationState-r17           BOOLEAN                               OPTIONAL,
    bfd-MeasRelaxationState-r17           BIT STRING (SIZE (1..maxNrofServingCells)) OPTIONAL,
    nonSDT-DataIndication-r17             SEQUENCE {
        resumeCause-r17                       ResumeCause                       OPTIONAL
    }                                                                           OPTIONAL,
    scg-DeactivationPreference-r17        ENUMERATED { scg-DeactivationPreferred, noPreference }    OPTIONAL,
    uplinkData-r17                        ENUMERATED { true }                   OPTIONAL,
    rrm-MeasRelaxationFulfilment-r17      BOOLEAN                               OPTIONAL,
    propagationDelayDifference-r17        PropagationDelayDifference-r17        OPTIONAL,
    nonCriticalExtension                  UEAssistanceInformation-v1800-IEs     OPTIONAL
}

UEAssistanceInformation-v1800-IEs ::= SEQUENCE {
    idc-FDM-Assistance-r18                IDC-FDM-Assistance-r18                          OPTIONAL,
    idc-TDM-Assistance-r18                IDC-TDM-Assistance-r18                          OPTIONAL,
    multiRx-PreferenceFR2-r18             ENUMERATED {single, multiple }                  OPTIONAL,
    musim-Assistance-v1800                MUSIM-Assistance-v1800                          OPTIONAL,
    flightPathInfoAvailable-r18           ENUMERATED {true}                               OPTIONAL,
    ul-TrafficInfo-r18                    UL-TrafficInfo-r18                              OPTIONAL,
    n3c-RelayUE-InfoList-r18              SEQUENCE (SIZE (0..8)) OF N3C-RelayUE-Info-r18  OPTIONAL,
    sl-PRS-UE-AssistanceInformationNR-r18 SL-PRS-UE-AssistanceInformationNR-r18           OPTIONAL,
    nonCriticalExtension                  UEAssistanceInformation-v1900-IEs               OPTIONAL
}

UEAssistanceInformation-v1900-IEs ::= SEQUENCE {
    gapOccasionCancelRatio-r19            GapOccasionCancelRatio-r19                      OPTIONAL,
    lpwus-OffsetPreference-r19            LPWUS-OffsetPreference-r19                      OPTIONAL,
    applicabilityReportList-r19           ApplicabilityReportList-r19                     OPTIONAL,
    dataCollectionPreference-r19          DataCollectionPreference-r19                    OPTIONAL,
    loggedDataCollectionAssistance-r19    LoggedDataCollectionAssistance-r19              OPTIONAL,
    assisted-SSB-MTC-MG-Report-r19        BIT STRING (SIZE (7))                           OPTIONAL,
    fbs-Preference-r19                    ENUMERATED {preferred, notPreferred }           OPTIONAL,
    nonCriticalExtension                  SEQUENCE {}                                     OPTIONAL
}

In-device coexistence is the case where the UE's own other radios are the problem. The UE names the NR frequencies that suffer and names what is interfering with them. VictimSystemType-r16 is that list of culprits, and Release 18 added uwb-r18 to it.

Three of those containers were absent from this page until now, and they hold most of what the Types of UE Assistance Information table lists. UEAssistanceInformation-v1700-IEs carries musim-Assistance-r17, ul-GapFR2-Preference-r17, scg-DeactivationPreference-r17, nonSDT-DataIndication-r17 and the three measurement relaxation fields. UEAssistanceInformation-v1800-IEs adds the Release 18 IDC fields and ul-TrafficInfo-r18. UEAssistanceInformation-v1900-IEs adds the Release 19 set, including lpwus-OffsetPreference-r19 and dataCollectionPreference-r19.

That gap is worth noticing for its own sake. The copy on this page stopped at v1610, so the Types of UE Assistance Information table described features the listing could not show. Decode a live UEAssistanceInformation from a Release 17 UE against the old copy, and the definitions stop exactly where the newer preferences begin.

Following is based on 38.331 v19.3.0 (Release 19)

IDC-Assistance-r16 ::=                  SEQUENCE {
    affectedCarrierFreqList-r16             AffectedCarrierFreqList-r16               OPTIONAL,
    affectedCarrierFreqCombList-r16         AffectedCarrierFreqCombList-r16           OPTIONAL,
    ...
}

AffectedCarrierFreqList-r16 ::= SEQUENCE (SIZE (1.. maxFreqIDC-r16)) OF AffectedCarrierFreq-r16

AffectedCarrierFreq-r16 ::=     SEQUENCE {
    carrierFreq-r16                 ARFCN-ValueNR,
    interferenceDirection-r16       ENUMERATED {nr, other, both, spare}
}

AffectedCarrierFreqCombList-r16 ::= SEQUENCE (SIZE (1..maxCombIDC-r16)) OF AffectedCarrierFreqComb-r16

AffectedCarrierFreqComb-r16 ::=     SEQUENCE {
    affectedCarrierFreqComb-r16         SEQUENCE (SIZE (2..maxNrofServingCells)) OF  ARFCN-ValueNR    OPTIONAL,
    victimSystemType-r16                VictimSystemType-r16
}

VictimSystemType-r16 ::=    SEQUENCE {
    gps-r16                     ENUMERATED {true}        OPTIONAL,
    glonass-r16                 ENUMERATED {true}        OPTIONAL,
    bds-r16                     ENUMERATED {true}        OPTIONAL,
    galileo-r16                 ENUMERATED {true}        OPTIONAL,
    navIC-r16                   ENUMERATED {true}        OPTIONAL,
    wlan-r16                    ENUMERATED {true}        OPTIONAL,
    bluetooth-r16               ENUMERATED {true}        OPTIONAL,
    ...,
    [[
    uwb-r18                     ENUMERATED {true}        OPTIONAL
    ]]
}

These are the preferences themselves, and they share one shape. Each carries the value the UE would rather have, and each field is OPTIONAL, so omitting one is itself a statement. Note that none of them is a demand. The names say preference throughout.

Following is based on 38.331 v19.3.0 (Release 19)

DRX-Preference-r16 ::=              SEQUENCE {
    preferredDRX-InactivityTimer-r16    ENUMERATED {
                                            ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80,
                                            ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8,
                                            spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL,
    preferredDRX-LongCycle-r16          ENUMERATED {
                                            ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512,
                                            ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, spare12, spare11, spare10,
                                            spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL,
    preferredDRX-ShortCycle-r16         ENUMERATED {
                                            ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32,
                                            ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9,
                                            spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL,
    preferredDRX-ShortCycleTimer-r16    INTEGER (1..16)    OPTIONAL
}

MaxBW-Preference-r16 ::=            SEQUENCE {
    reducedMaxBW-FR1-r16                ReducedMaxBW-FRx-r16                     OPTIONAL,
    reducedMaxBW-FR2-r16                ReducedMaxBW-FRx-r16                     OPTIONAL
}

MaxCC-Preference-r16 ::=            SEQUENCE {
    reducedMaxCCs-r16                   ReducedMaxCCs-r16                        OPTIONAL
}

MaxMIMO-LayerPreference-r16 ::=     SEQUENCE {
    reducedMaxMIMO-LayersFR1-r16        SEQUENCE {
        reducedMIMO-LayersFR1-DL-r16        INTEGER (1..8),
        reducedMIMO-LayersFR1-UL-r16        INTEGER (1..4)
    } OPTIONAL,
    reducedMaxMIMO-LayersFR2-r16        SEQUENCE {
        reducedMIMO-LayersFR2-DL-r16        INTEGER (1..8),
        reducedMIMO-LayersFR2-UL-r16        INTEGER (1..4)
    } OPTIONAL
}

MinSchedulingOffsetPreference-r16 ::= SEQUENCE {
    preferredK0-r16                       SEQUENCE {
        preferredK0-SCS-15kHz-r16             ENUMERATED {sl1, sl2, sl4, sl6}              OPTIONAL,
        preferredK0-SCS-30kHz-r16             ENUMERATED {sl1, sl2, sl4, sl6}              OPTIONAL,
        preferredK0-SCS-60kHz-r16             ENUMERATED {sl2, sl4, sl8, sl12}             OPTIONAL,
        preferredK0-SCS-120kHz-r16            ENUMERATED {sl2, sl4, sl8, sl12}             OPTIONAL
    }                                                                                  OPTIONAL,
    preferredK2-r16                       SEQUENCE {
        preferredK2-SCS-15kHz-r16             ENUMERATED {sl1, sl2, sl4, sl6}             OPTIONAL,
        preferredK2-SCS-30kHz-r16             ENUMERATED {sl1, sl2, sl4, sl6}             OPTIONAL,
        preferredK2-SCS-60kHz-r16             ENUMERATED {sl2, sl4, sl8, sl12}            OPTIONAL,
        preferredK2-SCS-120kHz-r16            ENUMERATED {sl2, sl4, sl8, sl12}            OPTIONAL
    }                                                                                 OPTIONAL
}

ReleasePreference-r16 ::=           SEQUENCE {
    preferredRRC-State-r16              ENUMERATED {idle, inactive, connected, outOfConnected}
}

ReducedMaxBW-FRx-r16 ::=            SEQUENCE {
    reducedBW-DL-r16                    ReducedAggregatedBandwidth,
    reducedBW-UL-r16                    ReducedAggregatedBandwidth
}

ReducedMaxCCs-r16 ::=               SEQUENCE {
    reducedCCsDL-r16                    INTEGER (0..31),
    reducedCCsUL-r16                    INTEGER (0..31)
}

The two IEs below are the network side of the same conversation, and they are not part of UEAssistanceInformation at all. They are what the gNB configures once it decides to act on a preference. PhysicalCellGroupConfig and ServingCellConfig are shown only down to the field that matters here, because both run past a hundred lines in full.

Following is based on 38.331 v19.3.0 (Release 19)

PhysicalCellGroupConfig ::=         SEQUENCE {
    -- ... the fields before it are not UE assistance related
    dcp-Config-r16                      SetupRelease { DCP-Config-r16 }                                 OPTIONAL,   -- Need M
    -- ... the remaining fields and extensions are not UE assistance related
}

DCP-Config-r16 ::=                  SEQUENCE {
    ps-RNTI-r16                         RNTI-Value,
    ps-Offset-r16                       INTEGER (1..120),
    sizeDCI-2-6-r16                     INTEGER (1..maxDCI-2-6-Size-r16),
    ps-PositionDCI-2-6-r16              INTEGER (0..maxDCI-2-6-Size-1-r16),
    ps-WakeUp-r16                       ENUMERATED {true}                                               OPTIONAL,   -- Need S
    ps-TransmitPeriodicL1-RSRP-r16      ENUMERATED {true}                                               OPTIONAL,   -- Need S
    ps-TransmitOtherPeriodicCSI-r16     ENUMERATED {true}                                               OPTIONAL    -- Need S
}

ServingCellConfig ::=               SEQUENCE {
    -- ... the fields before it are not UE assistance related
    dormantBWP-Config-r16               SetupRelease { DormantBWP-Config-r16 }                                  OPTIONAL,   -- Need M
    -- ... the remaining fields and extensions are not UE assistance related
}

DormantBWP-Config-r16::=               SEQUENCE {
    dormantBWP-Id-r16                      BWP-Id                                                           OPTIONAL,   -- Need M
    withinActiveTimeConfig-r16             SetupRelease { WithinActiveTimeConfig-r16 }                      OPTIONAL,   -- Need M
    outsideActiveTimeConfig-r16            SetupRelease { OutsideActiveTimeConfig-r16 }                     OPTIONAL    -- Need M
}

WithinActiveTimeConfig-r16 ::=         SEQUENCE {
   firstWithinActiveTimeBWP-Id-r16         BWP-Id                                                           OPTIONAL,   -- Need M
   dormancyGroupWithinActiveTime-r16       DormancyGroupID-r16                                              OPTIONAL    -- Need R
}

OutsideActiveTimeConfig-r16 ::=        SEQUENCE {
   firstOutsideActiveTimeBWP-Id-r16        BWP-Id                                                           OPTIONAL,   -- Need M
   dormancyGroupOutsideActiveTime-r16      DormancyGroupID-r16                                              OPTIONAL    -- Need R
}

DormancyGroupID-r16 ::=         INTEGER (0..4)

Under MR-DC the assistance has further to travel. The UE reports to the master node, and the master node has to forward whatever the secondary node needs. ULInformationTransferMRDC carries the message between them, CG-ConfigInfo is the inter-node message the master sends, and MRDC-AssistanceInfo is the structure holding the forwarded assistance.

Following is based on 38.331 v19.3.0 (Release 19)

ULInformationTransferMRDC ::=               SEQUENCE {
    criticalExtensions                          CHOICE {
        c1                                          CHOICE {
            ulInformationTransferMRDC                   ULInformationTransferMRDC-IEs,
            spare3 NULL, spare2 NULL, spare1 NULL
        },
        criticalExtensionsFuture            SEQUENCE {}
    }
}

ULInformationTransferMRDC-IEs::=           SEQUENCE {
    ul-DCCH-MessageNR                           OCTET STRING                    OPTIONAL,
    ul-DCCH-MessageEUTRA                        OCTET STRING                    OPTIONAL,
    lateNonCriticalExtension                    OCTET STRING                    OPTIONAL,
    nonCriticalExtension                        SEQUENCE {}                     OPTIONAL
}

CG-ConfigInfo ::=               SEQUENCE {
    criticalExtensions              CHOICE {
        c1                              CHOICE{
            cg-ConfigInfo               CG-ConfigInfo-IEs,
            spare3 NULL, spare2 NULL, spare1 NULL
        },
        criticalExtensionsFuture        SEQUENCE {}
    }
}

CG-ConfigInfo-IEs ::=           SEQUENCE {
    ue-CapabilityInfo               OCTET STRING (CONTAINING UE-CapabilityRAT-ContainerList)          OPTIONAL,-- Cond SN-AddMod
    candidateCellInfoListMN         MeasResultList2NR                                                 OPTIONAL,
    candidateCellInfoListSN         OCTET STRING (CONTAINING MeasResultList2NR)                       OPTIONAL,
    measResultCellListSFTD-NR       MeasResultCellListSFTD-NR                                         OPTIONAL,
    scgFailureInfo                  SEQUENCE {
        failureType                     ENUMERATED { t310-Expiry, randomAccessProblem,
                                                     rlc-MaxNumRetx, synchReconfigFailure-SCG,
                                                     scg-reconfigFailure,
                                                     srb3-IntegrityFailure},
        measResultSCG                   OCTET STRING (CONTAINING MeasResultSCG-Failure)
    }                                                                                                 OPTIONAL,
    configRestrictInfo              ConfigRestrictInfoSCG                                             OPTIONAL,
    drx-InfoMCG                     DRX-Info                                                          OPTIONAL,
    measConfigMN                    MeasConfigMN                                                      OPTIONAL,
    sourceConfigSCG                 OCTET STRING (CONTAINING RRCReconfiguration)                      OPTIONAL,
    scg-RB-Config                   OCTET STRING (CONTAINING RadioBearerConfig)                       OPTIONAL,
    mcg-RB-Config                   OCTET STRING (CONTAINING RadioBearerConfig)                       OPTIONAL,
    mrdc-AssistanceInfo             MRDC-AssistanceInfo                                               OPTIONAL,
    nonCriticalExtension            CG-ConfigInfo-v1540-IEs                                           OPTIONAL
}

MRDC-AssistanceInfo ::= SEQUENCE {
    affectedCarrierFreqCombInfoListMRDC     SEQUENCE (SIZE (1..maxNrofCombIDC)) OF AffectedCarrierFreqCombInfoMRDC,
    ...,
    [[
    overheatingAssistanceSCG-r16            OCTET STRING (CONTAINING OverheatingAssistance)       OPTIONAL
    ]],
    [[
    overheatingAssistanceSCG-FR2-2-r17      OCTET STRING (CONTAINING OverheatingAssistance-r17)   OPTIONAL
    ]],
    [[
    affectedCarrierFreqRangeCombList-r18    AffectedCarrierFreqRangeCombList-r18                  OPTIONAL,
    affectedCarrierFreqCombList-r18         AffectedCarrierFreqCombList-r16                       OPTIONAL,
    idc-TDM-Assistance-r18                  IDC-TDM-Assistance-r18                                OPTIONAL
    ]]
}

Reference :

[1] The 5G Evolution:3GPP Releases 16-17 (5G Americas)

[2] RP-200494 - UE Power Saving in NR (Work Item Description)

[3] TR 38.840 - Study on User Equipment (UE) power saving in NR

[4] Study on User Equipment (UE) power saving in NR (Release 16)

YouTube