Commit 7a5fda00 authored by Jerome Peraldi's avatar Jerome Peraldi

Merge branch 'sqn/private/bugz125147' into 'sqn/3GPP_TTCN_System_Simulator'

Bug #125147 [eNB]support of 3GPP 8.2.1.6 under improved mac scheduler

See merge request sequans/system/ttcn/openairinterface5g!19
parents 03d0ff08 20a8fdb7
......@@ -94,6 +94,7 @@ typedef struct ss_nr_sys_port_msg_cnf {
/** SYS */
typedef struct ss_set_timinfo_s {
uint16_t hsfn;
uint16_t sfn;
uint8_t sf;
int cell_index;
......
......@@ -6965,12 +6965,18 @@ void rrc_eNB_as_security_configuration_req(
* Each RB entry will be freed invidually when the pdcp_remove_ue is invoked
* during the UE release process.
*/
kRRCint = CALLOC(1,32);
kUPenc = CALLOC(1,16);
kRRCenc = CALLOC(1,16);
memcpy(kRRCint,ASSecConfReq->Integrity.kRRCint, 32);
memcpy(kUPenc,ASSecConfReq->Ciphering.kUPenc, 16);
memcpy(kRRCenc,ASSecConfReq->Ciphering.kRRCenc, 16);
if(ASSecConfReq->Integrity.kRRCint) {
kRRCint = CALLOC(1,32);
memcpy(kRRCint,ASSecConfReq->Integrity.kRRCint, 32);
}
if(ASSecConfReq->Ciphering.kUPenc) {
kUPenc = CALLOC(1,16);
memcpy(kUPenc,ASSecConfReq->Ciphering.kUPenc, 16);
}
if(ASSecConfReq->Ciphering.kRRCenc) {
kRRCenc = CALLOC(1,16);
memcpy(kRRCenc,ASSecConfReq->Ciphering.kRRCenc, 16);
}
pdcp_config_set_security(
ctxt_pP,
......
......@@ -98,7 +98,7 @@ static void ss_send_drb_data(ss_drb_pdu_ind_t *pdu_ind, int cell_index){
ind.Common.TimingInfo.v.SubFrame.Subframe.v.Number = pdu_ind->subframe;
ind.Common.TimingInfo.v.SubFrame.HSFN.d = SystemFrameNumberInfo_Type_Number;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = 0;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = SS_context.hsfn;
ind.Common.TimingInfo.v.SubFrame.Slot.d = SlotTimingInfo_Type_Any;
ind.Common.TimingInfo.v.SubFrame.Slot.v.Any = true;
......
......@@ -257,9 +257,8 @@ void ss_port_man_send_data(
cnf.Common.TimingInfo.v.SubFrame.Subframe.d = SubFrameInfo_Type_Number;
cnf.Common.TimingInfo.v.SubFrame.Subframe.v.Number = tinfo->sf;
/** TODO: Always filling HSFN as 0, need to change this */
cnf.Common.TimingInfo.v.SubFrame.HSFN.d = SystemFrameNumberInfo_Type_Number;
cnf.Common.TimingInfo.v.SubFrame.HSFN.v.Number = 0;
cnf.Common.TimingInfo.v.SubFrame.HSFN.v.Number = tinfo->hsfn;
/** TODO: Always marking as first slot, need to change this */
cnf.Common.TimingInfo.v.SubFrame.Slot.d = SlotTimingInfo_Type_FirstSlot;
......
......@@ -123,8 +123,8 @@ static void ss_send_srb_data(ss_rrc_pdu_ind_t *pdu_ind,int cell_index)
ind.Common.TimingInfo.v.SubFrame.Subframe.d = SubFrameInfo_Type_Number;
ind.Common.TimingInfo.v.SubFrame.Subframe.v.Number = pdu_ind->subframe;
ind.Common.TimingInfo.v.SubFrame.HSFN.d = SystemFrameNumberInfo_Type_Any;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = 0;
ind.Common.TimingInfo.v.SubFrame.HSFN.d = SystemFrameNumberInfo_Type_Number;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = SS_context.hsfn;
ind.Common.TimingInfo.v.SubFrame.Slot.d = SlotTimingInfo_Type_Any;
ind.Common.TimingInfo.v.SubFrame.Slot.v.Any = true;
......@@ -257,6 +257,7 @@ static void ss_task_handle_rrc_pdu_req(struct EUTRA_RRC_PDU_REQ *req)
SS_RRC_PDU_REQ(message_p).rnti = rnti_g;
vt_add_sf(&req->Common.TimingInfo, -2); //RRC PDU schedule(if future timing) shall be ahead 2 subframe because of latency between VT_Timer_task --RRC -- PDCP
if (!vt_timer_push_msg(&req->Common.TimingInfo, TASK_RRC_ENB, instance_g, message_p))
{
itti_send_msg_to_task(TASK_RRC_ENB, instance_g, message_p);
......
......@@ -295,7 +295,8 @@ static void ss_task_sys_handle_timing_info(ss_set_timinfo_t *tinfo)
MessageDef *message_p = itti_alloc_new_message(TASK_SYS, 0, SS_SET_TIM_INFO);
if (message_p)
{
LOG_A(ENB_SS_SYS_TASK, "Reporting info sfn:%d\t sf:%d.\n", tinfo->sfn, tinfo->sf);
LOG_A(ENB_SS_SYS_TASK, "Reporting info hsfn:%d sfn:%d\t sf:%d.\n",tinfo->hsfn, tinfo->sfn, tinfo->sf);
SS_SET_TIM_INFO(message_p).hsfn = tinfo->hsfn;
SS_SET_TIM_INFO(message_p).sf = tinfo->sf;
SS_SET_TIM_INFO(message_p).sfn = tinfo->sfn;
SS_SET_TIM_INFO(message_p).cell_index = cell_index;
......@@ -2190,6 +2191,7 @@ static void ss_task_sys_handle_req(struct SYSTEM_CTRL_REQ *req, ss_set_timinfo_t
case SystemRequest_Type_Paging:
LOG_A(ENB_SS_SYS_TASK, "SystemRequest_Type Paging received\n");
ss_set_timinfo_t pg_timinfo ;
pg_timinfo.hsfn = req->Common.TimingInfo.v.SubFrame.HSFN.v.Number;
pg_timinfo.sfn = req->Common.TimingInfo.v.SubFrame.SFN.v.Number;
pg_timinfo.sf = req->Common.TimingInfo.v.SubFrame.Subframe.v.Number;
sys_handle_paging_req(&(req->Request.v.Paging), pg_timinfo);
......@@ -2373,7 +2375,8 @@ void *ss_eNB_sys_process_itti_msg(void *notUsed)
{
MessageDef *received_msg = NULL;
int result;
static ss_set_timinfo_t tinfo = {.sfn = 0xFFFF, .sf = 0xFF};
static ss_set_timinfo_t tinfo = {.hsfn=0xFFFF, .sfn = 0xFFFF, .sf = 0xFF};
SS_context.hsfn = tinfo.hsfn;
SS_context.sfn = tinfo.sfn;
SS_context.sf = tinfo.sf;
......@@ -2402,17 +2405,26 @@ void *ss_eNB_sys_process_itti_msg(void *notUsed)
}
case SS_UPD_TIM_INFO:
{
/*WA: calculate hsfn here */
if(tinfo.hsfn == 0xFFFF){
tinfo.hsfn = 0;
} else if(tinfo.sfn == 1023 && SS_UPD_TIM_INFO(received_msg).sfn == 0){
tinfo.hsfn++;
if(tinfo.hsfn == 1024){
tinfo.hsfn = 0;
}
}
tinfo.sf = SS_UPD_TIM_INFO(received_msg).sf;
tinfo.sfn = SS_UPD_TIM_INFO(received_msg).sfn;
SS_context.sfn = tinfo.sfn;
SS_context.sf = tinfo.sf;
// SS_context.hsfn = tinfo.hsfn;
SS_context.hsfn = tinfo.hsfn;
g_log->sfn = tinfo.sfn;
g_log->sf = (uint32_t)tinfo.sf;
if (g_log->sfn % 64 == 0 && g_log->sf == 0) {
LOG_I(ENB_SS_SYS_TASK, "[SYS] received SS_UPD_TIM_INFO SFN: %d SF: %d\n", tinfo.sfn, tinfo.sf);
LOG_I(ENB_SS_SYS_TASK, "[SYS] received SS_UPD_TIM_INFO HSFN:%d SFN: %d SF: %d\n", tinfo.hsfn,tinfo.sfn, tinfo.sf);
}
}
break;
......
......@@ -96,7 +96,7 @@ static void ss_send_sysind_data(ss_system_ind_t *p_ind,int cell_index)
ind.Common.TimingInfo.v.SubFrame.Subframe.v.Number = p_ind->sf;
ind.Common.TimingInfo.v.SubFrame.HSFN.d = SystemFrameNumberInfo_Type_Number;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = 0;
ind.Common.TimingInfo.v.SubFrame.HSFN.v.Number = SS_context.hsfn;
ind.Common.TimingInfo.v.SubFrame.Slot.d = SlotTimingInfo_Type_Any;
ind.Common.TimingInfo.v.SubFrame.Slot.v.Any = true;
......
This diff is collapsed.
......@@ -41,11 +41,6 @@ void *ss_eNB_vt_timer_task(void *arg);
int vt_timer_push_msg(struct TimingInfo_Type* at, task_id_t task_id,instance_t instance, MessageDef *msg_p);
void vt_add_sf(struct TimingInfo_Type* at, int offset);
uint8_t msg_can_be_queued(ss_set_timinfo_t req_tinfo, ss_set_timinfo_t *timer_tinfo);
uint8_t vt_timer_setup(ss_set_timinfo_t tinfo, task_id_t task_id,instance_t instance,void *msg);
typedef struct vt_timer_elm_s {
//uint8_t msg_type; ///MSG type
task_id_t task_id;
......
......@@ -88,15 +88,14 @@ void ss_vtp_send_tinfo(
size_t msgSize = size;
memset(&virtualTime, 0, sizeof(virtualTime));
virtualTime.Enable = true;
virtualTime.TimingInfo.SFN.d = true;
virtualTime.TimingInfo.SFN.d = SystemFrameNumberInfo_Type_Number;
virtualTime.TimingInfo.SFN.v.Number = tinfo->sfn;
virtualTime.TimingInfo.Subframe.d = true;
virtualTime.TimingInfo.Subframe.d = SubFrameInfo_Type_Number;
virtualTime.TimingInfo.Subframe.v.Number = tinfo->sf;
/** TODO: Always filling HSFN as 0, need to check this */
virtualTime.TimingInfo.HSFN.d = false;
virtualTime.TimingInfo.HSFN.v.Number = 0;
virtualTime.TimingInfo.HSFN.d = SystemFrameNumberInfo_Type_Number;
virtualTime.TimingInfo.HSFN.v.Number = tinfo->hsfn;
/** TODO: Always marking as first slot, need to check this */
virtualTime.TimingInfo.Slot.d = SlotTimingInfo_Type_FirstSlot;
......@@ -327,6 +326,7 @@ void *ss_eNB_vtp_process_itti_msg(void *notUsed)
case SS_UPD_TIM_INFO:
{
ss_set_timinfo_t tinfo;
tinfo.hsfn = SS_context.hsfn; //it is supposed that SS_UPD_TIM_INFO processed by eNB_sys task firstly
tinfo.sf = SS_UPD_TIM_INFO(received_msg).sf;
tinfo.sfn = SS_UPD_TIM_INFO(received_msg).sfn;
if(SS_UPD_TIM_INFO(received_msg).physCellId) {
......
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