Projects
osmocom:nightly
open5gs
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 34
View file
open5gs_2.4.9.202207300002.dsc -> open5gs_2.4.9.202207310002.dsc
Changed
@@ -2,7 +2,7 @@ Source: open5gs Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg Architecture: any -Version: 2.4.9.202207300002 +Version: 2.4.9.202207310002 Maintainer: Harald Welte <laforge@gnumonks.org> Uploaders: Sukchan Lee <acetcom@gmail.com> Homepage: https://open5gs.org @@ -30,8 +30,8 @@ open5gs-udr deb net optional arch=any open5gs-upf deb net optional arch=any Checksums-Sha1: - 77980f28c4c7640edd516dd022dd79c4f0ebb158 11458864 open5gs_2.4.9.202207300002.tar.xz + a28d06d3784e02111024e83acffb24e88c535307 11458756 open5gs_2.4.9.202207310002.tar.xz Checksums-Sha256: - 317b457fe0411a5bfa9972e290ddd1f3603cfbb4a88b3d4c10401112cba2b982 11458864 open5gs_2.4.9.202207300002.tar.xz + 8200de17d2f92b549d22b01a3e9e26dbe44d07bcc652c193d4b031d3f6832079 11458756 open5gs_2.4.9.202207310002.tar.xz Files: - 4ac60ee46aaa55337b0836ffdab22247 11458864 open5gs_2.4.9.202207300002.tar.xz + 3e5f2bbe52529a7dc2756c92a7dfa591 11458756 open5gs_2.4.9.202207310002.tar.xz
View file
open5gs_2.4.9.202207300002.tar.xz/debian/changelog -> open5gs_2.4.9.202207310002.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -open5gs (2.4.9.202207300002) UNRELEASED; urgency=medium +open5gs (2.4.9.202207310002) UNRELEASED; urgency=medium * Snapshot build - -- Sukchan Lee <acetcom@gmail.com> Sat, 30 Jul 2022 00:09:10 +0000 + -- Sukchan Lee <acetcom@gmail.com> Sun, 31 Jul 2022 00:09:06 +0000 open5gs (2.4.9) unstable; urgency=medium
View file
open5gs_2.4.9.202207300002.tar.xz/debian/control -> open5gs_2.4.9.202207310002.tar.xz/debian/control
Changed
@@ -31,7 +31,7 @@ Package: open5gs-common Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends} Description: 5G Core and EPC (Shared Files) Open5GS is a C-language implementation of 5G Core and EPC @@ -43,7 +43,7 @@ Package: open5gs-mme Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: MME (Mobility Management Entity) @@ -58,7 +58,7 @@ Package: open5gs-sgwc Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: SGW-C (Serving Gateway - Control Plane) @@ -72,7 +72,7 @@ Package: open5gs-smf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: SMF (Session Management Function) @@ -84,7 +84,7 @@ Package: open5gs-amf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: AMF (Access and Mobility Management Function) @@ -96,7 +96,7 @@ Package: open5gs-sgwu Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: SGW-U (Serving Gateway - User Plane) @@ -110,7 +110,7 @@ Package: open5gs-upf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, udev, open5gs-common (= ${binary:Version}) @@ -123,7 +123,7 @@ Package: open5gs-hss Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, mongodb-org | mongodb, open5gs-common (= ${binary:Version}) @@ -140,7 +140,7 @@ Package: open5gs-pcrf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, mongodb-org | mongodb, open5gs-common (= ${binary:Version}) @@ -156,7 +156,7 @@ Package: open5gs-nrf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: NRF (Network Repository Function) @@ -168,7 +168,7 @@ Package: open5gs-ausf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: AUSF (Authentication Server Function) @@ -180,7 +180,7 @@ Package: open5gs-udm Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: UDM (Unified Data Management) @@ -192,7 +192,7 @@ Package: open5gs-pcf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: PCF (Policy Control Function) @@ -204,7 +204,7 @@ Package: open5gs-nssf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: NSSF (Network Slice Selection Function) @@ -216,7 +216,7 @@ Package: open5gs-bsf Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: BSF (Binding Support Function) @@ -228,7 +228,7 @@ Package: open5gs-udr Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends}, ${misc:Depends}, open5gs-common (= ${binary:Version}) Description: UDR (Unified Data Repository) @@ -240,7 +240,7 @@ Package: open5gs Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${misc:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${misc:Depends}, open5gs-common (= ${binary:Version}), open5gs-mme (= ${binary:Version}), open5gs-sgwc (= ${binary:Version}), @@ -266,7 +266,7 @@ Package: open5gs-dbg Architecture: any Multi-Arch: same -Depends: osmocom-nightly (= 1.0.0.202207300002), ${misc:Depends}, +Depends: osmocom-nightly (= 1.0.0.202207310002), ${misc:Depends}, open5gs (= ${binary:Version}) Description: Debug symbols for Open5GS Open5GS is a C-language implementation of 5G Core and EPC
View file
open5gs_2.4.9.202207300002.tar.xz/lib/diameter/s6a/dict.c -> open5gs_2.4.9.202207310002.tar.xz/lib/diameter/s6a/dict.c
Changed
@@ -526,6 +526,63 @@ PARSE_loc_rules( rules, cmd ); } + /* Cancel-Location-Request (CLR) Command - 3GPP TS 29.272 #7.2.7 */ + { + struct dict_object * cmd; + struct dict_cmd_data data = { + 317, /* Code */ + "Cancel-Location-Request", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Cancellation-Type" }, RULE_REQUIRED, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "CLR-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; + + CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Cancel-Location-Answer (CLA) Command - 3GPP TS 29.272 #7.2.8 */ + { + struct dict_object * cmd; + struct dict_cmd_data data = { + 317, /* Code */ + "Cancel-Location-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; + + CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules( rules, cmd ); + } + } LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP S6A' initialized");
View file
open5gs_2.4.9.202207300002.tar.xz/lib/diameter/s6a/message.c -> open5gs_2.4.9.202207310002.tar.xz/lib/diameter/s6a/message.c
Changed
@@ -30,9 +30,13 @@ struct dict_object *ogs_diam_s6a_cmd_ula = NULL; struct dict_object *ogs_diam_s6a_cmd_pur = NULL; struct dict_object *ogs_diam_s6a_cmd_pua = NULL; +struct dict_object *ogs_diam_s6a_cmd_clr = NULL; +struct dict_object *ogs_diam_s6a_cmd_cla = NULL; struct dict_object *ogs_diam_s6a_ulr_flags = NULL; struct dict_object *ogs_diam_s6a_ula_flags = NULL; +struct dict_object *ogs_diam_s6a_clr_flags = NULL; +struct dict_object *ogs_diam_s6a_cancellation_type = NULL; struct dict_object *ogs_diam_s6a_subscription_data = NULL; struct dict_object *ogs_diam_s6a_req_eutran_auth_info = NULL; struct dict_object *ogs_diam_s6a_number_of_requested_vectors = NULL; @@ -91,9 +95,13 @@ CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Update-Location-Answer", &ogs_diam_s6a_cmd_ula); CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Request", &ogs_diam_s6a_cmd_pur); CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Answer", &ogs_diam_s6a_cmd_pua); + CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Request", &ogs_diam_s6a_cmd_clr); + CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Answer", &ogs_diam_s6a_cmd_cla); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", &ogs_diam_s6a_ulr_flags); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", &ogs_diam_s6a_ula_flags); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "CLR-Flags", &ogs_diam_s6a_clr_flags); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Cancellation-Type", &ogs_diam_s6a_cancellation_type); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", &ogs_diam_s6a_ue_srvcc_capability); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", &ogs_diam_s6a_req_eutran_auth_info);
View file
open5gs_2.4.9.202207300002.tar.xz/lib/diameter/s6a/message.h -> open5gs_2.4.9.202207310002.tar.xz/lib/diameter/s6a/message.h
Changed
@@ -76,9 +76,13 @@ extern struct dict_object *ogs_diam_s6a_cmd_ula; extern struct dict_object *ogs_diam_s6a_cmd_pur; extern struct dict_object *ogs_diam_s6a_cmd_pua; +extern struct dict_object *ogs_diam_s6a_cmd_clr; +extern struct dict_object *ogs_diam_s6a_cmd_cla; extern struct dict_object *ogs_diam_s6a_ulr_flags; extern struct dict_object *ogs_diam_s6a_ula_flags; +extern struct dict_object *ogs_diam_s6a_clr_flags; +extern struct dict_object *ogs_diam_s6a_cancellation_type; extern struct dict_object *ogs_diam_s6a_subscription_data; extern struct dict_object *ogs_diam_s6a_req_eutran_auth_info; extern struct dict_object *ogs_diam_s6a_number_of_requested_vectors; @@ -140,8 +144,15 @@ ogs_subscription_data_t subscription_data; } ogs_diam_s6a_ula_message_t; +typedef struct ogs_diam_s6a_clr_message_s { +#define OGS_DIAM_S6A_CLR_FLAGS_S6A_S6D_INDICATOR (1) +#define OGS_DIAM_S6A_CLR_FLAGS_REATTACH_REQUIRED (1 << 1) + uint32_t clr_flags; +} ogs_diam_s6a_clr_message_t; + typedef struct ogs_diam_s6a_message_s { #define OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION 316 +#define OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION 317 #define OGS_DIAM_S6A_CMD_CODE_AUTHENTICATION_INFORMATION 318 uint16_t cmd_code; @@ -157,6 +168,9 @@ uint32_t *err; uint32_t *exp_err; + bool during_attach; + + ogs_diam_s6a_clr_message_t clr_message; ogs_diam_s6a_aia_message_t aia_message; ogs_diam_s6a_ula_message_t ula_message; } ogs_diam_s6a_message_t;
View file
open5gs_2.4.9.202207300002.tar.xz/lib/gtp/xact.h -> open5gs_2.4.9.202207310002.tar.xz/lib/gtp/xact.h
Changed
@@ -100,9 +100,10 @@ #define OGS_GTP_DELETE_SEND_DETACH_ACCEPT 2 #define OGS_GTP_DELETE_SEND_DEACTIVATE_BEARER_CONTEXT_REQUEST 3 #define OGS_GTP_DELETE_SEND_UE_CONTEXT_RELEASE_COMMAND 4 -#define OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST 5 -#define OGS_GTP_DELETE_UE_CONTEXT_REMOVE 6 -#define OGS_GTP_DELETE_IN_PATH_SWITCH_REQUEST 7 +#define OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK 5 +#define OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST 6 +#define OGS_GTP_DELETE_UE_CONTEXT_REMOVE 7 +#define OGS_GTP_DELETE_IN_PATH_SWITCH_REQUEST 8 int delete_action; #define OGS_GTP_RELEASE_SEND_UE_CONTEXT_RELEASE_COMMAND 1
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/emm-build.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/emm-build.c
Changed
@@ -437,6 +437,26 @@ return nas_eps_security_encode(mme_ue, &message); } +ogs_pkbuf_t *emm_build_detach_request(mme_ue_t *mme_ue, uint8_t detach_type) +{ + ogs_nas_eps_message_t message; + + ogs_assert(mme_ue); + ogs_assert(detach_type); + + memset(&message, 0, sizeof(message)); + message.h.security_header_type = + OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; + message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; + + message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; + message.emm.h.message_type = OGS_NAS_EPS_DETACH_REQUEST; + + message.emm.detach_request_to_ue.detach_type.value = detach_type; + + return nas_eps_security_encode(mme_ue, &message); +} + ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue) { ogs_nas_eps_message_t message;
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/emm-build.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/emm-build.h
Changed
@@ -37,6 +37,7 @@ ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue); ogs_pkbuf_t *emm_build_authentication_reject(void); +ogs_pkbuf_t *emm_build_detach_request(mme_ue_t *mme_ue, uint8_t detach_type); ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue); ogs_pkbuf_t *emm_build_tau_accept(mme_ue_t *mme_ue);
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/emm-handler.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/emm-handler.c
Changed
@@ -403,8 +403,6 @@ if (detach_request->detach_type.switch_off) ogs_debug(" Switch-Off"); - ogs_info(" IMSI%s", mme_ue->imsi_bcd); - return OGS_OK; }
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/emm-sm.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/emm-sm.c
Changed
@@ -530,8 +530,21 @@ } if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { - ogs_assert(OGS_OK == - sgsap_send_detach_indication(mme_ue)); + ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue)); + } else { + mme_send_delete_session_or_detach(mme_ue); + } + + OGS_FSM_TRAN(s, &emm_state_de_registered); + break; + + case OGS_NAS_EPS_DETACH_ACCEPT: + ogs_info("%s Detach accept", mme_ue->imsi_bcd); + + CLEAR_MME_UE_TIMER(mme_ue->t3422); + + if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { + ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue)); } else { mme_send_delete_session_or_detach(mme_ue); } @@ -587,18 +600,8 @@ mme_ue->imsi_bcd); CLEAR_MME_UE_TIMER(mme_ue->t3413); - mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE); - - if (CS_CALL_SERVICE_INDICATOR(mme_ue) || - SMS_SERVICE_INDICATOR(mme_ue)) { - ogs_assert(OGS_OK == - sgsap_send_ue_unreachable(mme_ue, - SGSAP_SGS_CAUSE_UE_UNREACHABLE)); - - } - - CLEAR_SERVICE_INDICATOR(mme_ue); - + ogs_assert(MME_PAGING_ONGOING(mme_ue)); + mme_send_after_paging(mme_ue, true); } else { mme_ue->t3413.retry_count++; /* @@ -617,6 +620,7 @@ "Stop retransmission"); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { + ogs_assert(mme_ue->t3470.pkbuf); rv = nas_eps_send_identity_request(mme_ue); if (rv == OGS_OK) { mme_ue->t3470.retry_count++; @@ -627,6 +631,24 @@ } break; + case MME_TIMER_T3422: + if (mme_ue->t3422.retry_count >= + mme_timer_cfg(MME_TIMER_T3422)->max_count) { + ogs_warn("Retransmission of Detach Request failed. " + "Stop retransmission"); + OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); + } else { + ogs_assert(mme_ue->t3422.pkbuf); + rv = nas_eps_send_detach_request(mme_ue, 0); + if (rv == OGS_OK) { + mme_ue->t3422.retry_count++; + } else { + ogs_error("nas_eps_send_detach_request() failed"); + OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); + } + } + break; + default: ogs_error("Unknown timer%s:%d", mme_timer_get_name(e->timer_id), e->timer_id);
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-context.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-context.h
Changed
@@ -451,6 +451,34 @@ (((__mME)->enb_ue == NULL) || (enb_ue_cycle((__mME)->enb_ue) == NULL))) enb_ue_t *enb_ue; /* S1 UE context */ + struct { +#define MME_CLEAR_PAGING_INFO(__mME) \ + do { \ + ogs_assert(__mME); \ + (__mME)->paging.type = 0; \ + } while(0) + +#define MME_STORE_PAGING_INFO(__mME, __tYPE, __dATA) \ + do { \ + ogs_assert(__mME); \ + ogs_assert(__tYPE); \ + (__mME)->paging.type = __tYPE; \ + (__mME)->paging.data = __dATA; \ + } while(0) + +#define MME_PAGING_ONGOING(__mME) ((__mME) && ((__mME)->paging.type)) + +#define MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION 1 +#define MME_PAGING_TYPE_CREATE_BEARER 2 +#define MME_PAGING_TYPE_UPDATE_BEARER 3 +#define MME_PAGING_TYPE_DELETE_BEARER 4 +#define MME_PAGING_TYPE_CS_CALL_SERVICE 5 +#define MME_PAGING_TYPE_SMS_SERVICE 6 +#define MME_PAGING_TYPE_DETACH_TO_UE 7 + int type; + void *data; + } paging; + /* SGW UE context */ sgw_ue_t *sgw_ue; @@ -684,9 +712,10 @@ /* Related Context */ mme_ue_t *mme_ue; mme_sess_t *sess; + struct { ogs_gtp_xact_t *xact; - } create, update, delete, notify, current; + } create, update, delete, notify; } mme_bearer_t; void mme_context_init(void);
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-fd-path.c
Changed
@@ -20,6 +20,9 @@ #include "mme-event.h" #include "mme-fd-path.h" +/* handler for Cancel-Location-Request cb */ +static struct disp_hdl *hdl_s6a_clr = NULL; + static struct session_handler *mme_s6a_reg = NULL; struct sess_state { @@ -226,6 +229,7 @@ s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t)); ogs_assert(s6a_message); s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_AUTHENTICATION_INFORMATION; + s6a_message->during_attach = true; aia_message = &s6a_message->aia_message; ogs_assert(aia_message); e_utran_vector = &aia_message->e_utran_vector; @@ -634,6 +638,7 @@ s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t)); ogs_assert(s6a_message); s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION; + s6a_message->during_attach = true; ula_message = &s6a_message->ula_message; ogs_assert(ula_message); subscription_data = &ula_message->subscription_data; @@ -1403,10 +1408,129 @@ return; } +/* Callback for incoming Cancel-Location-Request messages */ +static int mme_ogs_diam_s6a_clr_cb( struct msg **msg, struct avp *avp, + struct session *session, void *opaque, enum disp_action *act) +{ + int ret; + int error = 0; + + mme_event_t *e = NULL; + mme_ue_t *mme_ue = NULL; + + struct msg *ans, *qry; + ogs_diam_s6a_clr_message_t *clr_message = NULL; + + struct avp_hdr *hdr; + union avp_value val; + + char imsi_bcdOGS_MAX_IMSI_BCD_LEN+1; + + uint32_t result_code = 0; + + ogs_assert(msg); + + ogs_diam_s6a_message_t *s6a_message = NULL; + + ogs_debug("Cancel-Location-Request"); + + s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t)); + ogs_assert(s6a_message); + s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION; + clr_message = &s6a_message->clr_message; + ogs_assert(clr_message); + + + /* Create answer header */ + qry = *msg; + ret = fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0); + ogs_assert(ret == 0); + ans = *msg; + + ret = fd_msg_search_avp(qry, ogs_diam_user_name, &avp); + ogs_assert(ret == 0); + ret = fd_msg_avp_hdr(avp, &hdr); + ogs_assert(ret == 0); + + ogs_cpystrn(imsi_bcd, (char*)hdr->avp_value->os.data, + ogs_min(hdr->avp_value->os.len, OGS_MAX_IMSI_BCD_LEN)+1); + + mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); + + if (!mme_ue) { + ogs_error("Cancel Location for Unknown IMSI%s", imsi_bcd); + result_code = OGS_DIAM_S6A_ERROR_USER_UNKNOWN; + error++; + } + + ret = fd_msg_search_avp(qry, ogs_diam_s6a_cancellation_type, &avp); + ogs_assert(ret == 0); + ret = fd_msg_avp_hdr(avp, &hdr); + ogs_assert(ret == 0); + + /* Set the Origin-Host, Origin-Realm, andResult-Code AVPs */ + ret = fd_msg_rescode_set(ans, (char*)"DIAMETER_SUCCESS", NULL, NULL, 1); + ogs_assert(ret == 0); + + /* Set the Auth-Session-State AVP */ + ret = fd_msg_avp_new(ogs_diam_auth_session_state, 0, &avp); + ogs_assert(ret == 0); + val.i32 = OGS_DIAM_AUTH_SESSION_NO_STATE_MAINTAINED; + ret = fd_msg_avp_setvalue(avp, &val); + ogs_assert(ret == 0); + ret = fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp); + ogs_assert(ret == 0); + + ret = fd_msg_search_avp(qry, ogs_diam_s6a_clr_flags, &avp); + ogs_assert(ret == 0); + if (avp) { + ret = fd_msg_avp_hdr(avp, &hdr); + ogs_assert(ret == 0); + clr_message->clr_flags = hdr->avp_value->i32; + } + + /* Set Vendor-Specific-Application-Id AVP */ + ret = ogs_diam_message_vendor_specific_appid_set( + ans, OGS_DIAM_S6A_APPLICATION_ID); + ogs_assert(ret == 0); + + /* Send the answer */ + ret = fd_msg_send(msg, NULL, NULL); + ogs_assert(ret == 0); + + ogs_debug("Cancel-Location-Answer"); + + /* Add this value to the stats */ + ogs_assert( pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0); + ogs_diam_logger_self()->stats.nb_echoed++; + ogs_assert( pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0); + + if (!error) { + int rv; + e = mme_event_new(MME_EVT_S6A_MESSAGE); + ogs_assert(e); + e->mme_ue = mme_ue; + e->s6a_message = s6a_message; + rv = ogs_queue_push(ogs_app()->queue, e); + if (rv != OGS_OK) { + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_free(s6a_message); + mme_event_free(e); + } else { + ogs_pollset_notify(ogs_app()->pollset); + } + } else { + ret = ogs_diam_message_experimental_rescode_set(ans, result_code); + ogs_assert(ret == 0); + } + + return 0; +} int mme_fd_init(void) { int ret; + struct disp_when data; ret = ogs_diam_init(FD_MODE_CLIENT, mme_self()->diam_conf_path, mme_self()->diam_config); @@ -1420,6 +1544,12 @@ ret = fd_sess_handler_create(&mme_s6a_reg, &state_cleanup, NULL, NULL); ogs_assert(ret == 0); + /* Specific handler for Cancel-Location-Request */ + data.command = ogs_diam_s6a_cmd_clr; + ret = fd_disp_register(mme_ogs_diam_s6a_clr_cb, DISP_HOW_CC, &data, NULL, + &hdl_s6a_clr); + ogs_assert(ret == 0); + /* Advertise the support for the application in the peer */ ret = fd_disp_app_support(ogs_diam_s6a_application, ogs_diam_vendor, 1, 0); ogs_assert(ret == 0); @@ -1437,5 +1567,8 @@ ret = fd_sess_handler_destroy(&mme_s6a_reg, NULL); ogs_assert(ret == OGS_OK); + if (hdl_s6a_clr) + (void) fd_disp_unregister(&hdl_s6a_clr, NULL); + ogs_diam_final(); }
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-path.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-path.c
Changed
@@ -19,19 +19,43 @@ #include "s1ap-path.h" #include "nas-path.h" +#include "sgsap-path.h" #include "mme-gtp-path.h" #include "mme-path.h" +#include "mme-sm.h" void mme_send_delete_session_or_detach(mme_ue_t *mme_ue) { ogs_assert(mme_ue); - if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { - mme_gtp_send_delete_all_sessions(mme_ue, - OGS_GTP_DELETE_SEND_DETACH_ACCEPT); - } else { - ogs_assert(OGS_OK == - nas_eps_send_detach_accept(mme_ue)); + switch (mme_ue->nas_eps.type) { + case MME_EPS_TYPE_DETACH_REQUEST_FROM_UE: + if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { + mme_gtp_send_delete_all_sessions( + mme_ue, OGS_GTP_DELETE_SEND_DETACH_ACCEPT); + } else { + ogs_assert(OGS_OK == nas_eps_send_detach_accept(mme_ue)); + } + break; + case MME_EPS_TYPE_DETACH_REQUEST_TO_UE: + if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { + mme_gtp_send_delete_all_sessions( + mme_ue, OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK); + } else { + enb_ue_t *enb_ue = enb_ue_cycle(mme_ue->enb_ue); + if (enb_ue) { + ogs_assert(OGS_OK == + s1ap_send_ue_context_release_command(enb_ue, + S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, + S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0)); + } else { + ogs_warn("%s No S1 Context", mme_ue->imsi_bcd); + } + } + break; + default: + ogs_fatal(" Invalid OGS_NAS_EPS TYPE%d", mme_ue->nas_eps.type); + ogs_assert_if_reached(); } } @@ -75,72 +99,131 @@ } } -void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value) +void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) { - mme_sess_t *sess = NULL; mme_bearer_t *bearer = NULL; ogs_assert(mme_ue); - ogs_list_for_each(&mme_ue->sess_list, sess) { - ogs_list_for_each(&sess->bearer_list, bearer) { - ogs_gtp_xact_t *xact = NULL; - uint8_t type; - - xact = ogs_gtp_xact_cycle(bearer->current.xact); - if (xact) { - /* - * It may conflict with GTP transaction already used. - * To avoid this, check `xact->step` to see if - * the transaction has already been committed. - */ - type = xact->seqxact->step-1.type; - - switch (type) { - case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE: - ogs_assert(OGS_OK == - mme_gtp_send_downlink_data_notification_ack( - bearer, cause_value)); - break; - case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE: - if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_assert(OGS_OK == - nas_eps_send_activate_dedicated_bearer_context_request( - bearer)); - } else { - ogs_assert(OGS_OK == - mme_gtp_send_create_bearer_response( - bearer, cause_value)); - } - break; - case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE: - if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_assert(OGS_OK == - nas_eps_send_modify_bearer_context_request(bearer, - (xact->update_flags & - OGS_GTP_MODIFY_QOS_UPDATE) ? 1 : 0, - (xact->update_flags & - OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0)); - } else { - ogs_assert(OGS_OK == - mme_gtp_send_update_bearer_response( - bearer, cause_value)); - } - break; - case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE: - if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); - } else { - ogs_assert(OGS_OK == - mme_gtp_send_delete_bearer_response( - bearer, cause_value)); - } - break; - default: - break; - } + switch (mme_ue->paging.type) { + case MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION: + bearer = mme_bearer_cycle(mme_ue->paging.data); + if (!bearer) { + ogs_error("No Bearer %d", mme_ue->paging.type); + goto cleanup; + } + + if (failed == true) { + ogs_assert(OGS_OK == + mme_gtp_send_downlink_data_notification_ack( + bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); + } else { + ogs_assert(OGS_OK == + mme_gtp_send_downlink_data_notification_ack( + bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED)); + } + break; + case MME_PAGING_TYPE_CREATE_BEARER: + bearer = mme_bearer_cycle(mme_ue->paging.data); + if (!bearer) { + ogs_error("No Bearer %d", mme_ue->paging.type); + goto cleanup; + } + + if (failed == true) { + ogs_assert(OGS_OK == + mme_gtp_send_create_bearer_response( + bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); + } else { + ogs_assert(OGS_OK == + nas_eps_send_activate_dedicated_bearer_context_request(bearer)); + } + break; + case MME_PAGING_TYPE_UPDATE_BEARER: + bearer = mme_bearer_cycle(mme_ue->paging.data); + if (!bearer) { + ogs_error("No Bearer %d", mme_ue->paging.type); + goto cleanup; + } + + if (failed == true) { + ogs_assert(OGS_OK == + mme_gtp_send_update_bearer_response( + bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); + } else { + ogs_gtp_xact_t *xact = ogs_gtp_xact_cycle(bearer->update.xact); + if (!xact) { + ogs_error("No GTP xact"); + goto cleanup; } + + ogs_assert(OGS_OK == + nas_eps_send_modify_bearer_context_request(bearer, + (xact->update_flags & + OGS_GTP_MODIFY_QOS_UPDATE) ? 1 : 0, + (xact->update_flags & + OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0)); + } + break; + case MME_PAGING_TYPE_DELETE_BEARER: + bearer = mme_bearer_cycle(mme_ue->paging.data); + if (!bearer) { + ogs_error("No Bearer %d", mme_ue->paging.type); + goto cleanup; + } + + if (failed == true) { + ogs_assert(OGS_OK == + mme_gtp_send_delete_bearer_response( + bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); + } else { + ogs_assert(OGS_OK == + nas_eps_send_deactivate_bearer_context_request(bearer)); + } + break; + case MME_PAGING_TYPE_CS_CALL_SERVICE: + if (failed == true) { + ogs_assert(OGS_OK == + sgsap_send_service_request( + mme_ue, SGSAP_SGS_CAUSE_UE_UNREACHABLE)); + } else { + /* Nothing */ } + break; + case MME_PAGING_TYPE_SMS_SERVICE: + if (failed == true) { + ogs_assert(OGS_OK == + sgsap_send_service_request( + mme_ue, SGSAP_SGS_CAUSE_UE_UNREACHABLE)); + } else { + ogs_assert(OGS_OK == + sgsap_send_service_request( + mme_ue, SGSAP_EMM_CONNECTED_MODE)); + } + break; + case MME_PAGING_TYPE_DETACH_TO_UE: + if (failed == true) { + if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { + ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue)); + } else { + mme_send_delete_session_or_detach(mme_ue); + } + + OGS_FSM_TRAN(&mme_ue->sm, &emm_state_de_registered); + } else { + uint8_t detach_type = (uintptr_t)mme_ue->paging.data; + ogs_assert(detach_type); + + ogs_assert(OGS_OK == + nas_eps_send_detach_request(mme_ue, detach_type)); + } + break; + default: + ogs_fatal("Invalid Paging Type%d", mme_ue->paging.type); + ogs_assert_if_reached(); } + +cleanup: + CLEAR_SERVICE_INDICATOR(mme_ue); + MME_CLEAR_PAGING_INFO(mme_ue); }
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-path.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-path.h
Changed
@@ -30,7 +30,7 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue); void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue); -void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value); +void mme_send_after_paging(mme_ue_t *mme_ue, bool failed); #ifdef __cplusplus }
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-s11-handler.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-s11-handler.c
Changed
@@ -603,6 +603,20 @@ ogs_error("ENB-S1 Context has already been removed"); } + } else if (action == OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK) { + if (mme_sess_count(mme_ue) == 1) /* Last Session */ { + enb_ue_t *enb_ue = NULL; + + enb_ue = enb_ue_cycle(mme_ue->enb_ue); + if (enb_ue) { + ogs_assert(OGS_OK == + s1ap_send_ue_context_release_command(enb_ue, + S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, + S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0)); + } else + ogs_error("ENB-S1 Context has already been removed"); + } + } else if (action == OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST) { if (mme_sess_count(mme_ue) == 1) /* Last Session */ { rv = nas_eps_send_emm_to_esm(mme_ue, @@ -803,7 +817,6 @@ * If GTP-xact Holding timer is expired, * OLD bearer->xact memory will be automatically removed. */ - bearer->current.xact = xact; bearer->create.xact = xact; /* Before Activate DEDICATED bearer, check DEFAULT bearer status */ @@ -812,6 +825,8 @@ if (OGS_FSM_CHECK(&default_bearer->sm, esm_state_active)) { if (ECM_IDLE(mme_ue)) { + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_CREATE_BEARER, bearer); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); } else { ogs_assert(OGS_OK == @@ -904,7 +919,6 @@ * If GTP-xact Holding timer is expired, * OLD bearer->xact memory will be automatically removed. */ - bearer->current.xact = xact; bearer->update.xact = xact; if (req->bearer_contexts.bearer_level_qos.presence == 1) { @@ -936,6 +950,8 @@ if (req->bearer_contexts.bearer_level_qos.presence == 1 || req->bearer_contexts.tft.presence == 1) { if (ECM_IDLE(mme_ue)) { + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_UPDATE_BEARER, bearer); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); } else { ogs_assert(OGS_OK == @@ -1065,10 +1081,10 @@ * If GTP-xact Holding timer is expired, * OLD bearer->xact memory will be automatically removed. */ - bearer->current.xact = xact; bearer->delete.xact = xact; if (ECM_IDLE(mme_ue)) { + MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_DELETE_BEARER, bearer); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); } else { ogs_assert(OGS_OK == @@ -1293,7 +1309,6 @@ * If GTP-xact Holding timer is expired, * OLD bearer->xact memory will be automatically removed. */ - bearer->current.xact = xact; bearer->notify.xact = xact; if (noti->cause.presence) { @@ -1317,6 +1332,8 @@ * before step 9, the MME shall not send S1 interface paging messages */ if (ECM_IDLE(mme_ue)) { + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION, bearer); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); } else if (ECM_CONNECTED(mme_ue)) {
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-s6a-handler.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-s6a-handler.c
Changed
@@ -101,3 +101,33 @@ mme_ue->num_of_session = i; mme_ue->context_identifier = slice_data->context_identifier; } + +void mme_s6a_handle_clr(mme_ue_t *mme_ue, + ogs_diam_s6a_clr_message_t *clr_message) +{ + uint8_t detach_type = 0; + + ogs_assert(mme_ue); + ogs_assert(clr_message); + + /* Set NAS EPS Type */ + mme_ue->nas_eps.type = MME_EPS_TYPE_DETACH_REQUEST_TO_UE; + ogs_debug(" OGS_NAS_EPS TYPE%d", mme_ue->nas_eps.type); + + if (clr_message->clr_flags & OGS_DIAM_S6A_CLR_FLAGS_REATTACH_REQUIRED) + detach_type = OGS_NAS_DETACH_TYPE_TO_UE_RE_ATTACH_REQUIRED; + else + detach_type = OGS_NAS_DETACH_TYPE_TO_UE_RE_ATTACH_NOT_REQUIRED; + + if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_de_registered)) { + /* Remove all trace of subscriber even when detached. */ + mme_ue_hash_remove(mme_ue); + mme_ue_remove(mme_ue); + } else if (ECM_IDLE(mme_ue)) { + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_DETACH_TO_UE, (void *)(uintptr_t)detach_type); + ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + } else { + ogs_assert(OGS_OK == nas_eps_send_detach_request(mme_ue, detach_type)); + } +}
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-s6a-handler.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-s6a-handler.h
Changed
@@ -30,6 +30,8 @@ ogs_diam_s6a_aia_message_t *aia_message); void mme_s6a_handle_ula(mme_ue_t *mme_ue, ogs_diam_s6a_ula_message_t *ula_message); +void mme_s6a_handle_clr(mme_ue_t *mme_ue, + ogs_diam_s6a_clr_message_t *clr_message); #ifdef __cplusplus }
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/mme-sm.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/mme-sm.c
Changed
@@ -437,40 +437,42 @@ s6a_message = e->s6a_message; ogs_assert(s6a_message); - enb_ue = enb_ue_cycle(mme_ue->enb_ue); - if (!enb_ue) { - ogs_error("S1 context has already been removed"); - - ogs_subscription_data_free( - &s6a_message->ula_message.subscription_data); - ogs_free(s6a_message); - break; - } + if (s6a_message->during_attach) { + enb_ue = enb_ue_cycle(mme_ue->enb_ue); + if (!enb_ue) { + ogs_error("S1 context has already been removed"); + + ogs_subscription_data_free( + &s6a_message->ula_message.subscription_data); + ogs_free(s6a_message); + break; + } - if (s6a_message->result_code != ER_DIAMETER_SUCCESS) { - /* Unfortunately fd doesn't distinguish - * between result-code and experimental-result-code. - * - * However, e.g. 5004 has different meaning - * if used in result-code than in experimental-result-code */ - uint8_t emm_cause = emm_cause_from_diameter( - mme_ue, s6a_message->err, s6a_message->exp_err); - - ogs_info("%s Attach reject OGS_NAS_EMM_CAUSE:%d", - mme_ue->imsi_bcd, emm_cause); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, - emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); - - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, - S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); - - ogs_subscription_data_free( - &s6a_message->ula_message.subscription_data); - ogs_free(s6a_message); - break; + if (s6a_message->result_code != ER_DIAMETER_SUCCESS) { + /* Unfortunately fd doesn't distinguish + * between result-code and experimental-result-code. + * + * However, e.g. 5004 has different meaning + * if used in result-code than in experimental-result-code */ + uint8_t emm_cause = emm_cause_from_diameter( + mme_ue, s6a_message->err, s6a_message->exp_err); + + ogs_info("%s Attach reject OGS_NAS_EMM_CAUSE:%d", + mme_ue->imsi_bcd, emm_cause); + ogs_assert(OGS_OK == + nas_eps_send_attach_reject(mme_ue, emm_cause, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + + ogs_assert(OGS_OK == + s1ap_send_ue_context_release_command(enb_ue, + S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + + ogs_subscription_data_free( + &s6a_message->ula_message.subscription_data); + ogs_free(s6a_message); + break; + } } switch (s6a_message->cmd_code) { @@ -504,6 +506,9 @@ ogs_assert_if_reached(); } break; + case OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION: + mme_s6a_handle_clr(mme_ue, &s6a_message->clr_message); + break; default: ogs_error("Invalid Type%d", s6a_message->cmd_code); break;
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/nas-path.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/nas-path.c
Changed
@@ -256,6 +256,33 @@ return rv; } +int nas_eps_send_detach_request(mme_ue_t *mme_ue, uint8_t detach_type) +{ + int rv; + ogs_pkbuf_t *emmbuf = NULL; + + ogs_debug("%s Detach request to UE", mme_ue->imsi_bcd); + + if (mme_ue->t3422.pkbuf) { + emmbuf = mme_ue->t3422.pkbuf; + ogs_expect_or_return_val(emmbuf, OGS_ERROR); + } else { + ogs_assert(detach_type); + emmbuf = emm_build_detach_request(mme_ue, detach_type); + ogs_expect_or_return_val(emmbuf, OGS_ERROR); + } + + mme_ue->t3422.pkbuf = ogs_pkbuf_copy(emmbuf); + ogs_expect_or_return_val(mme_ue->t3422.pkbuf, OGS_ERROR); + ogs_timer_start(mme_ue->t3422.timer, + mme_timer_cfg(MME_TIMER_T3422)->duration); + + rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); + ogs_expect_or_return_val(rv == OGS_OK, rv); + + return rv; +} + int nas_eps_send_detach_accept(mme_ue_t *mme_ue) { int rv;
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/nas-path.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/nas-path.h
Changed
@@ -43,6 +43,7 @@ int nas_eps_send_security_mode_command(mme_ue_t *mme_ue); +int nas_eps_send_detach_request(mme_ue_t *mme_ue, uint8_t detach_type); int nas_eps_send_detach_accept(mme_ue_t *mme_ue); int nas_eps_send_pdn_connectivity_reject(
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/s1ap-handler.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/s1ap-handler.c
Changed
@@ -764,15 +764,8 @@ } } - if (mme_ue->nas_eps.type != MME_EPS_TYPE_ATTACH_REQUEST) - mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_REQUEST_ACCEPTED); - - if (SMS_SERVICE_INDICATOR(mme_ue)) { - ogs_assert(OGS_OK == - sgsap_send_service_request(mme_ue, SGSAP_EMM_CONNECTED_MODE)); - } - - CLEAR_SERVICE_INDICATOR(mme_ue); + if (MME_PAGING_ONGOING(mme_ue)) + mme_send_after_paging(mme_ue, false); } void s1ap_handle_initial_context_setup_failure(
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/sgsap-build.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/sgsap-build.c
Changed
@@ -19,7 +19,6 @@ #include "mme-context.h" -#include "sgsap-types.h" #include "sgsap-build.h" #include "sgsap-conv.h"
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/sgsap-build.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/sgsap-build.h
Changed
@@ -22,6 +22,8 @@ #include "mme-context.h" +#include "sgsap-types.h" + #ifdef __cplusplus extern "C" { #endif
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/sgsap-handler.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/sgsap-handler.c
Changed
@@ -352,11 +352,15 @@ if (ECM_IDLE(mme_ue)) { if (CS_CALL_SERVICE_INDICATOR(mme_ue)) { /* UE will respond Extended Service Request in PS CNDomain*/ + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_CS_CALL_SERVICE, NULL); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_cs)); } else if (SMS_SERVICE_INDICATOR(mme_ue)) { /* UE will respond Service Request in PS CNDomain*/ + MME_STORE_PAGING_INFO(mme_ue, + MME_PAGING_TYPE_SMS_SERVICE, NULL); ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); } else
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/sgsap-path.c -> open5gs_2.4.9.202207310002.tar.xz/src/mme/sgsap-path.c
Changed
@@ -22,8 +22,6 @@ #include "mme-event.h" #include "mme-sm.h" -#include "sgsap-types.h" -#include "sgsap-build.h" #include "sgsap-path.h" int sgsap_open() @@ -251,4 +249,4 @@ ogs_expect(rv == OGS_OK); return rv; -} \ No newline at end of file +}
View file
open5gs_2.4.9.202207300002.tar.xz/src/mme/sgsap-path.h -> open5gs_2.4.9.202207310002.tar.xz/src/mme/sgsap-path.h
Changed
@@ -23,6 +23,8 @@ #include "mme-context.h" #include "mme-event.h" +#include "sgsap-build.h" + #ifdef __cplusplus extern "C" { #endif
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.