Commit 02fd6fbd authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

add function to allow remove pdcp/rlc instance

parent a955432e
No related merge requests found
......@@ -353,7 +353,12 @@ typedef struct {
//RLC_INTERFACE_FUNCTIONS
void (*pdcp_run)(void);
void (*pdcp_data_req)(module_id_t, rb_id_t, sdu_size_t, char*);
signed int (*rrc_rlc_config_req)(unsigned int, unsigned int, unsigned int, unsigned int, rlc_info_t );
signed int (*rrc_rlc_config_req)(unsigned int, unsigned int, unsigned int, unsigned int, rlc_info_t
#ifdef Rel14
,unsigned int
,unsigned int
#endif
);
int (*rrc_mac_config_req)(uint8_t Mod_id,uint8_t eNB_flag,uint8_t UE_id,uint8_t eNB_index,
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
struct PhysicalConfigDedicated *physicalConfigDedicated,
......
......@@ -1686,7 +1686,12 @@ rrc_pdcp_config_req (
const srb_flag_t srb_flagP,
const uint32_t actionP,
const rb_id_t rb_idP,
const uint8_t security_modeP)
const uint8_t security_modeP
#ifdef Rel14
,const uint32_t sourceL2Id
,const uint32_t destinationL2Id
#endif
)
//-----------------------------------------------------------------------------
{
pdcp_t *pdcp_p = NULL;
......
......@@ -263,7 +263,12 @@ public_pdcp(void rrc_pdcp_config_req (
const srb_flag_t srb_flagP,
const uint32_t actionP,
const rb_id_t rb_idP,
const uint8_t security_modeP);)
const uint8_t security_modeP
#ifdef Rel14
,const uint32_t sourceL2Id
,const uint32_t destinationL2Id
#endif
);)
/*! \fn bool rrc_pdcp_config_asn1_req (const protocol_ctxt_t* const , SRB_ToAddModList_t* srb2add_list, DRB_ToAddModList_t* drb2add_list, DRB_ToReleaseList_t* drb2release_list)
* \brief Function for RRC to configure a Radio Bearer.
......
......@@ -424,6 +424,8 @@ private_rlc_rrc(rlc_union_t* rrc_rlc_add_rlc (const protocol_ctxt_t* const
* \param[in] actionP Action for this radio bearer (add, modify, remove).
* \param[in] rb_idP Radio bearer identifier.
* \param[in] rlc_infoP RLC configuration parameters issued from Radio Resource Manager.
* \param[in] sourceL2ID [D2D] source L2 Identity.
* \param[in] destinationL2ID [D2D] destination L2 Identity.
* \return A status about the processing, OK or error code.
*/
public_rlc_rrc( rlc_op_status_t rrc_rlc_config_req (
......@@ -432,7 +434,12 @@ public_rlc_rrc( rlc_op_status_t rrc_rlc_config_req (
const MBMS_flag_t,
config_action_t,
const rb_id_t,
rlc_info_t );)
rlc_info_t
#ifdef Rel14
,const uint32_t
,const uint32_t
#endif
);)
/*! \fn rlc_op_status_t rrc_rlc_data_req (const protocol_ctxt_t* const ctxtP, const MBMS_flag_t MBMS_flagP, const rb_id_t rb_idP, mui_t muiP, confirm_t confirmP, sdu_size_t sdu_sizeP, char* sduP)
* \brief Function for RRC to send a SDU through a Signalling Radio Bearer.
......
......@@ -812,7 +812,12 @@ rlc_op_status_t rrc_rlc_config_req (
const MBMS_flag_t mbms_flagP,
const config_action_t actionP,
const rb_id_t rb_idP,
const rlc_info_t rlc_infoP)
const rlc_info_t rlc_infoP
#ifdef Rel14
,const uint32_t sourceL2Id
,const uint32_t destinationL2Id
#endif
)
{
//-----------------------------------------------------------------------------
//rlc_op_status_t status;
......@@ -886,7 +891,8 @@ rlc_op_status_t rrc_rlc_config_req (
case CONFIG_ACTION_REMOVE:
return rrc_rlc_remove_rlc(ctxt_pP, srb_flagP, mbms_flagP, rb_idP
#ifdef Rel14
,0, 0
,sourceL2Id
,destinationL2Id
#endif
);
break;
......
......@@ -89,6 +89,8 @@
#define PC5S_ESTABLISH_REQ 11
#define PC5S_ESTABLISH_RSP 12
#define PC5_DISCOVERY_MESSAGE 13
#define PC5S_RELEASE_REQ 14
#define PC5S_RELEASE_RSP 15
#define PC5_DISCOVERY_PAYLOAD_SIZE 29
......@@ -133,6 +135,11 @@ struct PC5SEstablishRsp{
uint32_t slrbid_lcid30;
};
typedef enum {
PC5S_RELEASE_OK = 0,
PC5S_RELEASE_FAILURE
} PC5S_Release_Status_t;
//PC5_DISCOVERY MESSAGE
typedef struct {
......@@ -152,6 +159,7 @@ struct sidelink_ctrl_element {
struct DirectCommunicationEstablishReq direct_comm_establish_req;
Group_Communication_Status_t group_comm_release_rsp;
Direct_Communication_Status_t direct_comm_release_rsp;
PC5S_Release_Status_t pc5s_release_rsp;
SL_UE_STATE_t ue_state;
int slrb_id;
struct PC5SEstablishReq pc5s_establish_req;
......
......@@ -2243,7 +2243,7 @@ rrc_ue_process_mobilityControlInfo(
/*
drb2release_list = CALLOC (1, sizeof (*drb2release_list));
lcid= CALLOC (1, sizeof (DRB_Identity_t)); // long
lcid = CALLOC (1, sizeof (DRB_Identity_t)); // long
for (*lcid=0;*lcid<NB_RB_MAX;*lcid++)
{
ASN_SEQUENCE_ADD (&(drb2release_list)->list,lcid);
......@@ -2251,12 +2251,42 @@ rrc_ue_process_mobilityControlInfo(
*/
//Removing SRB1 and SRB2 and DRB0
LOG_N(RRC,"[UE %d] : Update needed for rrc_pdcp_config_req (deprecated) and rrc_rlc_config_req commands(deprecated)\n", ctxt_pP->module_id);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_YES, CONFIG_ACTION_REMOVE, DCCH,UNDEF_SECURITY_MODE);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, CONFIG_ACTION_REMOVE,ctxt_pP->module_id+DCCH,Rlc_info_am_config);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_YES, CONFIG_ACTION_REMOVE, DCCH1,UNDEF_SECURITY_MODE);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_YES,CONFIG_ACTION_REMOVE, MBMS_FLAG_NO,ctxt_pP->module_id+DCCH1,Rlc_info_am_config);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_NO, CONFIG_ACTION_REMOVE, DTCH,UNDEF_SECURITY_MODE);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_NO,CONFIG_ACTION_REMOVE, MBMS_FLAG_NO,ctxt_pP->module_id+DTCH,Rlc_info_um);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_YES, CONFIG_ACTION_REMOVE, DCCH,UNDEF_SECURITY_MODE
#ifdef Rel14
,0
,0
#endif
);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_YES, MBMS_FLAG_NO, CONFIG_ACTION_REMOVE,ctxt_pP->module_id+DCCH,Rlc_info_am_config
#ifdef Rel14
,0
,0
#endif
);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_YES, CONFIG_ACTION_REMOVE, DCCH1,UNDEF_SECURITY_MODE
#ifdef Rel14
,0
,0
#endif
);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_YES,CONFIG_ACTION_REMOVE, MBMS_FLAG_NO,ctxt_pP->module_id+DCCH1,Rlc_info_am_config
#ifdef Rel14
,0
,0
#endif
);
rrc_pdcp_config_req (ctxt_pP, SRB_FLAG_NO, CONFIG_ACTION_REMOVE, DTCH,UNDEF_SECURITY_MODE
#ifdef Rel14
,0
,0
#endif
);
rrc_rlc_config_req(ctxt_pP, SRB_FLAG_NO,CONFIG_ACTION_REMOVE, MBMS_FLAG_NO,ctxt_pP->module_id+DTCH,Rlc_info_um
#ifdef Rel14
,0
,0
#endif
);
/*
rrc_pdcp_config_asn1_req(NB_eNB_INST+ue_mod_idP,frameP, 0,eNB_index,
NULL, // SRB_ToAddModList
......@@ -5479,6 +5509,8 @@ void *rrc_control_socket_thread_fct(void *arg)
int j = 0;
int i = 0;
int slrb_id =0;
DRB_Identity_t drb_id = 0;
DRB_ToReleaseList_t* drb2release_list = NULL;
//from the main program, listen for the incoming messages from control socket (ProSe App)
prose_addr_len = sizeof(prose_app_addr);
......@@ -6029,7 +6061,6 @@ void *rrc_control_socket_thread_fct(void *arg)
UE_rrc_inst[module_id].destinationL2Id = 0x00000000;
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
//find the corresponding record and reset the values
if (slrb_id > 0){
for (i=0; i< MAX_NUM_LCID_DATA; i++) {
......@@ -6044,11 +6075,10 @@ void *rrc_control_socket_thread_fct(void *arg)
}
//TEST Remove RLC
DRB_Identity_t drb_id = slrb_id;
DRB_ToReleaseList_t* drb2release_list = NULL;
drb_id = slrb_id;
drb2release_list = CALLOC(1, sizeof(DRB_ToReleaseList_t));
ASN_SEQUENCE_ADD(&drb2release_list->list, drb_id);
/*
rrc_rlc_config_asn1_req(&ctxt,
(SRB_ToAddModList_t*)NULL,
......@@ -6059,84 +6089,16 @@ void *rrc_control_socket_thread_fct(void *arg)
, sourceL2Id, destinationL2Id
#endif
);
rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0
(RadioResourceConfigCommonSIB_t *)NULL,
(struct PhysicalConfigDedicated *)NULL,
#if defined(Rel10) || defined(Rel14)
(SCellToAddMod_r10_t *)NULL,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(MeasObjectToAddMod_t **)NULL,
(MAC_MainConfig_t *)NULL,
slrb_id,
(struct LogicalChannelConfig *)NULL,
(MeasGapConfig_t *)NULL,
(TDD_Config_t *)NULL,
(MobilityControlInfo_t *)NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
#if defined(Rel10) || defined(Rel14)
,0,
(MBSFN_AreaInfoList_r9_t *)NULL,
(PMCH_InfoList_r9_t *)NULL
#endif
#ifdef CBA
,
0,
0
#endif
#if defined(Rel10) || defined(Rel14)
,CONFIG_ACTION_REMOVE,
&sourceL2Id,
NULL,
NULL
#endif
);
//TEST REMOVE RLC
slrb_id = 9;
//find the corresponding record and reset the values
if (slrb_id > 0){
for (i=0; i< MAX_NUM_LCID_DATA; i++) {
if (UE_rrc_inst[module_id].sl_info[i].LCID == slrb_id) {
UE_rrc_inst[module_id].sl_info[i].LCID = 0;
LOG_I(RRC,"[DirectCommunicationReleaseRequest] rbid %d for destination Id: 0x%08x\n has been removed",slrb_id, UE_rrc_inst[module_id].sl_info[i].destinationL2Id );
//UE_rrc_inst[module_id].sl_info[i].destinationL2Id = 0x00;
destinationL2Id = UE_rrc_inst[module_id].sl_info[i].destinationL2Id;
break;
}
}
}
drb_id = slrb_id;
drb2release_list = NULL;
drb2release_list = CALLOC(1, sizeof(DRB_ToReleaseList_t));
ASN_SEQUENCE_ADD(&drb2release_list->list, drb_id);
rrc_rlc_config_asn1_req(&ctxt,
(SRB_ToAddModList_t*)NULL,
(DRB_ToAddModList_t*)NULL,
(DRB_ToReleaseList_t*)drb2release_list
*/
rrc_rlc_config_req(&ctxt, SRB_FLAG_NO,CONFIG_ACTION_REMOVE, MBMS_FLAG_NO,slrb_id,Rlc_info_um
#ifdef Rel14
,(PMCH_InfoList_r9_t *)NULL
, sourceL2Id, destinationL2Id
,0
,0
#endif
);
//need to remove PDCP instance
rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0
......@@ -6179,9 +6141,6 @@ void *rrc_control_socket_thread_fct(void *arg)
);
LOG_I(RRC,"Send DirectCommunicationReleaseResponse to ProSe App \n");
memset(send_buf, 0, BUFSIZE);
......@@ -6450,6 +6409,108 @@ void *rrc_control_socket_thread_fct(void *arg)
}
break;
case PC5S_RELEASE_REQ:
printf("-----------------------------------\n");
#ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[PC5SReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_I(RRC,"[PC5SReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
#endif
slrb_id = sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id;
//reset groupL2ID from MAC LAYER
UE_rrc_inst[module_id].destinationL2Id = 0x00000000;
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
//find the corresponding record and reset the values
if (slrb_id > 0){
for (i = MAX_NUM_LCID_DATA; i< MAX_NUM_LCID; i++) {
if (UE_rrc_inst[module_id].sl_info[i].LCID == slrb_id) {
UE_rrc_inst[module_id].sl_info[i].LCID = 0;
LOG_I(RRC,"[DirectCommunicationReleaseRequest] rbid %d for destination Id: 0x%08x\n has been removed",slrb_id, UE_rrc_inst[module_id].sl_info[i].destinationL2Id );
//UE_rrc_inst[module_id].sl_info[i].destinationL2Id = 0x00;
destinationL2Id = UE_rrc_inst[module_id].sl_info[i].destinationL2Id;
break;
}
}
}
//TEST Remove RLC
drb_id = slrb_id;
drb2release_list = CALLOC(1, sizeof(DRB_ToReleaseList_t));
ASN_SEQUENCE_ADD(&drb2release_list->list, drb_id);
rrc_rlc_config_asn1_req(&ctxt,
(SRB_ToAddModList_t*)NULL,
(DRB_ToAddModList_t*)NULL,
(DRB_ToReleaseList_t*)drb2release_list
#ifdef Rel14
,(PMCH_InfoList_r9_t *)NULL
, sourceL2Id, destinationL2Id
#endif
);
rrc_mac_config_req_ue(module_id,0,0, //eNB_index =0
(RadioResourceConfigCommonSIB_t *)NULL,
(struct PhysicalConfigDedicated *)NULL,
#if defined(Rel10) || defined(Rel14)
(SCellToAddMod_r10_t *)NULL,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(MeasObjectToAddMod_t **)NULL,
(MAC_MainConfig_t *)NULL,
slrb_id,
(struct LogicalChannelConfig *)NULL,
(MeasGapConfig_t *)NULL,
(TDD_Config_t *)NULL,
(MobilityControlInfo_t *)NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
#if defined(Rel10) || defined(Rel14)
,0,
(MBSFN_AreaInfoList_r9_t *)NULL,
(PMCH_InfoList_r9_t *)NULL
#endif
#ifdef CBA
,
0,
0
#endif
#if defined(Rel10) || defined(Rel14)
,CONFIG_ACTION_REMOVE,
&sourceL2Id,
NULL,
NULL
#endif
);
LOG_I(RRC,"Send PC5SReleaseResponse to ProSe App \n");
memset(send_buf, 0, BUFSIZE);
sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element));
sl_ctrl_msg_send->type = PC5S_RELEASE_RSP;
sl_ctrl_msg_send->sidelinkPrimitive.direct_comm_release_rsp = PC5S_RELEASE_OK;
memcpy((void *)send_buf, (void *)sl_ctrl_msg_send, sizeof(struct sidelink_ctrl_element));
free(sl_ctrl_msg_send);
prose_addr_len = sizeof(prose_app_addr);
n = sendto(ctrl_sock_fd, (char *)send_buf, sizeof(struct sidelink_ctrl_element), 0, (struct sockaddr *)&prose_app_addr, prose_addr_len);
if (n < 0){
LOG_E(RRC, "ERROR: Failed to send to ProSe App\n");
exit(EXIT_FAILURE);
}
break;
case PC5_DISCOVERY_MESSAGE:
......
......@@ -195,13 +195,23 @@ rrc_t310_expiration(
SRB_FLAG_YES,
CONFIG_ACTION_REMOVE,
UE_rrc_inst[ctxt_pP->module_id].Srb2[eNB_index].Srb_info.Srb_id,
0);
0
#ifdef Rel14
,0
,0
#endif
);
rrc_rlc_config_req (ctxt_pP,
SRB_FLAG_YES,
MBMS_FLAG_NO,
CONFIG_ACTION_REMOVE,
UE_rrc_inst[ctxt_pP->module_id].Srb2[eNB_index].Srb_info.Srb_id,
Rlc_info_um);
Rlc_info_um
#ifdef Rel14
,0
,0
#endif
);
UE_rrc_inst[ctxt_pP->module_id].Srb2[eNB_index].Active = 0;
UE_rrc_inst[ctxt_pP->module_id].Srb2[eNB_index].Status = IDLE;
UE_rrc_inst[ctxt_pP->module_id].Srb2[eNB_index].Next_check_frame = 0;
......
......@@ -3741,7 +3741,12 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
MBMS_FLAG_NO,
CONFIG_ACTION_REMOVE,
DRB2LCHAN[i],
Rlc_info_um);
Rlc_info_um
#ifdef Rel14
,0
,0
#endif
);
}
ue_context_pP->ue_context.DRB_active[drb_id] = 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