Commit e1861340 authored by matzakos's avatar matzakos

Preliminary work for separation of SRB from DRB handling in RLC

-For the moment SRBs are preconfigured (as was done for DRBs in noS1 mode)
but this should be removed
parent e1a92ead
...@@ -195,6 +195,7 @@ void nr_process_mac_pdu( ...@@ -195,6 +195,7 @@ void nr_process_mac_pdu(
// MAC SDUs // MAC SDUs
case UL_SCH_LCID_SRB1: case UL_SCH_LCID_SRB1:
//break;
case UL_SCH_LCID_DTCH: case UL_SCH_LCID_DTCH:
// check if LCID is valid at current time. // check if LCID is valid at current time.
if(((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->F){ if(((NR_MAC_SUBHEADER_SHORT *)pdu_ptr)->F){
......
...@@ -100,7 +100,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con ...@@ -100,7 +100,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con
const NR_DRB_ToAddModList_t * const drb2add_listP, const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP, const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_srb_bearer2add_list,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_drb_bearer2add_list);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void void
...@@ -1016,7 +1017,8 @@ void nr_DRB_preconfiguration(uint16_t crnti) ...@@ -1016,7 +1017,8 @@ void nr_DRB_preconfiguration(uint16_t crnti)
{ {
NR_RadioBearerConfig_t *rbconfig = NULL; NR_RadioBearerConfig_t *rbconfig = NULL;
struct NR_CellGroupConfig__rlc_BearerToAddModList *Rlc_Bearer_ToAdd_list = NULL; struct NR_CellGroupConfig__rlc_BearerToAddModList *Rlc_DRB_Bearer_ToAdd_list = NULL;
struct NR_CellGroupConfig__rlc_BearerToAddModList *Rlc_SRB_Bearer_ToAdd_list = NULL;
protocol_ctxt_t ctxt; protocol_ctxt_t ctxt;
//fill_default_rbconfig(rb_config, 5, 1); //fill_default_rbconfig(rb_config, 5, 1);
rbconfig = calloc(1, sizeof(*rbconfig)); rbconfig = calloc(1, sizeof(*rbconfig));
...@@ -1074,14 +1076,21 @@ void nr_DRB_preconfiguration(uint16_t crnti) ...@@ -1074,14 +1076,21 @@ void nr_DRB_preconfiguration(uint16_t crnti)
xer_fprint(stdout, &asn_DEF_NR_RadioBearerConfig, (const void*)rbconfig); xer_fprint(stdout, &asn_DEF_NR_RadioBearerConfig, (const void*)rbconfig);
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig)); /*Adding SRB RLC configuration to the corresponding list*/
nr_rlc_bearer_init(RLC_BearerConfig); NR_RLC_BearerConfig_t *RLC_SRB_BearerConfig = calloc(1,sizeof(*RLC_SRB_BearerConfig));
// nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_um_Bi_Directional); nr_rlc_bearer_init(RLC_SRB_BearerConfig, NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity);
nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_am); nr_drb_config(RLC_SRB_BearerConfig->rlc_Config, NR_RLC_Config_PR_am);
nr_rlc_bearer_init_ul_spec(RLC_BearerConfig->mac_LogicalChannelConfig); nr_rlc_bearer_init_ul_spec(RLC_SRB_BearerConfig->mac_LogicalChannelConfig);
Rlc_SRB_Bearer_ToAdd_list = calloc(1,sizeof(*Rlc_SRB_Bearer_ToAdd_list));
Rlc_Bearer_ToAdd_list = calloc(1,sizeof(*Rlc_Bearer_ToAdd_list)); ASN_SEQUENCE_ADD(&Rlc_SRB_Bearer_ToAdd_list->list, RLC_SRB_BearerConfig);
ASN_SEQUENCE_ADD(&Rlc_Bearer_ToAdd_list->list, RLC_BearerConfig);
/*Adding DRB RLC configuration to the corresponding list*/
NR_RLC_BearerConfig_t *RLC_DRB_BearerConfig = calloc(1,sizeof(*RLC_DRB_BearerConfig));
nr_rlc_bearer_init(RLC_DRB_BearerConfig, NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity);
nr_drb_config(RLC_DRB_BearerConfig->rlc_Config, NR_RLC_Config_PR_am);
nr_rlc_bearer_init_ul_spec(RLC_DRB_BearerConfig->mac_LogicalChannelConfig);
Rlc_DRB_Bearer_ToAdd_list = calloc(1,sizeof(*Rlc_DRB_Bearer_ToAdd_list));
ASN_SEQUENCE_ADD(&Rlc_DRB_Bearer_ToAdd_list->list, RLC_DRB_BearerConfig);
if (ENB_NAS_USE_TUN){ if (ENB_NAS_USE_TUN){
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_YES, crnti, 0, 0, 0); PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_YES, crnti, 0, 0, 0);
...@@ -1102,7 +1111,7 @@ void nr_DRB_preconfiguration(uint16_t crnti) ...@@ -1102,7 +1111,7 @@ void nr_DRB_preconfiguration(uint16_t crnti)
NULL, NULL,
NULL, NULL,
NULL, NULL,
Rlc_Bearer_ToAdd_list); Rlc_DRB_Bearer_ToAdd_list);
} }
if (!NODE_IS_CU(node_type)) { if (!NODE_IS_CU(node_type)) {
...@@ -1111,7 +1120,8 @@ void nr_DRB_preconfiguration(uint16_t crnti) ...@@ -1111,7 +1120,8 @@ void nr_DRB_preconfiguration(uint16_t crnti)
rbconfig->drb_ToAddModList, rbconfig->drb_ToAddModList,
rbconfig->drb_ToReleaseList, rbconfig->drb_ToReleaseList,
(LTE_PMCH_InfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
Rlc_Bearer_ToAdd_list); Rlc_SRB_Bearer_ToAdd_list,
Rlc_DRB_Bearer_ToAdd_list);
} }
LOG_D(PDCP, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti); LOG_D(PDCP, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti);
...@@ -1282,7 +1292,7 @@ boolean_t pdcp_data_req( ...@@ -1282,7 +1292,7 @@ boolean_t pdcp_data_req(
#endif #endif
) )
{ {
if (rb_id < 4) { if (srb_flagP) {
return pdcp_data_req_srb(ctxt_pP, rb_id, muiP, confirmP, sdu_buffer_size, return pdcp_data_req_srb(ctxt_pP, rb_id, muiP, confirmP, sdu_buffer_size,
sdu_buffer); sdu_buffer);
} }
......
...@@ -55,18 +55,24 @@ static uint64_t nr_rlc_current_time; ...@@ -55,18 +55,24 @@ static uint64_t nr_rlc_current_time;
static int nr_rlc_current_time_last_frame; static int nr_rlc_current_time_last_frame;
static int nr_rlc_current_time_last_subframe; static int nr_rlc_current_time_last_subframe;
void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig){ void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig, NR_RLC_BearerConfig__servedRadioBearer_PR rb_type){
RLC_BearerConfig->servedRadioBearer = calloc(1, sizeof(*RLC_BearerConfig->servedRadioBearer)); RLC_BearerConfig->servedRadioBearer = calloc(1, sizeof(*RLC_BearerConfig->servedRadioBearer));
RLC_BearerConfig->reestablishRLC = calloc(1, sizeof(*RLC_BearerConfig->reestablishRLC)); RLC_BearerConfig->reestablishRLC = calloc(1, sizeof(*RLC_BearerConfig->reestablishRLC));
RLC_BearerConfig->rlc_Config = calloc(1, sizeof(*RLC_BearerConfig->rlc_Config)); RLC_BearerConfig->rlc_Config = calloc(1, sizeof(*RLC_BearerConfig->rlc_Config));
RLC_BearerConfig->mac_LogicalChannelConfig = calloc(1, sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig)); RLC_BearerConfig->mac_LogicalChannelConfig = calloc(1, sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig));
*RLC_BearerConfig->reestablishRLC = NR_RLC_BearerConfig__reestablishRLC_true;
if(rb_type == NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity){
RLC_BearerConfig->logicalChannelIdentity = 4; RLC_BearerConfig->logicalChannelIdentity = 4;
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity; RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
RLC_BearerConfig->servedRadioBearer->choice.drb_Identity = 1; RLC_BearerConfig->servedRadioBearer->choice.drb_Identity = 1;
*RLC_BearerConfig->reestablishRLC = NR_RLC_BearerConfig__reestablishRLC_true; }
else{
RLC_BearerConfig->logicalChannelIdentity = 1;
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity;
RLC_BearerConfig->servedRadioBearer->choice.srb_Identity = 1;
}
} }
...@@ -631,13 +637,13 @@ rb_found: ...@@ -631,13 +637,13 @@ rb_found:
#endif #endif
} }
static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s) static void add_srb_am(int rnti, struct NR_SRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig)
{ {
nr_rlc_entity_t *nr_rlc_am; nr_rlc_entity_t *nr_rlc_am;
nr_rlc_ue_t *ue; nr_rlc_ue_t *ue;
struct LTE_SRB_ToAddMod__rlc_Config *r = s->rlc_Config; struct NR_RLC_Config *r = rlc_BearerConfig->rlc_Config;
struct LTE_SRB_ToAddMod__logicalChannelConfig *l = s->logicalChannelConfig; struct NR_LogicalChannelConfig *l = rlc_BearerConfig->mac_LogicalChannelConfig;
int srb_id = s->srb_Identity; int srb_id = s->srb_Identity;
int logical_channel_group; int logical_channel_group;
...@@ -649,55 +655,37 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s) ...@@ -649,55 +655,37 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
int t_reassembly; int t_reassembly;
int sn_field_length; int sn_field_length;
if (srb_id != 1 && srb_id != 2) { if (srb_id > 3) {
LOG_E(RLC, "%s:%d:%s: fatal, bad srb id %d\n", LOG_E(RLC, "%s:%d:%s: fatal, bad srb id %d\n",
__FILE__, __LINE__, __FUNCTION__, srb_id); __FILE__, __LINE__, __FUNCTION__, srb_id);
exit(1); exit(1);
} }
switch (l->present) { logical_channel_group = *l->ul_SpecificParameters->logicalChannelGroup;
case LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue:
logical_channel_group = *l->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup;
break;
case LTE_SRB_ToAddMod__logicalChannelConfig_PR_defaultValue:
/* default value from 36.331 9.2.1 */
logical_channel_group = 0;
break;
default:
LOG_E(RLC, "%s:%d:%s: fatal error\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
}
/* TODO: accept other values? */ /* TODO: accept other values? */
if (logical_channel_group != 0) { if (logical_channel_group != 1) {
LOG_E(RLC, "%s:%d:%s: fatal error\n", __FILE__, __LINE__, __FUNCTION__); LOG_E(RLC, "%s:%d:%s: fatal error\n", __FILE__, __LINE__, __FUNCTION__);
exit(1); exit(1);
} }
switch (r->present) { switch (r->present) {
case LTE_SRB_ToAddMod__rlc_Config_PR_explicitValue: { case NR_RLC_Config_PR_am: {
struct LTE_RLC_Config__am *am; struct NR_RLC_Config__am *am;
if (r->choice.explicitValue.present != LTE_RLC_Config_PR_am) { am = r->choice.am;
LOG_E(RLC, "%s:%d:%s: fatal error, must be RLC AM\n", t_reassembly = decode_t_reassembly(am->dl_AM_RLC.t_Reassembly);
__FILE__, __LINE__, __FUNCTION__);
exit(1);
}
am = &r->choice.explicitValue.choice.am;
t_status_prohibit = decode_t_status_prohibit(am->dl_AM_RLC.t_StatusProhibit); t_status_prohibit = decode_t_status_prohibit(am->dl_AM_RLC.t_StatusProhibit);
t_poll_retransmit = decode_t_poll_retransmit(am->ul_AM_RLC.t_PollRetransmit); t_poll_retransmit = decode_t_poll_retransmit(am->ul_AM_RLC.t_PollRetransmit);
poll_pdu = decode_poll_pdu(am->ul_AM_RLC.pollPDU); poll_pdu = decode_poll_pdu(am->ul_AM_RLC.pollPDU);
poll_byte = decode_poll_byte(am->ul_AM_RLC.pollByte); poll_byte = decode_poll_byte(am->ul_AM_RLC.pollByte);
max_retx_threshold = decode_max_retx_threshold(am->ul_AM_RLC.maxRetxThreshold); max_retx_threshold = decode_max_retx_threshold(am->ul_AM_RLC.maxRetxThreshold);
break; if (*am->dl_AM_RLC.sn_FieldLength != *am->ul_AM_RLC.sn_FieldLength) {
LOG_E(RLC, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
} }
case LTE_SRB_ToAddMod__rlc_Config_PR_defaultValue: sn_field_length = decode_sn_field_length_am(*am->dl_AM_RLC.sn_FieldLength);
/* default values from 36.331 9.2.1 */
t_status_prohibit = 0;
t_poll_retransmit = 45;
poll_pdu = -1;
poll_byte = -1;
max_retx_threshold = 4;
break; break;
}
default: default:
LOG_E(RLC, "%s:%d:%s: fatal error\n", __FILE__, __LINE__, __FUNCTION__); LOG_E(RLC, "%s:%d:%s: fatal error\n", __FILE__, __LINE__, __FUNCTION__);
exit(1); exit(1);
...@@ -706,16 +694,8 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s) ...@@ -706,16 +694,8 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
nr_rlc_manager_lock(nr_rlc_ue_manager); nr_rlc_manager_lock(nr_rlc_ue_manager);
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti); ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
if (ue->srb[srb_id-1] != NULL) { if (ue->srb[srb_id-1] != NULL) {
LOG_W(RLC, "%s:%d:%s: SRB %d already exists for UE with RNTI %x, do nothing\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti); LOG_W(RLC, "%s:%d:%s: SRB %d already exists for UE with RNTI %d, do nothing\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
} else { } else {
/* hack: hardcode values for NR */
t_poll_retransmit = 45;
t_reassembly = 35;
t_status_prohibit = 0;
poll_pdu = -1;
poll_byte = -1;
max_retx_threshold = 8;
sn_field_length = 12;
nr_rlc_am = new_nr_rlc_entity_am(100000, nr_rlc_am = new_nr_rlc_entity_am(100000,
100000, 100000,
deliver_sdu, ue, deliver_sdu, ue,
...@@ -727,12 +707,26 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s) ...@@ -727,12 +707,26 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
sn_field_length); sn_field_length);
nr_rlc_ue_add_srb_rlc_entity(ue, srb_id, nr_rlc_am); nr_rlc_ue_add_srb_rlc_entity(ue, srb_id, nr_rlc_am);
LOG_D(RLC, "%s:%d:%s: added srb %d to ue %d\n", LOG_D(RLC, "%s:%d:%s: added srb %d to UE with RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
__FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
} }
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
} }
static void add_srb(int rnti, struct NR_SRB_ToAddMod *s, struct NR_RLC_BearerConfig *rlc_BearerConfig)
{
switch (rlc_BearerConfig->rlc_Config->present) {
case NR_RLC_Config_PR_am:
add_srb_am(rnti, s, rlc_BearerConfig);
break;
/*Missing case for RLC TM corresponding to SRB0 */
default:
LOG_E(RLC, "%s:%d:%s: fatal: unhandled SRB type\n",
__FILE__, __LINE__, __FUNCTION__);
exit(1);
}
LOG_I(RLC, "%s:%s:%d: added SRB to UE with RNTI %x\n", __FILE__, __FUNCTION__, __LINE__, rnti);
}
static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig) static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig)
{ {
nr_rlc_entity_t *nr_rlc_am; nr_rlc_entity_t *nr_rlc_am;
...@@ -814,6 +808,8 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_ ...@@ -814,6 +808,8 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
} }
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
} }
static void srb_add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig) static void srb_add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig)
{ {
nr_rlc_entity_t *nr_rlc_am; nr_rlc_entity_t *nr_rlc_am;
...@@ -1054,11 +1050,12 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP ...@@ -1054,11 +1050,12 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
} }
rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP, rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP,
const LTE_SRB_ToAddModList_t * const srb2add_listP, const NR_SRB_ToAddModList_t * const srb2add_listP,
const NR_DRB_ToAddModList_t * const drb2add_listP, const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP, const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list) struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_srb_bearer2add_list,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_drb_bearer2add_list)
{ {
int rnti = ctxt_pP->rnti; int rnti = ctxt_pP->rnti;
int i; int i;
...@@ -1084,16 +1081,15 @@ rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt ...@@ -1084,16 +1081,15 @@ rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt
if (srb2add_listP != NULL) { if (srb2add_listP != NULL) {
for (i = 0; i < srb2add_listP->list.count; i++) { for (i = 0; i < srb2add_listP->list.count; i++) {
// add_srb(rnti, srb2add_listP->list.array[i]); if(rlc_srb_bearer2add_list != NULL)
if(drb2add_listP != NULL && rlc_bearer2add_list != NULL) add_srb(rnti, srb2add_listP->list.array[i], rlc_srb_bearer2add_list->list.array[i]);
srb_add_drb_am(rnti, drb2add_listP->list.array[0], rlc_bearer2add_list->list.array[0]);
} }
} }
if (drb2add_listP != NULL) { if (drb2add_listP != NULL) {
for (i = 0; i < drb2add_listP->list.count; i++) { for (i = 0; i < drb2add_listP->list.count; i++) {
if(rlc_bearer2add_list != NULL) if(rlc_drb_bearer2add_list != NULL)
add_drb(rnti, drb2add_listP->list.array[i], rlc_bearer2add_list->list.array[i]); add_drb(rnti, drb2add_listP->list.array[i], rlc_drb_bearer2add_list->list.array[i]);
} }
} }
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
struct NR_RLC_Config; struct NR_RLC_Config;
struct NR_LogicalChannelConfig; struct NR_LogicalChannelConfig;
void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig); void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig, NR_RLC_BearerConfig__servedRadioBearer_PR rb_type);
void nr_drb_config(struct NR_RLC_Config *rlc_Config, NR_RLC_Config_PR rlc_config_pr); void nr_drb_config(struct NR_RLC_Config *rlc_Config, NR_RLC_Config_PR rlc_config_pr);
......
...@@ -116,7 +116,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con ...@@ -116,7 +116,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con
const NR_DRB_ToAddModList_t * const drb2add_listP, const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP, const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_srb_bearer2add_list,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_drb_bearer2add_list);
static inline uint64_t bitStr_to_uint64(BIT_STRING_t *asn); static inline uint64_t bitStr_to_uint64(BIT_STRING_t *asn);
...@@ -1028,6 +1029,7 @@ rrc_gNB_process_RRCReconfigurationComplete( ...@@ -1028,6 +1029,7 @@ rrc_gNB_process_RRCReconfigurationComplete(
DRB_configList, DRB_configList,
DRB_Release_configList2, DRB_Release_configList2,
NULL, NULL,
NULL,
NULL); NULL);
} }
#endif #endif
......
...@@ -60,7 +60,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con ...@@ -60,7 +60,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con
const NR_DRB_ToAddModList_t * const drb2add_listP, const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP, const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_srb_bearer2add_list,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_drb_bearer2add_list);
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info) { void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info) {
struct rrc_gNB_ue_context_s *ue_context_p = NULL; struct rrc_gNB_ue_context_s *ue_context_p = NULL;
...@@ -298,6 +299,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_ ...@@ -298,6 +299,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
ue_context_p->ue_context.rb_config->drb_ToAddModList, ue_context_p->ue_context.rb_config->drb_ToAddModList,
ue_context_p->ue_context.rb_config->drb_ToReleaseList, ue_context_p->ue_context.rb_config->drb_ToReleaseList,
(LTE_PMCH_InfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
NULL,
ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList); ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
LOG_D(RRC, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti); LOG_D(RRC, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti);
......
...@@ -171,7 +171,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco ...@@ -171,7 +171,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
memset(secondaryCellGroup,0,sizeof(NR_CellGroupConfig_t)); memset(secondaryCellGroup,0,sizeof(NR_CellGroupConfig_t));
secondaryCellGroup->cellGroupId = scg_id; secondaryCellGroup->cellGroupId = scg_id;
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig)); NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
nr_rlc_bearer_init(RLC_BearerConfig); nr_rlc_bearer_init(RLC_BearerConfig, NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity);
if (get_softmodem_params()->do_ra) if (get_softmodem_params()->do_ra)
nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_um_Bi_Directional); nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_um_Bi_Directional);
else else
......
...@@ -198,7 +198,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con ...@@ -198,7 +198,8 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con
const NR_DRB_ToAddModList_t * const drb2add_listP, const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP, const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP, const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list); struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_srb_bearer2add_list,
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_drb_bearer2add_list);
// from LTE-RRC DL-DCCH RRCConnectionReconfiguration nr-secondary-cell-group-config (encoded) // from LTE-RRC DL-DCCH RRCConnectionReconfiguration nr-secondary-cell-group-config (encoded)
int8_t nr_rrc_ue_decode_secondary_cellgroup_config( int8_t nr_rrc_ue_decode_secondary_cellgroup_config(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment