Commit ae8a7f39 authored by Siddharth Rana's avatar Siddharth Rana

Rebasing to 3GPP_TTCN_System_Simulator Commit: 69efee8cd3e8ee29fc6d1373c0fbafd61f9ba103

parent 54504fdd
...@@ -279,7 +279,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB, ...@@ -279,7 +279,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
{ {
SS_UPD_TIM_INFO(message_p_vtp).sf = eNB->UL_INFO.subframe; SS_UPD_TIM_INFO(message_p_vtp).sf = eNB->UL_INFO.subframe;
SS_UPD_TIM_INFO(message_p_vtp).sfn = eNB->UL_INFO.frame; SS_UPD_TIM_INFO(message_p_vtp).sfn = eNB->UL_INFO.frame;
SS_UPD_TIM_INFO(message_p).physCellId = RC.rrc[eNB->UL_INFO.module_id]->carrier[eNB->UL_INFO.CC_id].physCellId; SS_UPD_TIM_INFO(message_p_vtp).physCellId = RC.rrc[eNB->UL_INFO.module_id]->carrier[eNB->UL_INFO.CC_id].physCellId;
int send_res = itti_send_msg_to_task(TASK_VTP, 0, message_p_vtp); int send_res = itti_send_msg_to_task(TASK_VTP, 0, message_p_vtp);
if (send_res < 0) if (send_res < 0)
{ {
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#include "acpDrb.h" #include "acpDrb.h"
#include "ss_eNB_context.h" #include "ss_eNB_context.h"
#include "ss_eNB_vt_timer_task.h"
extern RAN_CONTEXT_t RC; extern RAN_CONTEXT_t RC;
//extern uint16_t ss_rnti_g; //extern uint16_t ss_rnti_g;
...@@ -166,6 +167,33 @@ static void ss_task_handle_drb_pdu_req(struct DRB_COMMON_REQ *req,int cell_index ...@@ -166,6 +167,33 @@ static void ss_task_handle_drb_pdu_req(struct DRB_COMMON_REQ *req,int cell_index
} }
} }
SS_DRB_PDU_REQ(message_p).rnti = SS_context.SSCell_list[cell_index].ss_rnti_g;
uint8_t msg_queued = 0;
if (req->Common.TimingInfo.d == TimingInfo_Type_SubFrame)
{
ss_set_timinfo_t tinfo, timer_tinfo;
tinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
tinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
timer_tinfo = tinfo;
msg_queued = msg_can_be_queued(tinfo, &timer_tinfo);
LOG_A(ENB_SS,"VT_TIMER DRB task received MSG for future SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
if(msg_queued)
{
msg_queued = vt_timer_setup(timer_tinfo, TASK_RRC_ENB, instance_g,message_p);
LOG_A(ENB_SS, "DRB_PDU Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d",
tinfo.sfn,tinfo.sf, SS_context.sfn,SS_context.sf);
}
}
if (!msg_queued)
{
int send_res = itti_send_msg_to_task(TASK_RRC_ENB, instance_g, message_p);
if (send_res < 0)
{
LOG_A(ENB_APP, "[SS_DRB] Error in itti_send_msg_to_task");
}
LOG_A(ENB_APP, "Send res: %d", send_res);
}
} }
SS_DRB_PDU_REQ(message_p).rnti = SS_context.SSCell_list[cell_index].ss_rnti_g; SS_DRB_PDU_REQ(message_p).rnti = SS_context.SSCell_list[cell_index].ss_rnti_g;
...@@ -274,7 +302,7 @@ void *ss_eNB_drb_process_itti_msg(void *notUsed) ...@@ -274,7 +302,7 @@ void *ss_eNB_drb_process_itti_msg(void *notUsed)
{ {
case SS_DRB_PDU_IND: case SS_DRB_PDU_IND:
{ {
int cell_index; int cell_index = 0;
if(received_msg->ittiMsg.ss_drb_pdu_ind.physCellId){ if(received_msg->ittiMsg.ss_drb_pdu_ind.physCellId){
cell_index = get_cell_index_pci(received_msg->ittiMsg.ss_drb_pdu_ind.physCellId, SS_context.SSCell_list); cell_index = get_cell_index_pci(received_msg->ittiMsg.ss_drb_pdu_ind.physCellId, SS_context.SSCell_list);
LOG_A(ENB_SS,"[SS_DRB] cell_index in SS_DRB_PDU_IND: %d PhysicalCellId: %d \n",cell_index,SS_context.SSCell_list[cell_index].PhysicalCellId); LOG_A(ENB_SS,"[SS_DRB] cell_index in SS_DRB_PDU_IND: %d PhysicalCellId: %d \n",cell_index,SS_context.SSCell_list[cell_index].PhysicalCellId);
......
...@@ -71,7 +71,7 @@ extern int cell_config_done; ...@@ -71,7 +71,7 @@ extern int cell_config_done;
//extern uint16_t ss_rnti_g; //extern uint16_t ss_rnti_g;
static void sys_send_proxy(void *msg, int msgLen); static void sys_send_proxy(void *msg, int msgLen, int msg_queued, ss_set_timinfo_t timer_tinfo);
int cell_config_done_indication(void); int cell_config_done_indication(void);
static uint16_t paging_ue_index_g = 0; static uint16_t paging_ue_index_g = 0;
extern SSConfigContext_t SS_context; extern SSConfigContext_t SS_context;
...@@ -197,7 +197,7 @@ static int sys_send_udp_msg( ...@@ -197,7 +197,7 @@ static int sys_send_udp_msg(
uint32_t buffer_len, uint32_t buffer_len,
uint32_t buffer_offset, uint32_t buffer_offset,
uint32_t peerIpAddr, uint32_t peerIpAddr,
uint16_t peerPort) uint16_t peerPort, int msg_queued, ss_set_timinfo_t timer_tinfo)
{ {
// Create and alloc new message // Create and alloc new message
MessageDef *message_p = NULL; MessageDef *message_p = NULL;
...@@ -212,8 +212,17 @@ static int sys_send_udp_msg( ...@@ -212,8 +212,17 @@ static int sys_send_udp_msg(
udp_data_req_p->buffer = buffer; udp_data_req_p->buffer = buffer;
udp_data_req_p->buffer_length = buffer_len; udp_data_req_p->buffer_length = buffer_len;
udp_data_req_p->buffer_offset = buffer_offset; udp_data_req_p->buffer_offset = buffer_offset;
if(msg_queued)
{
LOG_A(ENB_SS, "UDP Message Queued for Proxy\n");
return vt_timer_setup(timer_tinfo, TASK_UDP, 0,message_p);
}
else
{
LOG_A(ENB_SS, "Sending UDP_DATA_REQ to TASK_UDP\n");
return itti_send_msg_to_task(TASK_UDP, 0, message_p); return itti_send_msg_to_task(TASK_UDP, 0, message_p);
} }
}
else else
{ {
LOG_A(ENB_SS, "Failed Sending UDP_DATA_REQ length %u offset %u \n", buffer_len, buffer_offset); LOG_A(ENB_SS, "Failed Sending UDP_DATA_REQ length %u offset %u \n", buffer_len, buffer_offset);
...@@ -284,9 +293,14 @@ static void ss_task_sys_handle_timing_info(ss_set_timinfo_t *tinfo) ...@@ -284,9 +293,14 @@ static void ss_task_sys_handle_timing_info(ss_set_timinfo_t *tinfo)
* corrected. Does not impact TC_6_1_2_2. * corrected. Does not impact TC_6_1_2_2.
* *
*/ */
int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure) int sys_add_reconfig_cell(struct SYSTEM_CTRL_REQ *req)
{ {
CellConfigReq_t *cellConfig; CellConfigReq_t *cellConfig;
assert(req);
struct CellConfigRequest_Type *Cell=&(req->Request.v.Cell);
assert(Cell);
struct CellConfigInfo_Type *AddOrReconfigure=&(Cell->v.AddOrReconfigure);
assert(AddOrReconfigure);
if (AddOrReconfigure->Basic.d == false && AddOrReconfigure->Active.d == false) if (AddOrReconfigure->Basic.d == false && AddOrReconfigure->Active.d == false)
return false; return false;
...@@ -434,10 +448,16 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure) ...@@ -434,10 +448,16 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
RRC_CONFIGURATION_REQ(msg_p).q_RxLevMin[cell_index] = SIB1_CELL_SEL_INFO.q_RxLevMin; RRC_CONFIGURATION_REQ(msg_p).q_RxLevMin[cell_index] = SIB1_CELL_SEL_INFO.q_RxLevMin;
if (SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.nonCriticalExtension.d) if (SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.nonCriticalExtension.d)
{ {
if (SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.nonCriticalExtension.v.nonCriticalExtension.d)
{
if (SIB1_CELL_NON_CE.v.cellSelectionInfo_v920.d)
{
LOG_A(ENB_SS, "[SYS] [SIB1] q-QualMin: %d \n", SIB1_CELL_Q_QUALMIN); LOG_A(ENB_SS, "[SYS] [SIB1] q-QualMin: %d \n", SIB1_CELL_Q_QUALMIN);
RRC_CONFIGURATION_REQ(msg_p).q_QualMin[cell_index] = SIB1_CELL_Q_QUALMIN; RRC_CONFIGURATION_REQ(msg_p).q_QualMin[cell_index] = SIB1_CELL_Q_QUALMIN;
} }
} }
}
}
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.d; RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.d;
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo = CALLOC(RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count,sizeof(struct lte_SchedulingInfo_s)); RRC_CONFIGURATION_REQ(msg_p).schedulingInfo = CALLOC(RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count,sizeof(struct lte_SchedulingInfo_s));
...@@ -645,9 +665,31 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure) ...@@ -645,9 +665,31 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
RRC_CONFIGURATION_REQ(msg_p).ActiveParamPresent[cell_index] = false; RRC_CONFIGURATION_REQ(msg_p).ActiveParamPresent[cell_index] = false;
} }
LOG_A(ENB_APP, "SS: ActiveParamPresent: %d, RlcPduCCCH_Present: %d, RLC Container PDU size: %d \n",RRC_CONFIGURATION_REQ(msg_p).ActiveParamPresent[cell_index],RRC_CONFIGURATION_REQ(msg_p).RlcPduCCCH_Present[cell_index],RRC_CONFIGURATION_REQ(msg_p).RlcPduCCCH_Size[cell_index]); LOG_A(ENB_APP, "SS: ActiveParamPresent: %d, RlcPduCCCH_Present: %d, RLC Container PDU size: %d \n",RRC_CONFIGURATION_REQ(msg_p).ActiveParamPresent[cell_index],RRC_CONFIGURATION_REQ(msg_p).RlcPduCCCH_Present[cell_index],RRC_CONFIGURATION_REQ(msg_p).RlcPduCCCH_Size[cell_index]);
uint8_t msg_queued = 0;
ss_set_timinfo_t tinfo, timer_tinfo;
#if 0
if (req->Common.TimingInfo.d == TimingInfo_Type_SubFrame)
{
ss_set_timinfo_t tinfo, timer_tinfo;
tinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
tinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
timer_tinfo = tinfo;
msg_queued = msg_can_be_queued(tinfo, &timer_tinfo);
LOG_A(ENB_SS,"VT_TIMER SYS task received MSG for future SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
if(msg_queued)
{
msg_queued = vt_timer_setup(timer_tinfo, TASK_RRC_ENB, 0,msg_p);
LOG_A(ENB_SS, "Cell_Config Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d\n",
tinfo.sfn,tinfo.sf, SS_context.sfn,SS_context.sf);
}
}
#endif
if (!msg_queued)
{
LOG_A(ENB_SS, "Sending Cell configuration to RRC from SYSTEM_CTRL_REQ \n"); LOG_A(ENB_SS, "Sending Cell configuration to RRC from SYSTEM_CTRL_REQ \n");
itti_send_msg_to_task(TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); itti_send_msg_to_task(TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
}
/** Handle Initial Cell power, Sending to Proxy */ /** Handle Initial Cell power, Sending to Proxy */
if (AddOrReconfigure->Basic.v.InitialCellPower.d == true) if (AddOrReconfigure->Basic.v.InitialCellPower.d == true)
{ {
...@@ -676,7 +718,7 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure) ...@@ -676,7 +718,7 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
cellConfig->header.cell_id, cellConfig->header.cell_id,
cellConfig->initialAttenuation, cellConfig->maxRefPower, cellConfig->initialAttenuation, cellConfig->maxRefPower,
cellConfig->dl_earfcn,cell_index); cellConfig->dl_earfcn,cell_index);
sys_send_proxy((void *)cellConfig, sizeof(CellConfigReq_t)); sys_send_proxy((void *)cellConfig, sizeof(CellConfigReq_t), msg_queued, timer_tinfo);
} }
} }
} }
...@@ -786,19 +828,22 @@ static void send_sys_cnf(enum ConfirmationResult_Type_Sel resType, ...@@ -786,19 +828,22 @@ static void send_sys_cnf(enum ConfirmationResult_Type_Sel resType,
* newState: The next state for the SYS State machine * newState: The next state for the SYS State machine
* *
*/ */
int sys_handle_cell_config_req(struct CellConfigRequest_Type *Cell) int sys_handle_cell_config_req(struct SYSTEM_CTRL_REQ *req)
{ {
int status = false; int status = false;
int returnState = SS_context.SSCell_list[cell_index].State; int returnState = SS_context.SSCell_list[cell_index].State;
enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_Cell; enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_Cell;
enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success; enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success;
bool resVal = true; bool resVal = true;
assert(req);
struct CellConfigRequest_Type *Cell=&(req->Request.v.Cell);
assert(Cell);
switch (Cell->d) switch (Cell->d)
{ {
case CellConfigRequest_Type_AddOrReconfigure: case CellConfigRequest_Type_AddOrReconfigure:
LOG_A(ENB_SS, "[SYS] CellConfigRequest_Type_AddOrReconfigure receivied\n"); LOG_A(ENB_SS, "[SYS] CellConfigRequest_Type_AddOrReconfigure receivied\n");
status = sys_add_reconfig_cell(&(Cell->v.AddOrReconfigure)); status = sys_add_reconfig_cell(req);
if (status) if (status)
{ {
/** TODO Signal to main thread */ /** TODO Signal to main thread */
...@@ -853,12 +898,15 @@ int sys_handle_cell_config_req(struct CellConfigRequest_Type *Cell) ...@@ -853,12 +898,15 @@ int sys_handle_cell_config_req(struct CellConfigRequest_Type *Cell)
* newState: The next state for the SYS State machine * newState: The next state for the SYS State machine
* *
*/ */
static int sys_handle_radiobearer_list(struct RadioBearer_Type_RadioBearerList_Type_Dynamic *BearerList) static int sys_handle_radiobearer_list(struct SYSTEM_CTRL_REQ *req)
{ {
int returnState = SS_context.SSCell_list[cell_index].State; int returnState = SS_context.SSCell_list[cell_index].State;
enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_RadioBearerList; enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_RadioBearerList;
enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success; enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success;
bool resVal = true; bool resVal = true;
assert(req);
struct RadioBearer_Type_RadioBearerList_Type_Dynamic *BearerList = &(req->Request.v.RadioBearerList);
assert(BearerList);
MessageDef *msg_p = itti_alloc_new_message(TASK_SYS, 0, RRC_RBLIST_CFG_REQ); MessageDef *msg_p = itti_alloc_new_message(TASK_SYS, 0, RRC_RBLIST_CFG_REQ);
if (msg_p) if (msg_p)
{ {
...@@ -1200,6 +1248,26 @@ static int sys_handle_radiobearer_list(struct RadioBearer_Type_RadioBearerList_T ...@@ -1200,6 +1248,26 @@ static int sys_handle_radiobearer_list(struct RadioBearer_Type_RadioBearerList_T
} }
} }
} }
uint8_t msg_queued = 0;
if (req->Common.TimingInfo.d == TimingInfo_Type_SubFrame)
{
ss_set_timinfo_t tinfo, timer_tinfo;
tinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
tinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
timer_tinfo = tinfo;
msg_queued = msg_can_be_queued(tinfo, &timer_tinfo);
LOG_A(ENB_SS,"VT_TIMER SYS task received MSG for future SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
if(msg_queued)
{
msg_queued = vt_timer_setup(timer_tinfo, TASK_RRC_ENB, 0,msg_p);
LOG_A(ENB_SS, "RB List Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d\n",
tinfo.sfn,tinfo.sf, SS_context.sfn,SS_context.sf);
}
}
if (!msg_queued)
{
LOG_A(ENB_SS, "[SYS] Send RRC_RBLIST_CFG_REQ to TASK_RRC_ENB, RB Count : %d, Message: %s \n", RRC_RBLIST_CFG_REQ(msg_p).rb_count, ITTI_MSG_NAME(msg_p)); LOG_A(ENB_SS, "[SYS] Send RRC_RBLIST_CFG_REQ to TASK_RRC_ENB, RB Count : %d, Message: %s \n", RRC_RBLIST_CFG_REQ(msg_p).rb_count, ITTI_MSG_NAME(msg_p));
int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, msg_p); int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, msg_p);
if (send_res < 0) if (send_res < 0)
...@@ -1207,6 +1275,7 @@ static int sys_handle_radiobearer_list(struct RadioBearer_Type_RadioBearerList_T ...@@ -1207,6 +1275,7 @@ static int sys_handle_radiobearer_list(struct RadioBearer_Type_RadioBearerList_T
LOG_A(ENB_SS, "[SYS] Error sending RRC_RBLIST_CFG_REQ to RRC_ENB \n"); LOG_A(ENB_SS, "[SYS] Error sending RRC_RBLIST_CFG_REQ to RRC_ENB \n");
} }
} }
}
returnState = SS_STATE_CELL_ACTIVE; returnState = SS_STATE_CELL_ACTIVE;
send_sys_cnf(resType, resVal, cnfType, NULL); send_sys_cnf(resType, resVal, cnfType, NULL);
...@@ -1323,7 +1392,7 @@ int sys_handle_pdcp_count_req(struct PDCP_CountReq_Type *PdcpCount) ...@@ -1323,7 +1392,7 @@ int sys_handle_pdcp_count_req(struct PDCP_CountReq_Type *PdcpCount)
* Function : sys_send_proxy * Function : sys_send_proxy
* Description: Sends the messages from SYS to proxy * Description: Sends the messages from SYS to proxy
*/ */
static void sys_send_proxy(void *msg, int msgLen) static void sys_send_proxy(void *msg, int msgLen, int msg_queued, ss_set_timinfo_t timer_tinfo)
{ {
LOG_A(ENB_SS, "In sys_send_proxy\n"); LOG_A(ENB_SS, "In sys_send_proxy\n");
uint32_t peerIpAddr; uint32_t peerIpAddr;
...@@ -1341,7 +1410,7 @@ static void sys_send_proxy(void *msg, int msgLen) ...@@ -1341,7 +1410,7 @@ static void sys_send_proxy(void *msg, int msgLen)
LOG_A(ENB_SS, "\nCell Config End of Buffer\n "); LOG_A(ENB_SS, "\nCell Config End of Buffer\n ");
/** Send to proxy */ /** Send to proxy */
sys_send_udp_msg((uint8_t *)msg, msgLen, 0, peerIpAddr, peerPort); sys_send_udp_msg((uint8_t *)msg, msgLen, 0, peerIpAddr, peerPort,msg_queued,timer_tinfo);
return; return;
} }
...@@ -1349,7 +1418,7 @@ static void sys_send_proxy(void *msg, int msgLen) ...@@ -1349,7 +1418,7 @@ static void sys_send_proxy(void *msg, int msgLen)
* Function : sys_cell_attn_update * Function : sys_cell_attn_update
* Description: Sends the attenuation updates received from TTCN to proxy * Description: Sends the attenuation updates received from TTCN to proxy
*/ */
static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex) static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex, int msg_queued, ss_set_timinfo_t timer_tinfo)
{ {
LOG_A(ENB_SS, "In sys_cell_attn_update, cellIndex:%d \n",CellIndex); LOG_A(ENB_SS, "In sys_cell_attn_update, cellIndex:%d \n",CellIndex);
attenuationConfigReq_t *attnConf = NULL; attenuationConfigReq_t *attnConf = NULL;
...@@ -1366,7 +1435,7 @@ static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex) ...@@ -1366,7 +1435,7 @@ static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex)
IPV4_STR_ADDR_TO_INT_NWBO(local_address, peerIpAddr, " BAD IP Address"); IPV4_STR_ADDR_TO_INT_NWBO(local_address, peerIpAddr, " BAD IP Address");
/** Send to proxy */ /** Send to proxy */
sys_send_udp_msg((uint8_t *)attnConf, sizeof(attenuationConfigReq_t), 0, peerIpAddr, peerPort); sys_send_udp_msg((uint8_t *)attnConf, sizeof(attenuationConfigReq_t), 0, peerIpAddr, peerPort,msg_queued,timer_tinfo);
LOG_A(ENB_SS, "Out sys_cell_attn_update\n"); LOG_A(ENB_SS, "Out sys_cell_attn_update\n");
return; return;
} }
...@@ -1374,8 +1443,27 @@ static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex) ...@@ -1374,8 +1443,27 @@ static void sys_cell_attn_update(uint8_t cellId, uint8_t attnVal,int CellIndex)
* Function : sys_handle_cell_attn_req * Function : sys_handle_cell_attn_req
* Description: Handles the attenuation updates received from TTCN * Description: Handles the attenuation updates received from TTCN
*/ */
static void sys_handle_cell_attn_req(struct CellAttenuationConfig_Type_CellAttenuationList_Type_Dynamic *CellAttenuationList) static void sys_handle_cell_attn_req(struct SYSTEM_CTRL_REQ *req)
{ {
assert(req);
struct CellAttenuationConfig_Type_CellAttenuationList_Type_Dynamic *CellAttenuationList = &(req->Request.v.CellAttenuationList);
assert(CellAttenuationList);
uint8_t msg_queued = 0;
ss_set_timinfo_t tinfo, timer_tinfo;
if (req->Common.TimingInfo.d == TimingInfo_Type_SubFrame)
{
tinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
tinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
timer_tinfo = tinfo;
msg_queued = msg_can_be_queued(tinfo, &timer_tinfo);
LOG_A(ENB_SS,"VT_TIMER SYS task received cell_attn MSG for future SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
if(msg_queued)
{
LOG_A(ENB_SS, "Cell_Attn Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d\n",
tinfo.sfn,tinfo.sf, SS_context.sfn,SS_context.sf);
}
}
for(int i=0;i<CellAttenuationList->d;i++) { for(int i=0;i<CellAttenuationList->d;i++) {
uint8_t cellId = (uint8_t)CellAttenuationList->v[i].CellId; uint8_t cellId = (uint8_t)CellAttenuationList->v[i].CellId;
uint8_t CellIndex = get_cell_index(cellId, SS_context.SSCell_list); uint8_t CellIndex = get_cell_index(cellId, SS_context.SSCell_list);
...@@ -1387,13 +1475,13 @@ static void sys_handle_cell_attn_req(struct CellAttenuationConfig_Type_CellAtten ...@@ -1387,13 +1475,13 @@ static void sys_handle_cell_attn_req(struct CellAttenuationConfig_Type_CellAtten
attnVal = CellAttenuationList->v[i].Attenuation.v.Value; attnVal = CellAttenuationList->v[i].Attenuation.v.Value;
LOG_A(ENB_SS, "[SYS] CellAttenuationList for Cell_id %d value %d dBm received\n", LOG_A(ENB_SS, "[SYS] CellAttenuationList for Cell_id %d value %d dBm received\n",
cellId, attnVal); cellId, attnVal);
sys_cell_attn_update(cellId, attnVal,CellIndex); sys_cell_attn_update(cellId, attnVal,CellIndex,msg_queued,timer_tinfo);
break; break;
case Attenuation_Type_Off: case Attenuation_Type_Off:
attnVal = 80; /* TODO: attnVal hardcoded currently but Need to handle proper Attenuation_Type_Off */ attnVal = 80; /* TODO: attnVal hardcoded currently but Need to handle proper Attenuation_Type_Off */
LOG_A(ENB_SS, "[SYS] CellAttenuationList turn off for Cell_id %d received with attnVal : %d\n", LOG_A(ENB_SS, "[SYS] CellAttenuationList turn off for Cell_id %d received with attnVal : %d\n",
cellId,attnVal); cellId,attnVal);
sys_cell_attn_update(cellId, attnVal,CellIndex); sys_cell_attn_update(cellId, attnVal,CellIndex,msg_queued,timer_tinfo);
break; break;
case Attenuation_Type_UNBOUND_VALUE: case Attenuation_Type_UNBOUND_VALUE:
LOG_A(ENB_SS, "[SYS] CellAttenuationList Attenuation_Type_UNBOUND_VALUE received\n"); LOG_A(ENB_SS, "[SYS] CellAttenuationList Attenuation_Type_UNBOUND_VALUE received\n");
...@@ -1648,7 +1736,7 @@ static void sys_handle_l1macind_ctrl(struct SYSTEM_CTRL_REQ *req) ...@@ -1648,7 +1736,7 @@ static void sys_handle_l1macind_ctrl(struct SYSTEM_CTRL_REQ *req)
} }
/* /*
* Function : sys_handle_as_security_req * Function : sys_handle_ue_cat_info_req
* Description: Funtion handler of SYS_PORT. Handles the UE * Description: Funtion handler of SYS_PORT. Handles the UE
* Category Info command received from TTCN via the PORTMAN. * Category Info command received from TTCN via the PORTMAN.
* In : * In :
...@@ -1736,13 +1824,16 @@ static void sys_handle_ue_cat_info_req(struct UE_CategoryInfo_Type *UE_Cat_Info) ...@@ -1736,13 +1824,16 @@ static void sys_handle_ue_cat_info_req(struct UE_CategoryInfo_Type *UE_Cat_Info)
* newState: No impact on state machine. * newState: No impact on state machine.
* *
*/ */
static void sys_handle_as_security_req(struct AS_Security_Type *ASSecurity) static void sys_handle_as_security_req(struct SYSTEM_CTRL_REQ *req)
{ {
enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_AS_Security; enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_AS_Security;
enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success; enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success;
bool resVal = true; bool resVal = true;
bool intKey = false; bool intKey = false;
assert(req);
struct AS_Security_Type *ASSecurity = &(req->Request.v.AS_Security);
assert(ASSecurity);
MessageDef *msg_p = itti_alloc_new_message(TASK_SYS, 0, RRC_AS_SECURITY_CONFIG_REQ); MessageDef *msg_p = itti_alloc_new_message(TASK_SYS, 0, RRC_AS_SECURITY_CONFIG_REQ);
if(msg_p) if(msg_p)
{ {
...@@ -1835,6 +1926,26 @@ static void sys_handle_as_security_req(struct AS_Security_Type *ASSecurity) ...@@ -1835,6 +1926,26 @@ static void sys_handle_as_security_req(struct AS_Security_Type *ASSecurity)
} }
} }
} }
uint8_t msg_queued = 0;
if (req->Common.TimingInfo.d == TimingInfo_Type_SubFrame)
{
ss_set_timinfo_t tinfo, timer_tinfo;
tinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
tinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
timer_tinfo = tinfo;
msg_queued = msg_can_be_queued(tinfo, &timer_tinfo);
LOG_A(ENB_SS,"VT_TIMER SYS task received MSG for future SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
if(msg_queued)
{
msg_queued = vt_timer_setup(timer_tinfo, TASK_RRC_ENB, 0,msg_p);
LOG_A(ENB_SS, "AS Security Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d\n",
tinfo.sfn,tinfo.sf, SS_context.sfn,SS_context.sf);
}
}
if (!msg_queued)
{
int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, msg_p); int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, msg_p);
if (send_res < 0) if (send_res < 0)
{ {
...@@ -1842,6 +1953,11 @@ static void sys_handle_as_security_req(struct AS_Security_Type *ASSecurity) ...@@ -1842,6 +1953,11 @@ static void sys_handle_as_security_req(struct AS_Security_Type *ASSecurity)
} }
} }
} }
else if (ASSecurity->d == AS_Security_Type_Release)
{
LOG_A(ENB_SS, "[SYS] AS_Security_Type_Release received\n");
}
}
send_sys_cnf(resType, resVal, cnfType, NULL); send_sys_cnf(resType, resVal, cnfType, NULL);
} }
...@@ -1876,7 +1992,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t ...@@ -1876,7 +1992,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
{ {
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_Cell received\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_Cell received\n");
SS_context.SSCell_list[cell_index].PhysicalCellId = req->Request.v.Cell.v.AddOrReconfigure.Basic.v.StaticCellInfo.v.Common.PhysicalCellId; SS_context.SSCell_list[cell_index].PhysicalCellId = req->Request.v.Cell.v.AddOrReconfigure.Basic.v.StaticCellInfo.v.Common.PhysicalCellId;
exitState = sys_handle_cell_config_req(&(req->Request.v.Cell)); exitState = sys_handle_cell_config_req(req);
LOG_A(ENB_SS,"[SYS] SS_STATE_NOT_CONFIGURED: PhysicalCellId is %d in SS_context \n",SS_context.SSCell_list[cell_index].PhysicalCellId); LOG_A(ENB_SS,"[SYS] SS_STATE_NOT_CONFIGURED: PhysicalCellId is %d in SS_context \n",SS_context.SSCell_list[cell_index].PhysicalCellId);
SS_context.SSCell_list[cell_index].State = exitState; SS_context.SSCell_list[cell_index].State = exitState;
if(RC.ss.State <= SS_STATE_CELL_CONFIGURED) if(RC.ss.State <= SS_STATE_CELL_CONFIGURED)
...@@ -1892,7 +2008,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t ...@@ -1892,7 +2008,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
if (req->Request.d == SystemRequest_Type_RadioBearerList) if (req->Request.d == SystemRequest_Type_RadioBearerList)
{ {
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_RadioBearerList received\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_RadioBearerList received\n");
exitState = sys_handle_radiobearer_list(&(req->Request.v.RadioBearerList)); exitState = sys_handle_radiobearer_list(req);
SS_context.SSCell_list[cell_index].State = exitState; SS_context.SSCell_list[cell_index].State = exitState;
if(RC.ss.State <= SS_STATE_CELL_CONFIGURED) if(RC.ss.State <= SS_STATE_CELL_CONFIGURED)
RC.ss.State = exitState; RC.ss.State = exitState;
...@@ -1911,7 +2027,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t ...@@ -1911,7 +2027,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
{ {
case SystemRequest_Type_Cell: case SystemRequest_Type_Cell:
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_Cell received\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_Cell received\n");
exitState = sys_handle_cell_config_req(&(req->Request.v.Cell)); exitState = sys_handle_cell_config_req(req);
LOG_A(ENB_SS,"[SYS] SS_STATE_CELL_ACTIVE: PhysicalCellId is %d in SS_context \n",SS_context.SSCell_list[cell_index].PhysicalCellId); LOG_A(ENB_SS,"[SYS] SS_STATE_CELL_ACTIVE: PhysicalCellId is %d in SS_context \n",SS_context.SSCell_list[cell_index].PhysicalCellId);
SS_context.SSCell_list[cell_index].State = exitState; SS_context.SSCell_list[cell_index].State = exitState;
if(RC.ss.State <= SS_STATE_CELL_ACTIVE) if(RC.ss.State <= SS_STATE_CELL_ACTIVE)
...@@ -1919,14 +2035,14 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t ...@@ -1919,14 +2035,14 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
break; break;
case SystemRequest_Type_RadioBearerList: case SystemRequest_Type_RadioBearerList:
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_RadioBearerList received in SS_STATE_CELL_ACTIVE state\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_RadioBearerList received in SS_STATE_CELL_ACTIVE state\n");
exitState = sys_handle_radiobearer_list(&(req->Request.v.RadioBearerList)); exitState = sys_handle_radiobearer_list(req);
SS_context.SSCell_list[cell_index].State = exitState; SS_context.SSCell_list[cell_index].State = exitState;
if(RC.ss.State <= SS_STATE_CELL_ACTIVE) if(RC.ss.State <= SS_STATE_CELL_ACTIVE)
RC.ss.State = exitState; RC.ss.State = exitState;
break; break;
case SystemRequest_Type_CellAttenuationList: case SystemRequest_Type_CellAttenuationList:
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_CellAttenuationList received\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_CellAttenuationList received\n");
sys_handle_cell_attn_req(&(req->Request.v.CellAttenuationList)); sys_handle_cell_attn_req(req);
break; break;
case SystemRequest_Type_EnquireTiming: case SystemRequest_Type_EnquireTiming:
sys_handle_enquire_timing(tinfo); sys_handle_enquire_timing(tinfo);
...@@ -1940,7 +2056,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t ...@@ -1940,7 +2056,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
case SystemRequest_Type_AS_Security: case SystemRequest_Type_AS_Security:
LOG_A(ENB_SS, "[SYS] SystemRequest_Type_AS_Security received\n"); LOG_A(ENB_SS, "[SYS] SystemRequest_Type_AS_Security received\n");
sys_handle_as_security_req(&(req->Request.v.AS_Security)); sys_handle_as_security_req(req);
break; break;
case SystemRequest_Type_UE_Cat_Info: case SystemRequest_Type_UE_Cat_Info:
...@@ -2194,7 +2310,8 @@ printf("VNG send to proxy cell_index %d\n",req->header.cell_index); ...@@ -2194,7 +2310,8 @@ printf("VNG send to proxy cell_index %d\n",req->header.cell_index);
LOG_A(ENB_SS,"VNG Command for cell_id: %d CMD %d ", LOG_A(ENB_SS,"VNG Command for cell_id: %d CMD %d ",
req->header.cell_id, req->cmd); req->header.cell_id, req->cmd);
sys_send_proxy((void *)req, sizeof(VngCmdReq_t)); ss_set_timinfo_t timer_tinfo= {0};
sys_send_proxy((void *)req, sizeof(VngCmdReq_t), 0, timer_tinfo);
} }
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