From e469278b0a038426ca711bb090ce1f2511717024 Mon Sep 17 00:00:00 2001 From: KARIM BOUTIBA Date: Mon, 14 Nov 2022 13:33:24 +0100 Subject: [PATCH] Fix ASN.1 encoding for multiple DRBs --- openair2/RRC/NR/MESSAGES/asn1_msg.c | 2 +- openair2/RRC/NR/rrc_gNB.c | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 1c2f38069d..32ab7615c7 100755 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -1242,7 +1242,7 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGr // DRB Configuration for (int i = bearer_id_start; i < bearer_id_start + nb_bearers_to_setup; i++ ){ const NR_RLC_Config_PR rlc_conf = use_rlc_um_for_drb ? NR_RLC_Config_PR_um_Bi_Directional : NR_RLC_Config_PR_am; - NR_RLC_BearerConfig_t *rlc_BearerConfig = get_DRB_RLC_BearerConfig(3 + i, i, rlc_conf, priority[i-bearer_id_start]); + NR_RLC_BearerConfig_t *rlc_BearerConfig = get_DRB_RLC_BearerConfig(3 + i, i, rlc_conf, priority[i-1]); ASN_SEQUENCE_ADD(&cellGroupConfig->rlc_BearerToAddModList->list, rlc_BearerConfig); ASN_SEQUENCE_ADD(&ue_context_mastercellGroup->rlc_BearerToAddModList->list, rlc_BearerConfig); } diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index fdd6fb9544..9938604335 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -784,7 +784,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( int qos_flow_index = 0; int pdu_sessions_done = 0; int i; - uint8_t drb_id_to_setup_start = 1; + uint8_t drb_id_to_setup_start = 0; uint8_t nb_drb_to_setup = rrc->configuration.drbs; long drb_priority[NGAP_MAX_DRBS_PER_UE]; NR_CellGroupConfig_t *cellGroupConfig = NULL; @@ -903,6 +903,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( rrc->configuration.enable_sdap, rrc->security.do_drb_integrity, rrc->security.do_drb_ciphering); + if (drb_id_to_setup_start == 0) drb_id_to_setup_start = DRB_config->drb_Identity; ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config); ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config); } @@ -3238,9 +3239,6 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha } } - uint8_t drb_id_to_setup_start = 0; - uint8_t nb_drb_to_setup = 0; - long drb_priority[1] = {13}; // For now, we assume only one drb per pdu sessions with a default preiority (will be dynamique in future) /* Configure SRB2 */ NR_SRB_ToAddMod_t *SRB2_config = NULL; @@ -3264,6 +3262,9 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha /* Configure DRB */ NR_DRB_ToAddMod_t *DRB_config = NULL; NR_DRB_ToAddModList_t *DRB_configList = NULL; + uint8_t drb_id_to_setup_start = 0; + uint8_t nb_drb_to_setup = 0; + long drb_priority[1] = {13}; // For now, we assume only one drb per pdu session with a default priority (will be dynamic in future) if(req->drbs_to_be_setup_length>0){ if(ue_context_p->ue_context.DRB_configList == NULL){ ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList)); @@ -3273,13 +3274,13 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha for (int i=0; idrbs_to_be_setup_length; i++){ DRB_config = CALLOC(1, sizeof(*DRB_config)); DRB_config->drb_Identity = req->drbs_to_be_setup[i].drb_id; + if (drb_id_to_setup_start == 0) drb_id_to_setup_start = DRB_config->drb_Identity; ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config); f1ap_drb_to_be_setup_t drb_p = req->drbs_to_be_setup[i]; transport_layer_addr_t addr; memcpy(addr.buffer, &drb_p.up_ul_tnl[0].tl_address, sizeof(drb_p.up_ul_tnl[0].tl_address)); addr.length=sizeof(drb_p.up_ul_tnl[0].tl_address)*8; extern instance_t DUuniqInstance; - if (!drb_id_to_setup_start) drb_id_to_setup_start = drb_p.drb_id; incoming_teid = newGtpuCreateTunnel(DUuniqInstance, req->rnti, drb_p.drb_id, @@ -3407,6 +3408,8 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co /* Configure DRB */ NR_DRB_ToAddMod_t *DRB_config = NULL; NR_DRB_ToAddModList_t *DRB_configList = NULL; + uint8_t drb_id_to_setup_start = 0; + long drb_priority[1] = {13}; // For now, we assume only one drb per pdu session with a default priority (will be dynamic in future) if(req->drbs_to_be_setup_length>0){ if(ue_context_p->ue_context.DRB_configList == NULL){ ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList)); @@ -3415,6 +3418,7 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co for (int i=0; idrbs_to_be_setup_length; i++){ DRB_config = CALLOC(1, sizeof(*DRB_config)); DRB_config->drb_Identity = req->drbs_to_be_setup[i].drb_id; + if (drb_id_to_setup_start == 0) drb_id_to_setup_start = DRB_config->drb_Identity; ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config); f1ap_drb_to_be_setup_t drb_p = req->drbs_to_be_setup[i]; transport_layer_addr_t addr; @@ -3436,8 +3440,6 @@ static void rrc_DU_process_ue_context_modification_request(MessageDef *msg_p, co if(req->srbs_to_be_setup_length>0 || req->drbs_to_be_setup_length>0){ cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t)); - uint8_t drb_id_to_setup_start = 1; - long drb_priority[1] = {13}; // For now, we assume only one drb per pdu sessions with a default preiority (will be dynamique in future) fill_mastercellGroupConfig(cellGroupConfig, ue_context_p->ue_context.masterCellGroup, rrc->um_on_default_drb,