forked from acouzens/open5gs
Add Paging Reject
This commit is contained in:
parent
f20a1a6e2b
commit
9408bb6b4a
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue