Changes of Revision 137
commit_5f9b941d2543d7364c1d7bbf44af0f4dc7668017.txt
Deleted
commit_79f73fae2a68495f4e74318fb162b05cd79e5e0c.txt
Added
open5gs_2.6.0.8.5f9b.dsc -> open5gs_2.6.0.10.79f73.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-scp, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
Architecture: any
5
-Version: 2.6.0.8.5f9b
6
+Version: 2.6.0.10.79f73
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
- 5ba4456271794f84f5257896fa691ee797de8e14 13617004 open5gs_2.6.0.8.5f9b.tar.xz
15
+ bc76658e1d5552a84768f9433ea2bc77d9d99af4 13616644 open5gs_2.6.0.10.79f73.tar.xz
16
Checksums-Sha256:
17
- 5e516b4b381656180cae13990fe21bc7376f393a2acd7f60bd46fc1d2e49ab63 13617004 open5gs_2.6.0.8.5f9b.tar.xz
18
+ c5bf40462ac800bb800c9281cd0b983a21095e763f9cd648d1e08f175ba68515 13616644 open5gs_2.6.0.10.79f73.tar.xz
19
Files:
20
- 0babab4709531841a2196ee1d5919eff 13617004 open5gs_2.6.0.8.5f9b.tar.xz
21
+ 28cf2f0b72182d36cc7a7f51f9e702bd 13616644 open5gs_2.6.0.10.79f73.tar.xz
22
open5gs_2.6.0.8.5f9b.tar.xz/.tarball-version -> open5gs_2.6.0.10.79f73.tar.xz/.tarball-version
Changed
4
1
2
-2.6.0.8-5f9b
3
+2.6.0.10-79f73
4
open5gs_2.6.0.8.5f9b.tar.xz/debian/changelog -> open5gs_2.6.0.10.79f73.tar.xz/debian/changelog
Changed
12
1
2
-open5gs (2.6.0.8.5f9b) unstable; urgency=medium
3
+open5gs (2.6.0.10.79f73) unstable; urgency=medium
4
5
* Automatically generated changelog entry for building the Osmocom master feed
6
7
- -- Osmocom OBS scripts <info@osmocom.org> Mon, 30 Jan 2023 16:06:26 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org> Sat, 04 Feb 2023 12:05:29 +0000
9
10
open5gs (2.5.6) unstable; urgency=medium
11
12
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/context.h -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/context.h
Changed
20
1
2
} handover;
3
4
/* SubscriptionId of Subscription to Data Change Notification to UDM */
5
+#define UDM_SDM_SUBSCRIBED(__aMF) \
6
+ ((__aMF) && ((__aMF)->data_change_subscription_id))
7
char *data_change_subscription_id;
8
9
struct {
10
11
int amf_sess_xact_count(amf_ue_t *amf_ue);
12
int amf_sess_xact_state_count(amf_ue_t *amf_ue, int state);
13
14
+#define AMF_SESSION_RELEASE_PENDING(__aMF) \
15
+ (amf_ue_have_session_release_pending(__aMF) == true)
16
+
17
#define PDU_RES_SETUP_REQ_TRANSFER_NEEDED(__aMF) \
18
(amf_pdu_res_setup_req_transfer_needed(__aMF) == true)
19
bool amf_pdu_res_setup_req_transfer_needed(amf_ue_t *amf_ue);
20
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/gmm-handler.c -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/gmm-handler.c
Changed
47
1
2
int gmm_handle_deregistration_request(amf_ue_t *amf_ue,
3
ogs_nas_5gs_deregistration_request_from_ue_t *deregistration_request)
4
{
5
- int r;
6
+ int r, state, xact_count = 0;
7
ogs_nas_de_registration_type_t *de_registration_type = NULL;
8
9
ogs_assert(amf_ue);
10
11
12
ogs_info("%s SUCI", amf_ue->suci);
13
14
- amf_sbi_send_release_all_sessions(
15
- amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
16
+ xact_count = amf_sess_xact_count(amf_ue);
17
18
- if (ogs_list_count(&amf_ue->sess_list) == 0) {
19
- r = nas_5gs_send_de_registration_accept(amf_ue);
20
- ogs_expect(r == OGS_OK);
21
- ogs_assert(r != OGS_ERROR);
22
+ state = AMF_UE_INITIATED_DE_REGISTERED;
23
+ amf_sbi_send_release_all_sessions(amf_ue, state);
24
+
25
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
26
+ amf_sess_xact_count(amf_ue) == xact_count) {
27
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
28
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
29
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
30
+ amf_nudm_sdm_build_subscription_delete,
31
+ amf_ue, state, NULL));
32
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
33
+ ogs_assert(true ==
34
+ amf_ue_sbi_discover_and_send(
35
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
36
+ NULL,
37
+ amf_npcf_am_policy_control_build_delete,
38
+ amf_ue, state, NULL));
39
+ } else {
40
+ r = nas_5gs_send_de_registration_accept(amf_ue);
41
+ ogs_expect(r == OGS_OK);
42
+ ogs_assert(r != OGS_ERROR);
43
+ }
44
}
45
46
return OGS_OK;
47
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/gmm-sm.c -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/gmm-sm.c
Changed
670
1
2
END
3
break;
4
5
+ CASE(OGS_SBI_SERVICE_NAME_NUDM_SDM)
6
+ if ((sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) &&
7
+ (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED) &&
8
+ (sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT)) {
9
+ ogs_error("%s HTTP response error %d",
10
+ amf_ue->supi, sbi_message->res_status);
11
+ break;
12
+ }
13
+
14
+ SWITCH(sbi_message->h.resource.component1)
15
+ CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
16
+ CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
17
+ CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
18
+ ogs_warn("%s Ignore SBI message", amf_ue->supi);
19
+ break;
20
+
21
+ CASE(OGS_SBI_RESOURCE_NAME_SDM_SUBSCRIPTIONS)
22
+ SWITCH(sbi_message->h.method)
23
+ CASE(OGS_SBI_HTTP_METHOD_DELETE)
24
+ /*
25
+ * - AMF_UE_INITIATED_DE_REGISTERED
26
+ * 1. PDU session establishment request
27
+ * 2. PDUSessionResourceSetupRequest +
28
+ * PDU session establishment accept
29
+ * 3. PDUSessionResourceSetupResponse
30
+ * 4. Deregistration request
31
+ * 5. UEContextReleaseCommand
32
+ * 6. UEContextReleaseComplete
33
+ *
34
+ * - AMF_RELEASE_SM_CONTEXT_NO_STATE
35
+ * 1. PDU session release request
36
+ * 2. PDUSessionResourceReleaseCommand +
37
+ * PDU session release command
38
+ * 3. PDUSessionResourceReleaseREsponse
39
+ * 4. PDU session release complete
40
+ * 5. Deregistration request
41
+ * 6. UEContextReleaseCommand
42
+ * 7. UEContextReleaseComplete
43
+ */
44
+ if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
45
+ state == AMF_UE_INITIATED_DE_REGISTERED) {
46
+ if (amf_ue->data_change_subscription_id) {
47
+ ogs_free(amf_ue->data_change_subscription_id);
48
+ amf_ue->data_change_subscription_id = NULL;
49
+ }
50
+
51
+ ogs_assert(true ==
52
+ amf_ue_sbi_discover_and_send(
53
+ OGS_SBI_SERVICE_TYPE_NUDM_UECM, NULL,
54
+ amf_nudm_uecm_build_registration_delete,
55
+ amf_ue, state, NULL));
56
+ } else {
57
+ ogs_fatal("Invalid state %d", state);
58
+ ogs_assert_if_reached();
59
+ }
60
+ break;
61
+ DEFAULT
62
+ ogs_warn("%s Ignore invalid HTTP method %s",
63
+ amf_ue->suci, sbi_message->h.method);
64
+ END
65
+ break;
66
+
67
+ DEFAULT
68
+ ogs_error("Invalid resource name %s",
69
+ sbi_message->h.resource.component1);
70
+ ogs_assert_if_reached();
71
+ END
72
+ break;
73
+
74
CASE(OGS_SBI_SERVICE_NAME_NUDM_UECM)
75
if (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED &&
76
sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT &&
77
78
CASE(OGS_SBI_HTTP_METHOD_PATCH)
79
SWITCH(sbi_message->h.resource.component2)
80
CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS)
81
- if (amf_ue->data_change_subscription_id) {
82
- ogs_free(amf_ue->data_change_subscription_id);
83
- amf_ue->data_change_subscription_id = NULL;
84
- }
85
-
86
- if (state ==
87
- AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
88
- state ==
89
- AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
90
- amf_sbi_send_release_all_sessions(amf_ue, state);
91
- if ((ogs_list_count(&amf_ue->sess_list) == 0) &&
92
- (PCF_AM_POLICY_ASSOCIATED(amf_ue))) {
93
+ /*
94
+ * - AMF_UE_INITIATED_DE_REGISTERED
95
+ * 1. PDU session establishment request
96
+ * 2. PDUSessionResourceSetupRequest +
97
+ * PDU session establishment accept
98
+ * 3. PDUSessionResourceSetupResponse
99
+ * 4. Deregistration request
100
+ * 5. UEContextReleaseCommand
101
+ * 6. UEContextReleaseComplete
102
+ *
103
+ * - AMF_RELEASE_SM_CONTEXT_NO_STATE
104
+ * 1. PDU session release request
105
+ * 2. PDUSessionResourceReleaseCommand +
106
+ * PDU session release command
107
+ * 3. PDUSessionResourceReleaseREsponse
108
+ * 4. PDU session release complete
109
+ * 5. Deregistration request
110
+ * 6. UEContextReleaseCommand
111
+ * 7. UEContextReleaseComplete
112
+ */
113
+ if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
114
+ state == AMF_UE_INITIATED_DE_REGISTERED) {
115
+ if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
116
ogs_assert(true ==
117
amf_ue_sbi_discover_and_send(
118
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
119
NULL,
120
amf_npcf_am_policy_control_build_delete,
121
amf_ue, state, NULL));
122
+ } else {
123
+ r = nas_5gs_send_de_registration_accept(amf_ue);
124
+ ogs_expect(r == OGS_OK);
125
+ ogs_assert(r != OGS_ERROR);
126
}
127
} else {
128
- ogs_assert(true ==
129
- amf_ue_sbi_discover_and_send(
130
- OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
131
- amf_nausf_auth_build_authenticate_delete,
132
- amf_ue, state, NULL));
133
+ ogs_fatal("Invalid state %d", state);
134
+ ogs_assert_if_reached();
135
}
136
break;
137
DEFAULT
138
139
END
140
break;
141
142
- CASE(OGS_SBI_SERVICE_NAME_NUDM_SDM)
143
- if ((sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) &&
144
- (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED) &&
145
- (sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT)) {
146
- ogs_error("%s HTTP response error %d",
147
- amf_ue->supi, sbi_message->res_status);
148
- break;
149
- }
150
-
151
- SWITCH(sbi_message->h.resource.component1)
152
- CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
153
- CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
154
- CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
155
- ogs_warn("%s Ignore SBI message", amf_ue->supi);
156
- break;
157
-
158
- CASE(OGS_SBI_RESOURCE_NAME_SDM_SUBSCRIPTIONS)
159
- SWITCH(sbi_message->h.method)
160
- CASE(OGS_SBI_HTTP_METHOD_DELETE)
161
- ogs_assert(true ==
162
- amf_ue_sbi_discover_and_send(
163
- OGS_SBI_SERVICE_TYPE_NUDM_UECM, NULL,
164
- amf_nudm_uecm_build_registration_delete,
165
- amf_ue, state, NULL));
166
- break;
167
- DEFAULT
168
- ogs_warn("%s Ignore invalid HTTP method %s",
169
- amf_ue->suci, sbi_message->h.method);
170
- END
171
- break;
172
-
173
- DEFAULT
174
- ogs_error("Invalid resource name %s",
175
- sbi_message->h.resource.component1);
176
- ogs_assert_if_reached();
177
- END
178
- break;
179
-
180
CASE(OGS_SBI_SERVICE_NAME_NPCF_AM_POLICY_CONTROL)
181
SWITCH(sbi_message->h.resource.component0)
182
CASE(OGS_SBI_RESOURCE_NAME_POLICIES)
183
184
break;
185
186
CASE(OGS_SBI_HTTP_METHOD_DELETE)
187
- if (state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED) {
188
- ogs_warn("%s Implicit De-registered", amf_ue->supi);
189
- OGS_FSM_TRAN(&amf_ue->sm,
190
- &gmm_state_ue_context_will_remove);
191
-
192
- } else if (state ==
193
- AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
194
- ogs_warn("%s Explicit De-registered", amf_ue->supi);
195
-
196
- amf_ue->explict_de_registered.sbi_done = true;
197
-
198
- if (amf_ue->explict_de_registered.n1_done == true) {
199
- r = ngap_send_ran_ue_context_release_command(
200
- amf_ue->ran_ue,
201
- NGAP_Cause_PR_misc,
202
- NGAP_CauseMisc_om_intervention,
203
- NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
204
- ogs_expect(r == OGS_OK);
205
- ogs_assert(r != OGS_ERROR);
206
- }
207
-
208
- } else {
209
+ /*
210
+ * - AMF_UE_INITIATED_DE_REGISTERED
211
+ * 1. PDU session establishment request
212
+ * 2. PDUSessionResourceSetupRequest +
213
+ * PDU session establishment accept
214
+ * 3. PDUSessionResourceSetupResponse
215
+ * 4. Deregistration request
216
+ * 5. UEContextReleaseCommand
217
+ * 6. UEContextReleaseComplete
218
+ *
219
+ * - AMF_RELEASE_SM_CONTEXT_NO_STATE
220
+ * 1. PDU session release request
221
+ * 2. PDUSessionResourceReleaseCommand +
222
+ * PDU session release command
223
+ * 3. PDUSessionResourceReleaseREsponse
224
+ * 4. PDU session release complete
225
+ * 5. Deregistration request
226
+ * 6. UEContextReleaseCommand
227
+ * 7. UEContextReleaseComplete
228
+ */
229
+ if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
230
+ state == AMF_UE_INITIATED_DE_REGISTERED) {
231
r = nas_5gs_send_de_registration_accept(amf_ue);
232
ogs_expect(r == OGS_OK);
233
ogs_assert(r != OGS_ERROR);
234
235
PCF_AM_POLICY_CLEAR(amf_ue);
236
+ } else {
237
+ ogs_fatal("Invalid state %d", state);
238
+ ogs_assert_if_reached();
239
}
240
break;
241
242
243
244
void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
245
{
246
- int i, r;
247
+ int i, r, state, xact_count = 0;
248
249
amf_ue_t *amf_ue = NULL;
250
amf_sess_t *sess = NULL;
251
252
}
253
break;
254
255
+ case AMF_TIMER_T3522:
256
+ if (amf_ue->t3522.retry_count >=
257
+ amf_timer_cfg(AMF_TIMER_T3522)->max_count) {
258
+ ogs_warn("Retransmission of Deregistration-Request failed. "
259
+ "Stop retransmission");
260
+ CLEAR_AMF_UE_TIMER(amf_ue->t3522);
261
+ OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception);
262
+ } else {
263
+ amf_ue->t3522.retry_count++;
264
+ r = nas_5gs_send_de_registration_request(amf_ue,
265
+ OpenAPI_deregistration_reason_NULL, 0);
266
+ ogs_expect(r == OGS_OK);
267
+ ogs_assert(r != OGS_ERROR);
268
+ }
269
+ break;
270
+
271
case AMF_TIMER_T3555:
272
if (amf_ue->t3555.retry_count >=
273
amf_timer_cfg(AMF_TIMER_T3555)->max_count) {
274
275
276
ogs_info("%s Do Network-initiated De-register UE", amf_ue->supi);
277
278
- ogs_assert(true == amf_ue_sbi_discover_and_send(
279
- OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
280
- amf_nudm_sdm_build_subscription_delete,
281
- amf_ue,
282
- AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED, NULL));
283
+ state = AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED;
284
285
- OGS_FSM_TRAN(s, &gmm_state_de_registered);
286
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
287
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
288
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
289
+ amf_nudm_sdm_build_subscription_delete,
290
+ amf_ue, state, NULL));
291
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
292
+ ogs_assert(true ==
293
+ amf_ue_sbi_discover_and_send(
294
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
295
+ NULL,
296
+ amf_npcf_am_policy_control_build_delete,
297
+ amf_ue, state, NULL));
298
+ }
299
break;
300
default:
301
ogs_error("Unknown timer%s:%d",
302
303
case OGS_EVENT_SBI_CLIENT:
304
sbi_message = e->h.sbi.message;
305
ogs_assert(sbi_message);
306
+ state = e->h.sbi.state;
307
308
- ogs_error("Invalid service name %s", sbi_message->h.service.name);
309
- ogs_assert_if_reached();
310
+ xact_count = amf_sess_xact_count(amf_ue);
311
+
312
+ SWITCH(sbi_message->h.service.name)
313
+ CASE(OGS_SBI_SERVICE_NAME_NAUSF_AUTH)
314
+ SWITCH(sbi_message->h.resource.component0)
315
+ CASE(OGS_SBI_RESOURCE_NAME_UE_AUTHENTICATIONS)
316
+
317
+ if (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED &&
318
+ sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK &&
319
+ sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT) {
320
+ if (sbi_message->res_status ==
321
+ OGS_SBI_HTTP_STATUS_NOT_FOUND) {
322
+ ogs_warn("%s Cannot find SUCI %d",
323
+ amf_ue->suci, sbi_message->res_status);
324
+ } else {
325
+ ogs_error("%s HTTP response error %d",
326
+ amf_ue->suci, sbi_message->res_status);
327
+ }
328
+ break;
329
+ }
330
+
331
+ SWITCH(sbi_message->h.method)
332
+ CASE(OGS_SBI_HTTP_METHOD_POST)
333
+ ogs_warn("%s Ignore SBI message", amf_ue->suci);
334
+ break;
335
+ CASE(OGS_SBI_HTTP_METHOD_PUT)
336
+ ogs_warn("%s Ignore SBI message", amf_ue->suci);
337
+ break;
338
+ CASE(OGS_SBI_HTTP_METHOD_DELETE)
339
+ if (amf_ue->confirmation_url_for_5g_aka)
340
+ ogs_free(amf_ue->confirmation_url_for_5g_aka);
341
+ amf_ue->confirmation_url_for_5g_aka = NULL;
342
+ break;
343
+ DEFAULT
344
+ ogs_error("%s Invalid HTTP method %s",
345
+ amf_ue->suci, sbi_message->h.method);
346
+ ogs_assert_if_reached();
347
+ END
348
+ break;
349
+
350
+ CASE(OGS_SBI_RESOURCE_NAME_5G_AKA)
351
+ CASE(OGS_SBI_RESOURCE_NAME_5G_AKA_CONFIRMATION)
352
+ CASE(OGS_SBI_RESOURCE_NAME_EAP_SESSION)
353
+ ogs_warn("%s Ignore SBI message", amf_ue->supi);
354
+ break;
355
+
356
+ DEFAULT
357
+ ogs_error("Invalid resource name %s",
358
+ sbi_message->h.resource.component0);
359
+ ogs_assert_if_reached();
360
+ END
361
+ break;
362
+
363
+ CASE(OGS_SBI_SERVICE_NAME_NUDM_SDM)
364
+ if ((sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) &&
365
+ (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED) &&
366
+ (sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT)) {
367
+ ogs_error("%s HTTP response error %d",
368
+ amf_ue->supi, sbi_message->res_status);
369
+ break;
370
+ }
371
+
372
+ SWITCH(sbi_message->h.resource.component1)
373
+ CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
374
+ CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
375
+ CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
376
+ ogs_warn("%s Ignore SBI message", amf_ue->supi);
377
+ break;
378
+
379
+ CASE(OGS_SBI_RESOURCE_NAME_SDM_SUBSCRIPTIONS)
380
+ SWITCH(sbi_message->h.method)
381
+ CASE(OGS_SBI_HTTP_METHOD_DELETE)
382
+ /*
383
+ * - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
384
+ * 1. Implicit Timer Expiration
385
+ * 2. UDM_SDM_Unsubscribe
386
+ * 3. UDM_UECM_Deregisration
387
+ * 4. PDU session release request
388
+ * 5. PDUSessionResourceReleaseCommand +
389
+ * PDU session release command
390
+ * 6. PDUSessionResourceReleaseResponse
391
+ * 7. AM_Policy_Association_Termination
392
+ *
393
+ * - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
394
+ * 1. UDM_UECM_DeregistrationNotification
395
+ * 2. Deregistration request
396
+ * 3. UDM_SDM_Unsubscribe
397
+ * 4. UDM_UECM_Deregisration
398
+ * 5. PDU session release request
399
+ * 6. PDUSessionResourceReleaseCommand +
400
+ * PDU session release command
401
+ * 7. PDUSessionResourceReleaseResponse
402
+ * 8. AM_Policy_Association_Termination
403
+ * 9. Deregistration accept
404
+ * 10. Signalling Connecion Release
405
+ */
406
+ if (state ==
407
+ AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
408
+ state ==
409
+ AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
410
+ if (amf_ue->data_change_subscription_id) {
411
+ ogs_free(amf_ue->data_change_subscription_id);
412
+ amf_ue->data_change_subscription_id = NULL;
413
+ }
414
+
415
+ ogs_assert(true ==
416
+ amf_ue_sbi_discover_and_send(
417
+ OGS_SBI_SERVICE_TYPE_NUDM_UECM, NULL,
418
+ amf_nudm_uecm_build_registration_delete,
419
+ amf_ue, state, NULL));
420
+ } else {
421
+ ogs_fatal("Invalid state %d", state);
422
+ ogs_assert_if_reached();
423
+ }
424
+ break;
425
+ DEFAULT
426
+ ogs_warn("%s Ignore invalid HTTP method %s",
427
+ amf_ue->suci, sbi_message->h.method);
428
+ END
429
+ break;
430
+
431
+ DEFAULT
432
+ ogs_error("Invalid resource name %s",
433
+ sbi_message->h.resource.component1);
434
+ ogs_assert_if_reached();
435
+ END
436
+ break;
437
+
438
+ CASE(OGS_SBI_SERVICE_NAME_NUDM_UECM)
439
+ if (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED &&
440
+ sbi_message->res_status != OGS_SBI_HTTP_STATUS_NO_CONTENT &&
441
+ sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) {
442
+ ogs_error("%s HTTP response error %d",
443
+ amf_ue->supi, sbi_message->res_status);
444
+ break;
445
+ }
446
+
447
+ SWITCH(sbi_message->h.resource.component1)
448
+ CASE(OGS_SBI_RESOURCE_NAME_REGISTRATIONS)
449
+ SWITCH(sbi_message->h.method)
450
+ CASE(OGS_SBI_HTTP_METHOD_PUT)
451
+ ogs_warn("%s Ignore SBI message", amf_ue->supi);
452
+ break;
453
+ CASE(OGS_SBI_HTTP_METHOD_PATCH)
454
+ SWITCH(sbi_message->h.resource.component2)
455
+ CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS)
456
+ /*
457
+ * - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
458
+ * 1. Implicit Timer Expiration
459
+ * 2. UDM_SDM_Unsubscribe
460
+ * 3. UDM_UECM_Deregisration
461
+ * 4. PDU session release request
462
+ * 5. PDUSessionResourceReleaseCommand +
463
+ * PDU session release command
464
+ * 6. PDUSessionResourceReleaseResponse
465
+ * 7. AM_Policy_Association_Termination
466
+ *
467
+ * - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
468
+ * 1. UDM_UECM_DeregistrationNotification
469
+ * 2. Deregistration request
470
+ * 3. UDM_SDM_Unsubscribe
471
+ * 4. UDM_UECM_Deregisration
472
+ * 5. PDU session release request
473
+ * 6. PDUSessionResourceReleaseCommand +
474
+ * PDU session release command
475
+ * 7. PDUSessionResourceReleaseResponse
476
+ * 8. AM_Policy_Association_Termination
477
+ * 9. Deregistration accept
478
+ * 10. Signalling Connecion Release
479
+ */
480
+ if (state ==
481
+ AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
482
+ state ==
483
+ AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
484
+
485
+ amf_sbi_send_release_all_sessions(amf_ue, state);
486
+
487
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
488
+ amf_sess_xact_count(amf_ue) == xact_count) {
489
+ if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
490
+ ogs_assert(true ==
491
+ amf_ue_sbi_discover_and_send(
492
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
493
+ NULL,
494
+ amf_npcf_am_policy_control_build_delete,
495
+ amf_ue, state, NULL));
496
+ }
497
+ }
498
+ } else {
499
+ ogs_fatal("Invalid state %d", state);
500
+ ogs_assert_if_reached();
501
+ }
502
+ break;
503
+ DEFAULT
504
+ ogs_warn("Ignoring invalid resource name %s",
505
+ sbi_message->h.resource.component2);
506
+ END
507
+ break;
508
+
509
+ DEFAULT
510
+ ogs_error("%s Invalid HTTP method %s",
511
+ amf_ue->suci, sbi_message->h.method);
512
+ ogs_assert_if_reached();
513
+ END
514
+ break;
515
+
516
+ DEFAULT
517
+ ogs_error("Invalid resource name %s",
518
+ sbi_message->h.resource.component1);
519
+ ogs_assert_if_reached();
520
+ END
521
+ break;
522
+
523
+ CASE(OGS_SBI_SERVICE_NAME_NPCF_AM_POLICY_CONTROL)
524
+ SWITCH(sbi_message->h.resource.component0)
525
+ CASE(OGS_SBI_RESOURCE_NAME_POLICIES)
526
+ SWITCH(sbi_message->h.method)
527
+ CASE(OGS_SBI_HTTP_METHOD_POST)
528
+ ogs_warn("%s Ignore SBI message", amf_ue->suci);
529
+ break;
530
+
531
+ CASE(OGS_SBI_HTTP_METHOD_DELETE)
532
+ /*
533
+ * - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
534
+ * 1. Implicit Timer Expiration
535
+ * 2. UDM_SDM_Unsubscribe
536
+ * 3. UDM_UECM_Deregisration
537
+ * 4. PDU session release request
538
+ * 5. PDUSessionResourceReleaseCommand +
539
+ * PDU session release command
540
+ * 6. PDUSessionResourceReleaseResponse
541
+ * 7. AM_Policy_Association_Termination
542
+ *
543
+ * - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
544
+ * 1. UDM_UECM_DeregistrationNotification
545
+ * 2. Deregistration request
546
+ * 3. UDM_SDM_Unsubscribe
547
+ * 4. UDM_UECM_Deregisration
548
+ * 5. PDU session release request
549
+ * 6. PDUSessionResourceReleaseCommand +
550
+ * PDU session release command
551
+ * 7. PDUSessionResourceReleaseResponse
552
+ * 8. AM_Policy_Association_Termination
553
+ * 9. Deregistration accept
554
+ * 10.Signalling Connecion Release
555
+ */
556
+ if (state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED) {
557
+ ogs_warn("%s Implicit De-registered", amf_ue->supi);
558
+ OGS_FSM_TRAN(&amf_ue->sm,
559
+ &gmm_state_ue_context_will_remove);
560
+
561
+ } else if (state ==
562
+ AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
563
+ ogs_warn("%s Explicit De-registered", amf_ue->supi);
564
+
565
+ amf_ue->explict_de_registered.sbi_done = true;
566
+
567
+ if (amf_ue->explict_de_registered.n1_done == true) {
568
+ r = ngap_send_ran_ue_context_release_command(
569
+ amf_ue->ran_ue,
570
+ NGAP_Cause_PR_misc,
571
+ NGAP_CauseMisc_om_intervention,
572
+ NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
573
+ ogs_expect(r == OGS_OK);
574
+ ogs_assert(r != OGS_ERROR);
575
+ }
576
+
577
+ } else {
578
+ ogs_fatal("Invalid state %d", state);
579
+ ogs_assert_if_reached();
580
+ }
581
+ break;
582
+
583
+ DEFAULT
584
+ ogs_error("Unknown method %s", sbi_message->h.method);
585
+ ogs_assert_if_reached();
586
+ END
587
+ break;
588
+
589
+ DEFAULT
590
+ ogs_error("Invalid resource name %s",
591
+ sbi_message->h.resource.component0);
592
+ ogs_assert_if_reached();
593
+ END
594
+ break;
595
+
596
+ DEFAULT
597
+ ogs_error("Invalid service name %s", sbi_message->h.service.name);
598
+ ogs_assert_if_reached();
599
+ END
600
break;
601
602
default:
603
604
605
amf_sbi_send_release_all_sessions(
606
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
607
- if (amf_sess_xact_count(amf_ue) == xact_count) {
608
+
609
+ if (ogs_list_count(&amf_ue->sess_list) == 0) {
610
ogs_assert(true ==
611
amf_ue_sbi_discover_and_send(
612
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
613
614
615
amf_sbi_send_release_all_sessions(
616
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
617
- if (amf_sess_xact_count(amf_ue) == xact_count) {
618
+
619
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
620
+ amf_sess_xact_count(amf_ue) == xact_count) {
621
ogs_assert(true ==
622
amf_ue_sbi_discover_and_send(
623
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
624
625
626
h.type = e->nas.type;
627
628
+ xact_count = amf_sess_xact_count(amf_ue);
629
+
630
switch (nas_message->gmm.h.message_type) {
631
case OGS_NAS_5GS_REGISTRATION_COMPLETE:
632
ogs_info("%s Registration complete", amf_ue->supi);
633
634
635
amf_sbi_send_release_all_sessions(
636
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
637
- if (amf_sess_xact_count(amf_ue) == xact_count) {
638
+
639
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
640
+ amf_sess_xact_count(amf_ue) == xact_count) {
641
ogs_assert(true ==
642
amf_ue_sbi_discover_and_send(
643
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
644
645
AMF_UE_CLEAR_5GSM_MESSAGE(amf_ue);
646
CLEAR_AMF_UE_ALL_TIMERS(amf_ue);
647
648
+ xact_count = amf_sess_xact_count(amf_ue);
649
+
650
amf_sbi_send_release_all_sessions(
651
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
652
653
- if (ogs_list_count(&amf_ue->sess_list) == 0) {
654
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
655
+ amf_sess_xact_count(amf_ue) == xact_count) {
656
r = ngap_send_amf_ue_context_release_command(amf_ue,
657
NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
658
NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
659
660
661
amf_sbi_send_release_all_sessions(
662
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
663
- if (amf_sess_xact_count(amf_ue) == xact_count) {
664
+
665
+ if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
666
+ amf_sess_xact_count(amf_ue) == xact_count) {
667
ogs_assert(true ==
668
amf_ue_sbi_discover_and_send(
669
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
670
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/namf-handler.c -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/namf-handler.c
Changed
166
1
2
int amf_namf_callback_handle_dereg_notify(
3
ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg)
4
{
5
- int r, status = OGS_SBI_HTTP_STATUS_NO_CONTENT;
6
+ int r, state, status = OGS_SBI_HTTP_STATUS_NO_CONTENT;
7
8
amf_ue_t *amf_ue = NULL;
9
10
11
goto cleanup;
12
}
13
14
- if (DeregistrationData->access_type != OpenAPI_access_type_3GPP_ACCESS)
15
- {
16
+ if (DeregistrationData->dereg_reason ==
17
+ OpenAPI_deregistration_reason_NULL) {
18
+ status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
19
+ ogs_error("%s No Deregistraion Reason ", amf_ue->supi);
20
+ goto cleanup;
21
+ }
22
+
23
+ if (DeregistrationData->access_type != OpenAPI_access_type_3GPP_ACCESS) {
24
status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
25
ogs_error("%s Deregistration access type not 3GPP", amf_ue->supi);
26
goto cleanup;
27
28
* Deregistration procedure. In this case, the AMF performs network requested PDU Session Release for any PDU
29
* session associated with non-emergency service as described in clause 4.3.4.
30
*/
31
+
32
+ /*
33
+ * - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
34
+ * 1. UDM_UECM_DeregistrationNotification
35
+ * 2. Deregistration request
36
+ * 3. UDM_SDM_Unsubscribe
37
+ * 4. UDM_UECM_Deregisration
38
+ * 5. PDU session release request
39
+ * 6. PDUSessionResourceReleaseCommand +
40
+ * PDU session release command
41
+ * 7. PDUSessionResourceReleaseResponse
42
+ * 8. AM_Policy_Association_Termination
43
+ * 9. Deregistration accept
44
+ * 10. Signalling Connecion Release
45
+ */
46
if (CM_CONNECTED(amf_ue)) {
47
r = nas_5gs_send_de_registration_request(
48
amf_ue,
49
50
ogs_expect(r == OGS_OK);
51
ogs_assert(r != OGS_ERROR);
52
53
- ogs_assert(true == amf_ue_sbi_discover_and_send(
54
- OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
55
- amf_nudm_sdm_build_subscription_delete,
56
- amf_ue,
57
- AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED, NULL));
58
+ state = AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED;
59
+
60
} else if (CM_IDLE(amf_ue)) {
61
ogs_error("Not implemented : Use Implicit De-registration");
62
63
- ogs_assert(true == amf_ue_sbi_discover_and_send(
64
- OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
65
- amf_nudm_sdm_build_subscription_delete,
66
- amf_ue,
67
- AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED, NULL));
68
+ state = AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED;
69
+
70
} else {
71
ogs_fatal("Invalid State");
72
ogs_assert_if_reached();
73
}
74
75
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
76
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
77
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
78
+ amf_nudm_sdm_build_subscription_delete,
79
+ amf_ue, state, NULL));
80
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
81
+ ogs_assert(true ==
82
+ amf_ue_sbi_discover_and_send(
83
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
84
+ NULL,
85
+ amf_npcf_am_policy_control_build_delete,
86
+ amf_ue, state, NULL));
87
+ }
88
+
89
cleanup:
90
memset(&sendmsg, 0, sizeof(sendmsg));
91
92
93
int amf_namf_callback_handle_sdm_data_change_notify(
94
ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg)
95
{
96
- int status = OGS_SBI_HTTP_STATUS_NO_CONTENT;
97
- int r;
98
+ int r, state, status = OGS_SBI_HTTP_STATUS_NO_CONTENT;
99
100
amf_ue_t *amf_ue = NULL;
101
102
103
}
104
105
if (amf_ue_is_rat_restricted(amf_ue)) {
106
+ /*
107
+ * - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
108
+ * 1. UDM_UECM_DeregistrationNotification
109
+ * 2. Deregistration request
110
+ * 3. UDM_SDM_Unsubscribe
111
+ * 4. UDM_UECM_Deregisration
112
+ * 5. PDU session release request
113
+ * 6. PDUSessionResourceReleaseCommand +
114
+ * PDU session release command
115
+ * 7. PDUSessionResourceReleaseResponse
116
+ * 8. AM_Policy_Association_Termination
117
+ * 9. Deregistration accept
118
+ * 10. Signalling Connecion Release
119
+ */
120
if (CM_CONNECTED(amf_ue)) {
121
r = nas_5gs_send_de_registration_request(
122
amf_ue,
123
124
ogs_expect(r == OGS_OK);
125
ogs_assert(r != OGS_ERROR);
126
127
- ogs_assert(true == amf_ue_sbi_discover_and_send(
128
- OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
129
- amf_nudm_sdm_build_subscription_delete,
130
- amf_ue,
131
- AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED, NULL));
132
+ state = AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED;
133
+
134
} else if (CM_IDLE(amf_ue)) {
135
ogs_error("Not implemented : Use Implicit De-registration");
136
137
- ogs_assert(true == amf_ue_sbi_discover_and_send(
138
- OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
139
- amf_nudm_sdm_build_subscription_delete,
140
- amf_ue,
141
- AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED, NULL));
142
+ state = AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED;
143
+
144
} else {
145
ogs_fatal("Invalid State");
146
ogs_assert_if_reached();
147
}
148
149
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
150
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
151
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
152
+ amf_nudm_sdm_build_subscription_delete,
153
+ amf_ue, state, NULL));
154
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
155
+ ogs_assert(true ==
156
+ amf_ue_sbi_discover_and_send(
157
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
158
+ NULL,
159
+ amf_npcf_am_policy_control_build_delete,
160
+ amf_ue, state, NULL));
161
+ }
162
+
163
} else if (ambr_changed) {
164
ogs_pkbuf_t *ngapbuf;
165
166
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/nsmf-handler.c -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/nsmf-handler.c
Changed
191
1
2
/* Not reached here */
3
ogs_assert_if_reached();
4
5
- } else if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
6
- state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
7
- state == AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
8
- /* NO_STATE */
9
+ } else if (state == AMF_UE_INITIATED_DE_REGISTERED) {
10
11
- if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_authentication)) {
12
+ if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) {
13
+ /*
14
+ * 1. PDU session establishment request
15
+ * 2. PDUSessionResourceSetupRequest +
16
+ * PDU session establishment accept
17
+ * 3. PDUSessionResourceSetupResponse
18
+ * 4. Deregistration request
19
+ * 5. UEContextReleaseCommand
20
+ * 6. UEContextReleaseComplete
21
+ */
22
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
23
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
24
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
25
+ amf_nudm_sdm_build_subscription_delete,
26
+ amf_ue, state, NULL));
27
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
28
+ ogs_assert(true ==
29
+ amf_ue_sbi_discover_and_send(
30
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
31
+ NULL,
32
+ amf_npcf_am_policy_control_build_delete,
33
+ amf_ue, state, NULL));
34
+ } else {
35
+ r = nas_5gs_send_de_registration_accept(amf_ue);
36
+ ogs_expect(r == OGS_OK);
37
+ ogs_assert(r != OGS_ERROR);
38
+ }
39
40
- ogs_assert(true ==
41
- amf_ue_sbi_discover_and_send(
42
- OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
43
- amf_nausf_auth_build_authenticate,
44
- amf_ue, 0, NULL));
45
+ } else if (OGS_FSM_CHECK(&amf_ue->sm,
46
+ gmm_state_authentication)) {
47
+ ogs_fatal("Release SM Context in authentication");
48
+ ogs_assert_if_reached();
49
+ } else if (OGS_FSM_CHECK(
50
+ &amf_ue->sm, gmm_state_security_mode)) {
51
+ ogs_fatal("Release SM Context in security-mode");
52
+ ogs_assert_if_reached();
53
+ } else if (OGS_FSM_CHECK(&amf_ue->sm,
54
+ gmm_state_initial_context_setup)) {
55
+ ogs_fatal("Release SM Context in initial-context-setup");
56
+ ogs_assert_if_reached();
57
+ } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
58
+ ogs_fatal("Release SM Context in registered");
59
+ ogs_assert_if_reached();
60
+ } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_exception)) {
61
+ ogs_fatal("Release SM Context in exception");
62
+ ogs_assert_if_reached();
63
+ } else {
64
+ ogs_fatal("Release SM Context : INVALID STATE");
65
+ ogs_assert_if_reached();
66
+ }
67
+
68
+ } else if (state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
69
+ state == AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
70
71
+ if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) {
72
+ ogs_fatal("Release SM Context in de-registered");
73
+ ogs_assert_if_reached();
74
} else if (OGS_FSM_CHECK(&amf_ue->sm,
75
- gmm_state_de_registered)) {
76
+ gmm_state_authentication)) {
77
+ ogs_fatal("Release SM Context in authentication");
78
+ ogs_assert_if_reached();
79
+ } else if (OGS_FSM_CHECK(
80
+ &amf_ue->sm, gmm_state_security_mode)) {
81
+ ogs_fatal("Release SM Context in security-mode");
82
+ ogs_assert_if_reached();
83
+ } else if (OGS_FSM_CHECK(&amf_ue->sm,
84
+ gmm_state_initial_context_setup)) {
85
+ ogs_fatal("Release SM Context in initial-context-setup");
86
+ ogs_assert_if_reached();
87
+ } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
88
+ /*
89
+ * 1. Network-Initiated Implict-Explicit De-Registered
90
+ * 5. Deregistration request
91
+ * 5. Deregistration accept
92
+ * 6. UEContextReleaseCommand
93
+ * 7. UEContextReleaseComplete
94
+ */
95
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
96
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
97
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
98
+ amf_nudm_sdm_build_subscription_delete,
99
+ amf_ue, state, NULL));
100
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
101
+ ogs_assert(true ==
102
+ amf_ue_sbi_discover_and_send(
103
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
104
+ NULL,
105
+ amf_npcf_am_policy_control_build_delete,
106
+ amf_ue, state, NULL));
107
+ }
108
+
109
+ } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_exception)) {
110
+ ogs_fatal("Release SM Context in exception");
111
+ ogs_assert_if_reached();
112
+ } else {
113
+ ogs_fatal("Release SM Context : INVALID STATE");
114
+ ogs_assert_if_reached();
115
+ }
116
+ } else if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE) {
117
+ /* NO_STATE */
118
+
119
+ if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) {
120
/*
121
* 1. PDU session release request
122
* 2. PDUSessionResourceReleaseCommand +
123
124
* 6. UEContextReleaseCommand
125
* 7. UEContextReleaseComplete
126
*/
127
+ if (UDM_SDM_SUBSCRIBED(amf_ue)) {
128
+ ogs_assert(true == amf_ue_sbi_discover_and_send(
129
+ OGS_SBI_SERVICE_TYPE_NUDM_SDM, NULL,
130
+ amf_nudm_sdm_build_subscription_delete,
131
+ amf_ue, state, NULL));
132
+ } else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
133
+ ogs_assert(true ==
134
+ amf_ue_sbi_discover_and_send(
135
+ OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
136
+ NULL,
137
+ amf_npcf_am_policy_control_build_delete,
138
+ amf_ue, state, NULL));
139
+ } else {
140
+ r = nas_5gs_send_de_registration_accept(amf_ue);
141
+ ogs_expect(r == OGS_OK);
142
+ ogs_assert(r != OGS_ERROR);
143
+ }
144
+ } else if (OGS_FSM_CHECK(&amf_ue->sm,
145
+ gmm_state_authentication)) {
146
147
ogs_assert(true ==
148
amf_ue_sbi_discover_and_send(
149
- OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL, NULL,
150
- amf_npcf_am_policy_control_build_delete,
151
- amf_ue, state, NULL));
152
+ OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
153
+ amf_nausf_auth_build_authenticate,
154
+ amf_ue, 0, NULL));
155
156
+ } else if (OGS_FSM_CHECK(
157
+ &amf_ue->sm, gmm_state_security_mode)) {
158
+ ogs_fatal("Release SM Context in security-mode");
159
+ ogs_assert_if_reached();
160
+ } else if (OGS_FSM_CHECK(&amf_ue->sm,
161
+ gmm_state_initial_context_setup)) {
162
+ ogs_fatal("Release SM Context in initial-context-setup");
163
+ ogs_assert_if_reached();
164
} else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
165
/*
166
* 1. PDU session release request
167
168
* 3. PDUSessionResourceReleaseREsponse
169
* 4. PDU session release complete
170
*
171
- * No Deregistration request in the above step
172
- *
173
* So, Nothing to do!
174
*/
175
} else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_exception)) {
176
177
ogs_expect(r == OGS_OK);
178
ogs_assert(r != OGS_ERROR);
179
180
- } else if (OGS_FSM_CHECK(&amf_ue->sm,
181
- gmm_state_initial_context_setup)) {
182
- ogs_fatal("Release SM Context in initial-context-setup");
183
- ogs_assert_if_reached();
184
- } else if (OGS_FSM_CHECK(
185
- &amf_ue->sm, gmm_state_security_mode)) {
186
- ogs_fatal("Release SM Context in security-mode");
187
- ogs_assert_if_reached();
188
} else {
189
ogs_fatal("Release SM Context : INVALID STATE");
190
ogs_assert_if_reached();
191
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/sbi-path.c -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/sbi-path.c
Changed
42
1
2
3
return rc;
4
}
5
+
6
+bool amf_ue_have_session_release_pending(amf_ue_t *amf_ue)
7
+{
8
+ amf_sess_t *sess = NULL;
9
+
10
+ ogs_assert(amf_ue);
11
+
12
+ ogs_list_for_each(&amf_ue->sess_list, sess) {
13
+ if (amf_sess_have_session_release_pending(sess) == true)
14
+ return true;
15
+ }
16
+
17
+ return false;
18
+}
19
+
20
+bool amf_sess_have_session_release_pending(amf_sess_t *sess)
21
+{
22
+ ogs_sbi_xact_t *xact = NULL;
23
+
24
+ ogs_assert(sess);
25
+
26
+ ogs_list_for_each(&sess->sbi.xact_list, xact) {
27
+ if (xact->state == AMF_UPDATE_SM_CONTEXT_N1_RELEASED)
28
+ return true;
29
+ if (xact->state == AMF_UPDATE_SM_CONTEXT_N2_RELEASED)
30
+ return true;
31
+ }
32
+
33
+ if (sess->n1_released == true)
34
+ return true;
35
+ if (sess->n2_released == true)
36
+ return true;
37
+ if (sess->resource_status == OpenAPI_resource_status_RELEASED)
38
+ return true;
39
+
40
+ return false;
41
+}
42
open5gs_2.6.0.8.5f9b.tar.xz/src/amf/sbi-path.h -> open5gs_2.6.0.10.79f73.tar.xz/src/amf/sbi-path.h
Changed
23
1
2
3
#define AMF_CREATE_SM_CONTEXT_NO_STATE 0
4
5
-#define AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED 1
6
-#define AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED 2
7
+#define AMF_UE_INITIATED_DE_REGISTERED 1
8
+#define AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED 2
9
+#define AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED 3
10
11
#define AMF_UPDATE_SM_CONTEXT_ACTIVATED 11
12
#define AMF_UPDATE_SM_CONTEXT_SETUP_FAIL 12
13
14
bool amf_sbi_send_n1_n2_failure_notify(
15
amf_sess_t *sess, OpenAPI_n1_n2_message_transfer_cause_e cause);
16
17
+bool amf_ue_have_session_release_pending(amf_ue_t *amf_ue);
18
+bool amf_sess_have_session_release_pending(amf_sess_t *sess);
19
+
20
#ifdef __cplusplus
21
}
22
#endif
23
open5gs_2.6.0.8.5f9b.tar.xz/src/smf/gx-path.c -> open5gs_2.6.0.10.79f73.tar.xz/src/smf/gx-path.c
Changed
10
1
2
3
os0_t peer_host; /* Peer Host */
4
5
-#define MAX_CC_REQUEST_NUMBER 32
6
+#define MAX_CC_REQUEST_NUMBER 64
7
smf_sess_t *sess;
8
ogs_gtp_xact_t *xactMAX_CC_REQUEST_NUMBER;
9
10
open5gs_2.6.0.8.5f9b.tar.xz/src/smf/gy-path.c -> open5gs_2.6.0.10.79f73.tar.xz/src/smf/gy-path.c
Changed
10
1
2
3
os0_t peer_host; /* Peer Host */
4
5
-#define MAX_CC_REQUEST_NUMBER 32
6
+#define MAX_CC_REQUEST_NUMBER 64
7
smf_sess_t *sess;
8
struct {
9
bool pfcp;
10