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.
Changes of Revision 34
open5gs_2.4.9.202207300002.dsc -> open5gs_2.4.9.202207310002.dsc
Changed
x
1
2
Source: open5gs
3
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
4
Architecture: any
5
-Version: 2.4.9.202207300002
6
+Version: 2.4.9.202207310002
7
Maintainer: Harald Welte <laforge@gnumonks.org>
8
Uploaders: Sukchan Lee <acetcom@gmail.com>
9
Homepage: https://open5gs.org
10
11
open5gs-udr deb net optional arch=any
12
open5gs-upf deb net optional arch=any
13
Checksums-Sha1:
14
- 77980f28c4c7640edd516dd022dd79c4f0ebb158 11458864 open5gs_2.4.9.202207300002.tar.xz
15
+ a28d06d3784e02111024e83acffb24e88c535307 11458756 open5gs_2.4.9.202207310002.tar.xz
16
Checksums-Sha256:
17
- 317b457fe0411a5bfa9972e290ddd1f3603cfbb4a88b3d4c10401112cba2b982 11458864 open5gs_2.4.9.202207300002.tar.xz
18
+ 8200de17d2f92b549d22b01a3e9e26dbe44d07bcc652c193d4b031d3f6832079 11458756 open5gs_2.4.9.202207310002.tar.xz
19
Files:
20
- 4ac60ee46aaa55337b0836ffdab22247 11458864 open5gs_2.4.9.202207300002.tar.xz
21
+ 3e5f2bbe52529a7dc2756c92a7dfa591 11458756 open5gs_2.4.9.202207310002.tar.xz
22
open5gs_2.4.9.202207300002.tar.xz/debian/changelog -> open5gs_2.4.9.202207310002.tar.xz/debian/changelog
Changed
12
1
2
-open5gs (2.4.9.202207300002) UNRELEASED; urgency=medium
3
+open5gs (2.4.9.202207310002) UNRELEASED; urgency=medium
4
5
* Snapshot build
6
7
- -- Sukchan Lee <acetcom@gmail.com> Sat, 30 Jul 2022 00:09:10 +0000
8
+ -- Sukchan Lee <acetcom@gmail.com> Sun, 31 Jul 2022 00:09:06 +0000
9
10
open5gs (2.4.9) unstable; urgency=medium
11
12
open5gs_2.4.9.202207300002.tar.xz/debian/control -> open5gs_2.4.9.202207310002.tar.xz/debian/control
Changed
163
1
2
Package: open5gs-common
3
Architecture: any
4
Multi-Arch: same
5
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
6
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
7
${misc:Depends}
8
Description: 5G Core and EPC (Shared Files)
9
Open5GS is a C-language implementation of 5G Core and EPC
10
11
Package: open5gs-mme
12
Architecture: any
13
Multi-Arch: same
14
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
15
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
16
${misc:Depends},
17
open5gs-common (= ${binary:Version})
18
Description: MME (Mobility Management Entity)
19
20
Package: open5gs-sgwc
21
Architecture: any
22
Multi-Arch: same
23
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
24
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
25
${misc:Depends},
26
open5gs-common (= ${binary:Version})
27
Description: SGW-C (Serving Gateway - Control Plane)
28
29
Package: open5gs-smf
30
Architecture: any
31
Multi-Arch: same
32
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
33
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
34
${misc:Depends},
35
open5gs-common (= ${binary:Version})
36
Description: SMF (Session Management Function)
37
38
Package: open5gs-amf
39
Architecture: any
40
Multi-Arch: same
41
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
42
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
43
${misc:Depends},
44
open5gs-common (= ${binary:Version})
45
Description: AMF (Access and Mobility Management Function)
46
47
Package: open5gs-sgwu
48
Architecture: any
49
Multi-Arch: same
50
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
51
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
52
${misc:Depends},
53
open5gs-common (= ${binary:Version})
54
Description: SGW-U (Serving Gateway - User Plane)
55
56
Package: open5gs-upf
57
Architecture: any
58
Multi-Arch: same
59
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
60
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
61
${misc:Depends},
62
udev,
63
open5gs-common (= ${binary:Version})
64
65
Package: open5gs-hss
66
Architecture: any
67
Multi-Arch: same
68
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
69
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
70
${misc:Depends},
71
mongodb-org | mongodb,
72
open5gs-common (= ${binary:Version})
73
74
Package: open5gs-pcrf
75
Architecture: any
76
Multi-Arch: same
77
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
78
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
79
${misc:Depends},
80
mongodb-org | mongodb,
81
open5gs-common (= ${binary:Version})
82
83
Package: open5gs-nrf
84
Architecture: any
85
Multi-Arch: same
86
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
87
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
88
${misc:Depends},
89
open5gs-common (= ${binary:Version})
90
Description: NRF (Network Repository Function)
91
92
Package: open5gs-ausf
93
Architecture: any
94
Multi-Arch: same
95
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
96
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
97
${misc:Depends},
98
open5gs-common (= ${binary:Version})
99
Description: AUSF (Authentication Server Function)
100
101
Package: open5gs-udm
102
Architecture: any
103
Multi-Arch: same
104
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
105
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
106
${misc:Depends},
107
open5gs-common (= ${binary:Version})
108
Description: UDM (Unified Data Management)
109
110
Package: open5gs-pcf
111
Architecture: any
112
Multi-Arch: same
113
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
114
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
115
${misc:Depends},
116
open5gs-common (= ${binary:Version})
117
Description: PCF (Policy Control Function)
118
119
Package: open5gs-nssf
120
Architecture: any
121
Multi-Arch: same
122
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
123
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
124
${misc:Depends},
125
open5gs-common (= ${binary:Version})
126
Description: NSSF (Network Slice Selection Function)
127
128
Package: open5gs-bsf
129
Architecture: any
130
Multi-Arch: same
131
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
132
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
133
${misc:Depends},
134
open5gs-common (= ${binary:Version})
135
Description: BSF (Binding Support Function)
136
137
Package: open5gs-udr
138
Architecture: any
139
Multi-Arch: same
140
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${shlibs:Depends},
141
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${shlibs:Depends},
142
${misc:Depends},
143
open5gs-common (= ${binary:Version})
144
Description: UDR (Unified Data Repository)
145
146
Package: open5gs
147
Architecture: any
148
Multi-Arch: same
149
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${misc:Depends},
150
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${misc:Depends},
151
open5gs-common (= ${binary:Version}),
152
open5gs-mme (= ${binary:Version}),
153
open5gs-sgwc (= ${binary:Version}),
154
155
Package: open5gs-dbg
156
Architecture: any
157
Multi-Arch: same
158
-Depends: osmocom-nightly (= 1.0.0.202207300002), ${misc:Depends},
159
+Depends: osmocom-nightly (= 1.0.0.202207310002), ${misc:Depends},
160
open5gs (= ${binary:Version})
161
Description: Debug symbols for Open5GS
162
Open5GS is a C-language implementation of 5G Core and EPC
163
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
65
1
2
PARSE_loc_rules( rules, cmd );
3
}
4
5
+ /* Cancel-Location-Request (CLR) Command - 3GPP TS 29.272 #7.2.7 */
6
+ {
7
+ struct dict_object * cmd;
8
+ struct dict_cmd_data data = {
9
+ 317, /* Code */
10
+ "Cancel-Location-Request", /* Name */
11
+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */
12
+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */
13
+ };
14
+ struct local_rules_definition rules =
15
+ {
16
+ { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 },
17
+ { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 },
18
+ { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 },
19
+ { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 },
20
+ { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 },
21
+ { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 },
22
+ { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 },
23
+ { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 },
24
+ { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 },
25
+ { { .avp_vendor = 10415, .avp_name = "Cancellation-Type" }, RULE_REQUIRED, -1, -1 },
26
+ { { .avp_vendor = 10415, .avp_name = "CLR-Flags" }, RULE_OPTIONAL, -1, 1 },
27
+ { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 },
28
+ { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 },
29
+ };
30
+
31
+ CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd);
32
+ PARSE_loc_rules( rules, cmd );
33
+ }
34
+
35
+ /* Cancel-Location-Answer (CLA) Command - 3GPP TS 29.272 #7.2.8 */
36
+ {
37
+ struct dict_object * cmd;
38
+ struct dict_cmd_data data = {
39
+ 317, /* Code */
40
+ "Cancel-Location-Answer", /* Name */
41
+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */
42
+ CMD_FLAG_PROXIABLE /* Fixed flag values */
43
+ };
44
+ struct local_rules_definition rules =
45
+ {
46
+ { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 },
47
+ { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 },
48
+ { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 },
49
+ { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 },
50
+ { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 },
51
+ { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 },
52
+ { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 },
53
+ { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 },
54
+ { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 },
55
+ { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 },
56
+ };
57
+
58
+ CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd);
59
+ PARSE_loc_rules( rules, cmd );
60
+ }
61
+
62
}
63
64
LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP S6A' initialized");
65
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
29
1
2
struct dict_object *ogs_diam_s6a_cmd_ula = NULL;
3
struct dict_object *ogs_diam_s6a_cmd_pur = NULL;
4
struct dict_object *ogs_diam_s6a_cmd_pua = NULL;
5
+struct dict_object *ogs_diam_s6a_cmd_clr = NULL;
6
+struct dict_object *ogs_diam_s6a_cmd_cla = NULL;
7
8
struct dict_object *ogs_diam_s6a_ulr_flags = NULL;
9
struct dict_object *ogs_diam_s6a_ula_flags = NULL;
10
+struct dict_object *ogs_diam_s6a_clr_flags = NULL;
11
+struct dict_object *ogs_diam_s6a_cancellation_type = NULL;
12
struct dict_object *ogs_diam_s6a_subscription_data = NULL;
13
struct dict_object *ogs_diam_s6a_req_eutran_auth_info = NULL;
14
struct dict_object *ogs_diam_s6a_number_of_requested_vectors = NULL;
15
16
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Update-Location-Answer", &ogs_diam_s6a_cmd_ula);
17
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Request", &ogs_diam_s6a_cmd_pur);
18
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Answer", &ogs_diam_s6a_cmd_pua);
19
+ CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Request", &ogs_diam_s6a_cmd_clr);
20
+ CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Answer", &ogs_diam_s6a_cmd_cla);
21
22
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", &ogs_diam_s6a_ulr_flags);
23
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", &ogs_diam_s6a_ula_flags);
24
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "CLR-Flags", &ogs_diam_s6a_clr_flags);
25
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Cancellation-Type", &ogs_diam_s6a_cancellation_type);
26
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", &ogs_diam_s6a_ue_srvcc_capability);
27
28
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", &ogs_diam_s6a_req_eutran_auth_info);
29
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
41
1
2
extern struct dict_object *ogs_diam_s6a_cmd_ula;
3
extern struct dict_object *ogs_diam_s6a_cmd_pur;
4
extern struct dict_object *ogs_diam_s6a_cmd_pua;
5
+extern struct dict_object *ogs_diam_s6a_cmd_clr;
6
+extern struct dict_object *ogs_diam_s6a_cmd_cla;
7
8
extern struct dict_object *ogs_diam_s6a_ulr_flags;
9
extern struct dict_object *ogs_diam_s6a_ula_flags;
10
+extern struct dict_object *ogs_diam_s6a_clr_flags;
11
+extern struct dict_object *ogs_diam_s6a_cancellation_type;
12
extern struct dict_object *ogs_diam_s6a_subscription_data;
13
extern struct dict_object *ogs_diam_s6a_req_eutran_auth_info;
14
extern struct dict_object *ogs_diam_s6a_number_of_requested_vectors;
15
16
ogs_subscription_data_t subscription_data;
17
} ogs_diam_s6a_ula_message_t;
18
19
+typedef struct ogs_diam_s6a_clr_message_s {
20
+#define OGS_DIAM_S6A_CLR_FLAGS_S6A_S6D_INDICATOR (1)
21
+#define OGS_DIAM_S6A_CLR_FLAGS_REATTACH_REQUIRED (1 << 1)
22
+ uint32_t clr_flags;
23
+} ogs_diam_s6a_clr_message_t;
24
+
25
typedef struct ogs_diam_s6a_message_s {
26
#define OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION 316
27
+#define OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION 317
28
#define OGS_DIAM_S6A_CMD_CODE_AUTHENTICATION_INFORMATION 318
29
uint16_t cmd_code;
30
31
32
uint32_t *err;
33
uint32_t *exp_err;
34
35
+ bool during_attach;
36
+
37
+ ogs_diam_s6a_clr_message_t clr_message;
38
ogs_diam_s6a_aia_message_t aia_message;
39
ogs_diam_s6a_ula_message_t ula_message;
40
} ogs_diam_s6a_message_t;
41
open5gs_2.4.9.202207300002.tar.xz/lib/gtp/xact.h -> open5gs_2.4.9.202207310002.tar.xz/lib/gtp/xact.h
Changed
15
1
2
#define OGS_GTP_DELETE_SEND_DETACH_ACCEPT 2
3
#define OGS_GTP_DELETE_SEND_DEACTIVATE_BEARER_CONTEXT_REQUEST 3
4
#define OGS_GTP_DELETE_SEND_UE_CONTEXT_RELEASE_COMMAND 4
5
-#define OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST 5
6
-#define OGS_GTP_DELETE_UE_CONTEXT_REMOVE 6
7
-#define OGS_GTP_DELETE_IN_PATH_SWITCH_REQUEST 7
8
+#define OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK 5
9
+#define OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST 6
10
+#define OGS_GTP_DELETE_UE_CONTEXT_REMOVE 7
11
+#define OGS_GTP_DELETE_IN_PATH_SWITCH_REQUEST 8
12
int delete_action;
13
14
#define OGS_GTP_RELEASE_SEND_UE_CONTEXT_RELEASE_COMMAND 1
15
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
28
1
2
return nas_eps_security_encode(mme_ue, &message);
3
}
4
5
+ogs_pkbuf_t *emm_build_detach_request(mme_ue_t *mme_ue, uint8_t detach_type)
6
+{
7
+ ogs_nas_eps_message_t message;
8
+
9
+ ogs_assert(mme_ue);
10
+ ogs_assert(detach_type);
11
+
12
+ memset(&message, 0, sizeof(message));
13
+ message.h.security_header_type =
14
+ OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
15
+ message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
16
+
17
+ message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
18
+ message.emm.h.message_type = OGS_NAS_EPS_DETACH_REQUEST;
19
+
20
+ message.emm.detach_request_to_ue.detach_type.value = detach_type;
21
+
22
+ return nas_eps_security_encode(mme_ue, &message);
23
+}
24
+
25
ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue)
26
{
27
ogs_nas_eps_message_t message;
28
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
9
1
2
ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue);
3
ogs_pkbuf_t *emm_build_authentication_reject(void);
4
5
+ogs_pkbuf_t *emm_build_detach_request(mme_ue_t *mme_ue, uint8_t detach_type);
6
ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue);
7
8
ogs_pkbuf_t *emm_build_tau_accept(mme_ue_t *mme_ue);
9
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
10
1
2
if (detach_request->detach_type.switch_off)
3
ogs_debug(" Switch-Off");
4
5
- ogs_info(" IMSI%s", mme_ue->imsi_bcd);
6
-
7
return OGS_OK;
8
}
9
10
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
79
1
2
}
3
4
if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) {
5
- ogs_assert(OGS_OK ==
6
- sgsap_send_detach_indication(mme_ue));
7
+ ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue));
8
+ } else {
9
+ mme_send_delete_session_or_detach(mme_ue);
10
+ }
11
+
12
+ OGS_FSM_TRAN(s, &emm_state_de_registered);
13
+ break;
14
+
15
+ case OGS_NAS_EPS_DETACH_ACCEPT:
16
+ ogs_info("%s Detach accept", mme_ue->imsi_bcd);
17
+
18
+ CLEAR_MME_UE_TIMER(mme_ue->t3422);
19
+
20
+ if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) {
21
+ ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue));
22
} else {
23
mme_send_delete_session_or_detach(mme_ue);
24
}
25
26
mme_ue->imsi_bcd);
27
CLEAR_MME_UE_TIMER(mme_ue->t3413);
28
29
- mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE);
30
-
31
- if (CS_CALL_SERVICE_INDICATOR(mme_ue) ||
32
- SMS_SERVICE_INDICATOR(mme_ue)) {
33
- ogs_assert(OGS_OK ==
34
- sgsap_send_ue_unreachable(mme_ue,
35
- SGSAP_SGS_CAUSE_UE_UNREACHABLE));
36
-
37
- }
38
-
39
- CLEAR_SERVICE_INDICATOR(mme_ue);
40
-
41
+ ogs_assert(MME_PAGING_ONGOING(mme_ue));
42
+ mme_send_after_paging(mme_ue, true);
43
} else {
44
mme_ue->t3413.retry_count++;
45
/*
46
47
"Stop retransmission");
48
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
49
} else {
50
+ ogs_assert(mme_ue->t3470.pkbuf);
51
rv = nas_eps_send_identity_request(mme_ue);
52
if (rv == OGS_OK) {
53
mme_ue->t3470.retry_count++;
54
55
}
56
break;
57
58
+ case MME_TIMER_T3422:
59
+ if (mme_ue->t3422.retry_count >=
60
+ mme_timer_cfg(MME_TIMER_T3422)->max_count) {
61
+ ogs_warn("Retransmission of Detach Request failed. "
62
+ "Stop retransmission");
63
+ OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
64
+ } else {
65
+ ogs_assert(mme_ue->t3422.pkbuf);
66
+ rv = nas_eps_send_detach_request(mme_ue, 0);
67
+ if (rv == OGS_OK) {
68
+ mme_ue->t3422.retry_count++;
69
+ } else {
70
+ ogs_error("nas_eps_send_detach_request() failed");
71
+ OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
72
+ }
73
+ }
74
+ break;
75
+
76
default:
77
ogs_error("Unknown timer%s:%d",
78
mme_timer_get_name(e->timer_id), e->timer_id);
79
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
48
1
2
(((__mME)->enb_ue == NULL) || (enb_ue_cycle((__mME)->enb_ue) == NULL)))
3
enb_ue_t *enb_ue; /* S1 UE context */
4
5
+ struct {
6
+#define MME_CLEAR_PAGING_INFO(__mME) \
7
+ do { \
8
+ ogs_assert(__mME); \
9
+ (__mME)->paging.type = 0; \
10
+ } while(0)
11
+
12
+#define MME_STORE_PAGING_INFO(__mME, __tYPE, __dATA) \
13
+ do { \
14
+ ogs_assert(__mME); \
15
+ ogs_assert(__tYPE); \
16
+ (__mME)->paging.type = __tYPE; \
17
+ (__mME)->paging.data = __dATA; \
18
+ } while(0)
19
+
20
+#define MME_PAGING_ONGOING(__mME) ((__mME) && ((__mME)->paging.type))
21
+
22
+#define MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION 1
23
+#define MME_PAGING_TYPE_CREATE_BEARER 2
24
+#define MME_PAGING_TYPE_UPDATE_BEARER 3
25
+#define MME_PAGING_TYPE_DELETE_BEARER 4
26
+#define MME_PAGING_TYPE_CS_CALL_SERVICE 5
27
+#define MME_PAGING_TYPE_SMS_SERVICE 6
28
+#define MME_PAGING_TYPE_DETACH_TO_UE 7
29
+ int type;
30
+ void *data;
31
+ } paging;
32
+
33
/* SGW UE context */
34
sgw_ue_t *sgw_ue;
35
36
37
/* Related Context */
38
mme_ue_t *mme_ue;
39
mme_sess_t *sess;
40
+
41
struct {
42
ogs_gtp_xact_t *xact;
43
- } create, update, delete, notify, current;
44
+ } create, update, delete, notify;
45
} mme_bearer_t;
46
47
void mme_context_init(void);
48
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
179
1
2
#include "mme-event.h"
3
#include "mme-fd-path.h"
4
5
+/* handler for Cancel-Location-Request cb */
6
+static struct disp_hdl *hdl_s6a_clr = NULL;
7
+
8
static struct session_handler *mme_s6a_reg = NULL;
9
10
struct sess_state {
11
12
s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t));
13
ogs_assert(s6a_message);
14
s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_AUTHENTICATION_INFORMATION;
15
+ s6a_message->during_attach = true;
16
aia_message = &s6a_message->aia_message;
17
ogs_assert(aia_message);
18
e_utran_vector = &aia_message->e_utran_vector;
19
20
s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t));
21
ogs_assert(s6a_message);
22
s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION;
23
+ s6a_message->during_attach = true;
24
ula_message = &s6a_message->ula_message;
25
ogs_assert(ula_message);
26
subscription_data = &ula_message->subscription_data;
27
28
return;
29
}
30
31
+/* Callback for incoming Cancel-Location-Request messages */
32
+static int mme_ogs_diam_s6a_clr_cb( struct msg **msg, struct avp *avp,
33
+ struct session *session, void *opaque, enum disp_action *act)
34
+{
35
+ int ret;
36
+ int error = 0;
37
+
38
+ mme_event_t *e = NULL;
39
+ mme_ue_t *mme_ue = NULL;
40
+
41
+ struct msg *ans, *qry;
42
+ ogs_diam_s6a_clr_message_t *clr_message = NULL;
43
+
44
+ struct avp_hdr *hdr;
45
+ union avp_value val;
46
+
47
+ char imsi_bcdOGS_MAX_IMSI_BCD_LEN+1;
48
+
49
+ uint32_t result_code = 0;
50
+
51
+ ogs_assert(msg);
52
+
53
+ ogs_diam_s6a_message_t *s6a_message = NULL;
54
+
55
+ ogs_debug("Cancel-Location-Request");
56
+
57
+ s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t));
58
+ ogs_assert(s6a_message);
59
+ s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION;
60
+ clr_message = &s6a_message->clr_message;
61
+ ogs_assert(clr_message);
62
+
63
+
64
+ /* Create answer header */
65
+ qry = *msg;
66
+ ret = fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0);
67
+ ogs_assert(ret == 0);
68
+ ans = *msg;
69
+
70
+ ret = fd_msg_search_avp(qry, ogs_diam_user_name, &avp);
71
+ ogs_assert(ret == 0);
72
+ ret = fd_msg_avp_hdr(avp, &hdr);
73
+ ogs_assert(ret == 0);
74
+
75
+ ogs_cpystrn(imsi_bcd, (char*)hdr->avp_value->os.data,
76
+ ogs_min(hdr->avp_value->os.len, OGS_MAX_IMSI_BCD_LEN)+1);
77
+
78
+ mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
79
+
80
+ if (!mme_ue) {
81
+ ogs_error("Cancel Location for Unknown IMSI%s", imsi_bcd);
82
+ result_code = OGS_DIAM_S6A_ERROR_USER_UNKNOWN;
83
+ error++;
84
+ }
85
+
86
+ ret = fd_msg_search_avp(qry, ogs_diam_s6a_cancellation_type, &avp);
87
+ ogs_assert(ret == 0);
88
+ ret = fd_msg_avp_hdr(avp, &hdr);
89
+ ogs_assert(ret == 0);
90
+
91
+ /* Set the Origin-Host, Origin-Realm, andResult-Code AVPs */
92
+ ret = fd_msg_rescode_set(ans, (char*)"DIAMETER_SUCCESS", NULL, NULL, 1);
93
+ ogs_assert(ret == 0);
94
+
95
+ /* Set the Auth-Session-State AVP */
96
+ ret = fd_msg_avp_new(ogs_diam_auth_session_state, 0, &avp);
97
+ ogs_assert(ret == 0);
98
+ val.i32 = OGS_DIAM_AUTH_SESSION_NO_STATE_MAINTAINED;
99
+ ret = fd_msg_avp_setvalue(avp, &val);
100
+ ogs_assert(ret == 0);
101
+ ret = fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp);
102
+ ogs_assert(ret == 0);
103
+
104
+ ret = fd_msg_search_avp(qry, ogs_diam_s6a_clr_flags, &avp);
105
+ ogs_assert(ret == 0);
106
+ if (avp) {
107
+ ret = fd_msg_avp_hdr(avp, &hdr);
108
+ ogs_assert(ret == 0);
109
+ clr_message->clr_flags = hdr->avp_value->i32;
110
+ }
111
+
112
+ /* Set Vendor-Specific-Application-Id AVP */
113
+ ret = ogs_diam_message_vendor_specific_appid_set(
114
+ ans, OGS_DIAM_S6A_APPLICATION_ID);
115
+ ogs_assert(ret == 0);
116
+
117
+ /* Send the answer */
118
+ ret = fd_msg_send(msg, NULL, NULL);
119
+ ogs_assert(ret == 0);
120
+
121
+ ogs_debug("Cancel-Location-Answer");
122
+
123
+ /* Add this value to the stats */
124
+ ogs_assert( pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
125
+ ogs_diam_logger_self()->stats.nb_echoed++;
126
+ ogs_assert( pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
127
+
128
+ if (!error) {
129
+ int rv;
130
+ e = mme_event_new(MME_EVT_S6A_MESSAGE);
131
+ ogs_assert(e);
132
+ e->mme_ue = mme_ue;
133
+ e->s6a_message = s6a_message;
134
+ rv = ogs_queue_push(ogs_app()->queue, e);
135
+ if (rv != OGS_OK) {
136
+ ogs_error("ogs_queue_push() failed:%d", (int)rv);
137
+ ogs_free(s6a_message);
138
+ mme_event_free(e);
139
+ } else {
140
+ ogs_pollset_notify(ogs_app()->pollset);
141
+ }
142
+ } else {
143
+ ret = ogs_diam_message_experimental_rescode_set(ans, result_code);
144
+ ogs_assert(ret == 0);
145
+ }
146
+
147
+ return 0;
148
+}
149
150
int mme_fd_init(void)
151
{
152
int ret;
153
+ struct disp_when data;
154
155
ret = ogs_diam_init(FD_MODE_CLIENT,
156
mme_self()->diam_conf_path, mme_self()->diam_config);
157
158
ret = fd_sess_handler_create(&mme_s6a_reg, &state_cleanup, NULL, NULL);
159
ogs_assert(ret == 0);
160
161
+ /* Specific handler for Cancel-Location-Request */
162
+ data.command = ogs_diam_s6a_cmd_clr;
163
+ ret = fd_disp_register(mme_ogs_diam_s6a_clr_cb, DISP_HOW_CC, &data, NULL,
164
+ &hdl_s6a_clr);
165
+ ogs_assert(ret == 0);
166
+
167
/* Advertise the support for the application in the peer */
168
ret = fd_disp_app_support(ogs_diam_s6a_application, ogs_diam_vendor, 1, 0);
169
ogs_assert(ret == 0);
170
171
ret = fd_sess_handler_destroy(&mme_s6a_reg, NULL);
172
ogs_assert(ret == OGS_OK);
173
174
+ if (hdl_s6a_clr)
175
+ (void) fd_disp_unregister(&hdl_s6a_clr, NULL);
176
+
177
ogs_diam_final();
178
}
179
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
201
1
2
3
#include "s1ap-path.h"
4
#include "nas-path.h"
5
+#include "sgsap-path.h"
6
#include "mme-gtp-path.h"
7
#include "mme-path.h"
8
+#include "mme-sm.h"
9
10
void mme_send_delete_session_or_detach(mme_ue_t *mme_ue)
11
{
12
ogs_assert(mme_ue);
13
14
- if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
15
- mme_gtp_send_delete_all_sessions(mme_ue,
16
- OGS_GTP_DELETE_SEND_DETACH_ACCEPT);
17
- } else {
18
- ogs_assert(OGS_OK ==
19
- nas_eps_send_detach_accept(mme_ue));
20
+ switch (mme_ue->nas_eps.type) {
21
+ case MME_EPS_TYPE_DETACH_REQUEST_FROM_UE:
22
+ if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
23
+ mme_gtp_send_delete_all_sessions(
24
+ mme_ue, OGS_GTP_DELETE_SEND_DETACH_ACCEPT);
25
+ } else {
26
+ ogs_assert(OGS_OK == nas_eps_send_detach_accept(mme_ue));
27
+ }
28
+ break;
29
+ case MME_EPS_TYPE_DETACH_REQUEST_TO_UE:
30
+ if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
31
+ mme_gtp_send_delete_all_sessions(
32
+ mme_ue, OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK);
33
+ } else {
34
+ enb_ue_t *enb_ue = enb_ue_cycle(mme_ue->enb_ue);
35
+ if (enb_ue) {
36
+ ogs_assert(OGS_OK ==
37
+ s1ap_send_ue_context_release_command(enb_ue,
38
+ S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
39
+ S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0));
40
+ } else {
41
+ ogs_warn("%s No S1 Context", mme_ue->imsi_bcd);
42
+ }
43
+ }
44
+ break;
45
+ default:
46
+ ogs_fatal(" Invalid OGS_NAS_EPS TYPE%d", mme_ue->nas_eps.type);
47
+ ogs_assert_if_reached();
48
}
49
}
50
51
52
}
53
}
54
55
-void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value)
56
+void mme_send_after_paging(mme_ue_t *mme_ue, bool failed)
57
{
58
- mme_sess_t *sess = NULL;
59
mme_bearer_t *bearer = NULL;
60
61
ogs_assert(mme_ue);
62
63
- ogs_list_for_each(&mme_ue->sess_list, sess) {
64
- ogs_list_for_each(&sess->bearer_list, bearer) {
65
- ogs_gtp_xact_t *xact = NULL;
66
- uint8_t type;
67
-
68
- xact = ogs_gtp_xact_cycle(bearer->current.xact);
69
- if (xact) {
70
- /*
71
- * It may conflict with GTP transaction already used.
72
- * To avoid this, check `xact->step` to see if
73
- * the transaction has already been committed.
74
- */
75
- type = xact->seqxact->step-1.type;
76
-
77
- switch (type) {
78
- case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
79
- ogs_assert(OGS_OK ==
80
- mme_gtp_send_downlink_data_notification_ack(
81
- bearer, cause_value));
82
- break;
83
- case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
84
- if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
85
- ogs_assert(OGS_OK ==
86
- nas_eps_send_activate_dedicated_bearer_context_request(
87
- bearer));
88
- } else {
89
- ogs_assert(OGS_OK ==
90
- mme_gtp_send_create_bearer_response(
91
- bearer, cause_value));
92
- }
93
- break;
94
- case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
95
- if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
96
- ogs_assert(OGS_OK ==
97
- nas_eps_send_modify_bearer_context_request(bearer,
98
- (xact->update_flags &
99
- OGS_GTP_MODIFY_QOS_UPDATE) ? 1 : 0,
100
- (xact->update_flags &
101
- OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0));
102
- } else {
103
- ogs_assert(OGS_OK ==
104
- mme_gtp_send_update_bearer_response(
105
- bearer, cause_value));
106
- }
107
- break;
108
- case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
109
- if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
110
- ogs_assert(OGS_OK ==
111
- nas_eps_send_deactivate_bearer_context_request(bearer));
112
- } else {
113
- ogs_assert(OGS_OK ==
114
- mme_gtp_send_delete_bearer_response(
115
- bearer, cause_value));
116
- }
117
- break;
118
- default:
119
- break;
120
- }
121
+ switch (mme_ue->paging.type) {
122
+ case MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION:
123
+ bearer = mme_bearer_cycle(mme_ue->paging.data);
124
+ if (!bearer) {
125
+ ogs_error("No Bearer %d", mme_ue->paging.type);
126
+ goto cleanup;
127
+ }
128
+
129
+ if (failed == true) {
130
+ ogs_assert(OGS_OK ==
131
+ mme_gtp_send_downlink_data_notification_ack(
132
+ bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE));
133
+ } else {
134
+ ogs_assert(OGS_OK ==
135
+ mme_gtp_send_downlink_data_notification_ack(
136
+ bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
137
+ }
138
+ break;
139
+ case MME_PAGING_TYPE_CREATE_BEARER:
140
+ bearer = mme_bearer_cycle(mme_ue->paging.data);
141
+ if (!bearer) {
142
+ ogs_error("No Bearer %d", mme_ue->paging.type);
143
+ goto cleanup;
144
+ }
145
+
146
+ if (failed == true) {
147
+ ogs_assert(OGS_OK ==
148
+ mme_gtp_send_create_bearer_response(
149
+ bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE));
150
+ } else {
151
+ ogs_assert(OGS_OK ==
152
+ nas_eps_send_activate_dedicated_bearer_context_request(bearer));
153
+ }
154
+ break;
155
+ case MME_PAGING_TYPE_UPDATE_BEARER:
156
+ bearer = mme_bearer_cycle(mme_ue->paging.data);
157
+ if (!bearer) {
158
+ ogs_error("No Bearer %d", mme_ue->paging.type);
159
+ goto cleanup;
160
+ }
161
+
162
+ if (failed == true) {
163
+ ogs_assert(OGS_OK ==
164
+ mme_gtp_send_update_bearer_response(
165
+ bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE));
166
+ } else {
167
+ ogs_gtp_xact_t *xact = ogs_gtp_xact_cycle(bearer->update.xact);
168
+ if (!xact) {
169
+ ogs_error("No GTP xact");
170
+ goto cleanup;
171
}
172
+
173
+ ogs_assert(OGS_OK ==
174
+ nas_eps_send_modify_bearer_context_request(bearer,
175
+ (xact->update_flags &
176
+ OGS_GTP_MODIFY_QOS_UPDATE) ? 1 : 0,
177
+ (xact->update_flags &
178
+ OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0));
179
+ }
180
+ break;
181
+ case MME_PAGING_TYPE_DELETE_BEARER:
182
+ bearer = mme_bearer_cycle(mme_ue->paging.data);
183
+ if (!bearer) {
184
+ ogs_error("No Bearer %d", mme_ue->paging.type);
185
+ goto cleanup;
186
+ }
187
+
188
+ if (failed == true) {
189
+ ogs_assert(OGS_OK ==
190
+ mme_gtp_send_delete_bearer_response(
191
+ bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE));
192
+ } else {
193
+ ogs_assert(OGS_OK ==
194
+ nas_eps_send_deactivate_bearer_context_request(bearer));
195
+ }
196
+ break;
197
+ case MME_PAGING_TYPE_CS_CALL_SERVICE:
198
+ if (failed == true) {
199
+ ogs_assert(OGS_OK ==
200
+ sgsap_send_service_request(
201
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
10
1
2
void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue);
3
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue);
4
5
-void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value);
6
+void mme_send_after_paging(mme_ue_t *mme_ue, bool failed);
7
8
#ifdef __cplusplus
9
}
10
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
85
1
2
ogs_error("ENB-S1 Context has already been removed");
3
}
4
5
+ } else if (action == OGS_GTP_DELETE_SEND_S1_REMOVE_AND_UNLINK) {
6
+ if (mme_sess_count(mme_ue) == 1) /* Last Session */ {
7
+ enb_ue_t *enb_ue = NULL;
8
+
9
+ enb_ue = enb_ue_cycle(mme_ue->enb_ue);
10
+ if (enb_ue) {
11
+ ogs_assert(OGS_OK ==
12
+ s1ap_send_ue_context_release_command(enb_ue,
13
+ S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
14
+ S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0));
15
+ } else
16
+ ogs_error("ENB-S1 Context has already been removed");
17
+ }
18
+
19
} else if (action == OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST) {
20
if (mme_sess_count(mme_ue) == 1) /* Last Session */ {
21
rv = nas_eps_send_emm_to_esm(mme_ue,
22
23
* If GTP-xact Holding timer is expired,
24
* OLD bearer->xact memory will be automatically removed.
25
*/
26
- bearer->current.xact = xact;
27
bearer->create.xact = xact;
28
29
/* Before Activate DEDICATED bearer, check DEFAULT bearer status */
30
31
32
if (OGS_FSM_CHECK(&default_bearer->sm, esm_state_active)) {
33
if (ECM_IDLE(mme_ue)) {
34
+ MME_STORE_PAGING_INFO(mme_ue,
35
+ MME_PAGING_TYPE_CREATE_BEARER, bearer);
36
ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
37
} else {
38
ogs_assert(OGS_OK ==
39
40
* If GTP-xact Holding timer is expired,
41
* OLD bearer->xact memory will be automatically removed.
42
*/
43
- bearer->current.xact = xact;
44
bearer->update.xact = xact;
45
46
if (req->bearer_contexts.bearer_level_qos.presence == 1) {
47
48
if (req->bearer_contexts.bearer_level_qos.presence == 1 ||
49
req->bearer_contexts.tft.presence == 1) {
50
if (ECM_IDLE(mme_ue)) {
51
+ MME_STORE_PAGING_INFO(mme_ue,
52
+ MME_PAGING_TYPE_UPDATE_BEARER, bearer);
53
ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
54
} else {
55
ogs_assert(OGS_OK ==
56
57
* If GTP-xact Holding timer is expired,
58
* OLD bearer->xact memory will be automatically removed.
59
*/
60
- bearer->current.xact = xact;
61
bearer->delete.xact = xact;
62
63
if (ECM_IDLE(mme_ue)) {
64
+ MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_DELETE_BEARER, bearer);
65
ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
66
} else {
67
ogs_assert(OGS_OK ==
68
69
* If GTP-xact Holding timer is expired,
70
* OLD bearer->xact memory will be automatically removed.
71
*/
72
- bearer->current.xact = xact;
73
bearer->notify.xact = xact;
74
75
if (noti->cause.presence) {
76
77
* before step 9, the MME shall not send S1 interface paging messages
78
*/
79
if (ECM_IDLE(mme_ue)) {
80
+ MME_STORE_PAGING_INFO(mme_ue,
81
+ MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION, bearer);
82
ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
83
84
} else if (ECM_CONNECTED(mme_ue)) {
85
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
35
1
2
mme_ue->num_of_session = i;
3
mme_ue->context_identifier = slice_data->context_identifier;
4
}
5
+
6
+void mme_s6a_handle_clr(mme_ue_t *mme_ue,
7
+ ogs_diam_s6a_clr_message_t *clr_message)
8
+{
9
+ uint8_t detach_type = 0;
10
+
11
+ ogs_assert(mme_ue);
12
+ ogs_assert(clr_message);
13
+
14
+ /* Set NAS EPS Type */
15
+ mme_ue->nas_eps.type = MME_EPS_TYPE_DETACH_REQUEST_TO_UE;
16
+ ogs_debug(" OGS_NAS_EPS TYPE%d", mme_ue->nas_eps.type);
17
+
18
+ if (clr_message->clr_flags & OGS_DIAM_S6A_CLR_FLAGS_REATTACH_REQUIRED)
19
+ detach_type = OGS_NAS_DETACH_TYPE_TO_UE_RE_ATTACH_REQUIRED;
20
+ else
21
+ detach_type = OGS_NAS_DETACH_TYPE_TO_UE_RE_ATTACH_NOT_REQUIRED;
22
+
23
+ if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_de_registered)) {
24
+ /* Remove all trace of subscriber even when detached. */
25
+ mme_ue_hash_remove(mme_ue);
26
+ mme_ue_remove(mme_ue);
27
+ } else if (ECM_IDLE(mme_ue)) {
28
+ MME_STORE_PAGING_INFO(mme_ue,
29
+ MME_PAGING_TYPE_DETACH_TO_UE, (void *)(uintptr_t)detach_type);
30
+ ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
31
+ } else {
32
+ ogs_assert(OGS_OK == nas_eps_send_detach_request(mme_ue, detach_type));
33
+ }
34
+}
35
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
10
1
2
ogs_diam_s6a_aia_message_t *aia_message);
3
void mme_s6a_handle_ula(mme_ue_t *mme_ue,
4
ogs_diam_s6a_ula_message_t *ula_message);
5
+void mme_s6a_handle_clr(mme_ue_t *mme_ue,
6
+ ogs_diam_s6a_clr_message_t *clr_message);
7
8
#ifdef __cplusplus
9
}
10
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
87
1
2
s6a_message = e->s6a_message;
3
ogs_assert(s6a_message);
4
5
- enb_ue = enb_ue_cycle(mme_ue->enb_ue);
6
- if (!enb_ue) {
7
- ogs_error("S1 context has already been removed");
8
-
9
- ogs_subscription_data_free(
10
- &s6a_message->ula_message.subscription_data);
11
- ogs_free(s6a_message);
12
- break;
13
- }
14
+ if (s6a_message->during_attach) {
15
+ enb_ue = enb_ue_cycle(mme_ue->enb_ue);
16
+ if (!enb_ue) {
17
+ ogs_error("S1 context has already been removed");
18
+
19
+ ogs_subscription_data_free(
20
+ &s6a_message->ula_message.subscription_data);
21
+ ogs_free(s6a_message);
22
+ break;
23
+ }
24
25
- if (s6a_message->result_code != ER_DIAMETER_SUCCESS) {
26
- /* Unfortunately fd doesn't distinguish
27
- * between result-code and experimental-result-code.
28
- *
29
- * However, e.g. 5004 has different meaning
30
- * if used in result-code than in experimental-result-code */
31
- uint8_t emm_cause = emm_cause_from_diameter(
32
- mme_ue, s6a_message->err, s6a_message->exp_err);
33
-
34
- ogs_info("%s Attach reject OGS_NAS_EMM_CAUSE:%d",
35
- mme_ue->imsi_bcd, emm_cause);
36
- ogs_assert(OGS_OK ==
37
- nas_eps_send_attach_reject(mme_ue,
38
- emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
39
-
40
- ogs_assert(OGS_OK ==
41
- s1ap_send_ue_context_release_command(enb_ue,
42
- S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
43
- S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0));
44
-
45
- ogs_subscription_data_free(
46
- &s6a_message->ula_message.subscription_data);
47
- ogs_free(s6a_message);
48
- break;
49
+ if (s6a_message->result_code != ER_DIAMETER_SUCCESS) {
50
+ /* Unfortunately fd doesn't distinguish
51
+ * between result-code and experimental-result-code.
52
+ *
53
+ * However, e.g. 5004 has different meaning
54
+ * if used in result-code than in experimental-result-code */
55
+ uint8_t emm_cause = emm_cause_from_diameter(
56
+ mme_ue, s6a_message->err, s6a_message->exp_err);
57
+
58
+ ogs_info("%s Attach reject OGS_NAS_EMM_CAUSE:%d",
59
+ mme_ue->imsi_bcd, emm_cause);
60
+ ogs_assert(OGS_OK ==
61
+ nas_eps_send_attach_reject(mme_ue, emm_cause,
62
+ OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
63
+
64
+ ogs_assert(OGS_OK ==
65
+ s1ap_send_ue_context_release_command(enb_ue,
66
+ S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
67
+ S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0));
68
+
69
+ ogs_subscription_data_free(
70
+ &s6a_message->ula_message.subscription_data);
71
+ ogs_free(s6a_message);
72
+ break;
73
+ }
74
}
75
76
switch (s6a_message->cmd_code) {
77
78
ogs_assert_if_reached();
79
}
80
break;
81
+ case OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION:
82
+ mme_s6a_handle_clr(mme_ue, &s6a_message->clr_message);
83
+ break;
84
default:
85
ogs_error("Invalid Type%d", s6a_message->cmd_code);
86
break;
87
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
35
1
2
return rv;
3
}
4
5
+int nas_eps_send_detach_request(mme_ue_t *mme_ue, uint8_t detach_type)
6
+{
7
+ int rv;
8
+ ogs_pkbuf_t *emmbuf = NULL;
9
+
10
+ ogs_debug("%s Detach request to UE", mme_ue->imsi_bcd);
11
+
12
+ if (mme_ue->t3422.pkbuf) {
13
+ emmbuf = mme_ue->t3422.pkbuf;
14
+ ogs_expect_or_return_val(emmbuf, OGS_ERROR);
15
+ } else {
16
+ ogs_assert(detach_type);
17
+ emmbuf = emm_build_detach_request(mme_ue, detach_type);
18
+ ogs_expect_or_return_val(emmbuf, OGS_ERROR);
19
+ }
20
+
21
+ mme_ue->t3422.pkbuf = ogs_pkbuf_copy(emmbuf);
22
+ ogs_expect_or_return_val(mme_ue->t3422.pkbuf, OGS_ERROR);
23
+ ogs_timer_start(mme_ue->t3422.timer,
24
+ mme_timer_cfg(MME_TIMER_T3422)->duration);
25
+
26
+ rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf);
27
+ ogs_expect_or_return_val(rv == OGS_OK, rv);
28
+
29
+ return rv;
30
+}
31
+
32
int nas_eps_send_detach_accept(mme_ue_t *mme_ue)
33
{
34
int rv;
35
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
9
1
2
3
int nas_eps_send_security_mode_command(mme_ue_t *mme_ue);
4
5
+int nas_eps_send_detach_request(mme_ue_t *mme_ue, uint8_t detach_type);
6
int nas_eps_send_detach_accept(mme_ue_t *mme_ue);
7
8
int nas_eps_send_pdn_connectivity_reject(
9
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
19
1
2
}
3
}
4
5
- if (mme_ue->nas_eps.type != MME_EPS_TYPE_ATTACH_REQUEST)
6
- mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
7
-
8
- if (SMS_SERVICE_INDICATOR(mme_ue)) {
9
- ogs_assert(OGS_OK ==
10
- sgsap_send_service_request(mme_ue, SGSAP_EMM_CONNECTED_MODE));
11
- }
12
-
13
- CLEAR_SERVICE_INDICATOR(mme_ue);
14
+ if (MME_PAGING_ONGOING(mme_ue))
15
+ mme_send_after_paging(mme_ue, false);
16
}
17
18
void s1ap_handle_initial_context_setup_failure(
19
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
9
1
2
3
#include "mme-context.h"
4
5
-#include "sgsap-types.h"
6
#include "sgsap-build.h"
7
#include "sgsap-conv.h"
8
9
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
10
1
2
3
#include "mme-context.h"
4
5
+#include "sgsap-types.h"
6
+
7
#ifdef __cplusplus
8
extern "C" {
9
#endif
10
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
17
1
2
if (ECM_IDLE(mme_ue)) {
3
if (CS_CALL_SERVICE_INDICATOR(mme_ue)) {
4
/* UE will respond Extended Service Request in PS CNDomain*/
5
+ MME_STORE_PAGING_INFO(mme_ue,
6
+ MME_PAGING_TYPE_CS_CALL_SERVICE, NULL);
7
ogs_assert(OGS_OK ==
8
s1ap_send_paging(mme_ue, S1AP_CNDomain_cs));
9
10
} else if (SMS_SERVICE_INDICATOR(mme_ue)) {
11
/* UE will respond Service Request in PS CNDomain*/
12
+ MME_STORE_PAGING_INFO(mme_ue,
13
+ MME_PAGING_TYPE_SMS_SERVICE, NULL);
14
ogs_assert(OGS_OK ==
15
s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
16
} else
17
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
17
1
2
#include "mme-event.h"
3
#include "mme-sm.h"
4
5
-#include "sgsap-types.h"
6
-#include "sgsap-build.h"
7
#include "sgsap-path.h"
8
9
int sgsap_open()
10
11
ogs_expect(rv == OGS_OK);
12
13
return rv;
14
-}
15
\ No newline at end of file
16
+}
17
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
10
1
2
#include "mme-context.h"
3
#include "mme-event.h"
4
5
+#include "sgsap-build.h"
6
+
7
#ifdef __cplusplus
8
extern "C" {
9
#endif
10