Commit f8928de6 authored by Vaibhav Shrivastava's avatar Vaibhav Shrivastava Committed by jperaldi

Fix Paging Alignment

parent 4a36b677
...@@ -1261,137 +1261,123 @@ static void sys_handle_cell_attn_req(struct CellAttenuationConfig_Type_CellAtten ...@@ -1261,137 +1261,123 @@ static void sys_handle_cell_attn_req(struct CellAttenuationConfig_Type_CellAtten
static void sys_handle_paging_req(struct PagingTrigger_Type *pagingRequest, ss_set_timinfo_t tinfo) static void sys_handle_paging_req(struct PagingTrigger_Type *pagingRequest, ss_set_timinfo_t tinfo)
{ {
LOG_A(ENB_SS, "[SYS] Enter sys_handle_paging_req Paging_IND for processing\n"); LOG_A(ENB_SS, "[SYS] Enter sys_handle_paging_req Paging_IND for processing\n");
/** TODO: Considering only one cell for now */ /** TODO: Considering only one cell for now */
uint8_t cellId = 0; //(uint8_t)pagingRequ ->CellId; uint8_t cellId = 0; //(uint8_t)pagingRequ ->CellId;
uint8_t cn_domain = 0; uint8_t cn_domain = 0;
enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_Paging; enum SystemConfirm_Type_Sel cnfType = SystemConfirm_Type_Paging;
enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success; enum ConfirmationResult_Type_Sel resType = ConfirmationResult_Type_Success;
bool resVal = TRUE; bool resVal = TRUE;
static uint8_t oneTimeProcessingFlag = 0; static uint8_t oneTimeProcessingFlag = 0;
MessageDef *message_p = itti_alloc_new_message(TASK_SYS, 0,SS_SS_PAGING_IND); MessageDef *message_p = itti_alloc_new_message(TASK_SYS, 0,SS_SS_PAGING_IND);
if (message_p == NULL) if (message_p == NULL)
{ {
return; return;
} }
SS_PAGING_IND(message_p).sfn = tinfo.sfn; SS_PAGING_IND(message_p).sfn = tinfo.sfn;
SS_PAGING_IND(message_p).sf = tinfo.sf; SS_PAGING_IND(message_p).sf = tinfo.sf;
SS_PAGING_IND(message_p).paging_recordList = NULL; SS_PAGING_IND(message_p).paging_recordList = NULL;
SS_PAGING_IND(message_p).systemInfoModification = false; SS_PAGING_IND(message_p).systemInfoModification = false;
SS_PAGING_IND(message_p).bSubframeOffsetListPresent = false; SS_PAGING_IND(message_p).bSubframeOffsetListPresent = false;
switch (pagingRequest->Paging.message.d) switch (pagingRequest->Paging.message.d) {
{ case SQN_PCCH_MessageType_c1:
case SQN_PCCH_MessageType_c1: if (pagingRequest->Paging.message.v.c1.d) {
if (pagingRequest->Paging.message.v.c1.d) if (pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.d) {
{ struct SQN_PagingRecord *p_sdl_msg = NULL;
if (pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.d) p_sdl_msg = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.v;
{ /* id-CNDomain : convert cnDomain */
struct SQN_PagingRecord *p_sdl_msg = NULL; uint8_t numPagingRecord = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.d;
p_sdl_msg = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.v; size_t pgSize = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.d * sizeof(ss_paging_identity_t);
/* id-CNDomain : convert cnDomain */ SS_PAGING_IND(message_p).sfn =tinfo.sfn;
uint8_t numPagingRecord = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.d; SS_PAGING_IND(message_p).sf = tinfo.sf;
size_t pgSize = pagingRequest->Paging.message.v.c1.v.paging.pagingRecordList.v.d * sizeof(ss_paging_identity_t); SS_PAGING_IND(message_p).paging_recordList = CALLOC(1, pgSize);
SS_PAGING_IND(message_p).sfn =tinfo.sfn; ss_paging_identity_t *p_record_msg = SS_PAGING_IND(message_p).paging_recordList;
SS_PAGING_IND(message_p).sf = tinfo.sf; SS_PAGING_IND(message_p).num_paging_record = numPagingRecord;
SS_PAGING_IND(message_p).paging_recordList = CALLOC(1, pgSize); for (int count = 0; count < numPagingRecord; count++) {
ss_paging_identity_t *p_record_msg = SS_PAGING_IND(message_p).paging_recordList; cn_domain = p_sdl_msg->cn_Domain;
SS_PAGING_IND(message_p).num_paging_record = numPagingRecord; /* id-CNDomain : convert cnDomain */
for (int count = 0; count < numPagingRecord; count++) if (cn_domain == SQN_PagingRecord_cn_Domain_e_ps) {
{ p_record_msg->cn_domain = CN_DOMAIN_PS;
cn_domain = p_sdl_msg->cn_Domain; }
/* id-CNDomain : convert cnDomain */ else if (cn_domain == SQN_PagingRecord_cn_Domain_e_cs) {
if (cn_domain == SQN_PagingRecord_cn_Domain_e_ps) p_record_msg->cn_domain = CN_DOMAIN_CS;
{ }
p_record_msg->cn_domain = CN_DOMAIN_PS;
} switch (p_sdl_msg->ue_Identity.d) {
else if (cn_domain == SQN_PagingRecord_cn_Domain_e_cs) case SQN_PagingUE_Identity_s_TMSI:
{ p_record_msg->ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi;
p_record_msg->cn_domain = CN_DOMAIN_CS; int32_t stmsi_rx = bin_to_int(p_sdl_msg->ue_Identity.v.s_TMSI.m_TMSI, 32);
}
p_record_msg->ue_paging_identity.choice.s_tmsi.m_tmsi = stmsi_rx ;
switch (p_sdl_msg->ue_Identity.d) p_record_msg->ue_paging_identity.choice.s_tmsi.mme_code =
{ bin_to_int(p_sdl_msg->ue_Identity.v.s_TMSI.mmec,8);
case SQN_PagingUE_Identity_s_TMSI: if (oneTimeProcessingFlag == 0) {
p_record_msg->ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi; SS_PAGING_IND(message_p).ue_index_value = paging_ue_index_g;
int32_t stmsi_rx = bin_to_int(p_sdl_msg->ue_Identity.v.s_TMSI.m_TMSI, 32); paging_ue_index_g = ((paging_ue_index_g +4) % MAX_MOBILES_PER_ENB) ;
oneTimeProcessingFlag = 1;
p_record_msg->ue_paging_identity.choice.s_tmsi.m_tmsi = stmsi_rx ; }
p_record_msg->ue_paging_identity.choice.s_tmsi.mme_code = break;
bin_to_int(p_sdl_msg->ue_Identity.v.s_TMSI.mmec,8); case SQN_PagingUE_Identity_imsi:
if (oneTimeProcessingFlag == 0) p_record_msg->ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi;
{
SS_PAGING_IND(message_p).ue_index_value = paging_ue_index_g; memcpy(&(p_record_msg->ue_paging_identity.choice.imsi),
paging_ue_index_g = ((paging_ue_index_g +4) % MAX_MOBILES_PER_ENB) ; &(p_sdl_msg->ue_Identity.v.imsi),
oneTimeProcessingFlag = 1; sizeof(s1ap_imsi_t));
} break;
break; case SQN_PagingUE_Identity_ng_5G_S_TMSI_r15:
case SQN_PagingUE_Identity_imsi: case SQN_PagingUE_Identity_fullI_RNTI_r15:
p_record_msg->ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi; case SQN_PagingUE_Identity_UNBOUND_VALUE:
LOG_A(ENB_SS, "[SYS] Error Unhandled Paging request \n");
memcpy(&(p_record_msg->ue_paging_identity.choice.imsi), break;
&(p_sdl_msg->ue_Identity.v.imsi), default :
sizeof(s1ap_imsi_t)); LOG_A(ENB_SS, "[SYS] Invalid Pging request received\n");
break;
case SQN_PagingUE_Identity_ng_5G_S_TMSI_r15: }
case SQN_PagingUE_Identity_fullI_RNTI_r15: p_sdl_msg++;
case SQN_PagingUE_Identity_UNBOUND_VALUE: p_record_msg++;
LOG_A(ENB_SS, "[SYS] Error Unhandled Paging request \n"); }
break; }
default :
LOG_A(ENB_SS, "[SYS] Invalid Pging request received\n"); if (pagingRequest->Paging.message.v.c1.v.paging.systemInfoModification.d) {
LOG_A(ENB_SS, "[SYS] System Info Modification received in Paging request \n");
} if (SQN_Paging_systemInfoModification_e_true == pagingRequest->Paging.message.v.c1.v.paging.systemInfoModification.v) {
p_sdl_msg++; SS_PAGING_IND(message_p).systemInfoModification = true;
p_record_msg++; }
} }
} }
if(pagingRequest->SubframeOffsetList.d) {
if (pagingRequest->Paging.message.v.c1.v.paging.systemInfoModification.d) LOG_A(ENB_SS, "[SYS] Subframe Offset List present in Paging request \n");
{ SS_PAGING_IND(message_p).bSubframeOffsetListPresent=true;
LOG_A(ENB_SS, "[SYS] System Info Modification received in Paging request \n"); SS_PAGING_IND(message_p).subframeOffsetList.num = 0;
if (SQN_Paging_systemInfoModification_e_true == pagingRequest->Paging.message.v.c1.v.paging.systemInfoModification.v) for (int i=0; i < pagingRequest->SubframeOffsetList.v.d; i++) {
{ SS_PAGING_IND(message_p).subframeOffsetList.subframe_offset[i] = pagingRequest->SubframeOffsetList.v.v[i];
SS_PAGING_IND(message_p).systemInfoModification = true; SS_PAGING_IND(message_p).subframeOffsetList.num++;
} }
} }
}
if(pagingRequest->SubframeOffsetList.d) int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, message_p);
{ if (send_res < 0) {
LOG_A(ENB_SS, "[SYS] Subframe Offset List present in Paging request \n"); LOG_A(ENB_SS, "[SYS] Error sending Paging to RRC_ENB");
SS_PAGING_IND(message_p).bSubframeOffsetListPresent=true; }
SS_PAGING_IND(message_p).subframeOffsetList.num = 0; oneTimeProcessingFlag = 0;
for (int i=0; i < pagingRequest->SubframeOffsetList.v.d; i++) LOG_A(ENB_SS, "[SYS] Paging_IND for Cell_id %d sent to RRC\n", cellId);
{ break;
SS_PAGING_IND(message_p).subframeOffsetList.subframe_offset[i] = pagingRequest->SubframeOffsetList.v.v[i]; case SQN_PCCH_MessageType_messageClassExtension:
SS_PAGING_IND(message_p).subframeOffsetList.num++; LOG_A(ENB_SS, "[SYS] PCCH_MessageType_messageClassExtension for Cell_id %d received\n",
} cellId);
} break;
case SQN_PCCH_MessageType_UNBOUND_VALUE:
int send_res = itti_send_msg_to_task(TASK_RRC_ENB, 0, message_p); LOG_A(ENB_SS, "[SYS] Invalid Pging request received Type_UNBOUND_VALUE received\n");
if (send_res < 0) break;
{ default:
LOG_A(ENB_SS, "[SYS] Error sending Paging to RRC_ENB"); LOG_A(ENB_SS, "[SYS] Invalid Pging request received\n");
} }
oneTimeProcessingFlag = 0; send_sys_cnf(resType, resVal, cnfType, NULL);
LOG_A(ENB_SS, "[SYS] Paging_IND for Cell_id %d sent to RRC\n", cellId); LOG_A(ENB_SS, "[SYS] Exit sys_handle_paging_req Paging_IND processing for Cell_id %d \n", cellId);
break;
case SQN_PCCH_MessageType_messageClassExtension:
LOG_A(ENB_SS, "[SYS] PCCH_MessageType_messageClassExtension for Cell_id %d received\n",
cellId);
break;
case SQN_PCCH_MessageType_UNBOUND_VALUE:
LOG_A(ENB_SS, "[SYS] Invalid Pging request received Type_UNBOUND_VALUE received\n");
break;
default:
LOG_A(ENB_SS, "[SYS] Invalid Pging request received\n");
}
send_sys_cnf(resType, resVal, cnfType, NULL);
LOG_A(ENB_SS, "[SYS] Exit sys_handle_paging_req Paging_IND processing for Cell_id %d \n", cellId);
} }
......
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