forked from acouzens/open5gs
[#203] Now UE context is always single
This commit is contained in:
parent
3743ef98a2
commit
f2e34dd7ff
|
@ -2467,6 +2467,7 @@ int mme_ue_set_imsi(mme_ue_t *mme_ue, char *imsi_bcd)
|
|||
/* Check if OLD mme_ue_t is different with NEW mme_ue_t */
|
||||
if (ogs_pool_index(&mme_ue_pool, mme_ue) !=
|
||||
ogs_pool_index(&mme_ue_pool, old_mme_ue)) {
|
||||
ogs_warn("OLD UE Context Release [IMSI:%s]", mme_ue->imsi_bcd);
|
||||
if (old_mme_ue->enb_ue)
|
||||
enb_ue_deassociate(old_mme_ue->enb_ue);
|
||||
mme_ue_remove(old_mme_ue);
|
||||
|
|
|
@ -581,32 +581,26 @@ void s1ap_handle_initial_context_setup_failure(
|
|||
mme_ue = enb_ue->mme_ue;
|
||||
|
||||
if (!mme_ue) {
|
||||
ogs_debug(" S1 Context Not Associated");
|
||||
ogs_debug(" S1 Context Release");
|
||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
||||
rv = s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_NO_ACTION, 0);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
} else {
|
||||
if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) {
|
||||
ogs_debug(" EMM-Registered");
|
||||
|
||||
/*
|
||||
* 19.2.2.3 in Spec 36.300
|
||||
*
|
||||
* In case of failure, eNB and MME behaviours are not mandated.
|
||||
*
|
||||
* Both implicit release (local release at each node) and
|
||||
* explicit release (MME-initiated UE Context Release procedure)
|
||||
* may in principle be adopted. The eNB should ensure
|
||||
* that no hanging resources remain at the eNB.
|
||||
*/
|
||||
} else {
|
||||
ogs_debug(" NOT EMM-Registered");
|
||||
ogs_assert(mme_ue);
|
||||
rv = mme_send_delete_session_or_ue_context_release(mme_ue, enb_ue);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
}
|
||||
ogs_debug(" UE Context Release [IMSI:%s]", mme_ue->imsi_bcd);
|
||||
/*
|
||||
* 19.2.2.3 in Spec 36.300
|
||||
*
|
||||
* In case of failure, eNB and MME behaviours are not mandated.
|
||||
*
|
||||
* Both implicit release (local release at each node) and
|
||||
* explicit release (MME-initiated UE Context Release procedure)
|
||||
* may in principle be adopted. The eNB should ensure
|
||||
* that no hanging resources remain at the eNB.
|
||||
*/
|
||||
rv = mme_send_delete_session_or_ue_context_release(mme_ue, enb_ue);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
|
||||
CLEAR_SERVICE_INDICATOR(mme_ue);
|
||||
}
|
||||
|
|
|
@ -943,12 +943,15 @@ pgw_sess_t *pgw_sess_add_by_message(ogs_gtp_message_t *message)
|
|||
* collides with a dedicated bearer of an existing PDN connection context.
|
||||
*/
|
||||
sess = pgw_sess_find_by_imsi_apn(req->imsi.data, req->imsi.len, apn);
|
||||
if (!sess) {
|
||||
sess = pgw_sess_add(req->imsi.data, req->imsi.len, apn,
|
||||
req->pdn_type.u8,
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
|
||||
ogs_assert(sess);
|
||||
if (sess) {
|
||||
ogs_warn("OLD Session Release [IMSI:%s,APN:%s]",
|
||||
sess->imsi_bcd, sess->pdn.apn);
|
||||
pgw_sess_remove(sess);
|
||||
}
|
||||
sess = pgw_sess_add(req->imsi.data, req->imsi.len, apn,
|
||||
req->pdn_type.u8,
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
|
||||
ogs_assert(sess);
|
||||
|
||||
return sess;
|
||||
}
|
||||
|
|
|
@ -461,10 +461,12 @@ sgw_ue_t *sgw_ue_add_by_message(ogs_gtp_message_t *message)
|
|||
* the message is received with a TEID not set to zero in the header.
|
||||
*/
|
||||
sgw_ue = sgw_ue_find_by_imsi(req->imsi.data, req->imsi.len);
|
||||
if (!sgw_ue) {
|
||||
sgw_ue = sgw_ue_add(req->imsi.data, req->imsi.len);
|
||||
ogs_assert(sgw_ue);
|
||||
if (sgw_ue) {
|
||||
ogs_warn("OLD UE Context Release [IMSI:%s]", sgw_ue->imsi_bcd);
|
||||
sgw_ue_remove(sgw_ue);
|
||||
}
|
||||
sgw_ue = sgw_ue_add(req->imsi.data, req->imsi.len);
|
||||
ogs_assert(sgw_ue);
|
||||
|
||||
return sgw_ue;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact,
|
|||
sgw_bearer_t *bearer = NULL;
|
||||
sgw_tunnel_t *s5u_tunnel = NULL;
|
||||
|
||||
char apn[OGS_MAX_APN_LEN];
|
||||
|
||||
ogs_assert(s11_xact);
|
||||
ogs_assert(gtp_message);
|
||||
|
||||
|
@ -59,22 +61,23 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact,
|
|||
ogs_assert(sgw_ue);
|
||||
sess = sgw_sess_find_by_ebi(sgw_ue,
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
|
||||
if (!sess) {
|
||||
char apn[OGS_MAX_APN_LEN];
|
||||
|
||||
if (req->access_point_name.presence == 0)
|
||||
{
|
||||
ogs_error("No APN");
|
||||
return;
|
||||
}
|
||||
|
||||
ogs_fqdn_parse(apn,
|
||||
req->access_point_name.data, req->access_point_name.len);
|
||||
sess = sgw_sess_add(sgw_ue, apn,
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
|
||||
ogs_assert(sess);
|
||||
if (sess) {
|
||||
ogs_warn("OLD Session Release [IMSI:%s,APN:%s]",
|
||||
sgw_ue->imsi_bcd, sess->pdn.apn);
|
||||
sgw_sess_remove(sess);
|
||||
}
|
||||
|
||||
if (req->access_point_name.presence == 0) {
|
||||
ogs_error("No APN");
|
||||
return;
|
||||
}
|
||||
|
||||
ogs_fqdn_parse(apn,
|
||||
req->access_point_name.data, req->access_point_name.len);
|
||||
sess = sgw_sess_add(sgw_ue, apn,
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
|
||||
ogs_assert(sess);
|
||||
|
||||
if (req->sender_f_teid_for_control_plane.presence == 0) {
|
||||
ogs_error("No Sender F-TEID");
|
||||
return;
|
||||
|
@ -88,7 +91,6 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact,
|
|||
return;
|
||||
}
|
||||
|
||||
ogs_assert(sess);
|
||||
bearer = sgw_default_bearer_in_sess(sess);
|
||||
ogs_assert(bearer);
|
||||
s5u_tunnel = sgw_s5u_tunnel_in_bearer(bearer);
|
||||
|
|
Loading…
Reference in New Issue