forked from acouzens/open5gs
[CSFB] Implement SGsAP UE-UNREACHABLE message
This commit is contained in:
parent
9f4204ef8e
commit
5e78b78166
|
@ -293,6 +293,13 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
|
|||
mme_ue->imsi_bcd);
|
||||
CLEAR_MME_UE_TIMER(mme_ue->t3413);
|
||||
|
||||
if (CS_CALL_SERVICE_INDICATOR(mme_ue) ||
|
||||
SMS_SERVICE_INDICATOR(mme_ue)) {
|
||||
sgsap_send_ue_unreachable(mme_ue,
|
||||
SGSAP_SGS_CAUSE_UE_UNREACHABLE);
|
||||
}
|
||||
|
||||
CLEAR_SERVICE_INDICATOR(mme_ue);
|
||||
} else {
|
||||
mme_ue->t3413.retry_count++;
|
||||
/*
|
||||
|
|
|
@ -442,8 +442,6 @@ struct mme_ue_s {
|
|||
ogs_assert((__mME)); \
|
||||
(__mME)->service_indicator = 0; \
|
||||
} while(0);
|
||||
#define SGSAP_CS_CALL_SERVICE_INDICATOR 1
|
||||
#define SGSAP_SMS_SERVICE_INDICATOR 2
|
||||
|
||||
#define CS_CALL_SERVICE_INDICATOR(__mME) \
|
||||
(MME_P_TMSI_IS_AVAILABLE(__mME) && \
|
||||
|
|
|
@ -198,7 +198,6 @@ void s1ap_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
ogs_assert(e->enb_ue);
|
||||
if (e->enb_ue->t_ue_context_release.retry_count >=
|
||||
mme_timer_cfg(MME_TIMER_UE_CONTEXT_RELEASE)->max_count) {
|
||||
/* Paging failed */
|
||||
ogs_warn("[S1AP] UE Context Release failed. Stop Releasing");
|
||||
CLEAR_ENB_UE_TIMER(e->enb_ue->t_ue_context_release);
|
||||
|
||||
|
|
|
@ -307,3 +307,31 @@ ogs_pkbuf_t *sgsap_build_uplink_unidata(
|
|||
|
||||
return pkbuf;
|
||||
}
|
||||
|
||||
ogs_pkbuf_t *sgsap_build_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause)
|
||||
{
|
||||
mme_vlr_t *vlr = NULL;
|
||||
ogs_tlv_t *root = NULL;
|
||||
ogs_pkbuf_t *pkbuf = NULL;
|
||||
|
||||
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);
|
||||
|
||||
ogs_tlv_add(root, SGSAP_IE_SGS_CAUSE_TYPE,
|
||||
SGSAP_IE_SGS_CAUSE_LEN, 0, &sgs_cause);
|
||||
|
||||
pkbuf = ogs_pkbuf_alloc(NULL, MAX_SDU_LEN);
|
||||
ogs_pkbuf_put_u8(pkbuf, SGSAP_UE_UNREACHABLE);
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ 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);
|
||||
ogs_pkbuf_t *sgsap_build_uplink_unidata(
|
||||
mme_ue_t *mme_ue, nas_message_container_t *nas_message_container);
|
||||
ogs_pkbuf_t *sgsap_build_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -230,3 +230,20 @@ int sgsap_send_uplink_unitdata(
|
|||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause)
|
||||
{
|
||||
int rv;
|
||||
ogs_pkbuf_t *pkbuf = NULL;
|
||||
ogs_assert(mme_ue);
|
||||
|
||||
ogs_debug("[SGSAP] UE-UNREACHABLE");
|
||||
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
|
||||
ogs_debug(" CAUSE[%d]", sgs_cause);
|
||||
|
||||
pkbuf = sgsap_build_ue_unreachable(mme_ue, sgs_cause);
|
||||
rv = sgsap_send_to_vlr(mme_ue, pkbuf);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode);
|
|||
int sgsap_send_reset_ack(mme_vlr_t *vlr);
|
||||
int sgsap_send_uplink_unitdata(
|
||||
mme_ue_t *mme_ue, nas_message_container_t *nas_message_container);
|
||||
int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ extern "C" {
|
|||
#define SGSAP_RESET_ACK 22
|
||||
#define SGSAP_MO_CSFB_INDICIATION 24
|
||||
#define SGSAP_RELEASE_REQUEST 27
|
||||
#define SGSAP_UE_UNREACHABLE 31
|
||||
|
||||
#define SGSAP_IE_IMSI_TYPE 1
|
||||
#define SGSAP_IE_IMSI_LEN MAX_IMSI_LEN
|
||||
|
@ -75,6 +76,9 @@ extern "C" {
|
|||
#define SGSAP_EPS_UPDATE_IMSI_ATTACH 1
|
||||
#define SGSAP_EPS_UPDATE_NORMAL 2
|
||||
|
||||
#define SGSAP_CS_CALL_SERVICE_INDICATOR 1
|
||||
#define SGSAP_SMS_SERVICE_INDICATOR 2
|
||||
|
||||
#define SGSAP_EPS_DETACH_NETWORK_INITIATED 1
|
||||
#define SGSAP_EPS_DETACH_UE_INITIATED 2
|
||||
#define SGSAP_EPS_DETACH_EPS_SERVICE_NOT_ALLOWED 3
|
||||
|
|
Loading…
Reference in New Issue