Projects
osmocom:nightly
open5gs
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
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(
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
.