Add Paging Reject

This commit is contained in:
Sukchan Lee 2019-07-12 18:33:42 +09:00
parent f20a1a6e2b
commit 9408bb6b4a
6 changed files with 65 additions and 14 deletions

View File

@ -188,6 +188,36 @@ ogs_pkbuf_t *sgsap_build_mo_csfb_indication(mme_ue_t *mme_ue)
return pkbuf;
}
ogs_pkbuf_t *sgsap_build_paging_reject(mme_ue_t *mme_ue)
{
mme_vlr_t *vlr = NULL;
ogs_tlv_t *root = NULL;
ogs_pkbuf_t *pkbuf = NULL;
nas_emm_cause_t emm_cause = 0;
ogs_assert(mme_ue);
vlr = mme_ue->vlr;
ogs_assert(vlr);
root = ogs_tlv_add(NULL, SGSAP_IE_IMSI_TYPE, SGSAP_IE_IMSI_LEN, 0,
&mme_ue->nas_mobile_identity_imsi);
emm_cause = EMM_CAUSE_ILLEGAL_UE;
ogs_tlv_add(root, SGSAP_IE_REJECT_CAUSE_TYPE, SGSAP_IE_REJECT_CAUSE_LEN, 0,
&emm_cause);
pkbuf = ogs_pkbuf_alloc(NULL, MAX_SDU_LEN);
ogs_pkbuf_put_u8(pkbuf, SGSAP_PAGING_REJECT);
ogs_pkbuf_put(pkbuf, MAX_SDU_LEN-1);
ogs_pkbuf_trim(pkbuf, 1+ogs_tlv_render(root,
pkbuf->data+1, MAX_SDU_LEN-1, OGS_TLV_MODE_T1_L1));
ogs_tlv_free_all(root);
return pkbuf;
}
ogs_pkbuf_t *sgsap_build_service_request(mme_ue_t *mme_ue, uint8_t emm_mode)
{
mme_vlr_t *vlr = NULL;

View File

@ -30,6 +30,7 @@ ogs_pkbuf_t *sgsap_build_location_update_request(mme_ue_t *mme_ue);
ogs_pkbuf_t *sgsap_build_tmsi_reallocation_complete(mme_ue_t *mme_ue);
ogs_pkbuf_t *sgsap_build_detach_indication(mme_ue_t *mme_ue);
ogs_pkbuf_t *sgsap_build_mo_csfb_indication(mme_ue_t *mme_ue);
ogs_pkbuf_t *sgsap_build_paging_reject(mme_ue_t *mme_ue);
ogs_pkbuf_t *sgsap_build_service_request(mme_ue_t *mme_ue, uint8_t emm_mode);
ogs_pkbuf_t *sgsap_build_reset_ack(mme_vlr_t *vlr);

View File

@ -303,24 +303,26 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
} else
ogs_assert_if_reached();
ogs_assert(mme_ue);
if (mme_ue) {
ogs_assert(service_indicator);
mme_ue->service_indicator = service_indicator;
ogs_assert(service_indicator);
mme_ue->service_indicator = service_indicator;
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
ogs_debug(" VLR_NAME[%s]", vlr_name);
ogs_debug(" SERVICE_INDICATOR[%d]", mme_ue->service_indicator);
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
ogs_debug(" VLR_NAME[%s]", vlr_name);
ogs_debug(" SERVICE_INDICATOR[%d]", mme_ue->service_indicator);
if (lai) {
ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]",
plmn_id_hexdump(&lai->nas_plmn_id), lai->lac);
}
if (lai) {
ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]",
plmn_id_hexdump(&lai->nas_plmn_id), lai->lac);
if (ECM_IDLE(mme_ue))
s1ap_send_paging(mme_ue, S1AP_CNDomain_cs);
else
nas_send_cs_service_notification(mme_ue);
} else {
sgsap_send_paging_reject(mme_ue);
}
if (ECM_IDLE(mme_ue))
s1ap_send_paging(mme_ue, S1AP_CNDomain_cs);
else
nas_send_cs_service_notification(mme_ue);
}
void sgsap_handle_reset_indication(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)

View File

@ -178,6 +178,22 @@ int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue)
return OGS_OK;
}
int sgsap_send_paging_reject(mme_ue_t *mme_ue)
{
int rv;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(mme_ue);
ogs_debug("[SGSAP] PAGING-REJECT");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
pkbuf = sgsap_build_paging_reject(mme_ue);
rv = sgsap_send_to_vlr(mme_ue, pkbuf);
ogs_assert(rv == OGS_OK);
return OGS_OK;
}
int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode)
{
int rv;

View File

@ -46,6 +46,7 @@ int sgsap_send_location_update_request(mme_ue_t *mme_ue);
int sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue);
int sgsap_send_detach_indication(mme_ue_t *mme_ue);
int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue);
int sgsap_send_paging_reject(mme_ue_t *mme_ue);
int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode);
int sgsap_send_reset_ack(mme_vlr_t *vlr);

View File

@ -25,6 +25,7 @@ extern "C" {
#endif
#define SGSAP_PAGING_REQUEST 1
#define SGSAP_PAGING_REJECT 2
#define SGSAP_SERVICE_REQUEST 6
#define SGSAP_LOCATION_UPDATE_REQUEST 9
#define SGSAP_LOCATION_UPDATE_ACCEPT 10