Introduce triggering of PDCP and RLC configuration for the list of added DRBs
-Upon reception of SgNB Addition Request from the eNB, the gNB configures pdcp and rlc entities for the list of DRBs provided from the eNB
This commit is contained in:
@@ -109,7 +109,8 @@ static void consider_retransmission(nr_rlc_entity_am_t *entity,
|
|||||||
* upper layers should deal with this condition, internally it's better
|
* upper layers should deal with this condition, internally it's better
|
||||||
* for the RLC code to keep going with this segment (we only remove
|
* for the RLC code to keep going with this segment (we only remove
|
||||||
* a segment that was ACKed)
|
* a segment that was ACKed)
|
||||||
*/
|
*/
|
||||||
|
LOG_D(RLC, "RLC segment to be added at the ReTx list \n");
|
||||||
nr_rlc_sdu_segment_list_append(&entity->retransmit_list,
|
nr_rlc_sdu_segment_list_append(&entity->retransmit_list,
|
||||||
&entity->retransmit_end,
|
&entity->retransmit_end,
|
||||||
cur);
|
cur);
|
||||||
@@ -1588,6 +1589,8 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity,
|
|||||||
|
|
||||||
sdu = nr_rlc_new_sdu(buffer, size, sdu_id);
|
sdu = nr_rlc_new_sdu(buffer, size, sdu_id);
|
||||||
|
|
||||||
|
LOG_I(RLC, "Created new RLC SDU and append it to the RLC list \n");
|
||||||
|
|
||||||
nr_rlc_sdu_segment_list_append(&entity->tx_list, &entity->tx_end, sdu);
|
nr_rlc_sdu_segment_list_append(&entity->tx_list, &entity->tx_end, sdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
|
|||||||
int n_physical_antenna_ports,
|
int n_physical_antenna_ports,
|
||||||
int initial_csi_index);
|
int initial_csi_index);
|
||||||
|
|
||||||
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig);
|
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig, long eps_BearerIdentity, long drb_Identity);
|
||||||
|
|
||||||
int generate_CG_Config(gNB_RRC_INST *rrc,
|
int generate_CG_Config(gNB_RRC_INST *rrc,
|
||||||
NR_CG_Config_t *cg_Config,
|
NR_CG_Config_t *cg_Config,
|
||||||
|
|||||||
@@ -36,9 +36,32 @@
|
|||||||
//#include "NR_UE-CapabilityRAT-ContainerList.h"
|
//#include "NR_UE-CapabilityRAT-ContainerList.h"
|
||||||
#include "LTE_UE-CapabilityRAT-ContainerList.h"
|
#include "LTE_UE-CapabilityRAT-ContainerList.h"
|
||||||
#include "NR_CG-Config.h"
|
#include "NR_CG-Config.h"
|
||||||
|
//#include "NR_SRB-ToAddModList.h"
|
||||||
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
|
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
|
||||||
#include "openair2/RRC/LTE/rrc_eNB_GTPV1U.h"
|
#include "openair2/RRC/LTE/rrc_eNB_GTPV1U.h"
|
||||||
|
|
||||||
|
extern boolean_t nr_rrc_pdcp_config_asn1_req(
|
||||||
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
|
NR_SRB_ToAddModList_t *const srb2add_list,
|
||||||
|
NR_DRB_ToAddModList_t *const drb2add_list,
|
||||||
|
NR_DRB_ToReleaseList_t *const drb2release_list,
|
||||||
|
const uint8_t security_modeP,
|
||||||
|
uint8_t *const kRRCenc,
|
||||||
|
uint8_t *const kRRCint,
|
||||||
|
uint8_t *const kUPenc
|
||||||
|
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
|
||||||
|
,LTE_PMCH_InfoList_r9_t *pmch_InfoList_r9
|
||||||
|
#endif
|
||||||
|
,rb_id_t *const defaultDRB,
|
||||||
|
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
|
||||||
|
|
||||||
|
extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP,
|
||||||
|
const NR_SRB_ToAddModList_t * const srb2add_listP,
|
||||||
|
const NR_DRB_ToAddModList_t * const drb2add_listP,
|
||||||
|
const NR_DRB_ToReleaseList_t * const drb2release_listP,
|
||||||
|
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
|
||||||
|
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
|
||||||
|
|
||||||
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, LTE_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m) {
|
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, LTE_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m) {
|
||||||
|
|
||||||
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
||||||
@@ -132,8 +155,13 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
carrier->initial_csi_index[rrc->Nb_ue]);
|
carrier->initial_csi_index[rrc->Nb_ue]);
|
||||||
|
|
||||||
ue_context_p->ue_context.rb_config = calloc(1,sizeof(NR_RRCReconfiguration_t));
|
ue_context_p->ue_context.rb_config = calloc(1,sizeof(NR_RRCReconfiguration_t));
|
||||||
|
//NR_CellGroupConfig_t *secondaryCellGroup = ue_context_p->ue_context.secondaryCellGroup;
|
||||||
|
//secondaryCellGroup->rlc_BearerToAddModList->list.array[0]->rlc_Config
|
||||||
|
|
||||||
fill_default_rbconfig(ue_context_p->ue_context.rb_config);
|
if(m!=NULL)
|
||||||
|
fill_default_rbconfig(ue_context_p->ue_context.rb_config, m->e_rabs_tobeadded[0].e_rab_id, m->e_rabs_tobeadded[0].drb_ID);
|
||||||
|
else
|
||||||
|
fill_default_rbconfig(ue_context_p->ue_context.rb_config, 5, 1);
|
||||||
ue_context_p->ue_id_rnti = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
ue_context_p->ue_id_rnti = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
||||||
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
||||||
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
||||||
@@ -232,6 +260,27 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
1, // add_ue flag
|
1, // add_ue flag
|
||||||
ue_context_p->ue_id_rnti,
|
ue_context_p->ue_id_rnti,
|
||||||
ue_context_p->ue_context.secondaryCellGroup);
|
ue_context_p->ue_context.secondaryCellGroup);
|
||||||
|
|
||||||
|
nr_rrc_pdcp_config_asn1_req(
|
||||||
|
&ctxt,
|
||||||
|
(NR_SRB_ToAddModList_t *) NULL,
|
||||||
|
ue_context_p->ue_context.rb_config->drb_ToAddModList ,
|
||||||
|
ue_context_p->ue_context.rb_config->drb_ToReleaseList,
|
||||||
|
0xff,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
|
||||||
|
|
||||||
|
nr_rrc_rlc_config_asn1_req (&ctxt,
|
||||||
|
(NR_SRB_ToAddModList_t *) NULL,
|
||||||
|
ue_context_p->ue_context.rb_config->drb_ToAddModList,
|
||||||
|
ue_context_p->ue_context.rb_config->drb_ToReleaseList,
|
||||||
|
(LTE_PMCH_InfoList_r9_t *) NULL,
|
||||||
|
ue_context_p->ue_context.secondaryCellGroup);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
|||||||
|
|
||||||
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
||||||
|
|
||||||
RLC_BearerConfig->logicalChannelIdentity = 4;
|
RLC_BearerConfig->logicalChannelIdentity = 3;
|
||||||
RLC_BearerConfig->servedRadioBearer = calloc(1,sizeof(*RLC_BearerConfig->servedRadioBearer));
|
RLC_BearerConfig->servedRadioBearer = calloc(1,sizeof(*RLC_BearerConfig->servedRadioBearer));
|
||||||
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
|
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
|
||||||
|
|
||||||
@@ -2046,7 +2046,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
|
|||||||
reconfig->nonCriticalExtension = NULL;
|
reconfig->nonCriticalExtension = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig) {
|
void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig, long eps_BearerIdentity, long drb_Identity) {
|
||||||
|
|
||||||
rbconfig->srb_ToAddModList = NULL;
|
rbconfig->srb_ToAddModList = NULL;
|
||||||
rbconfig->srb3_ToRelease = NULL;
|
rbconfig->srb3_ToRelease = NULL;
|
||||||
@@ -2054,8 +2054,8 @@ void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig) {
|
|||||||
NR_DRB_ToAddMod_t *drb_ToAddMod = calloc(1,sizeof(*drb_ToAddMod));
|
NR_DRB_ToAddMod_t *drb_ToAddMod = calloc(1,sizeof(*drb_ToAddMod));
|
||||||
drb_ToAddMod->cnAssociation = calloc(1,sizeof(*drb_ToAddMod->cnAssociation));
|
drb_ToAddMod->cnAssociation = calloc(1,sizeof(*drb_ToAddMod->cnAssociation));
|
||||||
drb_ToAddMod->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity;
|
drb_ToAddMod->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity;
|
||||||
drb_ToAddMod->cnAssociation->choice.eps_BearerIdentity=5;
|
drb_ToAddMod->cnAssociation->choice.eps_BearerIdentity= eps_BearerIdentity; //5;
|
||||||
drb_ToAddMod->drb_Identity = 1;
|
drb_ToAddMod->drb_Identity = drb_Identity;
|
||||||
drb_ToAddMod->reestablishPDCP = NULL;
|
drb_ToAddMod->reestablishPDCP = NULL;
|
||||||
drb_ToAddMod->recoverPDCP = NULL;
|
drb_ToAddMod->recoverPDCP = NULL;
|
||||||
drb_ToAddMod->pdcp_Config = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config));
|
drb_ToAddMod->pdcp_Config = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config));
|
||||||
|
|||||||
Reference in New Issue
Block a user