From abfa3859856e608b286bea911f2007160a569724 Mon Sep 17 00:00:00 2001 From: Angelo Athanassopoulos Date: Fri, 15 Jul 2022 16:26:33 +0200 Subject: [PATCH] Multiple DRBs - Fix MR Conflicts: 1. RLC - Removed mispositioned conditional. 2. RRC - Replaced arguements in generateDRB func & use bool. 3. RRC - Removed the MAX_DRB_PDUSESSION definition. 4. SDAP - Replaced boolean_t with bool. 5. RRC - Fixed indentation in SDAP Configuration. 6. RRC - Changed var nb_drb_to_setup to 1. --- openair2/RRC/NR/nr_rrc_defs.h | 1 - openair2/RRC/NR/rrc_gNB.c | 33 +++++++++++--------------- openair2/SDAP/nr_sdap/nr_sdap_entity.c | 4 ++-- openair2/SDAP/nr_sdap/nr_sdap_entity.h | 1 + 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h index 5d6f2f5dfb..e9d9766f41 100644 --- a/openair2/RRC/NR/nr_rrc_defs.h +++ b/openair2/RRC/NR/nr_rrc_defs.h @@ -93,7 +93,6 @@ #define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! #define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1 -#define MAX_DRB_PER_PDUSESSION 4 typedef enum { NR_RRC_OK=0, diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 71936deb69..03255359b3 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -755,10 +755,9 @@ rrc_gNB_generate_defaultRRCReconfiguration( } } -NR_DRB_ToAddMod_t *generateDRB(rrc_gNB_ue_context_t *ue_context_pP, - int iter, +NR_DRB_ToAddMod_t *generateDRB(const pdu_session_param_t *pduSession, long drb_id, - boolean_t enable_sdap, + bool enable_sdap, int do_drb_integrity, int do_drb_ciphering) { @@ -776,23 +775,23 @@ NR_DRB_ToAddMod_t *generateDRB(rrc_gNB_ue_context_t *ue_context_pP, SDAP_config->mappedQoS_FlowsToAdd = calloc(1, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); memset(SDAP_config->mappedQoS_FlowsToAdd, 0, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); - SDAP_config->pdu_Session = ue_context_pP->ue_context.pduSession[iter].param.pdusession_id; + SDAP_config->pdu_Session = pduSession->param.pdusession_id; if (enable_sdap) { - SDAP_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_present; - SDAP_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_present; + SDAP_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_present; + SDAP_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_present; } else { - SDAP_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_absent; - SDAP_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_absent; + SDAP_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_absent; + SDAP_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_absent; } SDAP_config->defaultDRB = true; - for (int qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.pduSession[iter].param.nb_qos; qos_flow_index++) + for (int qos_flow_index = 0; qos_flow_index < pduSession->param.nb_qos; qos_flow_index++) { - NR_QFI_t *qfi = calloc(1, sizeof(NR_QFI_t)); - *qfi = ue_context_pP->ue_context.pduSession[iter].param.qos[qos_flow_index].qfi; - ASN_SEQUENCE_ADD(&SDAP_config->mappedQoS_FlowsToAdd->list, qfi); + NR_QFI_t *qfi = calloc(1, sizeof(NR_QFI_t)); + *qfi = pduSession->param.qos[qos_flow_index].qfi; + ASN_SEQUENCE_ADD(&SDAP_config->mappedQoS_FlowsToAdd->list, qfi); } SDAP_config->mappedQoS_FlowsToRelease = NULL; @@ -860,7 +859,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( int pdu_sessions_done = 0; int i; uint8_t drb_id_to_setup_start = 1; - uint8_t nb_drb_to_setup = 0; + uint8_t nb_drb_to_setup = 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) NR_CellGroupConfig_t *cellGroupConfig = NULL; @@ -902,12 +901,8 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( continue; } - for(long drb_id_add = 0; drb_id_add <= nb_drb_to_setup; drb_id_add++){ - if(drb_id_add > MAX_DRB_PER_PDUSESSION) - break; - - NR_DRB_ToAddMod_t *DRB_config = generateDRB(ue_context_pP, - i, + for(long drb_id_add = 1; drb_id_add <= nb_drb_to_setup; drb_id_add++){ + NR_DRB_ToAddMod_t *DRB_config = generateDRB(&ue_context_pP->ue_context.pduSession[i], drb_id_add, rrc->configuration.enable_sdap, rrc->security.do_drb_integrity, diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c index 52f2a75169..efa93a29f7 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c @@ -303,7 +303,7 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, } } -void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t drb, bool hasSdap) { +void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t drb, bool hasSdap){ if(qfi < SDAP_MAX_QFI && qfi > SDAP_MAP_RULE_EMPTY && drb > 0 && @@ -381,7 +381,7 @@ void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, { LOG_D(SDAP, "RRC Configuring SDAP Entity\n"); uint8_t qfi = 0; - boolean_t hasSdap = true; + bool hasSdap = true; for(int i = 0; i < mappedQFIs2AddCount; i++){ qfi = mapped_qfi_2_add[i]; diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.h b/openair2/SDAP/nr_sdap/nr_sdap_entity.h index 1fdad51e5a..82aa267ebf 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap_entity.h +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.h @@ -23,6 +23,7 @@ #define _NR_SDAP_ENTITY_H_ #include +#include #include "openair2/COMMON/platform_types.h" #include "openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "NR_RadioBearerConfig.h"