From 49353c29256611b420bddbf658cc33c96775f10c Mon Sep 17 00:00:00 2001
From: Xu Bo <xubo1@cn.fujitsu.com>
Date: Fri, 8 Sep 2017 15:45:55 +0900
Subject: [PATCH] fix IMSI encode according to 3GPP, change log level from
 error to debug

---
 openair1/SCHED/phy_procedures_lte_eNb.c   |   8 +-
 openair2/COMMON/s1ap_messages_def.h       |   1 +
 openair2/COMMON/s1ap_messages_types.h     |   7 +-
 openair2/LAYER2/MAC/eNB_scheduler.c       |   2 +-
 openair2/LAYER2/MAC/eNB_scheduler_dlsch.c |   6 +-
 openair2/RRC/LITE/MESSAGES/asn1_msg.c     |   4 +-
 openair3/S1AP/s1ap_eNB_decoder.c          |   8 ++
 openair3/S1AP/s1ap_eNB_handlers.c         | 157 +++++++++++++---------
 8 files changed, 119 insertions(+), 74 deletions(-)

diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index cb9268095e..12b0ecfb4d 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -713,7 +713,7 @@ void generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC
     
   } else if (dci_alloc->rnti == P_RNTI) {
     // if we have P_RNTI, configure dlsch parameters and CCE index
-    LOG_D(PHY,"Generating dlsch params for P_RNTI\n");
+    LOG_E(PHY,"Generating dlsch params for P_RNTI\n");
     generate_eNB_dlsch_params_from_dci(frame,
                subframe,
                &dci_alloc->dci_pdu[0],
@@ -731,7 +731,7 @@ void generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC
 
     eNB->dlsch_PCH->nCCE[subframe] = dci_alloc->firstCCE;
 
-    LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (PCH)  => %"PRIu8"\n",eNB->Mod_id,frame,subframe,
+    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (PCH)  => %"PRIu8"\n",eNB->Mod_id,frame,subframe,
     eNB->dlsch_PCH->nCCE[subframe]);
 
 #if defined(SMBV)
@@ -2071,6 +2071,10 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
         preamble_energy_list[preamble_max],
         preamble_delay_list[preamble_max]);
 #endif
+LOG_E(PHY, "[RAPROC] Most likely preamble %d, energy %d dB delay %d\n",
+        preamble_max,
+        preamble_energy_list[preamble_max],
+        preamble_delay_list[preamble_max]);
 
   if (preamble_energy_list[preamble_max] > 580) {
 
diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h
index 10c70439d2..bcb8515b39 100644
--- a/openair2/COMMON/s1ap_messages_def.h
+++ b/openair2/COMMON/s1ap_messages_def.h
@@ -33,6 +33,7 @@ MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG, MESSAGE_PRIORITY_MED, IttiMsgT
 MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_LOG    , MESSAGE_PRIORITY_MED, IttiMsgText                      , s1ap_ue_context_release_log)
 MESSAGE_DEF(S1AP_E_RAB_SETUP_REQUEST_LOG    , MESSAGE_PRIORITY_MED, IttiMsgText                      , s1ap_e_rab_setup_request_log)
 MESSAGE_DEF(S1AP_E_RAB_SETUP_RESPONSE_LOG    , MESSAGE_PRIORITY_MED, IttiMsgText                      , s1ap_e_rab_setup_response_log)
+MESSAGE_DEF(S1AP_PAGING_LOG    , MESSAGE_PRIORITY_MED, IttiMsgText                      , s1ap_paging_log)
 
 /* eNB application layer -> S1AP messages */
 MESSAGE_DEF(S1AP_REGISTER_ENB_REQ          , MESSAGE_PRIORITY_MED, s1ap_register_enb_req_t          , s1ap_register_enb_req)
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index da225db66a..1bc393c740 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -175,6 +175,11 @@ typedef struct s1ap_gummei_s {
   uint16_t mme_group_id;
 } s1ap_gummei_t;
 
+typedef struct s1ap_imsi_s {
+  uint8_t  buffer[S1AP_IMSI_LENGTH];
+  uint8_t  length;
+} s1ap_imsi_t;
+
 typedef struct s_tmsi_s {
   uint8_t  mme_code;
   uint32_t m_tmsi;
@@ -189,7 +194,7 @@ typedef enum ue_paging_identity_presenceMask_e {
 typedef struct ue_paging_identity_s {
   ue_paging_identity_presenceMask_t presenceMask;
   union {
-    char     imsi[S1AP_IMSI_LENGTH];
+    s1ap_imsi_t  imsi;
     s_tmsi_t s_tmsi;
   } choice;
 } ue_paging_identity_t;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index f9079b68d7..4a4702807e 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -310,7 +310,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
         break;
 
       case RRC_MAC_PCCH_DATA_REQ:
-        LOG_D(MAC, "Received %s from %s: instance %d, frameP %d, eNB_index %d\n",
+        LOG_E(MAC, "Received %s from %s: instance %d, frameP %d, eNB_index %d\n",
               msg_name, ITTI_MSG_ORIGIN_NAME(msg_p), instance,
               RRC_MAC_PCCH_DATA_REQ (msg_p).frame, RRC_MAC_PCCH_DATA_REQ (msg_p).enb_index);
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index f9314768e4..546b2b3f43 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -2352,7 +2352,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
                   continue;
               }
               //paging parameter log
-              LOG_D(MAC,"frame %d subframe %d PCH: paging_ue_index %d pcch_sdu_length %d mcs %d n_rb_step %d n_vrb_dl %d first_rb%d Lcrbs %d\n",
+              LOG_D(MAC,"frame %d subframe %d PCH: paging_ue_index %d pcch_sdu_length %d mcs %d n_rb_step %d n_vrb_dl %d first_rb %d Lcrbs %d\n",
                     frameP, subframeP, UE_PF_PO[CC_id][i].ue_index_value, pcch_sdu_length, mcs, n_rb_step, n_vrb_dl, first_rb, Lcrbs);
 #else
               //NO SIB
@@ -2526,7 +2526,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
                     continue;
                 }
                 //paging first_rb log
-                LOG_D(MAC,"[eNB %d] Frame %d subframe %d PCH: paging_ue_index %d pcch_sdu_length %d mcs %d first_rb%d\n",
+                LOG_D(MAC,"[eNB %d] Frame %d subframe %d PCH: paging_ue_index %d pcch_sdu_length %d mcs %d first_rb %d\n",
                       module_idP, frameP, subframeP, UE_PF_PO[CC_id][i].ue_index_value, pcch_sdu_length, mcs, first_rb);
 #endif
               pthread_mutex_lock(&ue_pf_po_mutex);
@@ -2545,7 +2545,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
                             eNB->subframe,
                             0,
                             0);
-                  LOG_D(OPT,"[eNB %d][PCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
+                  LOG_E(OPT,"[eNB %d][PCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
                         module_idP, frameP, CC_id, 0xffff, pcch_sdu_length);
               }
               LOG_D(MAC,"[eNB %d] Frame %d : Scheduling PCCH->DLSCH for CC_id %d Paging %d bytes (mcs %d, rb 3, TBS %d)\n",
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index 1fe3382762..6b21d4f55b 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -2613,8 +2613,8 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin
     paging_record_p->ue_Identity.choice.s_TMSI.m_TMSI.bits_unused = 0;
   } else if (ue_paging_identity.presenceMask == UE_PAGING_IDENTITY_imsi) {
     IMSI_Digit_t imsi_digit[21];
-    for (j = 0; j< strlen(ue_paging_identity.choice.imsi); j++) {  /* IMSI size */
-      imsi_digit[j] = (IMSI_Digit_t)(ue_paging_identity.choice.imsi[j] - '0');
+    for (j = 0; j< ue_paging_identity.choice.imsi.length; j++) {  /* IMSI size */
+      imsi_digit[j] = (IMSI_Digit_t)ue_paging_identity.choice.imsi.buffer[j];
       ASN_SEQUENCE_ADD(&paging_record_p->ue_Identity.choice.imsi.list, &imsi_digit[j]);
     }
   }
diff --git a/openair3/S1AP/s1ap_eNB_decoder.c b/openair3/S1AP/s1ap_eNB_decoder.c
index 799887f70a..8446f30d07 100644
--- a/openair3/S1AP/s1ap_eNB_decoder.c
+++ b/openair3/S1AP/s1ap_eNB_decoder.c
@@ -108,6 +108,14 @@ static int s1ap_eNB_decode_initiating_message(s1ap_message *message,
     ret = s1ap_decode_s1ap_pagingies(
             &message->msg.s1ap_PagingIEs, &initiating_p->value);
     s1ap_xer_print_s1ap_paging(s1ap_xer__print2sp, message_string, message);
+    message_id = S1AP_PAGING_LOG;
+    message_string_size = strlen(message_string);
+    message_p           = itti_alloc_new_message_sized(TASK_S1AP,
+                          message_id,
+                          message_string_size + sizeof (IttiMsgText));
+    message_p->ittiMsg.s1ap_paging_log.size = message_string_size;
+    memcpy(&message_p->ittiMsg.s1ap_paging_log.text, message_string, message_string_size);
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
     S1AP_INFO("Paging initiating message\n");
     free(message_string);
     break;
diff --git a/openair3/S1AP/s1ap_eNB_handlers.c b/openair3/S1AP/s1ap_eNB_handlers.c
index 805e61cdb9..8b838a9ebb 100644
--- a/openair3/S1AP/s1ap_eNB_handlers.c
+++ b/openair3/S1AP/s1ap_eNB_handlers.c
@@ -1031,48 +1031,66 @@ int s1ap_eNB_handle_paging(uint32_t               assoc_id,
   S1AP_DEBUG("[SCTP %d] Received Paging ue_index_value (%d)\n",
             assoc_id,(uint32_t)S1AP_PAGING_IND(message_p).ue_index_value);
 
+  S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code = 0;
+  S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi = 0;
+
   /* convert UE Paging Identity */
   if (paging_p->uePagingID.present == S1ap_UEPagingID_PR_s_TMSI) {
-	  S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi;
+      S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi;
       OCTET_STRING_TO_INT8(&paging_p->uePagingID.choice.s_TMSI.mMEC, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code);
       OCTET_STRING_TO_INT32(&paging_p->uePagingID.choice.s_TMSI.m_TMSI, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi);
   } else if (paging_p->uePagingID.present == S1ap_UEPagingID_PR_iMSI) {
       S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi;
-      uint64_t imsiBuf = 0;
+      S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length = 0;
       for (int i = 0; i < paging_p->uePagingID.choice.iMSI.size; i++) {
-          imsiBuf |= ((uint64_t)paging_p->uePagingID.choice.iMSI.buf[i]) << (paging_p->uePagingID.choice.iMSI.size - 1 - i) * 8;
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i] = (uint8_t)(paging_p->uePagingID.choice.iMSI.buf[i] & 0x0F );
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++;
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] = (uint8_t)((paging_p->uePagingID.choice.iMSI.buf[i]>>4) & 0x0F);
+          LOG_D(S1AP,"paging : i %d %d imsi %d %d \n",2*i,2*i+1,S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1]);
+          if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] == 0x0F) {
+              if(i != paging_p->uePagingID.choice.iMSI.size - 1){
+                  /* invalid paging_p->uePagingID.choise.iMSI.buffer */
+                  S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI error(i %d 0x0F)\n", assoc_id,i);
+                  return -1;
+              }
+          } else {
+              S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++;
+          }
       }
-      int res = snprintf(S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi, sizeof(S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi), "%lld", (long long int)imsiBuf);
-      if (res > S1AP_IMSI_LENGTH) {
+      if (S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length >= S1AP_IMSI_LENGTH) {
           /* invalid paging_p->uePagingID.choise.iMSI.size */
-          S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI.size(%d) is over IMSI length(%d)\n", assoc_id, res, S1AP_IMSI_LENGTH);
+          S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI.size(%d) is over IMSI length(%d)\n", assoc_id, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, S1AP_IMSI_LENGTH);
           return -1;
-      }
-  } else {
+      }  
+} else {
       /* invalid paging_p->uePagingID.present */
       S1AP_ERROR("[SCTP %d] Received Paging : uePagingID.present(%d) is unknown\n", assoc_id, paging_p->uePagingID.present);
       return -1;
   }
 
+#if 0
   /* convert Paging DRX(optional) */
-//  switch(paging_p->pagingDRX) {
-//  case S1ap_PagingDRX_v32:
-//      S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_32;
-//    break;
-//  case S1ap_PagingDRX_v64:
-//      S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_64;
-//    break;
-//  case S1ap_PagingDRX_v128:
-//      S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_128;
-//    break;
-//  case S1ap_PagingDRX_v256:
-//      S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
-//    break;
-//  default:
-//    // when UE Paging DRX is no value
-//      S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
-//    break;
-//  }
+  if (paging_p->presenceMask & S1AP_PAGINGIES_PAGINGDRX_PRESENT) {
+      switch(paging_p->pagingDRX) {
+        case S1ap_PagingDRX_v32:
+          S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_32;
+         break;
+        case S1ap_PagingDRX_v64:
+          S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_64;
+        break;
+        case S1ap_PagingDRX_v128:
+          S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_128;
+        break;
+        case S1ap_PagingDRX_v256:
+          S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
+        break;
+        default:
+          // when UE Paging DRX is no value
+          S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
+        break;
+      }
+  }
+#endif
   S1AP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
 
   /* convert cnDomain */
@@ -1088,9 +1106,10 @@ int s1ap_eNB_handle_paging(uint32_t               assoc_id,
 
   memset (&S1AP_PAGING_IND(message_p).plmn_identity[0], 0, sizeof(plmn_identity_t)*256);
   memset (&S1AP_PAGING_IND(message_p).tac[0], 0, sizeof(int16_t)*256);
+  S1AP_PAGING_IND(message_p).tai_size = 0;
 
   for (int i = 0; i < paging_p->taiList.s1ap_TAIItem.count; i++) {
-     S1AP_DEBUG("[SCTP %d] Received Paging taiList: i %d, count %d\n", assoc_id, i, paging_p->taiList.s1ap_TAIItem.count);
+     S1AP_INFO("[SCTP %d] Received Paging taiList: i %d, count %d\n", assoc_id, i, paging_p->taiList.s1ap_TAIItem.count);
      S1ap_TAIItem_t s1ap_TAIItem;
      memset (&s1ap_TAIItem, 0, sizeof(S1ap_TAIItem_t));
 
@@ -1099,53 +1118,61 @@ int s1ap_eNB_handle_paging(uint32_t               assoc_id,
      TBCD_TO_MCC_MNC(&s1ap_TAIItem.tAI.pLMNidentity, S1AP_PAGING_IND(message_p).plmn_identity[i].mcc,
               S1AP_PAGING_IND(message_p).plmn_identity[i].mnc,
               S1AP_PAGING_IND(message_p).plmn_identity[i].mnc_digit_length);
-      OCTET_STRING_TO_INT16(&s1ap_TAIItem.tAI.tAC, S1AP_PAGING_IND(message_p).tac[i]);
-      S1AP_PAGING_IND(message_p).tai_size++;
-      S1AP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id, S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, S1AP_PAGING_IND(message_p).tac[i]);
+     OCTET_STRING_TO_INT16(&s1ap_TAIItem.tAI.tAC, S1AP_PAGING_IND(message_p).tac[i]);
+     S1AP_PAGING_IND(message_p).tai_size++;
+     S1AP_DEBUG("[SCTP %d] Received Paging: MCC %d, MNC %d, TAC %d\n", assoc_id, S1AP_PAGING_IND(message_p).plmn_identity[i].mcc, S1AP_PAGING_IND(message_p).plmn_identity[i].mnc, S1AP_PAGING_IND(message_p).tac[i]);
   }
 
-  // CSG Id(optional) List is not used
+#if 0
+ // CSG Id(optional) List is not used
+  if (paging_p->presenceMask & S1AP_PAGINGIES_CSG_IDLIST_PRESENT) {
+      // TODO
+  }
 
   /* convert pagingPriority (optional) if has value */
-//  if (paging_p->pagingPriority >= 0) {
-//      switch(paging_p->pagingPriority) {
-//      case S1ap_PagingPriority_priolevel1:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL1;
-//        break;
-//      case S1ap_PagingPriority_priolevel2:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL2;
-//        break;
-//      case S1ap_PagingPriority_priolevel3:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL3;
-//        break;
-//      case S1ap_PagingPriority_priolevel4:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL4;
-//        break;
-//      case S1ap_PagingPriority_priolevel5:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL5;
-//        break;
-//      case S1ap_PagingPriority_priolevel6:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL6;
-//        break;
-//      case S1ap_PagingPriority_priolevel7:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL7;
-//        break;
-//      case S1ap_PagingPriority_priolevel8:
-//          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL8;
-//        break;
-//      default:
-//        /* invalid paging_p->pagingPriority */
-//        S1AP_ERROR("[SCTP %d] Received paging : pagingPriority(%ld) is invalid\n", assoc_id, paging_p->pagingPriority);
-//        return -1;
-//      }
-//  }
+  if (paging_p->presenceMask & S1AP_PAGINGIES_PAGINGPRIORITY_PRESENT) {
+      switch(paging_p->pagingPriority) {
+      case S1ap_PagingPriority_priolevel1:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL1;
+        break;
+      case S1ap_PagingPriority_priolevel2:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL2;
+        break;
+      case S1ap_PagingPriority_priolevel3:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL3;
+        break;
+      case S1ap_PagingPriority_priolevel4:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL4;
+        break;
+      case S1ap_PagingPriority_priolevel5:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL5;
+        break;
+      case S1ap_PagingPriority_priolevel6:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL6;
+        break;
+      case S1ap_PagingPriority_priolevel7:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL7;
+        break;
+      case S1ap_PagingPriority_priolevel8:
+          S1AP_PAGING_IND(message_p).paging_priority = PAGING_PRIO_LEVEL8;
+        break;
+      default:
+        /* invalid paging_p->pagingPriority */
+        S1AP_ERROR("[SCTP %d] Received paging : pagingPriority(%ld) is invalid\n", assoc_id, paging_p->pagingPriority);
+        return -1;
+      }
+  }
+#endif
   //paging parameter values
   S1AP_DEBUG("[SCTP %d] Received Paging parameters: ue_index_value %d  cn_domain %d paging_drx %d paging_priority %d\n",assoc_id,
           S1AP_PAGING_IND(message_p).ue_index_value, S1AP_PAGING_IND(message_p).cn_domain,
           S1AP_PAGING_IND(message_p).paging_drx, S1AP_PAGING_IND(message_p).paging_priority);
-  S1AP_DEBUG("[SCTP %d] Received Paging parameters(ue): presenceMask %d  s_tmsi.m_tmsi %d s_tmsi.mme_code %d\n",assoc_id,
+  S1AP_DEBUG("[SCTP %d] Received Paging parameters(ue): presenceMask %d  s_tmsi.m_tmsi %d s_tmsi.mme_code %d IMSI length %d (0-5) %d%d%d%d%d%d\n",assoc_id,
           S1AP_PAGING_IND(message_p).ue_paging_identity.presenceMask, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi,
-          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code);
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.mme_code, S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length,
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[0], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[1],
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[3],
+          S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[4], S1AP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[5]);
 
   /* send message to RRC */
   itti_send_msg_to_task(TASK_RRC_ENB, s1ap_eNB_instance->instance, message_p);
-- 
GitLab