forked from acouzens/open5gs
Change buffering instead of deleting [#592]
This commit is contained in:
parent
cabef6afa9
commit
8d55964bcc
|
@ -631,12 +631,13 @@ ogs_pfcp_far_t *ogs_pfcp_handle_update_far(ogs_pfcp_sess_t *sess,
|
|||
if (message->apply_action.presence)
|
||||
far->apply_action = message->apply_action.u8;
|
||||
|
||||
if (message->update_forwarding_parameters.destination_interface.presence) {
|
||||
far->dst_if = message->update_forwarding_parameters.
|
||||
destination_interface.u8;
|
||||
}
|
||||
|
||||
if (message->update_forwarding_parameters.presence) {
|
||||
if (message->update_forwarding_parameters.
|
||||
destination_interface.presence) {
|
||||
far->dst_if = message->update_forwarding_parameters.
|
||||
destination_interface.u8;
|
||||
}
|
||||
|
||||
if (message->update_forwarding_parameters.
|
||||
outer_header_creation.presence) {
|
||||
ogs_pfcp_tlv_outer_header_creation_t *outer_header_creation =
|
||||
|
|
|
@ -1308,9 +1308,9 @@ amf_ue_t *amf_ue_find_by_message(ogs_nas_5gs_message_t *message)
|
|||
|
||||
amf_ue = amf_ue_find_by_suci(suci);
|
||||
if (amf_ue) {
|
||||
ogs_trace("[%s] known UE by SUCI", suci);
|
||||
ogs_info("[%s] known UE by SUCI", suci);
|
||||
} else {
|
||||
ogs_trace("[%s] Unknown UE by SUCI", suci);
|
||||
ogs_info("[%s] Unknown UE by SUCI", suci);
|
||||
}
|
||||
ogs_free(suci);
|
||||
break;
|
||||
|
@ -1329,7 +1329,8 @@ amf_ue_t *amf_ue_find_by_message(ogs_nas_5gs_message_t *message)
|
|||
|
||||
amf_ue = amf_ue_find_by_guti(&nas_guti);
|
||||
if (amf_ue) {
|
||||
ogs_debug("Known UE by 5G-S_TMSI[AMF_ID:0x%x,M_TMSI:0x%x]",
|
||||
ogs_info("[%s] Known UE by 5G-S_TMSI[AMF_ID:0x%x,M_TMSI:0x%x]",
|
||||
amf_ue->suci ? amf_ue->suci : "Unknown",
|
||||
ogs_amf_id_hexdump(&nas_guti.amf_id), nas_guti.m_tmsi);
|
||||
} else {
|
||||
ogs_warn("Unknown UE by 5G-S_TMSI[AMF_ID:0x%x,M_TMSI:0x%x]",
|
||||
|
@ -1341,40 +1342,6 @@ amf_ue_t *amf_ue_find_by_message(ogs_nas_5gs_message_t *message)
|
|||
|
||||
}
|
||||
break;
|
||||
#if 0
|
||||
case OGS_NAS_5GS_TRACKING_AREA_UPDATE_REQUEST:
|
||||
tau_request = &message->gmm.tracking_area_update_request;
|
||||
eps_mobile_identity = &tau_request->old_guti;
|
||||
|
||||
switch(eps_mobile_identity->imsi.type) {
|
||||
case OGS_NAS_5GS_MOBILE_IDENTITY_GUTI:
|
||||
eps_mobile_identity_guti = &eps_mobile_identity->guti;
|
||||
|
||||
ogs_nas_guti.nas_plmn_id = eps_mobile_identity_guti->nas_plmn_id;
|
||||
ogs_nas_guti.amf_gid = eps_mobile_identity_guti->amf_gid;
|
||||
ogs_nas_guti.amf_code = eps_mobile_identity_guti->amf_code;
|
||||
ogs_nas_guti.m_tmsi = eps_mobile_identity_guti->m_tmsi;
|
||||
|
||||
amf_ue = amf_ue_find_by_guti(&ogs_nas_guti);
|
||||
if (amf_ue) {
|
||||
ogs_trace("Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_nas_guti.amf_gid,
|
||||
ogs_nas_guti.amf_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
} else {
|
||||
ogs_warn("Unknown UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_nas_guti.amf_gid,
|
||||
ogs_nas_guti.amf_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ogs_error("Unknown IMSI type [%d]", eps_mobile_identity->imsi.type);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1400,12 +1367,11 @@ void amf_ue_set_suci(amf_ue_t *amf_ue,
|
|||
/* Check if OLD amf_ue_t is different with NEW amf_ue_t */
|
||||
if (ogs_pool_index(&amf_ue_pool, amf_ue) !=
|
||||
ogs_pool_index(&amf_ue_pool, old_amf_ue)) {
|
||||
|
||||
ogs_warn("[%s] OLD UE Context Release", suci);
|
||||
if (CM_CONNECTED(old_amf_ue)) {
|
||||
/* Implcit NG release */
|
||||
ogs_debug("[%s] Implicit NG release", suci);
|
||||
ogs_debug("[%s] RAN_UE_NGAP_ID[%d] AMF_UE_NGAP_ID[%lld]",
|
||||
/* Implcit NG release */
|
||||
ogs_warn("[%s] Implicit NG release", suci);
|
||||
ogs_warn("[%s] RAN_UE_NGAP_ID[%d] AMF_UE_NGAP_ID[%lld]",
|
||||
old_amf_ue->suci, old_amf_ue->ran_ue->ran_ue_ngap_id,
|
||||
(long long)old_amf_ue->ran_ue->amf_ue_ngap_id);
|
||||
ran_ue_remove(old_amf_ue->ran_ue);
|
||||
|
|
|
@ -907,8 +907,13 @@ void ngap_handle_initial_context_setup_failure(
|
|||
if (amf_ue) {
|
||||
old_xact_count = amf_sess_xact_count(amf_ue);
|
||||
|
||||
#if 0 /* change buffering instead of deletion */
|
||||
amf_sbi_send_release_all_sessions(amf_ue,
|
||||
AMF_RELEASE_SM_CONTEXT_NG_CONTEXT_REMOVE);
|
||||
#else
|
||||
amf_sbi_send_deactivate_all_sessions(
|
||||
amf_ue, Cause->present, (int)Cause->choice.radioNetwork);
|
||||
#endif
|
||||
|
||||
new_xact_count = amf_sess_xact_count(amf_ue);
|
||||
}
|
||||
|
@ -1161,8 +1166,11 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue)
|
|||
|
||||
amf_ue = ran_ue->amf_ue;
|
||||
|
||||
ogs_debug(" RAN_UE_NGAP_ID[%d] AMF_UE_NGAP_ID[%lld]",
|
||||
ogs_info("UE Context Release [Action:%d]", ran_ue->ue_ctx_rel_action);
|
||||
ogs_info(" RAN_UE_NGAP_ID[%d] AMF_UE_NGAP_ID[%lld]",
|
||||
ran_ue->ran_ue_ngap_id, (long long)ran_ue->amf_ue_ngap_id);
|
||||
if (amf_ue)
|
||||
ogs_info(" SUCI[%s]", amf_ue->suci ? amf_ue->suci : "Unknown");
|
||||
|
||||
switch (ran_ue->ue_ctx_rel_action) {
|
||||
case NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE:
|
||||
|
|
|
@ -464,11 +464,6 @@ int emm_handle_tau_request(mme_ue_t *mme_ue,
|
|||
CLEAR_MME_UE_ALL_TIMERS(mme_ue);
|
||||
|
||||
CLEAR_SERVICE_INDICATOR(mme_ue);
|
||||
if (BEARER_CONTEXT_IS_ACTIVE(mme_ue))
|
||||
ogs_debug(" Bearer-Active");
|
||||
else
|
||||
ogs_debug(" Bearer-Inactive");
|
||||
|
||||
if (mme_ue->nas_eps.update.active_flag)
|
||||
ogs_debug(" Active flag");
|
||||
else
|
||||
|
|
|
@ -2407,9 +2407,9 @@ mme_ue_t *mme_ue_find_by_message(ogs_nas_eps_message_t *message)
|
|||
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
if (mme_ue) {
|
||||
ogs_trace("known UE by IMSI[%s]", imsi_bcd);
|
||||
ogs_info("[%s] known UE by IMSI", imsi_bcd);
|
||||
} else {
|
||||
ogs_trace("Unknown UE by IMSI[%s]", imsi_bcd);
|
||||
ogs_info("[%s] Unknown UE by IMSI", imsi_bcd);
|
||||
}
|
||||
break;
|
||||
case OGS_NAS_EPS_MOBILE_IDENTITY_GUTI:
|
||||
|
@ -2422,7 +2422,8 @@ mme_ue_t *mme_ue_find_by_message(ogs_nas_eps_message_t *message)
|
|||
|
||||
mme_ue = mme_ue_find_by_guti(&ogs_nas_guti);
|
||||
if (mme_ue) {
|
||||
ogs_trace("Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_info("[%s] Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
mme_ue->imsi_bcd,
|
||||
ogs_nas_guti.mme_gid,
|
||||
ogs_nas_guti.mme_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
|
@ -2456,7 +2457,8 @@ mme_ue_t *mme_ue_find_by_message(ogs_nas_eps_message_t *message)
|
|||
|
||||
mme_ue = mme_ue_find_by_guti(&ogs_nas_guti);
|
||||
if (mme_ue) {
|
||||
ogs_trace("Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_info("[%s] Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
mme_ue->imsi_bcd,
|
||||
ogs_nas_guti.mme_gid,
|
||||
ogs_nas_guti.mme_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
|
@ -2490,12 +2492,13 @@ mme_ue_t *mme_ue_find_by_message(ogs_nas_eps_message_t *message)
|
|||
|
||||
mme_ue = mme_ue_find_by_guti(&ogs_nas_guti);
|
||||
if (mme_ue) {
|
||||
ogs_trace("Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_info("[%s] Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
mme_ue->imsi_bcd,
|
||||
ogs_nas_guti.mme_gid,
|
||||
ogs_nas_guti.mme_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
} else {
|
||||
ogs_warn("Unknown UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_info("Unknown UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
ogs_nas_guti.mme_gid,
|
||||
ogs_nas_guti.mme_code,
|
||||
ogs_nas_guti.m_tmsi);
|
||||
|
@ -2527,9 +2530,16 @@ 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);
|
||||
ogs_warn("[%s] OLD UE Context Release", mme_ue->imsi_bcd);
|
||||
if (ECM_CONNECTED(old_mme_ue)) {
|
||||
/* Implcit S1 release */
|
||||
ogs_warn("[%s] Implicit S1 release", mme_ue->imsi_bcd);
|
||||
ogs_warn("[%s] ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
|
||||
old_mme_ue->imsi_bcd,
|
||||
old_mme_ue->enb_ue->enb_ue_s1ap_id,
|
||||
old_mme_ue->enb_ue->mme_ue_s1ap_id);
|
||||
enb_ue_remove(old_mme_ue->enb_ue);
|
||||
}
|
||||
mme_ue_remove(old_mme_ue);
|
||||
}
|
||||
}
|
||||
|
@ -3066,27 +3076,6 @@ mme_bearer_t *mme_bearer_next(mme_bearer_t *bearer)
|
|||
return ogs_list_next(bearer);
|
||||
}
|
||||
|
||||
int mme_bearer_is_inactive(mme_ue_t *mme_ue)
|
||||
{
|
||||
mme_sess_t *sess = NULL;
|
||||
ogs_assert(mme_ue);
|
||||
|
||||
sess = mme_sess_first(mme_ue);
|
||||
while (sess) {
|
||||
mme_bearer_t *bearer = mme_bearer_first(sess);
|
||||
while (bearer) {
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bearer = mme_bearer_next(bearer);
|
||||
}
|
||||
sess = mme_sess_next(sess);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int mme_bearer_set_inactive(mme_ue_t *mme_ue)
|
||||
{
|
||||
mme_sess_t *sess = NULL;
|
||||
|
|
|
@ -554,9 +554,7 @@ typedef struct mme_sess_s {
|
|||
ogs_tlv_octet_t pgw_pco;
|
||||
} mme_sess_t;
|
||||
|
||||
#define BEARER_CONTEXT_IS_ACTIVE(__mME) \
|
||||
(mme_bearer_is_inactive(__mME) == 0)
|
||||
#define CLEAR_BEARER_CONTEXT(__mME) \
|
||||
#define CLEAR_BEARER_CONTEXT(__mME) \
|
||||
mme_bearer_set_inactive(__mME)
|
||||
|
||||
#define MME_HAVE_ENB_S1U_PATH(__bEARER) \
|
||||
|
|
|
@ -51,7 +51,6 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue)
|
|||
}
|
||||
}
|
||||
|
||||
#if 1
|
||||
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
|
||||
{
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
@ -68,41 +67,3 @@ void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
|
|||
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
void mme_send_delete_session_or_enb_ue_context_release(enb_ue_t *enb_ue)
|
||||
{
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
ogs_assert(enb_ue);
|
||||
|
||||
mme_ue = enb_ue->mme_ue;
|
||||
if (mme_ue && SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
|
||||
mme_gtp_send_delete_all_sessions(mme_ue);
|
||||
} else {
|
||||
s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
|
||||
{
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
ogs_assert(enb_ue);
|
||||
|
||||
mme_ue = enb_ue->mme_ue;
|
||||
if (mme_ue) {
|
||||
if (BEARER_CONTEXT_IS_ACTIVE(mme_ue)) {
|
||||
ogs_debug("[%s] EMM-Registered", mme_ue->imsi_bcd);
|
||||
mme_gtp_send_release_access_bearers_request(mme_ue);
|
||||
} else {
|
||||
ogs_warn("[%s] No EMM-Registered", mme_ue->imsi_bcd);
|
||||
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
|
||||
}
|
||||
} else {
|
||||
ogs_debug("No UE Context");
|
||||
s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -283,8 +283,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
case MME_TIMER_S1_HOLDING:
|
||||
ogs_warn("Implicit S1 release");
|
||||
ogs_warn(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
|
||||
enb_ue->enb_ue_s1ap_id,
|
||||
enb_ue->mme_ue_s1ap_id);
|
||||
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
|
||||
s1ap_handle_ue_context_release_action(enb_ue);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -684,7 +684,7 @@ void s1ap_handle_initial_context_setup_failure(
|
|||
* may in principle be adopted. The eNB should ensure
|
||||
* that no hanging resources remain at the eNB.
|
||||
*/
|
||||
#if 1
|
||||
#if 0
|
||||
if (mme_ue && SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
|
||||
mme_gtp_send_delete_all_sessions(mme_ue);
|
||||
} else {
|
||||
|
@ -1125,8 +1125,11 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue)
|
|||
|
||||
mme_ue = enb_ue->mme_ue;
|
||||
|
||||
ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
|
||||
ogs_info("UE Context Release [Action:%d]", enb_ue->ue_ctx_rel_action);
|
||||
ogs_info(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
|
||||
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
|
||||
if (mme_ue)
|
||||
ogs_info(" IMSI[%s]", mme_ue->imsi_bcd);
|
||||
|
||||
switch (enb_ue->ue_ctx_rel_action) {
|
||||
case S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE:
|
||||
|
@ -2053,7 +2056,7 @@ void s1ap_handle_s1_reset(
|
|||
Reset = &initiatingMessage->value.choice.Reset;
|
||||
ogs_assert(Reset);
|
||||
|
||||
ogs_debug("[MME] Reset");
|
||||
ogs_warn("[MME] Reset");
|
||||
|
||||
for (i = 0; i < Reset->protocolIEs.list.count; i++) {
|
||||
ie = Reset->protocolIEs.list.array[i];
|
||||
|
@ -2092,12 +2095,12 @@ void s1ap_handle_s1_reset(
|
|||
ogs_assert(ResetType);
|
||||
switch (ResetType->present) {
|
||||
case S1AP_ResetType_PR_s1_Interface:
|
||||
ogs_debug(" S1AP_ResetType_PR_s1_Interface");
|
||||
ogs_warn(" S1AP_ResetType_PR_s1_Interface");
|
||||
|
||||
enb_ue_remove_in_enb(enb);
|
||||
break;
|
||||
case S1AP_ResetType_PR_partOfS1_Interface:
|
||||
ogs_debug(" S1AP_ResetType_PR_partOfS1_Interface");
|
||||
ogs_warn(" S1AP_ResetType_PR_partOfS1_Interface");
|
||||
|
||||
partOfS1_Interface = ResetType->choice.partOfS1_Interface;
|
||||
ogs_assert(partOfS1_Interface);
|
||||
|
@ -2114,7 +2117,7 @@ void s1ap_handle_s1_reset(
|
|||
item = &ie2->value.choice.UE_associatedLogicalS1_ConnectionItem;
|
||||
ogs_assert(item);
|
||||
|
||||
ogs_debug(" MME_UE_S1AP_ID[%d] ENB_UE_S1AP_ID[%d]",
|
||||
ogs_warn(" MME_UE_S1AP_ID[%d] ENB_UE_S1AP_ID[%d]",
|
||||
item->mME_UE_S1AP_ID ? (int)*item->mME_UE_S1AP_ID : -1,
|
||||
item->eNB_UE_S1AP_ID ? (int)*item->eNB_UE_S1AP_ID : -1);
|
||||
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
#include "gtp-path.h"
|
||||
|
||||
static ogs_pkbuf_pool_t *packet_pool = NULL;
|
||||
|
||||
static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
{
|
||||
sgwc_event_t *e = NULL;
|
||||
|
@ -107,13 +105,6 @@ int sgwc_gtp_open(void)
|
|||
ogs_socknode_t *node = NULL;
|
||||
ogs_sock_t *sock = NULL;
|
||||
|
||||
ogs_pkbuf_config_t config;
|
||||
memset(&config, 0, sizeof config);
|
||||
|
||||
config.cluster_8192_pool = ogs_app()->pool.packet;
|
||||
|
||||
packet_pool = ogs_pkbuf_pool_create(&config);
|
||||
|
||||
ogs_list_for_each(&sgwc_self()->gtpc_list, node) {
|
||||
sock = ogs_gtp_server(node);
|
||||
ogs_assert(sock);
|
||||
|
@ -146,8 +137,6 @@ void sgwc_gtp_close(void)
|
|||
{
|
||||
ogs_socknode_remove_all(&sgwc_self()->gtpc_list);
|
||||
ogs_socknode_remove_all(&sgwc_self()->gtpc_list6);
|
||||
|
||||
ogs_pkbuf_pool_destroy(packet_pool);
|
||||
}
|
||||
|
||||
void sgwc_gtp_send_downlink_data_notification(
|
||||
|
|
|
@ -1002,7 +1002,7 @@ static void test3_func(abts_case *tc, void *data)
|
|||
/* Send Service Request */
|
||||
emmbuf = testemm_build_service_request(test_ue);
|
||||
ABTS_PTR_NOTNULL(tc, emmbuf);
|
||||
#if 0
|
||||
#if 1
|
||||
/*
|
||||
* In s1ap_handle_initial_context_setup_failure(),
|
||||
* Use mme_send_release_access_bearer_or_ue_context_release(enb_ue);
|
||||
|
|
Loading…
Reference in New Issue