modifications for SRB0 to allow multiple UE contexts in case of delayed CCCH reception in CU/DU split (moved SRB0 from carrier to UE context)
This commit is contained in:
@@ -832,20 +832,21 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
|
|||||||
/*rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block
|
/*rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block
|
||||||
&cc[CC_idP].CCCH_pdu.payload[0], ENB_FLAG_YES, module_idP, 0); // not used in this case*/
|
&cc[CC_idP].CCCH_pdu.payload[0], ENB_FLAG_YES, module_idP, 0); // not used in this case*/
|
||||||
|
|
||||||
rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block
|
rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH,
|
||||||
&cc[CC_idP].CCCH_pdu.payload[0], 0); // not used in this case
|
UE_RNTI(module_idP,UE_id),1, // 1 transport block
|
||||||
|
&cc[CC_idP].CCCH_pdu.payload[0], 0); // not used in this case
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(MAC,
|
||||||
"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: UE_id %d, rrc_sdu_length %d\n",
|
"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: UE_id %d, rrc_sdu_length %d\n",
|
||||||
module_idP, CC_idP, frameP, subframeP, UE_id, rrc_sdu_length);
|
module_idP, CC_idP, frameP, subframeP, UE_id, rrc_sdu_length);
|
||||||
|
|
||||||
AssertFatal(rrc_sdu_length > 0,
|
AssertFatal(rrc_sdu_length > 0,
|
||||||
"[MAC][eNB Scheduler] CCCH not allocated\n");
|
"[MAC][eNB Scheduler] CCCH not allocated\n");
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(MAC,
|
||||||
"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 BR with RRC Piggyback (ce_level %d RNTI %x)\n",
|
"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 BR with RRC Piggyback (ce_level %d RNTI %x)\n",
|
||||||
module_idP, CC_idP, frameP, subframeP,
|
module_idP, CC_idP, frameP, subframeP,
|
||||||
ra->rach_resource_type - 1, ra->rnti);
|
ra->rach_resource_type - 1, ra->rnti);
|
||||||
|
|
||||||
AssertFatal(1 == 0,
|
AssertFatal(1 == 0,
|
||||||
"Msg4 generation not finished for BL/CE UE\n");
|
"Msg4 generation not finished for BL/CE UE\n");
|
||||||
@@ -1017,7 +1018,8 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
|
|||||||
&cc[CC_idP].CCCH_pdu.payload[0], ENB_FLAG_YES, module_idP, 0); // not used in this case*/
|
&cc[CC_idP].CCCH_pdu.payload[0], ENB_FLAG_YES, module_idP, 0); // not used in this case*/
|
||||||
|
|
||||||
// check if there's data on the CCCH to send with Msg4
|
// check if there's data on the CCCH to send with Msg4
|
||||||
rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block
|
rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH,
|
||||||
|
UE_RNTI(module_idP,UE_id),1, // 1 transport block
|
||||||
&cc[CC_idP].CCCH_pdu.payload[0], 0); // not used in this case
|
&cc[CC_idP].CCCH_pdu.payload[0], 0); // not used in this case
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(MAC,
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ schedule_SIB1_BR(module_id_t module_idP,
|
|||||||
n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
|
n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
|
||||||
|
|
||||||
|
|
||||||
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 0); // not used in this case
|
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 0xFFFF, 1, &cc->BCCH_BR_pdu[0].payload[0], 0); // not used in this case
|
||||||
|
|
||||||
AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
|
AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
|
||||||
"schedulingInfoSIB1_BR_r13 %d > 18\n",
|
"schedulingInfoSIB1_BR_r13 %d > 18\n",
|
||||||
@@ -382,7 +382,7 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
|||||||
if ((sf_mod_period < si_WindowLength_BR_r13)
|
if ((sf_mod_period < si_WindowLength_BR_r13)
|
||||||
&& ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) { // this SIB is to be scheduled
|
&& ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) { // this SIB is to be scheduled
|
||||||
|
|
||||||
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0); // not used in this case
|
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 0xFFFF, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0); // not used in this case
|
||||||
|
|
||||||
AssertFatal(bcch_sdu_length > 0,
|
AssertFatal(bcch_sdu_length > 0,
|
||||||
"RRC returned 0 bytes for SI-BR %d\n", i);
|
"RRC returned 0 bytes for SI-BR %d\n", i);
|
||||||
@@ -524,7 +524,7 @@ schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
|||||||
dl_req = &dl_config_request->dl_config_request_body;
|
dl_req = &dl_config_request->dl_config_request_body;
|
||||||
cc = &eNB->common_channels[CC_id];
|
cc = &eNB->common_channels[CC_id];
|
||||||
|
|
||||||
mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 1, &cc->MIB_pdu.payload[0], 0); // not used in this case
|
mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 0xFFFF, 1, &cc->MIB_pdu.payload[0], 0); // not used in this case
|
||||||
|
|
||||||
LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
|
LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
|
||||||
|
|
||||||
@@ -611,7 +611,7 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
|||||||
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
||||||
|
|
||||||
|
|
||||||
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 1, &cc->BCCH_pdu.payload[0], 0); // not used in this case
|
bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 0xFFFF,1, &cc->BCCH_pdu.payload[0], 0); // not used in this case
|
||||||
|
|
||||||
if (bcch_sdu_length > 0) {
|
if (bcch_sdu_length > 0) {
|
||||||
LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
|
LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
|
||||||
|
|||||||
@@ -731,10 +731,14 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP,
|
|||||||
aggregation = 2;
|
aggregation = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int ccecond = CCE_allocation_infeasible(module_idP, CC_id, 1, subframeP,
|
||||||
|
aggregation, rnti);
|
||||||
|
if (!ccecond) {
|
||||||
|
// check for CCCH
|
||||||
|
}
|
||||||
/* if (continue_flag != 1 */
|
/* if (continue_flag != 1 */
|
||||||
if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated
|
if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated
|
||||||
CCE_allocation_infeasible(module_idP, CC_id, 1, subframeP,
|
ccecond) {
|
||||||
aggregation, rnti)) {
|
|
||||||
LOG_D(MAC,
|
LOG_D(MAC,
|
||||||
"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n",
|
"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n",
|
||||||
module_idP, frameP, UE_id, CC_id);
|
module_idP, frameP, UE_id, CC_id);
|
||||||
@@ -1836,7 +1840,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
|||||||
pcch_sdu_length = mac_rrc_data_req(module_idP,
|
pcch_sdu_length = mac_rrc_data_req(module_idP,
|
||||||
CC_id,
|
CC_id,
|
||||||
frameP,
|
frameP,
|
||||||
PCCH,1,
|
PCCH,0xFFFE,1,
|
||||||
&cc->PCCH_pdu.payload[0],
|
&cc->PCCH_pdu.payload[0],
|
||||||
i); // used for ue index
|
i); // used for ue index
|
||||||
if (pcch_sdu_length == 0) {
|
if (pcch_sdu_length == 0) {
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
|
|||||||
"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
|
"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
|
||||||
module_idP, CC_id, frameP, subframeP, i, j);
|
module_idP, CC_id, frameP, subframeP, i, j);
|
||||||
|
|
||||||
mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 1, &cc->MCCH_pdu.payload[0],
|
mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
|
||||||
i); // this is the mbsfn sync area index
|
i); // this is the mbsfn sync area index
|
||||||
|
|
||||||
if (mcch_sdu_length > 0) {
|
if (mcch_sdu_length > 0) {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ mac_rrc_data_req(
|
|||||||
const int CC_idP,
|
const int CC_idP,
|
||||||
const frame_t frameP,
|
const frame_t frameP,
|
||||||
const rb_id_t srb_idP,
|
const rb_id_t srb_idP,
|
||||||
|
const rnti_t rntiP,
|
||||||
const uint8_t nb_tbP,
|
const uint8_t nb_tbP,
|
||||||
uint8_t* const buffer_pP,
|
uint8_t* const buffer_pP,
|
||||||
const uint8_t mbsfn_sync_areaP
|
const uint8_t mbsfn_sync_areaP
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ mac_rrc_data_req(
|
|||||||
const int CC_id,
|
const int CC_id,
|
||||||
const frame_t frameP,
|
const frame_t frameP,
|
||||||
const rb_id_t Srb_id,
|
const rb_id_t Srb_id,
|
||||||
|
const rnti_t rnti,
|
||||||
const uint8_t Nb_tb,
|
const uint8_t Nb_tb,
|
||||||
uint8_t* const buffer_pP,
|
uint8_t* const buffer_pP,
|
||||||
const uint8_t mbsfn_sync_area
|
const uint8_t mbsfn_sync_area
|
||||||
@@ -105,9 +106,6 @@ mac_rrc_data_req(
|
|||||||
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
||||||
} // All RFN mod 8 transmit SIB2-3 in SF 5
|
} // All RFN mod 8 transmit SIB2-3 in SF 5
|
||||||
else if ((frameP%8) == 1) {
|
else if ((frameP%8) == 1) {
|
||||||
LOG_I(RRC,"Copying SIB23 @ %p to mac %d bytes\n",
|
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
|
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
|
||||||
memcpy(&buffer_pP[0],
|
memcpy(&buffer_pP[0],
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
|
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
||||||
@@ -144,14 +142,19 @@ mac_rrc_data_req(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( (Srb_id & RAB_OFFSET ) == CCCH) {
|
if( (Srb_id & RAB_OFFSET ) == CCCH) {
|
||||||
LOG_T(RRC,"[eNB %d] Frame %d CCCH request (Srb_id %d)\n",Mod_idP,frameP, Srb_id);
|
|
||||||
|
|
||||||
if(RC.rrc[Mod_idP]->carrier[CC_id].Srb0.Active==0) {
|
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[Mod_idP],rnti);
|
||||||
|
|
||||||
|
if (ue_context_p == NULL) return(0);
|
||||||
|
eNB_RRC_UE_t *ue_p = &ue_context_p->ue_context;
|
||||||
|
LOG_T(RRC,"[eNB %d] Frame %d CCCH request (Srb_id %d, rnti %x)\n",Mod_idP,frameP, Srb_id,rnti);
|
||||||
|
|
||||||
|
if(ue_p->Srb0.Active==0) {
|
||||||
LOG_E(RRC,"[eNB %d] CCCH Not active\n",Mod_idP);
|
LOG_E(RRC,"[eNB %d] CCCH Not active\n",Mod_idP);
|
||||||
return -1;
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Srb_info=&RC.rrc[Mod_idP]->carrier[CC_id].Srb0;
|
Srb_info=&ue_p->Srb0;
|
||||||
|
|
||||||
// check if data is there for MAC
|
// check if data is there for MAC
|
||||||
if(Srb_info->Tx_buffer.payload_size>0) { //Fill buffer
|
if(Srb_info->Tx_buffer.payload_size>0) { //Fill buffer
|
||||||
@@ -300,18 +303,14 @@ mac_rrc_data_ind(
|
|||||||
*/
|
*/
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, rntiP, frameP, sub_frameP,0);
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, rntiP, frameP, sub_frameP,0);
|
||||||
|
|
||||||
if((srb_idP & RAB_OFFSET) == CCCH) {
|
if((srb_idP & RAB_OFFSET) == CCCH) {
|
||||||
Srb_info = &RC.rrc[module_idP]->carrier[CC_id].Srb0;
|
LOG_D(RRC,"[eNB %d] Received SDU for CCCH on SRB 0\n",module_idP);
|
||||||
LOG_D(RRC,"[eNB %d] Received SDU for CCCH on SRB %d\n",module_idP,Srb_info->Srb_id);
|
|
||||||
|
|
||||||
// msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id);
|
// msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id);
|
||||||
if (sdu_lenP > 0) {
|
if (sdu_lenP > 0) rrc_eNB_decode_ccch(&ctxt, sduP, sdu_lenP, CC_id);
|
||||||
memcpy(Srb_info->Rx_buffer.Payload,sduP,sdu_lenP);
|
|
||||||
Srb_info->Rx_buffer.payload_size = sdu_lenP;
|
}
|
||||||
rrc_eNB_decode_ccch(&ctxt, Srb_info, CC_id);
|
if((srb_idP & RAB_OFFSET) == DCCH) {
|
||||||
}
|
|
||||||
}
|
|
||||||
if((srb_idP & RAB_OFFSET) == DCCH) {
|
|
||||||
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
||||||
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.module_id],rntiP);
|
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.module_id],rntiP);
|
||||||
if(ue_context_p){
|
if(ue_context_p){
|
||||||
|
|||||||
@@ -671,7 +671,6 @@ typedef struct {
|
|||||||
SystemInformationBlockType21_r14_t *sib21;
|
SystemInformationBlockType21_r14_t *sib21;
|
||||||
// End - TTN
|
// End - TTN
|
||||||
SRB_INFO SI;
|
SRB_INFO SI;
|
||||||
SRB_INFO Srb0;
|
|
||||||
uint8_t *paging[MAX_MOBILES_PER_ENB];
|
uint8_t *paging[MAX_MOBILES_PER_ENB];
|
||||||
uint32_t sizeof_paging[MAX_MOBILES_PER_ENB];
|
uint32_t sizeof_paging[MAX_MOBILES_PER_ENB];
|
||||||
} rrc_eNB_carrier_data_t;
|
} rrc_eNB_carrier_data_t;
|
||||||
|
|||||||
+65
-56
@@ -131,8 +131,8 @@ openair_rrc_on(
|
|||||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||||
rrc_config_buffer (&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1);
|
rrc_config_buffer (&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1);
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SI.Active = 1;
|
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SI.Active = 1;
|
||||||
rrc_config_buffer (&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0, CCCH, 1);
|
// rrc_config_buffer (&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0, CCCH, 1);
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Active = 1;
|
// RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Active = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1224,29 +1224,30 @@ rrc_eNB_generate_RRCConnectionReject(
|
|||||||
T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size =
|
eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
||||||
|
ue_p->Srb0.Tx_buffer.payload_size =
|
||||||
do_RRCConnectionReject(ctxt_pP->module_id,
|
do_RRCConnectionReject(ctxt_pP->module_id,
|
||||||
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
|
(uint8_t*) ue_p->Srb0.Tx_buffer.Payload);
|
||||||
|
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
||||||
(char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
|
(char *)(ue_p->Srb0.Tx_buffer.Payload),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
"[MSG] RRCConnectionReject\n");
|
"[MSG] RRCConnectionReject\n");
|
||||||
|
|
||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
MSC_RRC_ENB,
|
MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header,
|
ue_p->Srb0.Tx_buffer.Header,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionReject UE %x size %u",
|
MSC_AS_TIME_FMT" RRCConnectionReject UE %x size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti,
|
ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
LOG_I(RRC,
|
LOG_I(RRC,
|
||||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReject (bytes %d)\n",
|
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReject (bytes %d)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1266,19 +1267,22 @@ rrc_eNB_generate_RRCConnectionReestablishment(
|
|||||||
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
SRB_configList = &ue_context_pP->ue_context.SRB_configList;
|
eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size =
|
|
||||||
|
SRB_configList = &ue_p->SRB_configList;
|
||||||
|
|
||||||
|
ue_p->Srb0.Tx_buffer.payload_size =
|
||||||
do_RRCConnectionReestablishment(ctxt_pP,
|
do_RRCConnectionReestablishment(ctxt_pP,
|
||||||
ue_context_pP,
|
ue_context_pP,
|
||||||
CC_id,
|
CC_id,
|
||||||
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload,
|
(uint8_t*) ue_p->Srb0.Tx_buffer.Payload,
|
||||||
(uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
(uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
||||||
SRB_configList,
|
SRB_configList,
|
||||||
&ue_context_pP->ue_context.physicalConfigDedicated);
|
&ue_context_pP->ue_context.physicalConfigDedicated);
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
||||||
(char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
|
(char *)(ue_p->Srb0.Tx_buffer.Payload),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
"[MSG] RRCConnectionReestablishment\n"
|
"[MSG] RRCConnectionReestablishment\n"
|
||||||
);
|
);
|
||||||
// configure SRB1 for UE
|
// configure SRB1 for UE
|
||||||
@@ -1342,17 +1346,17 @@ rrc_eNB_generate_RRCConnectionReestablishment(
|
|||||||
|
|
||||||
MSC_LOG_TX_MESSAGE(MSC_RRC_ENB,
|
MSC_LOG_TX_MESSAGE(MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header,
|
ue_p->Srb0.Tx_buffer.Header,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionReestablishment UE %x size %u",
|
MSC_AS_TIME_FMT" RRCConnectionReestablishment UE %x size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
ue_context_pP->ue_context.rnti,
|
ue_context_pP->ue_context.rnti,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
LOG_I(RRC,
|
LOG_I(RRC,
|
||||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishment (bytes %d)\n",
|
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishment (bytes %d)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
|
int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
|
||||||
if(UE_id != -1){
|
if(UE_id != -1){
|
||||||
@@ -2022,30 +2026,32 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
|
|||||||
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size =
|
eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
||||||
|
|
||||||
|
ue_p->Srb0.Tx_buffer.payload_size =
|
||||||
do_RRCConnectionReestablishmentReject(ctxt_pP->module_id,
|
do_RRCConnectionReestablishmentReject(ctxt_pP->module_id,
|
||||||
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
|
(uint8_t*) ue_p->Srb0.Tx_buffer.Payload);
|
||||||
|
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
||||||
(char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
|
(char *)(ue_p->Srb0.Tx_buffer.Payload),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
"[MSG] RRCConnectionReestablishmentReject\n");
|
"[MSG] RRCConnectionReestablishmentReject\n");
|
||||||
|
|
||||||
|
|
||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
MSC_RRC_ENB,
|
MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header,
|
ue_p->Srb0.Tx_buffer.Header,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionReestablishmentReject UE %x size %u",
|
MSC_AS_TIME_FMT" RRCConnectionReestablishmentReject UE %x size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti,
|
ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
LOG_I(RRC,
|
LOG_I(RRC,
|
||||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishmentReject (bytes %d)\n",
|
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishmentReject (bytes %d)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -5732,20 +5738,22 @@ rrc_eNB_generate_RRCConnectionSetup(
|
|||||||
T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
SRB_configList = &ue_context_pP->ue_context.SRB_configList;
|
eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size =
|
|
||||||
|
SRB_configList = &ue_p->SRB_configList;
|
||||||
|
ue_p->Srb0.Tx_buffer.payload_size =
|
||||||
do_RRCConnectionSetup(ctxt_pP,
|
do_RRCConnectionSetup(ctxt_pP,
|
||||||
ue_context_pP,
|
ue_context_pP,
|
||||||
CC_id,
|
CC_id,
|
||||||
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload,
|
(uint8_t*) ue_p->Srb0.Tx_buffer.Payload,
|
||||||
(uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
(uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
||||||
SRB_configList,
|
SRB_configList,
|
||||||
&ue_context_pP->ue_context.physicalConfigDedicated);
|
&ue_context_pP->ue_context.physicalConfigDedicated);
|
||||||
|
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
LOG_DUMPMSG(RRC,DEBUG_RRC,
|
||||||
(char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
|
(char *)(ue_p->Srb0.Tx_buffer.Payload),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
"[MSG] RRC Connection Setup\n");
|
"[MSG] RRC Connection Setup\n");
|
||||||
|
|
||||||
// configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE
|
// configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE
|
||||||
@@ -5812,18 +5820,18 @@ rrc_eNB_generate_RRCConnectionSetup(
|
|||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
MSC_RRC_ENB,
|
MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header, // LG WARNING
|
ue_p->Srb0.Tx_buffer.Header, // LG WARNING
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
|
ue_p->Srb0.Tx_buffer.payload_size,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionSetup UE %x size %u",
|
MSC_AS_TIME_FMT" RRCConnectionSetup UE %x size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
ue_context_pP->ue_context.rnti,
|
ue_context_pP->ue_context.rnti,
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
|
|
||||||
LOG_I(RRC,
|
LOG_I(RRC,
|
||||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d)\n",
|
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||||
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size);
|
ue_p->Srb0.Tx_buffer.payload_size);
|
||||||
|
|
||||||
//ue_context_pP->ue_context.ue_release_timer_thres=100;
|
//ue_context_pP->ue_context.ue_release_timer_thres=100;
|
||||||
// activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
|
// activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
|
||||||
@@ -5887,10 +5895,6 @@ openair_rrc_eNB_init(
|
|||||||
pthread_mutex_init(&RC.rrc[ctxt.module_id]->cell_info_mutex,NULL);
|
pthread_mutex_init(&RC.rrc[ctxt.module_id]->cell_info_mutex,NULL);
|
||||||
RC.rrc[ctxt.module_id]->cell_info_configured = 0;
|
RC.rrc[ctxt.module_id]->cell_info_configured = 0;
|
||||||
|
|
||||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
|
||||||
RC.rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uid_linear_allocator_init(&RC.rrc[ctxt.module_id]->uid_allocator);
|
uid_linear_allocator_init(&RC.rrc[ctxt.module_id]->uid_allocator);
|
||||||
RB_INIT(&RC.rrc[ctxt.module_id]->rrc_ue_head);
|
RB_INIT(&RC.rrc[ctxt.module_id]->rrc_ue_head);
|
||||||
// for (j = 0; j < (MAX_MOBILES_PER_ENB + 1); j++) {
|
// for (j = 0; j < (MAX_MOBILES_PER_ENB + 1); j++) {
|
||||||
@@ -6016,7 +6020,8 @@ openair_rrc_eNB_init(
|
|||||||
int
|
int
|
||||||
rrc_eNB_decode_ccch(
|
rrc_eNB_decode_ccch(
|
||||||
protocol_ctxt_t* const ctxt_pP,
|
protocol_ctxt_t* const ctxt_pP,
|
||||||
const SRB_INFO* const Srb_info,
|
uint8_t *buffer,
|
||||||
|
int buffer_length,
|
||||||
const int CC_id
|
const int CC_id
|
||||||
)
|
)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -6038,17 +6043,17 @@ rrc_eNB_decode_ccch(
|
|||||||
|
|
||||||
LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL CCCH %x.%x.%x.%x.%x.%x (%p)\n",
|
LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL CCCH %x.%x.%x.%x.%x.%x (%p)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||||
((uint8_t*) Srb_info->Rx_buffer.Payload)[0],
|
((uint8_t*) buffer)[0],
|
||||||
((uint8_t *) Srb_info->Rx_buffer.Payload)[1],
|
((uint8_t *) buffer)[1],
|
||||||
((uint8_t *) Srb_info->Rx_buffer.Payload)[2],
|
((uint8_t *) buffer)[2],
|
||||||
((uint8_t *) Srb_info->Rx_buffer.Payload)[3],
|
((uint8_t *) buffer)[3],
|
||||||
((uint8_t *) Srb_info->Rx_buffer.Payload)[4],
|
((uint8_t *) buffer)[4],
|
||||||
((uint8_t *) Srb_info->Rx_buffer.Payload)[5], (uint8_t *) Srb_info->Rx_buffer.Payload);
|
((uint8_t *) buffer)[5], (uint8_t *) buffer);
|
||||||
dec_rval = uper_decode(
|
dec_rval = uper_decode(
|
||||||
NULL,
|
NULL,
|
||||||
&asn_DEF_UL_CCCH_Message,
|
&asn_DEF_UL_CCCH_Message,
|
||||||
(void**)&ul_ccch_msg,
|
(void**)&ul_ccch_msg,
|
||||||
(uint8_t*) Srb_info->Rx_buffer.Payload,
|
(uint8_t*) buffer,
|
||||||
100,
|
100,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
@@ -6109,8 +6114,8 @@ rrc_eNB_decode_ccch(
|
|||||||
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
|
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(buffer),
|
||||||
Srb_info->Rx_buffer.payload_size,
|
buffer_length,
|
||||||
"[MSG] RRC Connection Reestablishment Request\n");
|
"[MSG] RRC Connection Reestablishment Request\n");
|
||||||
|
|
||||||
LOG_D(RRC,
|
LOG_D(RRC,
|
||||||
@@ -6329,8 +6334,8 @@ rrc_eNB_decode_ccch(
|
|||||||
T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
|
|
||||||
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
|
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,
|
||||||
Srb_info->Rx_buffer.payload_size,
|
buffer_length,
|
||||||
"[MSG] RRC Connection Request\n");
|
"[MSG] RRC Connection Request\n");
|
||||||
|
|
||||||
LOG_D(RRC,
|
LOG_D(RRC,
|
||||||
@@ -6347,7 +6352,7 @@ rrc_eNB_decode_ccch(
|
|||||||
MSC_LOG_RX_DISCARDED_MESSAGE(
|
MSC_LOG_RX_DISCARDED_MESSAGE(
|
||||||
MSC_RRC_ENB,
|
MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
Srb_info->Rx_buffer.Payload,
|
buffer,
|
||||||
dec_rval.consumed,
|
dec_rval.consumed,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (UE already in context)",
|
MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (UE already in context)",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
@@ -6418,7 +6423,7 @@ rrc_eNB_decode_ccch(
|
|||||||
MSC_LOG_RX_MESSAGE(
|
MSC_LOG_RX_MESSAGE(
|
||||||
MSC_RRC_ENB,
|
MSC_RRC_ENB,
|
||||||
MSC_RRC_UE,
|
MSC_RRC_UE,
|
||||||
Srb_info->Rx_buffer.Payload,
|
buffer,
|
||||||
dec_rval.consumed,
|
dec_rval.consumed,
|
||||||
MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%" PRIx64 ")",
|
MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%" PRIx64 ")",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
@@ -7445,8 +7450,12 @@ rrc_enb_task(
|
|||||||
PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt),
|
PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt),
|
||||||
msg_name_p);
|
msg_name_p);
|
||||||
|
|
||||||
|
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[instance],
|
||||||
|
RRC_MAC_CCCH_DATA_IND(msg_p).rnti);
|
||||||
|
|
||||||
CC_id = RRC_MAC_CCCH_DATA_IND(msg_p).CC_id;
|
CC_id = RRC_MAC_CCCH_DATA_IND(msg_p).CC_id;
|
||||||
srb_info_p = &RC.rrc[instance]->carrier[CC_id].Srb0;
|
eNB_RRC_UE_t *ue_p = &ue_context_p->ue_context;
|
||||||
|
srb_info_p = &ue_p->Srb0;
|
||||||
|
|
||||||
LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n",
|
LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n",
|
||||||
instance,CC_id,&ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size);
|
instance,CC_id,&ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size);
|
||||||
@@ -7459,7 +7468,7 @@ rrc_enb_task(
|
|||||||
RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size);
|
RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size);
|
||||||
srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size;
|
srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size;
|
||||||
|
|
||||||
rrc_eNB_decode_ccch(&ctxt, srb_info_p, CC_id);
|
rrc_eNB_decode_ccch(&ctxt, srb_info_p->Rx_buffer.Payload,srb_info_p->Rx_buffer.payload_size, CC_id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Messages from PDCP */
|
/* Messages from PDCP */
|
||||||
|
|||||||
@@ -219,13 +219,15 @@ uint8_t rrc_eNB_get_next_transaction_identifier(module_id_t module_idP);
|
|||||||
|
|
||||||
/**\brief Entry routine to decode a UL-CCCH-Message. Invokes PER decoder and parses message.
|
/**\brief Entry routine to decode a UL-CCCH-Message. Invokes PER decoder and parses message.
|
||||||
\param ctxt_pP Running context
|
\param ctxt_pP Running context
|
||||||
\param Srb_info Pointer to SRB0 information structure (buffer, etc.)*/
|
\param buffer Pointer to SDU
|
||||||
int
|
\param buffer_length length of SDU in bytes
|
||||||
rrc_eNB_decode_ccch(
|
\param CC_id component carrier index*/
|
||||||
protocol_ctxt_t* const ctxt_pP,
|
|
||||||
const SRB_INFO* const Srb_info,
|
int rrc_eNB_decode_ccch(protocol_ctxt_t* const ctxt_pP,
|
||||||
const int CC_id
|
uint8_t *buffer,
|
||||||
);
|
int buffer_length,
|
||||||
|
const int CC_id
|
||||||
|
);
|
||||||
|
|
||||||
/**\brief Entry routine to decode a UL-DCCH-Message. Invokes PER decoder and parses message.
|
/**\brief Entry routine to decode a UL-DCCH-Message. Invokes PER decoder and parses message.
|
||||||
\param ctxt_pP Context
|
\param ctxt_pP Context
|
||||||
@@ -411,6 +413,7 @@ mac_rrc_data_req(
|
|||||||
const int CC_id,
|
const int CC_id,
|
||||||
const frame_t frameP,
|
const frame_t frameP,
|
||||||
const rb_id_t Srb_id,
|
const rb_id_t Srb_id,
|
||||||
|
const rnti_t rnti,
|
||||||
const uint8_t Nb_tb,
|
const uint8_t Nb_tb,
|
||||||
uint8_t* const buffer_pP,
|
uint8_t* const buffer_pP,
|
||||||
const uint8_t mbsfn_sync_area
|
const uint8_t mbsfn_sync_area
|
||||||
|
|||||||
Reference in New Issue
Block a user