Commit 3a1252a8 authored by masayuki.harada's avatar masayuki.harada

Add PDCP reestablishment and RLC reestablishment.

parent a72e6ed6
This diff is collapsed.
...@@ -320,6 +320,21 @@ boolean_t rrc_pdcp_config_asn1_req ( ...@@ -320,6 +320,21 @@ boolean_t rrc_pdcp_config_asn1_req (
rb_id_t *const defaultDRB rb_id_t *const defaultDRB
); );
/*! \fn bool rrc_pdcp_reestablishment_asn1_req const protocol_ctxt_t *const ctxt_pP, const rnti_t previous_rnti, LTE_SRB_ToAddModList_t *const srb2add_list_pP, LTE_DRB_ToAddModList_t *const drb2add_list_pP)
* \brief Function for RRC to reestablish a Radio Bearer.
* \param[in] ctxt_pP Running context.
* \param[in] previous_rnti privious rnti
* \param[in] srb2add_list SRB configuration list to be created.
* \param[in] drb2add_list DRB configuration list to be created.
* \return A status about the processing, OK or error code.
*/
boolean_t rrc_pdcp_reestablishment_asn1_req (
const protocol_ctxt_t *const ctxt_pP,
const rnti_t previous_rnti,
LTE_SRB_ToAddModList_t *const srb2add_list_pP,
LTE_DRB_ToAddModList_t *const drb2add_list_pP
);
/*! \fn boolean_t pdcp_config_req_asn1 (const protocol_ctxt_t* const ctxt_pP, srb_flag_t srb_flagP, uint32_t action, rb_id_t rb_id, uint8_t rb_sn, uint8_t rb_report, uint16_t header_compression_profile, uint8_t security_mode) /*! \fn boolean_t pdcp_config_req_asn1 (const protocol_ctxt_t* const ctxt_pP, srb_flag_t srb_flagP, uint32_t action, rb_id_t rb_id, uint8_t rb_sn, uint8_t rb_report, uint16_t header_compression_profile, uint8_t security_mode)
* \brief Function for RRC to configure a Radio Bearer. * \brief Function for RRC to configure a Radio Bearer.
* \param[in] ctxt_pP Running context. * \param[in] ctxt_pP Running context.
......
...@@ -619,6 +619,23 @@ rlc_op_status_t rlc_stat_req ( ...@@ -619,6 +619,23 @@ rlc_op_status_t rlc_stat_req (
unsigned int *const stat_timer_poll_retransmit_timed_out, unsigned int *const stat_timer_poll_retransmit_timed_out,
unsigned int *const stat_timer_status_prohibit_timed_out); unsigned int *const stat_timer_status_prohibit_timed_out);
/*! \fn rlc_op_status_t rrc_rlc_reestablishment_asn1_req (
const protocol_ctxt_t *const ctxt_pP,
const rnti_t previous_rnti,
const LTE_SRB_ToAddModList_t *const srb2add_listP,
const LTE_DRB_ToAddModList_t *const drb2add_listP)
* \brief Function for RRC to reestablish a Radio Bearer.
* \param[in] ctxtP Running context.
* \param[in] previous_rnti Previous RNTI.
* \param[in] srb2add_listP SRB configuration list to be created.
* \param[in] drb2add_listP DRB configuration list to be created.
* \return A status about the processing, OK or error code.
*/
rlc_op_status_t rrc_rlc_reestablishment_asn1_req (const protocol_ctxt_t *const ctxt_pP,
const rnti_t previous_rnti,
const LTE_SRB_ToAddModList_t *const srb2add_listP,
const LTE_DRB_ToAddModList_t *const drb2add_listP);
/*! \fn int rlc_module_init(int enb_flag) /*! \fn int rlc_module_init(int enb_flag)
* \brief RAZ the memory of the RLC layer, initialize the memory pool manager (mem_block_t structures mainly used in RLC module). * \brief RAZ the memory of the RLC layer, initialize the memory pool manager (mem_block_t structures mainly used in RLC module).
*/ */
......
...@@ -1032,3 +1032,79 @@ void rlc_tick(int frame, int subframe) ...@@ -1032,3 +1032,79 @@ void rlc_tick(int frame, int subframe)
rlc_current_time_last_subframe = subframe; rlc_current_time_last_subframe = subframe;
} }
} }
//-----------------------------------------------------------------------------
rlc_op_status_t rrc_rlc_reestablishment_asn1_req (const protocol_ctxt_t *const ctxt_pP,
const rnti_t previous_rnti,
const LTE_SRB_ToAddModList_t *const srb2add_listP,
const LTE_DRB_ToAddModList_t *const drb2add_listP
) {
//-----------------------------------------------------------------------------
rlc_ue_t *ue;
rlc_ue_t *old_ue;
int rnti = ctxt_pP->rnti;
int module_id = ctxt_pP->module_id;
int cnt;
int srb_id=0;
int drb_id=0;
if (srb2add_listP != NULL) {
for (cnt=0; cnt<srb2add_listP->list.count; cnt++) {
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rnti);
old_ue = rlc_manager_get_ue(rlc_ue_manager, previous_rnti);
srb_id=srb2add_listP->list.array[cnt]->srb_Identity;
//ignore already exist
if (ue->srb[srb_id-1] != NULL) {
LOG_D(RLC, "%s:%d:%s: warning SRB %d already exist for ue %d, do nothing\n",
__FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
continue;
}
rlc_manager_unlock(rlc_ue_manager);
// create new
add_srb(rnti, module_id, srb2add_listP->list.array[cnt]);
// TODO take over some parameter from old rnti. But discard all parameters
// TS36 322 5.4 Re-establishment procedure
// discard the remaining AMD PDUs and byte segments of AMD PDUs in the receiving side
// discard all RLC SDUs and AMD PDUs in the transmitting side
// discard all RLC control PDUs.
if (old_ue->srb[srb_id-1] != NULL) {
LOG_D(RLC, "%s:%d:%s: reestablishment SRB %d from %d to ue %d\n",
__FILE__, __LINE__, __FUNCTION__, srb_id, previous_rnti, rnti);
}
}
}
if (drb2add_listP != NULL) {
for (cnt=0; cnt<drb2add_listP->list.count; cnt++) {
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rnti);
old_ue = rlc_manager_get_ue(rlc_ue_manager, previous_rnti);
drb_id=drb2add_listP->list.array[cnt]->drb_Identity;
//ignore already exist
if (ue->drb[drb_id-1] != NULL) {
LOG_D(RLC, "%s:%d:%s: warning DRB %d already exist for ue %d, do nothing\n",
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
continue;
}
rlc_manager_unlock(rlc_ue_manager);
// create new
add_drb(rnti, module_id, drb2add_listP->list.array[cnt]);
// TODO take over some parameter from old rnti. But discard all parameters
// TS36 322 5.4 Re-establishment procedure
// discard the remaining AMD PDUs and byte segments of AMD PDUs in the receiving side
// discard all RLC SDUs and AMD PDUs in the transmitting side
// discard all RLC control PDUs.
if ((old_ue->drb[drb_id-1] != NULL)) {
LOG_D(RLC, "%s:%d:%s: reestablishment DRB %d from %d to ue %d\n",
__FILE__, __LINE__, __FUNCTION__, drb_id, previous_rnti, rnti);
}
}
}
return RLC_OP_STATUS_OK;
}
\ No newline at end of file
...@@ -2173,30 +2173,17 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( ...@@ -2173,30 +2173,17 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
// pdcp_remove_UE(&ctxt_prior); // pdcp_remove_UE(&ctxt_prior);
// add UE info to freeList for RU_thread to remove the UE instead of remove it here // add UE info to freeList for RU_thread to remove the UE instead of remove it here
/* Refresh SRBs/DRBs */ /* Refresh SRBs/DRBs */
rrc_pdcp_config_asn1_req(ctxt_pP, rrc_pdcp_reestablishment_asn1_req(ctxt_pP,
reestablish_rnti,
*SRB_configList2, // NULL, *SRB_configList2, // NULL,
DRB_configList, DRB_configList);
NULL,
0xff, // already configured during the securitymodecommand
NULL,
NULL,
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
, (LTE_PMCH_InfoList_r9_t *) NULL
#endif
, NULL);
/* Refresh SRBs/DRBs */ /* Refresh SRBs/DRBs */
if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) { if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
rrc_rlc_config_asn1_req(ctxt_pP, rrc_rlc_reestablishment_asn1_req(ctxt_pP,
reestablish_rnti,
*SRB_configList2, // NULL, *SRB_configList2, // NULL,
DRB_configList, DRB_configList
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
, (LTE_PMCH_InfoList_r9_t *) NULL,
0,
0
#endif
); );
} }
LOG_I(RRC, "[RRCConnectionReestablishment]put UE %x into freeList\n", reestablish_rnti); LOG_I(RRC, "[RRCConnectionReestablishment]put UE %x into freeList\n", reestablish_rnti);
...@@ -7389,24 +7376,16 @@ rrc_eNB_decode_ccch( ...@@ -7389,24 +7376,16 @@ rrc_eNB_decode_ccch(
MSC_AS_TIME_FMT" CONFIG_REQ UE %x SRB", MSC_AS_TIME_FMT" CONFIG_REQ UE %x SRB",
MSC_AS_TIME_ARGS(ctxt_pP), MSC_AS_TIME_ARGS(ctxt_pP),
ue_context_p->ue_context.rnti); ue_context_p->ue_context.rnti);
rrc_pdcp_config_asn1_req(ctxt_pP, rrc_pdcp_reestablishment_asn1_req(ctxt_pP,
c_rnti,
ue_context_p->ue_context.SRB_configList, ue_context_p->ue_context.SRB_configList,
(LTE_DRB_ToAddModList_t *) NULL, (LTE_DRB_ToAddModList_t *) NULL);
(LTE_DRB_ToReleaseList_t *) NULL,
0xff,
NULL,
NULL,
NULL
, (LTE_PMCH_InfoList_r9_t *) NULL
,NULL);
if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) { if (!NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)) {
rrc_rlc_config_asn1_req(ctxt_pP, rrc_rlc_reestablishment_asn1_req(ctxt_pP,
c_rnti,
ue_context_p->ue_context.SRB_configList, ue_context_p->ue_context.SRB_configList,
(LTE_DRB_ToAddModList_t *) NULL, (LTE_DRB_ToAddModList_t *) NULL
(LTE_DRB_ToReleaseList_t *) NULL
, (LTE_PMCH_InfoList_r9_t *) NULL,
0,0
); );
} }
......
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