UE: signal RLF to RRC
This commit is contained in:
committed by
francescomani
parent
f380a48a3b
commit
eee4a0c652
@@ -85,3 +85,6 @@ MESSAGE_DEF(NRRRC_FRAME_PROCESS, MESSAGE_PRIORITY_MED, NRRrcFramePr
|
||||
// eNB: RLC -> RRC messages
|
||||
MESSAGE_DEF(RLC_SDU_INDICATION, MESSAGE_PRIORITY_MED, RlcSduIndication, rlc_sdu_indication)
|
||||
MESSAGE_DEF(NAS_PDU_SESSION_REQ, MESSAGE_PRIORITY_MED, nas_pdu_session_req_t, nas_pdu_session_req)
|
||||
|
||||
// UE: RLC -> RRC messages
|
||||
MESSAGE_DEF(NR_RRC_RLC_MAXRTX, MESSAGE_PRIORITY_MED, RlcMaxRtxIndication, nr_rlc_maxrtx_indication)
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
#define NAS_OAI_TUN_NSA(mSGpTR) (mSGpTR)->ittiMsg.nas_oai_tun_nsa
|
||||
#define NAS_PDU_SESSION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nas_pdu_session_req
|
||||
|
||||
#define NR_RRC_RLC_MAXRTX(mSGpTR) (mSGpTR)->ittiMsg.nr_rlc_maxrtx_indication
|
||||
|
||||
//-------------------------------------------------------------------------------------------//
|
||||
typedef struct RrcStateInd_s {
|
||||
Rrc_State_t state;
|
||||
@@ -453,4 +455,8 @@ typedef struct rlc_sdu_indication_s {
|
||||
int message_id;
|
||||
} RlcSduIndication;
|
||||
|
||||
typedef struct {
|
||||
int ue_id;
|
||||
} RlcMaxRtxIndication;
|
||||
|
||||
#endif /* RRC_MESSAGES_TYPES_H_ */
|
||||
|
||||
@@ -873,6 +873,13 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(NR_UE_RRC_INST_t *rrc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void nr_rrc_signal_maxrtxindication(int ue_id)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_RLC_UE, ue_id, NR_RRC_RLC_MAXRTX);
|
||||
NR_RRC_RLC_MAXRTX(msg).ue_id = ue_id;
|
||||
itti_send_msg_to_task(TASK_RRC_NRUE, ue_id, msg);
|
||||
}
|
||||
|
||||
static void nr_rrc_manage_rlc_bearers(NR_UE_RRC_INST_t *rrc,
|
||||
const NR_CellGroupConfig_t *cellGroupConfig)
|
||||
{
|
||||
@@ -901,9 +908,11 @@ static void nr_rrc_manage_rlc_bearers(NR_UE_RRC_INST_t *rrc,
|
||||
if (rlc_bearer->servedRadioBearer->present == NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity) {
|
||||
NR_SRB_Identity_t srb_id = rlc_bearer->servedRadioBearer->choice.srb_Identity;
|
||||
nr_rlc_add_srb(rrc->ue_id, srb_id, rlc_bearer);
|
||||
nr_rlc_set_rlf_handler(rrc->ue_id, nr_rrc_signal_maxrtxindication);
|
||||
} else { // DRB
|
||||
NR_DRB_Identity_t drb_id = rlc_bearer->servedRadioBearer->choice.drb_Identity;
|
||||
nr_rlc_add_drb(rrc->ue_id, drb_id, rlc_bearer);
|
||||
nr_rlc_set_rlf_handler(rrc->ue_id, nr_rrc_signal_maxrtxindication);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1843,6 +1852,15 @@ void *rrc_nrue(void *notUsed)
|
||||
nr_rrc_going_to_IDLE(rrc, release_cause, NULL);
|
||||
break;
|
||||
|
||||
case NR_RRC_RLC_MAXRTX:
|
||||
// detection of RLF upon indication from RLC that the maximum number of retransmissions has been reached
|
||||
LOG_W(NR_RRC,
|
||||
"[UE %ld ID %d] Received indication that RLC reached max retransmissions\n",
|
||||
instance,
|
||||
NR_RRC_RLC_MAXRTX(msg_p).ue_id);
|
||||
handle_rlf_detection(rrc);
|
||||
break;
|
||||
|
||||
case NR_RRC_MAC_MSG3_IND:
|
||||
nr_rrc_handle_msg3_indication(rrc, NR_RRC_MAC_MSG3_IND(msg_p).rnti);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user