From ac3f9f3e328a50316182e05d7aafd2c972f51fa9 Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Thu, 6 Mar 2025 10:48:08 +0100 Subject: [PATCH] Introduce platform type plmn_id_t for consistency across the stack * F1AP, NGAP can now use the same struct type * this improves maintainability --- common/5g_platform_types.h | 6 +++ openair2/COMMON/f1ap_messages_types.h | 24 ++++------ openair2/COMMON/ngap_messages_types.h | 4 +- openair2/F1AP/lib/f1ap_interface_management.c | 12 ++--- openair2/F1AP/lib/f1ap_lib_common.c | 2 +- openair2/F1AP/lib/f1ap_lib_common.h | 4 +- openair2/F1AP/tests/f1ap_lib_test.c | 2 +- openair2/GNB_APP/gnb_config.c | 14 +++--- openair2/LAYER2/NR_MAC_gNB/config.c | 2 +- openair2/LAYER2/NR_MAC_gNB/mac_proto.h | 2 +- .../LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c | 2 +- openair2/RRC/NR/nr_rrc_config.c | 2 +- openair2/RRC/NR/nr_rrc_config.h | 2 +- openair3/NGAP/ngap_gNB.c | 20 +++++---- openair3/NGAP/ngap_gNB_nas_procedures.c | 45 +++++++++---------- openair3/NGAP/ngap_gNB_nnsf.c | 8 ++-- 16 files changed, 75 insertions(+), 76 deletions(-) diff --git a/common/5g_platform_types.h b/common/5g_platform_types.h index 05fc2be28d..6f055e9305 100644 --- a/common/5g_platform_types.h +++ b/common/5g_platform_types.h @@ -24,6 +24,12 @@ #include +typedef struct plmn_id_s { + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_digit_length; +} plmn_id_t; + typedef struct nssai_s { uint8_t sst; uint32_t sd; diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 14ad0b5dc7..45e5e55120 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -93,12 +93,6 @@ typedef struct f1ap_net_config_t { uint16_t DUport; } f1ap_net_config_t; -typedef struct f1ap_plmn_t { - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; -} f1ap_plmn_t; - typedef struct f1ap_cp_tnl_s { in_addr_t tl_address; // currently only IPv4 supported uint16_t port; @@ -130,7 +124,7 @@ typedef struct f1ap_tdd_info_t { typedef struct f1ap_served_cell_info_t { // NR CGI - f1ap_plmn_t plmn; + plmn_id_t plmn; uint64_t nr_cellid; // NR Global Cell Id // NR Physical Cell Ids @@ -193,7 +187,7 @@ typedef struct f1ap_sib_msg_t { } f1ap_sib_msg_t; typedef struct served_cells_to_activate_s { - f1ap_plmn_t plmn; + plmn_id_t plmn; // NR Global Cell Id uint64_t nr_cellid; /// NRPCI [int 0..1007] @@ -240,7 +234,7 @@ typedef struct f1ap_gnb_cu_configuration_update_acknowledge_s { uint16_t num_cells_failed_to_be_activated; struct { // NR CGI - f1ap_plmn_t plmn; + plmn_id_t plmn; uint64_t nr_cellid; uint16_t cause; } cells_failed_to_be_activated[F1AP_MAX_NB_CELLS]; @@ -257,7 +251,7 @@ typedef struct f1ap_gnb_cu_configuration_update_acknowledge_s { struct { uint32_t gNB_CU_ue_id; // NR CGI - f1ap_plmn_t ue_plmn; + plmn_id_t ue_plmn; uint64_t ue_nr_cellid; } dedicatedSIDeliveryNeededUEs[F1AP_MAX_NO_UE_ID]; } f1ap_gnb_cu_configuration_update_acknowledge_t; @@ -284,7 +278,7 @@ typedef struct f1ap_gnb_du_configuration_update_s { /// int cells_to_modify uint16_t num_cells_to_modify; struct { - f1ap_plmn_t old_plmn; + plmn_id_t old_plmn; uint64_t old_nr_cellid; // NR Global Cell Id f1ap_served_cell_info_t info; f1ap_gnb_du_system_info_t *sys_info; @@ -294,7 +288,7 @@ typedef struct f1ap_gnb_du_configuration_update_s { uint16_t num_cells_to_delete; struct { // NR CGI - f1ap_plmn_t plmn; + plmn_id_t plmn; uint64_t nr_cellid; // NR Global Cell Id } cell_to_delete[F1AP_MAX_NB_CELLS]; /// gNB-DU unique ID, at least within a gNB-CU (0 .. 2^36 - 1) @@ -334,7 +328,7 @@ typedef struct f1ap_dl_rrc_message_s { typedef struct f1ap_initial_ul_rrc_message_s { uint32_t gNB_DU_ue_id; - f1ap_plmn_t plmn; + plmn_id_t plmn; /// nr cell id uint64_t nr_cellid; /// crnti @@ -476,7 +470,7 @@ typedef struct f1ap_ue_context_setup_s { uint32_t gNB_CU_ue_id; uint32_t gNB_DU_ue_id; // SpCell Info - f1ap_plmn_t plmn; + plmn_id_t plmn; uint64_t nr_cellid; uint8_t servCellIndex; uint8_t *cellULConfigured; @@ -550,7 +544,7 @@ typedef struct f1ap_paging_ind_s { uint16_t ueidentityindexvalue; uint64_t fiveg_s_tmsi; uint8_t fiveg_s_tmsi_length; - f1ap_plmn_t plmn; + plmn_id_t plmn; uint64_t nr_cellid; uint8_t paging_drx; } f1ap_paging_ind_t; diff --git a/openair2/COMMON/ngap_messages_types.h b/openair2/COMMON/ngap_messages_types.h index ad988a6197..588d7c5cba 100644 --- a/openair2/COMMON/ngap_messages_types.h +++ b/openair2/COMMON/ngap_messages_types.h @@ -435,9 +435,7 @@ typedef enum ngap_paging_ind_present_s { } ngap_paging_ind_present_t; typedef struct { - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; + plmn_id_t plmn; uint16_t num_nssai; nssai_t s_nssai[8]; } ngap_plmn_t; diff --git a/openair2/F1AP/lib/f1ap_interface_management.c b/openair2/F1AP/lib/f1ap_interface_management.c index 5767a06d95..2ad4ab6467 100644 --- a/openair2/F1AP/lib/f1ap_interface_management.c +++ b/openair2/F1AP/lib/f1ap_interface_management.c @@ -1423,7 +1423,7 @@ F1AP_F1AP_PDU_t *encode_f1ap_du_configuration_update(const f1ap_gnb_du_configura &served_cells_to_modify_item_ies->value.choice.Served_Cells_To_Modify_Item; F1AP_NRCGI_t *oldNRCGI = &served_cells_to_modify_item->oldNRCGI; - const f1ap_plmn_t *old_plmn = &msg->cell_to_modify[i].old_plmn; + const plmn_id_t *old_plmn = &msg->cell_to_modify[i].old_plmn; MCC_MNC_TO_PLMNID(old_plmn->mcc, old_plmn->mnc, old_plmn->mnc_digit_length, &oldNRCGI->pLMN_Identity); NR_CELL_ID_TO_BIT_STRING(msg->cell_to_modify[i].old_nr_cellid, &oldNRCGI->nRCellIdentity); @@ -1449,7 +1449,7 @@ F1AP_F1AP_PDU_t *encode_f1ap_du_configuration_update(const f1ap_gnb_du_configura F1AP_Served_Cells_To_Delete_Item_t *served_cells_to_delete_item = &served_cells_to_delete_item_ies->value.choice.Served_Cells_To_Delete_Item; F1AP_NRCGI_t *oldNRCGI = &served_cells_to_delete_item->oldNRCGI; - const f1ap_plmn_t *plmn = &msg->cell_to_delete[i].plmn; + const plmn_id_t *plmn = &msg->cell_to_delete[i].plmn; MCC_MNC_TO_PLMNID(plmn->mcc, plmn->mnc, plmn->mnc_digit_length, &(oldNRCGI->pLMN_Identity)); NR_CELL_ID_TO_BIT_STRING(msg->cell_to_delete[i].nr_cellid, &(oldNRCGI->nRCellIdentity)); } @@ -1519,7 +1519,7 @@ bool decode_f1ap_du_configuration_update(const F1AP_F1AP_PDU_t *pdu, f1ap_gnb_du ->value.choice.Served_Cells_To_Modify_Item; /* Old NR CGI (M) */ F1AP_NRCGI_t *oldNRCGI = &served_cells_item->oldNRCGI; - f1ap_plmn_t *old_plmn = &out->cell_to_modify[i].old_plmn; + plmn_id_t *old_plmn = &out->cell_to_modify[i].old_plmn; PLMNID_TO_MCC_MNC(&oldNRCGI->pLMN_Identity, old_plmn->mcc, old_plmn->mnc, old_plmn->mnc_digit_length); /* Old NR CGI Cell ID */ BIT_STRING_TO_NR_CELL_IDENTITY(&oldNRCGI->nRCellIdentity, out->cell_to_modify[i].old_nr_cellid); @@ -1542,7 +1542,7 @@ bool decode_f1ap_du_configuration_update(const F1AP_F1AP_PDU_t *pdu, f1ap_gnb_du &((F1AP_Served_Cells_To_Delete_ItemIEs_t *)ie->value.choice.Served_Cells_To_Delete_List.list.array[i]) ->value.choice.Served_Cells_To_Delete_Item; F1AP_NRCGI_t *oldNRCGI = &served_cells_item->oldNRCGI; - f1ap_plmn_t *plmn = &out->cell_to_delete[i].plmn; + plmn_id_t *plmn = &out->cell_to_delete[i].plmn; /* Old NR CGI (M) */ PLMNID_TO_MCC_MNC(&(oldNRCGI->pLMN_Identity), plmn->mcc, plmn->mnc, plmn->mnc_digit_length); // NR cellID @@ -1833,7 +1833,7 @@ F1AP_F1AP_PDU_t *encode_f1ap_cu_configuration_update_acknowledge(const f1ap_gnb_ p1->cause.present = F1AP_Cause_PR_radioNetwork; p1->cause.choice.radioNetwork = msg->cells_failed_to_be_activated[i].cause; // NR CGI (M) - const f1ap_plmn_t *plmn = &msg->cells_failed_to_be_activated[i].plmn; + const plmn_id_t *plmn = &msg->cells_failed_to_be_activated[i].plmn; MCC_MNC_TO_PLMNID(plmn->mcc, plmn->mnc, plmn->mnc_digit_length, &(p1->nRCGI.pLMN_Identity)); printf("plmn->mcc %d %d %d %ld \n", p1->nRCGI.pLMN_Identity.buf[0], p1->nRCGI.pLMN_Identity.buf[1], p1->nRCGI.pLMN_Identity.buf[2], p1->nRCGI.pLMN_Identity.size); @@ -1880,7 +1880,7 @@ bool decode_f1ap_cu_configuration_update_acknowledge(const F1AP_F1AP_PDU_t *pdu, (F1AP_Cells_Failed_to_be_Activated_List_ItemIEs_t *)cell_fail_list->list.array[j]; const F1AP_Cells_Failed_to_be_Activated_List_Item_t *item = &itemIE->value.choice.Cells_Failed_to_be_Activated_List_Item; // NR CGI (M) - f1ap_plmn_t *plmn = &out->cells_failed_to_be_activated[j].plmn; + plmn_id_t *plmn = &out->cells_failed_to_be_activated[j].plmn; PLMNID_TO_MCC_MNC(&(item->nRCGI.pLMN_Identity), plmn->mcc, plmn->mnc, plmn->mnc_digit_length); BIT_STRING_TO_NR_CELL_IDENTITY(&item->nRCGI.nRCellIdentity, out->cells_failed_to_be_activated[j].nr_cellid); // Cause (M) diff --git a/openair2/F1AP/lib/f1ap_lib_common.c b/openair2/F1AP/lib/f1ap_lib_common.c index 3673fa3cc7..e32f7e6779 100644 --- a/openair2/F1AP/lib/f1ap_lib_common.c +++ b/openair2/F1AP/lib/f1ap_lib_common.c @@ -27,7 +27,7 @@ #include "common/utils/assertions.h" #include "common/utils/utils.h" -bool eq_f1ap_plmn(const f1ap_plmn_t *a, const f1ap_plmn_t *b) +bool eq_f1ap_plmn(const plmn_id_t *a, const plmn_id_t *b) { _F1_EQ_CHECK_INT(a->mcc, b->mcc); _F1_EQ_CHECK_INT(a->mnc, b->mnc); diff --git a/openair2/F1AP/lib/f1ap_lib_common.h b/openair2/F1AP/lib/f1ap_lib_common.h index 502200d9df..8a3ddfba4a 100644 --- a/openair2/F1AP/lib/f1ap_lib_common.h +++ b/openair2/F1AP/lib/f1ap_lib_common.h @@ -26,6 +26,7 @@ #include #include #include "openair3/UTILS/conversions.h" +#include "common/5g_platform_types.h" #include "F1AP_Cause.h" #include "f1ap_messages_types.h" @@ -71,8 +72,7 @@ } \ } while (0) -struct f1ap_plmn_t; -bool eq_f1ap_plmn(const struct f1ap_plmn_t *a, const struct f1ap_plmn_t *b); +bool eq_f1ap_plmn(const plmn_id_t *a, const plmn_id_t *b); struct f1ap_served_cell_info_t; bool eq_f1ap_cell_info(const struct f1ap_served_cell_info_t *a, const struct f1ap_served_cell_info_t *b); struct f1ap_gnb_du_system_info_t; diff --git a/openair2/F1AP/tests/f1ap_lib_test.c b/openair2/F1AP/tests/f1ap_lib_test.c index 29d4b625ed..aa770f47ea 100644 --- a/openair2/F1AP/tests/f1ap_lib_test.c +++ b/openair2/F1AP/tests/f1ap_lib_test.c @@ -80,7 +80,7 @@ static void f1ap_msg_free(F1AP_F1AP_PDU_t *pdu) */ static void test_initial_ul_rrc_message_transfer(void) { - f1ap_plmn_t plmn = { .mcc = 208, .mnc = 95, .mnc_digit_length = 2 }; + plmn_id_t plmn = {.mcc = 208, .mnc = 95, .mnc_digit_length = 2}; uint8_t rrc[] = "RRC Container"; uint8_t du2cu[] = "DU2CU Container"; f1ap_initial_ul_rrc_message_t orig = { diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 87c2a9bce7..6388a43d34 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -2222,14 +2222,14 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) { NGAP_REGISTER_GNB_REQ(msg_p).num_plmn = PLMNParamList.numelt; for (int l = 0; l < PLMNParamList.numelt; ++l) { - NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mcc = *PLMNParamList.paramarray[l][GNB_MOBILE_COUNTRY_CODE_IDX].uptr; - NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mnc = *PLMNParamList.paramarray[l][GNB_MOBILE_NETWORK_CODE_IDX].uptr; - NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mnc_digit_length = *PLMNParamList.paramarray[l][GNB_MNC_DIGIT_LENGTH].u8ptr; + NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mcc = *PLMNParamList.paramarray[l][GNB_MOBILE_COUNTRY_CODE_IDX].uptr; + NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mnc = *PLMNParamList.paramarray[l][GNB_MOBILE_NETWORK_CODE_IDX].uptr; + NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mnc_digit_length = *PLMNParamList.paramarray[l][GNB_MNC_DIGIT_LENGTH].u8ptr; NGAP_REGISTER_GNB_REQ (msg_p).default_drx = 0; - AssertFatal((NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mnc_digit_length == 2) - || (NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mnc_digit_length == 3), + AssertFatal((NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mnc_digit_length == 2) + || (NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mnc_digit_length == 3), "BAD MNC DIGIT LENGTH %d", - NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].mnc_digit_length); + NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].plmn.mnc_digit_length); NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].num_nssai = set_snssai_config(NGAP_REGISTER_GNB_REQ(msg_p).plmn[l].s_nssai, 8, k, l); } @@ -2549,7 +2549,7 @@ void wait_f1_setup_response(void) } NR_SCHED_UNLOCK(&mac->sched_lock); } -static bool check_plmn_identity(const f1ap_plmn_t *check_plmn, const f1ap_plmn_t *plmn) +static bool check_plmn_identity(const plmn_id_t *check_plmn, const plmn_id_t *plmn) { return plmn->mcc == check_plmn->mcc && plmn->mnc_digit_length == check_plmn->mnc_digit_length && plmn->mnc == check_plmn->mnc; } diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c index 26319a6049..90891919db 100644 --- a/openair2/LAYER2/NR_MAC_gNB/config.c +++ b/openair2/LAYER2/NR_MAC_gNB/config.c @@ -958,7 +958,7 @@ void prepare_du_configuration_update(gNB_MAC_INST *mac, mac->mac_rrc.gnb_du_configuration_update(&update); } -void nr_mac_configure_sib1(gNB_MAC_INST *nrmac, const f1ap_plmn_t *plmn, uint64_t cellID, int tac) +void nr_mac_configure_sib1(gNB_MAC_INST *nrmac, const plmn_id_t *plmn, uint64_t cellID, int tac) { AssertFatal(IS_SA_MODE(get_softmodem_params()), "error: SIB1 only applicable for SA\n"); diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h index c8b809a8cb..dad0eb570c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h @@ -54,7 +54,7 @@ void mac_top_init_gNB(ngran_node_t node_type, void nr_mac_send_f1_setup_req(void); void nr_mac_config_scc(gNB_MAC_INST *nrmac, NR_ServingCellConfigCommon_t *scc, const nr_mac_config_t *mac_config); -void nr_mac_configure_sib1(gNB_MAC_INST *nrmac, const f1ap_plmn_t *plmn, uint64_t cellID, int tac); +void nr_mac_configure_sib1(gNB_MAC_INST *nrmac, const plmn_id_t *plmn, uint64_t cellID, int tac); bool nr_mac_configure_other_sib(gNB_MAC_INST *nrmac, int num_cu_sib, const f1ap_sib_msg_t cu_sib[num_cu_sib]); bool nr_mac_add_test_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup); bool nr_mac_prepare_ra_ue(gNB_MAC_INST *nrmac, uint32_t rnti, NR_CellGroupConfig_t *CellGroup); diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c index ca07d1555a..32943097ba 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c +++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c @@ -94,7 +94,7 @@ bool DURecvCb(protocol_ctxt_t *ctxt_pP, return true; } -static bool check_plmn_identity(const f1ap_plmn_t *check_plmn, const f1ap_plmn_t *plmn) +static bool check_plmn_identity(const plmn_id_t *check_plmn, const plmn_id_t *plmn) { return plmn->mcc == check_plmn->mcc && plmn->mnc_digit_length == check_plmn->mnc_digit_length && plmn->mnc == check_plmn->mnc; } diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index d377b2aff3..8d99486c34 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -2463,7 +2463,7 @@ static bool is_ntn_band(int band) } NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc, - const f1ap_plmn_t *plmn, + const plmn_id_t *plmn, uint64_t cellID, int tac, const nr_mac_config_t *mac_config) diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h index d56db4b0cf..c4189dcb21 100644 --- a/openair2/RRC/NR/nr_rrc_config.h +++ b/openair2/RRC/NR/nr_rrc_config.h @@ -79,7 +79,7 @@ void free_MeasurementTimingConfiguration(struct NR_MeasurementTimingConfiguratio #define NR_MAX_SIB_LENGTH 2976 // 3GPP TS 38.331 section 5.2.1 NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc, - const f1ap_plmn_t *plmn, + const plmn_id_t *plmn, uint64_t cellID, int tac, const nr_mac_config_t *mac_config); diff --git a/openair3/NGAP/ngap_gNB.c b/openair3/NGAP/ngap_gNB.c index de466daddf..488345261d 100644 --- a/openair3/NGAP/ngap_gNB.c +++ b/openair3/NGAP/ngap_gNB.c @@ -158,8 +158,8 @@ void ngap_gNB_handle_register_gNB(instance_t instance, ngap_register_gnb_req_t * DevCheck(new_instance->tac == ngap_register_gNB->tac, new_instance->tac, ngap_register_gNB->tac, 0); for (int i = 0; i < new_instance->num_plmn; i++) { - ngap_plmn_t *exist_plmn = &new_instance->plmn[i]; - ngap_plmn_t *new_plmn = &ngap_register_gNB->plmn[i]; + plmn_id_t *exist_plmn = &new_instance->plmn[i].plmn; + plmn_id_t *new_plmn = &ngap_register_gNB->plmn[i].plmn; DevCheck(exist_plmn->mcc == new_plmn->mcc, exist_plmn->mcc, new_plmn->mcc, 0); DevCheck(exist_plmn->mnc == new_plmn->mnc, exist_plmn->mnc, new_plmn->mnc, 0); DevCheck(exist_plmn->mnc_digit_length == new_plmn->mnc_digit_length, @@ -185,9 +185,9 @@ void ngap_gNB_handle_register_gNB(instance_t instance, ngap_register_gnb_req_t * sizeof(ngap_register_gNB->gnb_ip_address)); for (int i = 0; i < ngap_register_gNB->num_plmn; i++) { - new_instance->plmn[i].mcc = ngap_register_gNB->plmn[i].mcc; - new_instance->plmn[i].mnc = ngap_register_gNB->plmn[i].mnc; - new_instance->plmn[i].mnc_digit_length = ngap_register_gNB->plmn[i].mnc_digit_length; + new_instance->plmn[i].plmn.mcc = ngap_register_gNB->plmn[i].plmn.mcc; + new_instance->plmn[i].plmn.mnc = ngap_register_gNB->plmn[i].plmn.mnc; + new_instance->plmn[i].plmn.mnc_digit_length = ngap_register_gNB->plmn[i].plmn.mnc_digit_length; new_instance->plmn[i].num_nssai = ngap_register_gNB->plmn[i].num_nssai; memcpy(&new_instance->plmn[i].s_nssai, &ngap_register_gNB->plmn[i].s_nssai, sizeof(ngap_register_gNB->plmn[i].s_nssai)); @@ -421,9 +421,10 @@ static int ngap_gNB_generate_ng_setup_request( ie->value.present = NGAP_NGSetupRequestIEs__value_PR_GlobalRANNodeID; ie->value.choice.GlobalRANNodeID.present = NGAP_GlobalRANNodeID_PR_globalGNB_ID; ie->value.choice.GlobalRANNodeID.choice.globalGNB_ID = CALLOC(1, sizeof(struct NGAP_GlobalGNB_ID)); - MCC_MNC_TO_PLMNID(instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[0]].mcc, - instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[0]].mnc, - instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[0]].mnc_digit_length, + plmn_id_t *plmn_id = &instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[0]].plmn; + MCC_MNC_TO_PLMNID(plmn_id->mcc, + plmn_id->mnc, + plmn_id->mnc_digit_length, &(ie->value.choice.GlobalRANNodeID.choice.globalGNB_ID->pLMNIdentity)); ie->value.choice.GlobalRANNodeID.choice.globalGNB_ID->gNB_ID.present = NGAP_GNB_ID_PR_gNB_ID; MACRO_GNB_ID_TO_BIT_STRING(instance_p->gNB_id, @@ -458,7 +459,8 @@ static int ngap_gNB_generate_ng_setup_request( for (int i = 0; i < ngap_amf_data_p->broadcast_plmn_num; ++i) { plmn = (NGAP_BroadcastPLMNItem_t *)calloc(1, sizeof(NGAP_BroadcastPLMNItem_t)); ngap_plmn_t *plmn_req = &instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[i]]; - MCC_MNC_TO_TBCD(plmn_req->mcc, plmn_req->mnc, plmn_req->mnc_digit_length, &plmn->pLMNIdentity); + plmn_id_t *plmn_id = &instance_p->plmn[ngap_amf_data_p->broadcast_plmn_index[i]].plmn; + MCC_MNC_TO_TBCD(plmn_id->mcc, plmn_id->mnc, plmn_id->mnc_digit_length, &plmn->pLMNIdentity); for (int si = 0; si < plmn_req->num_nssai; si++) { ssi = (NGAP_SliceSupportItem_t *)calloc(1, sizeof(NGAP_SliceSupportItem_t)); diff --git a/openair3/NGAP/ngap_gNB_nas_procedures.c b/openair3/NGAP/ngap_gNB_nas_procedures.c index 83c004fc74..a86ba83442 100644 --- a/openair3/NGAP/ngap_gNB_nas_procedures.c +++ b/openair3/NGAP/ngap_gNB_nas_procedures.c @@ -123,15 +123,14 @@ int ngap_gNB_handle_nas_first_req(instance_t instance, ngap_nas_first_req_t *UEf amf_desc_p = ngap_gNB_nnsf_select_amf_by_amf_setid(instance_p, UEfirstReq->establishment_cause, UEfirstReq->selected_plmn_identity, UEfirstReq->ue_identity.s_tmsi.amf_set_id); if (amf_desc_p) { - NGAP_INFO( - "UE %d: Chose AMF '%s' (assoc_id %d) through S-TMSI AMFSI %d and selected PLMN Identity index %d MCC %d MNC %d\n", - UEfirstReq->gNB_ue_ngap_id, - amf_desc_p->amf_name, - amf_desc_p->assoc_id, - UEfirstReq->ue_identity.s_tmsi.amf_set_id, - UEfirstReq->selected_plmn_identity, - instance_p->plmn[UEfirstReq->selected_plmn_identity].mcc, - instance_p->plmn[UEfirstReq->selected_plmn_identity].mnc); + NGAP_INFO("UE %d: Chose AMF '%s' (assoc_id %d) through S-TMSI AMFSI %d and selected PLMN Identity index %d MCC %d MNC %d\n", + UEfirstReq->gNB_ue_ngap_id, + amf_desc_p->amf_name, + amf_desc_p->assoc_id, + UEfirstReq->ue_identity.s_tmsi.amf_set_id, + UEfirstReq->selected_plmn_identity, + instance_p->plmn[UEfirstReq->selected_plmn_identity].plmn.mcc, + instance_p->plmn[UEfirstReq->selected_plmn_identity].plmn.mnc); } } } @@ -148,8 +147,8 @@ int ngap_gNB_handle_nas_first_req(instance_t instance, ngap_nas_first_req_t *UEf amf_desc_p->amf_name, amf_desc_p->assoc_id, UEfirstReq->selected_plmn_identity, - instance_p->plmn[UEfirstReq->selected_plmn_identity].mcc, - instance_p->plmn[UEfirstReq->selected_plmn_identity].mnc); + instance_p->plmn[UEfirstReq->selected_plmn_identity].plmn.mcc, + instance_p->plmn[UEfirstReq->selected_plmn_identity].plmn.mnc); } } @@ -222,16 +221,16 @@ int ngap_gNB_handle_nas_first_req(instance_t instance, ngap_nas_first_req_t *UEf MACRO_GNB_ID_TO_CELL_IDENTITY(instance_p->gNB_id, 0, // Cell ID &userinfo_nr_p->nR_CGI.nRCellIdentity); - MCC_MNC_TO_TBCD(instance_p->plmn[ue_desc_p->selected_plmn_identity].mcc, - instance_p->plmn[ue_desc_p->selected_plmn_identity].mnc, - instance_p->plmn[ue_desc_p->selected_plmn_identity].mnc_digit_length, + MCC_MNC_TO_TBCD(instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mcc, + instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mnc, + instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mnc_digit_length, &userinfo_nr_p->nR_CGI.pLMNIdentity); /* Set TAI */ INT24_TO_OCTET_STRING(instance_p->tac, &userinfo_nr_p->tAI.tAC); - MCC_MNC_TO_PLMNID(instance_p->plmn[ue_desc_p->selected_plmn_identity].mcc, - instance_p->plmn[ue_desc_p->selected_plmn_identity].mnc, - instance_p->plmn[ue_desc_p->selected_plmn_identity].mnc_digit_length, + MCC_MNC_TO_PLMNID(instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mcc, + instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mnc, + instance_p->plmn[ue_desc_p->selected_plmn_identity].plmn.mnc_digit_length, &userinfo_nr_p->tAI.pLMNIdentity); } @@ -454,16 +453,16 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_ MACRO_GNB_ID_TO_CELL_IDENTITY(ngap_gNB_instance_p->gNB_id, 0, // Cell ID &userinfo_nr_p->nR_CGI.nRCellIdentity); - MCC_MNC_TO_TBCD(ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mcc, - ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mnc, - ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mnc_digit_length, + MCC_MNC_TO_TBCD(ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mcc, + ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mnc, + ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mnc_digit_length, &userinfo_nr_p->nR_CGI.pLMNIdentity); /* Set TAI */ INT24_TO_OCTET_STRING(ngap_gNB_instance_p->tac, &userinfo_nr_p->tAI.tAC); - MCC_MNC_TO_PLMNID(ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mcc, - ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mnc, - ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].mnc_digit_length, + MCC_MNC_TO_PLMNID(ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mcc, + ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mnc, + ngap_gNB_instance_p->plmn[ue_context_p->selected_plmn_identity].plmn.mnc_digit_length, &userinfo_nr_p->tAI.pLMNIdentity); } if (ngap_gNB_encode_pdu(&pdu, &buffer, &length) < 0) { diff --git a/openair3/NGAP/ngap_gNB_nnsf.c b/openair3/NGAP/ngap_gNB_nnsf.c index a04474669c..e9f23c6401 100644 --- a/openair3/NGAP/ngap_gNB_nnsf.c +++ b/openair3/NGAP/ngap_gNB_nnsf.c @@ -135,8 +135,8 @@ ngap_gNB_nnsf_select_amf_by_plmn_id(ngap_gNB_instance_t *instance_p, /* Looking for served GUAMI PLMN Identity selected matching the one provided by the UE */ STAILQ_FOREACH(guami_p, &amf_data_p->served_guami, next) { STAILQ_FOREACH(served_plmn_p, &guami_p->served_plmns, next) { - if ((served_plmn_p->mcc == instance_p->plmn[selected_plmn_identity].mcc) - && (served_plmn_p->mnc == instance_p->plmn[selected_plmn_identity].mnc)) { + if ((served_plmn_p->mcc == instance_p->plmn[selected_plmn_identity].plmn.mcc) + && (served_plmn_p->mnc == instance_p->plmn[selected_plmn_identity].plmn.mnc)) { break; } } @@ -207,8 +207,8 @@ ngap_gNB_nnsf_select_amf_by_amf_setid(ngap_gNB_instance_t *instance_p, struct plmn_identity_s *served_plmn_p = NULL; STAILQ_FOREACH(served_plmn_p, &guami_p->served_plmns, next) { - if ((served_plmn_p->mcc == instance_p->plmn[selected_plmn_identity].mcc) - && (served_plmn_p->mnc == instance_p->plmn[selected_plmn_identity].mnc)) { + if ((served_plmn_p->mcc == instance_p->plmn[selected_plmn_identity].plmn.mcc) + && (served_plmn_p->mnc == instance_p->plmn[selected_plmn_identity].plmn.mnc)) { break; } }