Commit 9c00f4b7 authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen
Browse files

update RRC_UE to support PC5-S

parent 952ec555
...@@ -1049,7 +1049,8 @@ rrc_mac_config_req_ue( ...@@ -1049,7 +1049,8 @@ rrc_mac_config_req_ue(
#endif #endif
#if defined(Rel14) #if defined(Rel14)
,uint32_t *sourceL2Id, ,uint32_t *sourceL2Id,
uint32_t *groupL2Id uint32_t *groupL2Id,
uint32_t *destinationL2Id
#endif #endif
) )
...@@ -1369,12 +1370,20 @@ rrc_mac_config_req_ue( ...@@ -1369,12 +1370,20 @@ rrc_mac_config_req_ue(
// Panos: Call to the phy_config_request_ue() function of the interface to copy the UE_PHY_Config_t interface // Panos: Call to the phy_config_request_ue() function of the interface to copy the UE_PHY_Config_t interface
// configuration to the PHY common and dedicated configuration originating from RRC. // configuration to the PHY common and dedicated configuration originating from RRC.
//for D2D //for D2D
#if defined(Rel10) || defined(Rel14) #if defined(Rel10) || defined(Rel14)
if ( sourceL2Id && groupL2Id) { if ( sourceL2Id && groupL2Id) {
UE_mac_inst[Mod_idP].sourceL2Id = *sourceL2Id; UE_mac_inst[Mod_idP].sourceL2Id = *sourceL2Id;
UE_mac_inst[Mod_idP].groupL2Id = *groupL2Id; UE_mac_inst[Mod_idP].groupL2Id = *groupL2Id;
} else if (sourceL2Id) { //reset groupL2Id
UE_mac_inst[Mod_idP].groupL2Id = 0x00000000;
}
if ( sourceL2Id && destinationL2Id) {
UE_mac_inst[Mod_idP].sourceL2Id = *sourceL2Id;
UE_mac_inst[Mod_idP].destinationL2Id = *destinationL2Id;
} }
#endif #endif
return(0); return(0);
......
...@@ -932,7 +932,8 @@ int rrc_mac_config_req_ue(module_id_t module_idP, ...@@ -932,7 +932,8 @@ int rrc_mac_config_req_ue(module_id_t module_idP,
#if defined(Rel14) #if defined(Rel14)
, ,
uint32_t *sourceL2Id, uint32_t *sourceL2Id,
uint32_t *groupL2Id uint32_t *groupL2Id,
uint32_t *destinationL2Id
#endif #endif
); );
......
...@@ -2740,6 +2740,7 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ...@@ -2740,6 +2740,7 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
UE_MAC_INST *ue = &UE_mac_inst[module_idP]; UE_MAC_INST *ue = &UE_mac_inst[module_idP];
int rvtab[4] = {0,2,3,1}; int rvtab[4] = {0,2,3,1};
int sdu_length; int sdu_length;
uint32_t destL2Id; //groupL2Id/destinationL2Id
// Note: this is hard-coded for now for the default SL configuration (4 SF PSCCH, 36 SF PSSCH) // Note: this is hard-coded for now for the default SL configuration (4 SF PSCCH, 36 SF PSSCH)
SLSCH_t *slsch = &UE_mac_inst[module_idP].slsch; SLSCH_t *slsch = &UE_mac_inst[module_idP].slsch;
...@@ -2778,9 +2779,11 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ...@@ -2778,9 +2779,11 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
if (ue->slsch_lcid == 10) { if (ue->slsch_lcid == 10) {
if (TBS<=rlc_status.bytes_in_buffer) req=TBS; if (TBS<=rlc_status.bytes_in_buffer) req=TBS;
else req = rlc_status.bytes_in_buffer; else req = rlc_status.bytes_in_buffer;
destL2Id = ue->destinationL2Id;
} else if (ue->slsch_lcid == 3){ } else if (ue->slsch_lcid == 3){
if (TBS<=rlc_status_data.bytes_in_buffer) req=TBS; if (TBS<=rlc_status_data.bytes_in_buffer) req=TBS;
else req = rlc_status_data.bytes_in_buffer; else req = rlc_status_data.bytes_in_buffer;
destL2Id = ue->groupL2Id;
} }
if (req>0) { if (req>0) {
...@@ -2800,8 +2803,8 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ...@@ -2800,8 +2803,8 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
if (sdu_length > 0) { if (sdu_length > 0) {
LOG_I(MAC,"SFN.SF %d.%d : got %d bytes from Sidelink buffer (%d requested)\n",frameP,subframeP,sdu_length,req); LOG_I(MAC,"SFN.SF %d.%d : got %d bytes from Sidelink buffer (%d requested)\n",frameP,subframeP,sdu_length,req);
LOG_I(MAC,"sourceL2Id: %d \n",ue->sourceL2Id); LOG_I(MAC,"sourceL2Id: 0x%08x \n",ue->sourceL2Id);
LOG_I(MAC,"groupL2Id: %d \n",ue->groupL2Id); LOG_I(MAC,"groupL2Id/destinationL2Id: 0x%08x \n",destL2Id);
slsch->payload = (unsigned char*)ue->slsch_pdu.payload; slsch->payload = (unsigned char*)ue->slsch_pdu.payload;
if (sdu_length < 128) { if (sdu_length < 128) {
...@@ -2814,9 +2817,9 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ...@@ -2814,9 +2817,9 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
shorth->SRC07 = (ue->sourceL2Id>>16) & 0x000000ff; shorth->SRC07 = (ue->sourceL2Id>>16) & 0x000000ff;
shorth->SRC815 = (ue->sourceL2Id>>8) & 0x000000ff; shorth->SRC815 = (ue->sourceL2Id>>8) & 0x000000ff;
shorth->SRC1623 = ue->sourceL2Id & 0x000000ff; shorth->SRC1623 = ue->sourceL2Id & 0x000000ff;
shorth->DST07 = (ue->groupL2Id >>16) & 0x000000ff; shorth->DST07 = (destL2Id >>16) & 0x000000ff;
shorth->DST815 = (ue->groupL2Id>>8) & 0x000000ff; shorth->DST815 = (destL2Id>>8) & 0x000000ff;
shorth->DST1623 = ue->groupL2Id & 0x000000ff; shorth->DST1623 = destL2Id & 0x000000ff;
shorth->V=0x1; shorth->V=0x1;
} }
...@@ -2830,9 +2833,9 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_ ...@@ -2830,9 +2833,9 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
longh->SRC07 = (ue->sourceL2Id >>16) & 0x000000ff; longh->SRC07 = (ue->sourceL2Id >>16) & 0x000000ff;
longh->SRC815 = (ue->sourceL2Id>>8) & 0x000000ff; longh->SRC815 = (ue->sourceL2Id>>8) & 0x000000ff;
longh->SRC1623 = ue->sourceL2Id & 0x000000ff; longh->SRC1623 = ue->sourceL2Id & 0x000000ff;
longh->DST07 = (ue->groupL2Id >>16) & 0x000000ff; longh->DST07 = (destL2Id >>16) & 0x000000ff;
longh->DST815 = (ue->groupL2Id>>8) & 0x000000ff; longh->DST815 = (destL2Id>>8) & 0x000000ff;
longh->DST1623 = ue->groupL2Id & 0x000000ff; longh->DST1623 = destL2Id & 0x000000ff;
longh->V=0x1; longh->V=0x1;
} }
......
...@@ -85,6 +85,9 @@ ...@@ -85,6 +85,9 @@
#define DIRECT_COMMUNICATION_ESTABLISH_RSP 6 #define DIRECT_COMMUNICATION_ESTABLISH_RSP 6
#define GROUP_COMMUNICATION_RELEASE_REQ 7 #define GROUP_COMMUNICATION_RELEASE_REQ 7
#define GROUP_COMMUNICATION_RELEASE_RSP 8 #define GROUP_COMMUNICATION_RELEASE_RSP 8
#define PC5S_ESTABLISH_REQ 9
#define PC5S_ESTABLISH_RSP 10
typedef enum { typedef enum {
UE_STATE_OFF_NETWORK, UE_STATE_OFF_NETWORK,
...@@ -116,6 +119,16 @@ struct DirectCommunicationEstablishReq { ...@@ -116,6 +119,16 @@ struct DirectCommunicationEstablishReq {
uint32_t pppp; uint32_t pppp;
}; };
struct PC5SEstablishReq{
uint32_t sourceL2Id;
uint32_t destinationL2Id;
};
struct PC5SEstablishRsp{
uint32_t sourceL2Id;
uint32_t destinationL2Id;
uint8_t status;
};
struct sidelink_ctrl_element { struct sidelink_ctrl_element {
unsigned short type; unsigned short type;
...@@ -127,7 +140,8 @@ struct sidelink_ctrl_element { ...@@ -127,7 +140,8 @@ struct sidelink_ctrl_element {
SL_UE_STATE_t ue_state; SL_UE_STATE_t ue_state;
//struct GroupCommunicationReleaseReq group_comm_release_req; //struct GroupCommunicationReleaseReq group_comm_release_req;
int slrb_id; int slrb_id;
struct PC5SEstablishReq pc5s_establish_req;
struct PC5SEstablishRsp pc5s_establish_rsp;
} sidelinkPrimitive; } sidelinkPrimitive;
}; };
......
...@@ -1046,6 +1046,7 @@ rrc_ue_process_measConfig( ...@@ -1046,6 +1046,7 @@ rrc_ue_process_measConfig(
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -1563,6 +1564,7 @@ rrc_ue_process_radioResourceConfigDedicated( ...@@ -1563,6 +1564,7 @@ rrc_ue_process_radioResourceConfigDedicated(
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -1627,6 +1629,7 @@ rrc_ue_process_radioResourceConfigDedicated( ...@@ -1627,6 +1629,7 @@ rrc_ue_process_radioResourceConfigDedicated(
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -1739,6 +1742,7 @@ rrc_ue_process_radioResourceConfigDedicated( ...@@ -1739,6 +1742,7 @@ rrc_ue_process_radioResourceConfigDedicated(
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -2327,6 +2331,7 @@ rrc_ue_process_mobilityControlInfo( ...@@ -2327,6 +2331,7 @@ rrc_ue_process_mobilityControlInfo(
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -3194,6 +3199,7 @@ int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, ...@@ -3194,6 +3199,7 @@ int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -3878,6 +3884,7 @@ uint64_t arfcn_to_freq(long arfcn) { ...@@ -3878,6 +3884,7 @@ uint64_t arfcn_to_freq(long arfcn) {
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -4063,6 +4070,7 @@ uint64_t arfcn_to_freq(long arfcn) { ...@@ -4063,6 +4070,7 @@ uint64_t arfcn_to_freq(long arfcn) {
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -4564,6 +4572,7 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB ...@@ -4564,6 +4572,7 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB
#if defined(Rel14) #if defined(Rel14)
, ,
NULL, NULL,
NULL,
NULL NULL
#endif #endif
); );
...@@ -5425,21 +5434,18 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5425,21 +5434,18 @@ void *rrc_control_socket_thread_fct(void *arg)
int prose_addr_len; int prose_addr_len;
char send_buf[BUFSIZE]; char send_buf[BUFSIZE];
char receive_buf[BUFSIZE]; char receive_buf[BUFSIZE];
int optval; // flag value for setsockopt int optval;
int n; // message byte size int n;
struct sidelink_ctrl_element *sl_ctrl_msg_recv = NULL; struct sidelink_ctrl_element *sl_ctrl_msg_recv = NULL;
struct sidelink_ctrl_element *sl_ctrl_msg_send = NULL; struct sidelink_ctrl_element *sl_ctrl_msg_send = NULL;
uint32_t sourceL2Id; uint32_t sourceL2Id, groupL2Id, destinationL2Id;
uint32_t groupL2Id; module_id_t module_id = 0; //hardcoded for testing only
module_id_t module_id;
module_id = 0 ; //hardcoded for testing only
//from the main program, listen for the incoming messages from control socket (ProSe App) //from the main program, listen for the incoming messages from control socket (ProSe App)
prose_addr_len = sizeof(prose_app_addr); prose_addr_len = sizeof(prose_app_addr);
int enable_notification = 1; int enable_notification = 1;
while (1) { while (1) {
LOG_I(RRC,"[rrc_control_socket_thread_fct]: Listening to incoming connection from ProSe App \n"); LOG_I(RRC,"Listening to incoming connection from ProSe App \n");
// receive a message from ProSe App // receive a message from ProSe App
memset(receive_buf, 0, BUFSIZE); memset(receive_buf, 0, BUFSIZE);
n = recvfrom(ctrl_sock_fd, receive_buf, BUFSIZE, 0, n = recvfrom(ctrl_sock_fd, receive_buf, BUFSIZE, 0,
...@@ -5450,7 +5456,6 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5450,7 +5456,6 @@ void *rrc_control_socket_thread_fct(void *arg)
} }
//TODO: should store the address of ProSeApp [UE_rrc_inst] to be able to send UE state notification to the App //TODO: should store the address of ProSeApp [UE_rrc_inst] to be able to send UE state notification to the App
//sl_ctrl_msg_recv = (struct sidelink_ctrl_element *) receive_buf; //sl_ctrl_msg_recv = (struct sidelink_ctrl_element *) receive_buf;
sl_ctrl_msg_recv = calloc(1, sizeof(struct sidelink_ctrl_element)); sl_ctrl_msg_recv = calloc(1, sizeof(struct sidelink_ctrl_element));
memcpy((void *)sl_ctrl_msg_recv, (void *)receive_buf, sizeof(struct sidelink_ctrl_element)); memcpy((void *)sl_ctrl_msg_recv, (void *)receive_buf, sizeof(struct sidelink_ctrl_element));
...@@ -5459,11 +5464,11 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5459,11 +5464,11 @@ void *rrc_control_socket_thread_fct(void *arg)
switch (sl_ctrl_msg_recv->type) { switch (sl_ctrl_msg_recv->type) {
case SESSION_INIT_REQ: case SESSION_INIT_REQ:
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[rrc_control_socket_thread_fct]: Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type); LOG_I(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
#endif #endif
//TODO: get SL_UE_STATE from lower layer //TODO: get SL_UE_STATE from lower layer
LOG_I(RRC,"[rrc_control_socket_thread_fct]: Send UEStateInformation to ProSe App \n"); LOG_I(RRC,"Send UEStateInformation to ProSe App \n");
memset(send_buf, 0, BUFSIZE); memset(send_buf, 0, BUFSIZE);
sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element)); sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element));
...@@ -5483,8 +5488,8 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5483,8 +5488,8 @@ void *rrc_control_socket_thread_fct(void *arg)
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
LOG_I(RRC,"[rrc_control_socket_thread_fct][UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type); LOG_I(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
LOG_I(RRC,"[rrc_control_socket_thread_fct][UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state); LOG_I(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
#endif #endif
/* if (enable_notification > 0) { /* if (enable_notification > 0) {
...@@ -5502,11 +5507,11 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5502,11 +5507,11 @@ void *rrc_control_socket_thread_fct(void *arg)
groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id; groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id;
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_I(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.type); LOG_I(RRC,"[GroupCommunicationEstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.type);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] source Id: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); LOG_I(RRC,"[GroupCommunicationEstablishReq] source Id: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] group Id: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); LOG_I(RRC,"[GroupCommunicationEstablishReq] group Id: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress)); LOG_I(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
#endif #endif
//store sourceL2Id //store sourceL2Id
...@@ -5550,18 +5555,19 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5550,18 +5555,19 @@ void *rrc_control_socket_thread_fct(void *arg)
#if defined(Rel10) || defined(Rel14) #if defined(Rel10) || defined(Rel14)
, ,
&sourceL2Id, &sourceL2Id,
&groupL2Id &groupL2Id,
NULL
#endif #endif
); );
LOG_I(RRC,"[rrc_control_socket_thread_fct]Send GroupCommunicationEstablishResp to ProSe App\n"); LOG_I(RRC,"Send GroupCommunicationEstablishResp to ProSe App\n");
memset(send_buf, 0, BUFSIZE); memset(send_buf, 0, BUFSIZE);
sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element)); sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element));
sl_ctrl_msg_send->type = GROUP_COMMUNICATION_ESTABLISH_RSP; sl_ctrl_msg_send->type = GROUP_COMMUNICATION_ESTABLISH_RSP;
//in case of TX, assign a new SLRB and prepare for the filter //in case of TX, assign a new SLRB and prepare for the filter
if (sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.type == 1) { if (sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.type == 1) {
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishReq] PPPP: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.pppp); LOG_I(RRC,"[GroupCommunicationEstablishReq] PPPP: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.pppp);
#endif #endif
sl_ctrl_msg_send->sidelinkPrimitive.slrb_id = SLRB_ID; //slrb_id sl_ctrl_msg_send->sidelinkPrimitive.slrb_id = SLRB_ID; //slrb_id
//pthread_mutex_lock(&slrb_mutex); //pthread_mutex_lock(&slrb_mutex);
...@@ -5584,16 +5590,16 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5584,16 +5590,16 @@ void *rrc_control_socket_thread_fct(void *arg)
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); LOG_I(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); LOG_I(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
#endif #endif
break; break;
case GROUP_COMMUNICATION_RELEASE_REQ: case GROUP_COMMUNICATION_RELEASE_REQ:
printf("-----------------------------------\n"); printf("-----------------------------------\n");
#ifdef DEBUG_CTRL_SOCKET #ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_I(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_I(RRC,"[rrc_control_socket_thread_fct][GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id); LOG_I(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
#endif #endif
//reset groupL2ID from MAC LAYER //reset groupL2ID from MAC LAYER
UE_rrc_inst[module_id].groupL2Id = 0x00000000; UE_rrc_inst[module_id].groupL2Id = 0x00000000;
...@@ -5633,12 +5639,13 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5633,12 +5639,13 @@ void *rrc_control_socket_thread_fct(void *arg)
#if defined(Rel10) || defined(Rel14) #if defined(Rel10) || defined(Rel14)
, ,
&sourceL2Id, &sourceL2Id,
NULL,
NULL NULL
#endif #endif
); );
LOG_I(RRC,"[rrc_control_socket_thread_fct]Send GroupCommunicationReleaseResponse to ProSe App \n"); LOG_I(RRC,"Send GroupCommunicationReleaseResponse to ProSe App \n");
memset(send_buf, 0, BUFSIZE); memset(send_buf, 0, BUFSIZE);
sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element)); sl_ctrl_msg_send = calloc(1, sizeof(struct sidelink_ctrl_element));
...@@ -5663,6 +5670,76 @@ void *rrc_control_socket_thread_fct(void *arg) ...@@ -5663,6 +5670,76 @@ void *rrc_control_socket_thread_fct(void *arg)
} }
break; break;
case PC5S_ESTABLISH_REQ:
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id;
#ifdef DEBUG_CTRL_SOCKET
LOG_I(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_I(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
LOG_I(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
#endif
//store sourceL2Id, destinationL2Id
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
UE_rrc_inst[module_id].destinationL2Id = destinationL2Id;
// configure lower layers PDCP/MAC/PHY
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,
0,
(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)
,
&sourceL2Id,
&destinationL2Id,
&destinationL2Id
#endif
);
LOG_I(RRC,"Send PC5EstablishRsp 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_ESTABLISH_RSP;
sl_ctrl_msg_send->sidelinkPrimitive.pc5s_establish_rsp.sourceL2Id = sourceL2Id;
sl_ctrl_msg_send->sidelinkPrimitive.pc5s_establish_rsp.destinationL2Id = destinationL2Id;
sl_ctrl_msg_send->sidelinkPrimitive.pc5s_establish_rsp.status = 1;
memcpy((void *)send_buf, (void *)sl_ctrl_msg_send, sizeof(struct sidelink_ctrl_element));
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);
free(sl_ctrl_msg_send);
if (n < 0){
LOG_E(RRC, "ERROR: Failed to send to ProSe App\n");
exit(EXIT_FAILURE);
}
break;
default: default:
break; break;
} }
......
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