From 9edf06f5ce9f226a806a6b75c45caf49b9401ba7 Mon Sep 17 00:00:00 2001 From: Justin Garey Date: Tue, 18 Mar 2025 15:19:10 +0000 Subject: [PATCH 1/2] PDU session establishment uses required IE for session type and QoS Rules loop correctly moves msg pointer --- openair3/NAS/NR_UE/5GS/5GSM/MSG/PduSessionEstablishmentAccept.c | 2 +- openair3/NAS/NR_UE/nr_nas_msg.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair3/NAS/NR_UE/5GS/5GSM/MSG/PduSessionEstablishmentAccept.c b/openair3/NAS/NR_UE/5GS/5GSM/MSG/PduSessionEstablishmentAccept.c index 50b66845c6..cb12e5dc6c 100644 --- a/openair3/NAS/NR_UE/5GS/5GSM/MSG/PduSessionEstablishmentAccept.c +++ b/openair3/NAS/NR_UE/5GS/5GSM/MSG/PduSessionEstablishmentAccept.c @@ -94,7 +94,7 @@ int decode_pdu_session_establishment_accept_msg(pdu_session_establishment_accept { qos_rules->rule[0] = decode_qos_rule(curPtr); rules_tot_len += get_len_qos_rule(&qos_rules->rule[0]); - curPtr += rules_tot_len; + curPtr += get_len_qos_rule(&qos_rules->rule[0]); } // Session-AMBR (M) psea_msg->sess_ambr.length = *curPtr++; diff --git a/openair3/NAS/NR_UE/nr_nas_msg.c b/openair3/NAS/NR_UE/nr_nas_msg.c index 64a541aa78..d1e1a4d448 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg.c +++ b/openair3/NAS/NR_UE/nr_nas_msg.c @@ -1050,7 +1050,7 @@ static void process_pdu_session_addr(pdu_session_establishment_accept_msg_t *msg { uint8_t *addr = msg->pdu_addr_ie.pdu_addr_oct; - switch (msg->pdu_addr_ie.pdu_type) { + switch (msg->pdu_type) { case PDU_SESSION_TYPE_IPV4: { char ip[20]; capture_ipv4_addr(&addr[0], ip, sizeof(ip)); From f18c6c98048c2e7912ef64a773f6c4919789ab7d Mon Sep 17 00:00:00 2001 From: Justin Garey Date: Tue, 25 Mar 2025 13:03:56 -0400 Subject: [PATCH 2/2] If the PDU Address IE is provided (checked through length), then the PDU Session Address is processed --- openair3/NAS/NR_UE/nr_nas_msg.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openair3/NAS/NR_UE/nr_nas_msg.c b/openair3/NAS/NR_UE/nr_nas_msg.c index d1e1a4d448..28ba7d6ffe 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg.c +++ b/openair3/NAS/NR_UE/nr_nas_msg.c @@ -1050,7 +1050,7 @@ static void process_pdu_session_addr(pdu_session_establishment_accept_msg_t *msg { uint8_t *addr = msg->pdu_addr_ie.pdu_addr_oct; - switch (msg->pdu_type) { + switch (msg->pdu_addr_ie.pdu_type) { case PDU_SESSION_TYPE_IPV4: { char ip[20]; capture_ipv4_addr(&addr[0], ip, sizeof(ip)); @@ -1130,7 +1130,12 @@ static void handle_pdu_session_accept(uint8_t *pdu_buffer, uint32_t msg_length) LOG_E(NAS, "decode_pdu_session_establishment_accept_msg failure\n"); // process PDU Session - process_pdu_session_addr(&msg); + + if (msg.pdu_addr_ie.pdu_length) + process_pdu_session_addr(&msg); + else + LOG_W(NAS, "Optional PDU Address IE was not provided\n"); + set_qfi_pduid(msg.qos_rules.rule->qfi, sm_header.pdu_session_id); }