From 2bf40fbd17b32af958792fceb45de30b8e7d1385 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani <mail@sakthi.me> Date: Thu, 26 Oct 2023 14:29:58 -0400 Subject: [PATCH] Pass the NSSAI config via F1 --- openair2/COMMON/f1ap_messages_types.h | 2 ++ openair2/F1AP/f1ap_cu_ue_context_management.c | 23 +++++++------------ openair2/F1AP/f1ap_du_ue_context_management.c | 21 +++++++++++++++++ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 8f8a047ee5..d7d46f3bef 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -26,6 +26,7 @@ #include <netinet/sctp.h> #include "rlc.h" #include "s1ap_messages_types.h" +#include "ngap_messages_types.h" //-------------------------------------------------------------------------------------------// // Defines to access message fields. @@ -290,6 +291,7 @@ typedef struct f1ap_drb_to_be_setup_s { f1ap_up_tnl_t up_dl_tnl[2]; uint8_t up_dl_tnl_length; rlc_mode_t rlc_mode; + nssai_t nssai; } f1ap_drb_to_be_setup_t; typedef struct f1ap_srb_to_be_setup_s { diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c index 876cd1e3a9..ff82cd3840 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.c +++ b/openair2/F1AP/f1ap_cu_ue_context_management.c @@ -398,15 +398,12 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance, /* 12.1.2.2 sNSSAI */ { /* sST */ - OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "1", 1); + OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, (char *)&f1ap_ue_context_setup_req->drbs_to_be_setup[i].nssai.sst, 1); /* OPTIONAL */ - /* sD */ - if (0) { - asn1cCalloc(DRB_Information->sNSSAI.sD, tmp); - OCTET_STRING_fromBuf(tmp, "asdsa1d32sa1d31asd31as", - strlen("asdsa1d32sa1d31asd31as")); - } + const uint32_t sd = (f1ap_ue_context_setup_req->drbs_to_be_setup[i].nssai.sd & 0xffffff); + if (sd != 0xffffff) + OCTET_STRING_fromBuf(DRB_Information->sNSSAI.sD, (char *)&sd, 3); } /* OPTIONAL */ @@ -1313,16 +1310,12 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, f1ap_ue_context /* 12.1.2.2 sNSSAI */ { /* sST */ - - OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "1", 1); + OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, (char *)&f1ap_ue_context_modification_req->drbs_to_be_setup[i].nssai.sst, 1); /* OPTIONAL */ - /* sD */ - if (0) { - asn1cCalloc(DRB_Information->sNSSAI.sD, tmp); - OCTET_STRING_fromBuf(tmp, "asdsa1d32sa1d31asd31as", - strlen("asdsa1d32sa1d31asd31as")); - } + const uint32_t sd = (f1ap_ue_context_modification_req->drbs_to_be_setup[i].nssai.sd & 0xffffff); + if (sd != 0xffffff) + OCTET_STRING_fromBuf(DRB_Information->sNSSAI.sD, (char *)&sd, 3); } /* OPTIONAL */ diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c index 91cb157c9d..49e19f7697 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.c +++ b/openair2/F1AP/f1ap_du_ue_context_management.c @@ -879,6 +879,27 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, sctp_assoc_t drb_p->rlc_mode = RLC_MODE_TM; break; } + + if (drbs_tobesetupmod_item_p->qoSInformation.present == F1AP_QoSInformation_PR_eUTRANQoS) { + AssertFatal(false, "Decode of eUTRANQoS is not implemented yet"); + } // EUTRAN QoS Information + else { + /* 12.1.2 DRB_Information */ + if (drbs_tobesetupmod_item_p->qoSInformation.present == F1AP_QoSInformation_PR_choice_extension) { + F1AP_QoSInformation_ExtIEs_t *ie = + (F1AP_QoSInformation_ExtIEs_t *)drbs_tobesetupmod_item_p->qoSInformation.choice.choice_extension; + if (ie->id == F1AP_ProtocolIE_ID_id_DRB_Information && ie->criticality == F1AP_Criticality_reject + && ie->value.present == F1AP_QoSInformation_ExtIEs__value_PR_DRB_Information) { + F1AP_DRB_Information_t *DRB_Information = &ie->value.choice.DRB_Information; + /* S-NSSAI */ + OCTET_STRING_TO_INT8(&DRB_Information->sNSSAI.sST, drb_p->nssai.sst); + if (DRB_Information->sNSSAI.sD != NULL) + memcpy((uint8_t *)&drb_p->nssai.sd, DRB_Information->sNSSAI.sD->buf, 3); + else + drb_p->nssai.sd = 0xffffff; + } + } + } } } -- 2.26.2