From 5969ecc212c8af95ea91d9f43d91cb3a05999e1f Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Thu, 3 Apr 2025 15:40:14 +0200 Subject: [PATCH 1/2] Use platform_constants.h definition NGAP_MAX_PDU_SESSION and remove NGAP lib definition There are 2 different definition of maxnoofPDUSessions (as per 3GPP TS 38.413), one in NGAP lib (set to 16) and one in platform_constants.h (256 as per specs). The NGAP lib definition is removed in this commit and replaced by the one compliant with the specs. This is fixing the warning: In function 'fill_pdu_session_resource_failed_to_setup_item', inlined from 'rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP' at /openair2/RRC/NR/rrc_gNB_NGAP.c:588:7: /openair2/RRC/NR/rrc_gNB_NGAP.c:451:12: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] 451 | f->cause = cause; | ~~~~~~~~~^~~~~~~ In file included from /common/utils/ocp_itti/intertask_interface.h:235, from /openair2/RRC/NR/rrc_gNB_NGAP.h:39, from /openair2/RRC/NR/rrc_gNB_NGAP.c:31: /openair2/COMMON/ngap_messages_types.h: In function 'rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP': /openair2/COMMON/ngap_messages_types.h:546:13: note: at offset [8724, 25769812488] into destination object 'gNB_ue_ngap_id' of size 4 546 | uint32_t gNB_ue_ngap_id; | ^~~~~~~~~~~~~~ --- openair2/COMMON/ngap_messages_types.h | 39 +++++++++++++-------------- openair2/RRC/NR/rrc_gNB_NGAP.c | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/openair2/COMMON/ngap_messages_types.h b/openair2/COMMON/ngap_messages_types.h index 31b7abd3f8..9df2dfaeaa 100644 --- a/openair2/COMMON/ngap_messages_types.h +++ b/openair2/COMMON/ngap_messages_types.h @@ -71,9 +71,6 @@ //-------------------------------------------------------------------------------------------// -// maxnoofPDUSessions in 3GPP TS 38.413 -#define NGAP_MAX_PDUSESSION 16 // 256 according to specs - /* Length of the transport layer address string * 160 bits / 8 bits by char. */ @@ -548,12 +545,12 @@ typedef struct ngap_initial_context_setup_resp_s { /* Number of pdusession setup-ed in the list */ uint8_t nb_of_pdusessions; /* list of pdusession setup-ed by RRC layers */ - pdusession_setup_t pdusessions[NGAP_MAX_PDUSESSION]; + pdusession_setup_t pdusessions[NGAP_MAX_PDU_SESSION]; /* Number of pdusession failed to be setup in list */ uint8_t nb_of_pdusessions_failed; /* list of pdusessions that failed to be setup */ - pdusession_failed_t pdusessions_failed[NGAP_MAX_PDUSESSION]; + pdusession_failed_t pdusessions_failed[NGAP_MAX_PDU_SESSION]; } ngap_initial_context_setup_resp_t; typedef struct ngap_initial_context_setup_fail_s { @@ -633,7 +630,7 @@ typedef struct ngap_initial_context_setup_req_s { /* Number of pdusession to be setup in the list */ uint8_t nb_of_pdusessions; /* list of pdusession to be setup by RRC layers */ - pdusession_t pdusession_param[NGAP_MAX_PDUSESSION]; + pdusession_t pdusession_param[NGAP_MAX_PDU_SESSION]; /* Mobility Restriction List */ uint8_t mobility_restriction_flag; @@ -689,7 +686,7 @@ typedef struct ngap_pdusession_setup_req_s { uint8_t nb_pdusessions_tosetup; /* E RAB setup request */ - pdusession_t pdusession_setup_params[NGAP_MAX_PDUSESSION]; + pdusession_t pdusession_setup_params[NGAP_MAX_PDU_SESSION]; /* UE Uplink Aggregated Max Bitrates */ uint64_t ueAggMaxBitRateUplink; @@ -704,12 +701,12 @@ typedef struct ngap_pdusession_setup_resp_s { /* Number of pdusession setup-ed in the list */ uint8_t nb_of_pdusessions; /* list of pdusession setup-ed by RRC layers */ - pdusession_setup_t pdusessions[NGAP_MAX_PDUSESSION]; + pdusession_setup_t pdusessions[NGAP_MAX_PDU_SESSION]; /* Number of pdusession failed to be setup in list */ uint8_t nb_of_pdusessions_failed; /* list of pdusessions that failed to be setup */ - pdusession_failed_t pdusessions_failed[NGAP_MAX_PDUSESSION]; + pdusession_failed_t pdusessions_failed[NGAP_MAX_PDU_SESSION]; } ngap_pdusession_setup_resp_t; typedef struct ngap_path_switch_req_s { @@ -719,7 +716,7 @@ typedef struct ngap_path_switch_req_s { uint8_t nb_of_pdusessions; /* list of pdusession setup-ed by RRC layers */ - pdusession_setup_t pdusessions_tobeswitched[NGAP_MAX_PDUSESSION]; + pdusession_setup_t pdusessions_tobeswitched[NGAP_MAX_PDU_SESSION]; /* AMF UE id */ uint64_t amf_ue_ngap_id; @@ -749,13 +746,13 @@ typedef struct ngap_path_switch_req_ack_s { uint8_t nb_pdusessions_tobeswitched; /* list of pdusession to be switched by RRC layers */ - pdusession_tobeswitched_t pdusessions_tobeswitched[NGAP_MAX_PDUSESSION]; + pdusession_tobeswitched_t pdusessions_tobeswitched[NGAP_MAX_PDU_SESSION]; /* Number of pdusessions to be released by RRC */ uint8_t nb_pdusessions_tobereleased; /* list of pdusessions to be released */ - pdusession_failed_t pdusessions_tobereleased[NGAP_MAX_PDUSESSION]; + pdusession_failed_t pdusessions_tobereleased[NGAP_MAX_PDU_SESSION]; /* Security key */ int next_hop_chain_count; @@ -776,9 +773,9 @@ typedef struct ngap_pdusession_modification_ind_s { uint8_t nb_of_pdusessions_nottobemodified; /* list of pdusession setup-ed by RRC layers */ - pdusession_setup_t pdusessions_tobemodified[NGAP_MAX_PDUSESSION]; + pdusession_setup_t pdusessions_tobemodified[NGAP_MAX_PDU_SESSION]; - pdusession_setup_t pdusessions_nottobemodified[NGAP_MAX_PDUSESSION]; + pdusession_setup_t pdusessions_nottobemodified[NGAP_MAX_PDU_SESSION]; uint16_t ue_initial_id; @@ -805,7 +802,7 @@ typedef struct ngap_ue_release_req_s { /* Number of pdusession resource in the list */ uint8_t nb_of_pdusessions; /* list of pdusession resource by RRC layers */ - pdusession_release_t pdusessions[NGAP_MAX_PDUSESSION]; + pdusession_release_t pdusessions[NGAP_MAX_PDU_SESSION]; ngap_cause_t cause; } ngap_ue_release_req_t, ngap_ue_release_resp_t; @@ -820,7 +817,7 @@ typedef struct ngap_pdusession_modify_req_s { uint8_t nb_pdusessions_tomodify; /* pdu session modify request */ - pdusession_t pdusession_modify_params[NGAP_MAX_PDUSESSION]; + pdusession_t pdusession_modify_params[NGAP_MAX_PDU_SESSION]; } ngap_pdusession_modify_req_t; typedef struct ngap_pdusession_modify_resp_s { @@ -829,12 +826,12 @@ typedef struct ngap_pdusession_modify_resp_s { /* Number of pdusession modify-ed in the list */ uint8_t nb_of_pdusessions; /* list of pdusession modify-ed by RRC layers */ - pdusession_modify_t pdusessions[NGAP_MAX_PDUSESSION]; + pdusession_modify_t pdusessions[NGAP_MAX_PDU_SESSION]; /* Number of pdusession failed to be modify in list */ uint8_t nb_of_pdusessions_failed; /* list of pdusessions that failed to be modify */ - pdusession_failed_t pdusessions_failed[NGAP_MAX_PDUSESSION]; + pdusession_failed_t pdusessions_failed[NGAP_MAX_PDU_SESSION]; } ngap_pdusession_modify_resp_t; typedef struct ngap_pdusession_release_command_s { @@ -851,7 +848,7 @@ typedef struct ngap_pdusession_release_command_s { uint8_t nb_pdusessions_torelease; /* PDUSession release command */ - pdusession_release_t pdusession_release_params[NGAP_MAX_PDUSESSION]; + pdusession_release_t pdusession_release_params[NGAP_MAX_PDU_SESSION]; } ngap_pdusession_release_command_t; @@ -866,12 +863,12 @@ typedef struct ngap_pdusession_release_resp_s { uint8_t nb_of_pdusessions_released; /* list of pdusessions released */ - pdusession_release_t pdusession_release[NGAP_MAX_PDUSESSION]; + pdusession_release_t pdusession_release[NGAP_MAX_PDU_SESSION]; /* Number of pdusession failed to be released in list */ uint8_t nb_of_pdusessions_failed; /* list of pdusessions that failed to be released */ - pdusession_failed_t pdusessions_failed[NGAP_MAX_PDUSESSION]; + pdusession_failed_t pdusessions_failed[NGAP_MAX_PDU_SESSION]; } ngap_pdusession_release_resp_t; diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index c1715c438c..d7d7b8f360 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -1327,7 +1327,7 @@ int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(MessageDef *msg_p, instance_ uint32_t gNB_ue_ngap_id; ngap_pdusession_release_command_t *cmd = &NGAP_PDUSESSION_RELEASE_COMMAND(msg_p); gNB_ue_ngap_id = cmd->gNB_ue_ngap_id; - if (cmd->nb_pdusessions_torelease > NGAP_MAX_PDUSESSION) { + if (cmd->nb_pdusessions_torelease > NGAP_MAX_PDU_SESSION) { LOG_E(NR_RRC, "incorrect number of pdu session do release %d\n", cmd->nb_pdusessions_torelease); return -1; } From 0065c6023a617249e810d593dab42a8428f689a9 Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Thu, 3 Apr 2025 22:30:29 +0200 Subject: [PATCH 2/2] Remove unconsistent check in rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND Leading to clang error: /oai-ran/openair2/RRC/NR/rrc_gNB_NGAP.c:1329:37: error: result of comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Werror,-Wtautological-constant-out-of-range-compare] The value comes from the decoding of: ie->value.choice.PDUSessionResourceToReleaseListRelCmd.list.count --- openair2/RRC/NR/rrc_gNB_NGAP.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index d7d7b8f360..99e657aa4d 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -1327,10 +1327,6 @@ int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(MessageDef *msg_p, instance_ uint32_t gNB_ue_ngap_id; ngap_pdusession_release_command_t *cmd = &NGAP_PDUSESSION_RELEASE_COMMAND(msg_p); gNB_ue_ngap_id = cmd->gNB_ue_ngap_id; - if (cmd->nb_pdusessions_torelease > NGAP_MAX_PDU_SESSION) { - LOG_E(NR_RRC, "incorrect number of pdu session do release %d\n", cmd->nb_pdusessions_torelease); - return -1; - } gNB_RRC_INST *rrc = RC.nrrrc[instance]; rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, gNB_ue_ngap_id);