Paging (NGAP): fix stream handling to comply with TS 38.412

Paging messages are classified as non-UE-associated signalling per
3GPP TS 38.412 clause 7 (TL), which requires them to be sent on
stream 0 (or a reserved stream pair).

Paging message is received when UE is in RRC_IDLE or RRC_INACTIVE
state, as the RAN has no active UE context and paging targets the
UE by 5G-S-TMSI rather than RAN-UE-NGAP-ID.

The previous implementation incorrectly rejected paging messages
received on stream 0, causing paging failures when using Open5GS AMF.

Changes:
- Accept paging on stream 0 (non-UE-associated signalling)
- Reject paging on non-zero streams (UE-associated streams)
- Add documentation
This commit is contained in:
Guido Casati
2026-02-17 12:25:58 +01:00
parent 8209dcb5d9
commit df11c946f9
+14 -4
View File
@@ -1098,6 +1098,12 @@ static int ngap_gNB_handle_handover_cancel_ack(sctp_assoc_t assoc_id, uint32_t s
return 0;
}
/**
* @brief Handle NGAP Paging message from AMF
* @param assoc_id SCTP association ID
* @param stream SCTP stream ID (must be 0 for paging per TS 38.412 Clause 7)
* @param pdu NGAP PDU containing Paging message
* @return 0 on success, -1 on failure */
static int ngap_gNB_handle_paging(sctp_assoc_t assoc_id, uint32_t stream, NGAP_NGAP_PDU_t *pdu)
{
ngap_gNB_amf_data_t *amf_desc_p = NULL;
@@ -1106,10 +1112,14 @@ static int ngap_gNB_handle_paging(sctp_assoc_t assoc_id, uint32_t stream, NGAP_N
// received Paging Message from AMF
NGAP_DEBUG("[SCTP %u] Received Paging Message From AMF\n",assoc_id);
/* Paging procedure -> stream != 0 */
if (stream == 0) {
LOG_W(NGAP,"[SCTP %d] Received Paging procedure on stream (%d)\n",
assoc_id, stream);
/* Per 3GPP TS 38.412 Clause 7 (Transport layer):
* Paging is classified as "non-UE-associated signalling" because:
* - UE is in RRC_IDLE or RRC_INACTIVE state
* - No active UE context exists in the RAN
* - Paging targets UE by 5G-S-TMSI, not by RAN-UE-NGAP-ID
* Non-UE-associated signalling MUST use stream 0 (or a reserved stream pair) */
if (stream != 0) {
LOG_W(NGAP,"[SCTP %d] Received Paging procedure on stream != 0 (expected stream 0 per TS 38.412)\n", assoc_id);
return -1;
}