Changes of Revision 654

open5gs_2.7.0.126.eb2b.202404042026.dsc -> open5gs_2.7.0.128.30648.202404052026.dsc Changed
x
 
1
@@ -2,7 +2,7 @@
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-sepp, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
 Architecture: any
5
-Version: 2.7.0.126.eb2b.202404042026
6
+Version: 2.7.0.128.30648.202404052026
7
 Maintainer: Harald Welte <laforge@gnumonks.org>
8
 Uploaders: Sukchan Lee <acetcom@gmail.com>
9
 Homepage: https://open5gs.org
10
@@ -32,8 +32,8 @@
11
  open5gs-udr deb net optional arch=any
12
  open5gs-upf deb net optional arch=any
13
 Checksums-Sha1:
14
- ef775b1e733b8f3beeede28aec2d2c13dce2e4c0 14487084 open5gs_2.7.0.126.eb2b.202404042026.tar.xz
15
+ e2eef4ee2269878a50d13707d30bf4f6f669ae13 14488320 open5gs_2.7.0.128.30648.202404052026.tar.xz
16
 Checksums-Sha256:
17
- adce053ea3a0aef9582b963fdf8708dc5f8f1ca0528b0142a4710e7b2b7fb5d3 14487084 open5gs_2.7.0.126.eb2b.202404042026.tar.xz
18
+ 11d6afe2e86d483f5ec478401e2a561373c3fed46480610352bd3db19a1e7874 14488320 open5gs_2.7.0.128.30648.202404052026.tar.xz
19
 Files:
20
- 7420079c1ea7bdba26bc6478e6080ef1 14487084 open5gs_2.7.0.126.eb2b.202404042026.tar.xz
21
+ 7cd88d66dcad2d41d93706b0c0058ca6 14488320 open5gs_2.7.0.128.30648.202404052026.tar.xz
22
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/.tarball-version -> open5gs_2.7.0.128.30648.202404052026.tar.xz/.tarball-version Changed
4
 
1
@@ -1 +1 @@
2
-2.7.0.126-eb2b.202404042026
3
+2.7.0.128-30648.202404052026
4
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/debian/changelog -> open5gs_2.7.0.128.30648.202404052026.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.7.0.126.eb2b.202404042026) unstable; urgency=medium
3
+open5gs (2.7.0.128.30648.202404052026) unstable; urgency=medium
4
 
5
   * Automatically generated changelog entry for building the Osmocom nightly feed
6
 
7
- -- Osmocom OBS scripts <info@osmocom.org>  Thu, 04 Apr 2024 20:27:44 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org>  Fri, 05 Apr 2024 20:27:38 +0000
9
 
10
 open5gs (2.7.0) unstable; urgency=medium
11
 
12
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/docs/_docs/guide/01-quickstart.md -> open5gs_2.7.0.128.30648.202404052026.tar.xz/docs/_docs/guide/01-quickstart.md Changed
10
 
1
@@ -233,7 +233,7 @@
2
 SGWC-gtpc = 127.0.0.3 :2123 for S11
3
 SGWC-pfcp = 127.0.0.3 :8805 for Sxa
4
 
5
-SMF-gtpc  = 127.0.0.4 :2123 for S5c, N11
6
+SMF-gtpc  = 127.0.0.4 :2123 for S5c
7
 SMF-gtpu  = 127.0.0.4 :2152 for N4u (Sxu)
8
 SMF-pfcp  = 127.0.0.4 :8805 for N4 (Sxb)
9
 SMF-frDi  = 127.0.0.4 :3868 for Gx auth
10
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/mme/mme-s11-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/mme/mme-s11-handler.c Changed
201
 
1
@@ -60,9 +60,13 @@
2
 }
3
 
4
 void mme_s11_handle_echo_request(
5
-        ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req)
6
+        ogs_gtp_xact_t *xact, ogs_gtp2_message_t *gtp2_message)
7
 {
8
+    ogs_gtp2_echo_request_t *req = NULL;
9
+
10
     ogs_assert(xact);
11
+    ogs_assert(gtp2_message);
12
+    req = &gtp2_message->echo_request;
13
     ogs_assert(req);
14
 
15
     ogs_debug("Receiving Echo Request");
16
@@ -72,14 +76,14 @@
17
 }
18
 
19
 void mme_s11_handle_echo_response(
20
-        ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *rsp)
21
+        ogs_gtp_xact_t *xact, ogs_gtp2_message_t *gtp2_message)
22
 {
23
     /* Not Implemented */
24
 }
25
 
26
 void mme_s11_handle_create_session_response(
27
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
28
-        ogs_gtp2_create_session_response_t *rsp)
29
+        ogs_gtp2_message_t *gtp2_message)
30
 {
31
     int i, r, rv;
32
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
33
@@ -100,6 +104,10 @@
34
     uint16_t decoded = 0;
35
     int create_action = 0;
36
 
37
+    ogs_gtp2_create_session_response_t *rsp = NULL;
38
+
39
+    ogs_assert(gtp2_message);
40
+    rsp = &gtp2_message->create_session_response;
41
     ogs_assert(rsp);
42
 
43
     ogs_debug("Create Session Response");
44
@@ -472,7 +480,7 @@
45
 
46
 void mme_s11_handle_modify_bearer_response(
47
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
48
-        ogs_gtp2_modify_bearer_response_t *rsp)
49
+        ogs_gtp2_message_t *gtp2_message)
50
 {
51
     int r, rv;
52
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
53
@@ -482,6 +490,10 @@
54
     mme_ue_t *mme_ue = NULL;
55
     sgw_ue_t *sgw_ue = NULL;
56
 
57
+    ogs_gtp2_modify_bearer_response_t *rsp = NULL;
58
+
59
+    ogs_assert(gtp2_message);
60
+    rsp = &gtp2_message->modify_bearer_response;
61
     ogs_assert(rsp);
62
 
63
     ogs_debug("Modify Bearer Response");
64
@@ -586,7 +598,7 @@
65
 
66
 void mme_s11_handle_delete_session_response(
67
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
68
-        ogs_gtp2_delete_session_response_t *rsp)
69
+        ogs_gtp2_message_t *gtp2_message)
70
 {
71
     int r, rv;
72
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
73
@@ -595,6 +607,10 @@
74
     mme_sess_t *sess = NULL;
75
     mme_ue_t *mme_ue = NULL;
76
 
77
+    ogs_gtp2_delete_session_response_t *rsp = NULL;
78
+
79
+    ogs_assert(gtp2_message);
80
+    rsp = &gtp2_message->delete_session_response;
81
     ogs_assert(rsp);
82
 
83
     ogs_debug("Delete Session Response");
84
@@ -778,7 +794,7 @@
85
 
86
 void mme_s11_handle_create_bearer_request(
87
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
88
-        ogs_gtp2_create_bearer_request_t *req)
89
+        ogs_gtp2_message_t *gtp2_message)
90
 {
91
     int r;
92
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
93
@@ -790,7 +806,11 @@
94
     ogs_gtp2_f_teid_t *pgw_s5u_teid = NULL;
95
     ogs_gtp2_bearer_qos_t bearer_qos;
96
 
97
+    ogs_gtp2_create_bearer_request_t *req = NULL;
98
+
99
     ogs_assert(xact);
100
+    ogs_assert(gtp2_message);
101
+    req = &gtp2_message->create_bearer_request;
102
     ogs_assert(req);
103
 
104
     ogs_debug("Create Bearer Request");
105
@@ -823,7 +843,8 @@
106
     }
107
 
108
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
109
-        ogs_gtp2_send_error_message(xact, sgw_ue ? sgw_ue->sgw_s11_teid : 0,
110
+        ogs_gtp2_send_error_message(xact,
111
+                sgw_ue ? sgw_ue->sgw_s11_teid : gtp2_message->h.teid,
112
                 OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
113
         return;
114
     }
115
@@ -859,7 +880,8 @@
116
     }
117
 
118
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
119
-        ogs_gtp2_send_error_message(xact, sgw_ue ? sgw_ue->sgw_s11_teid : 0,
120
+        ogs_gtp2_send_error_message(xact,
121
+                sgw_ue ? sgw_ue->sgw_s11_teid : gtp2_message->h.teid,
122
                 OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
123
         return;
124
     }
125
@@ -982,7 +1004,7 @@
126
 
127
 void mme_s11_handle_update_bearer_request(
128
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
129
-        ogs_gtp2_update_bearer_request_t *req)
130
+        ogs_gtp2_message_t *gtp2_message)
131
 {
132
     int r;
133
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
134
@@ -991,7 +1013,11 @@
135
     sgw_ue_t *sgw_ue = NULL;
136
     ogs_gtp2_bearer_qos_t bearer_qos;
137
 
138
+    ogs_gtp2_update_bearer_request_t *req = NULL;
139
+
140
     ogs_assert(xact);
141
+    ogs_assert(gtp2_message);
142
+    req = &gtp2_message->update_bearer_request;
143
     ogs_assert(req);
144
 
145
     ogs_debug("Update Bearer Request");
146
@@ -1028,7 +1054,8 @@
147
     }
148
 
149
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
150
-        ogs_gtp2_send_error_message(xact, sgw_ue ? sgw_ue->sgw_s11_teid : 0,
151
+        ogs_gtp2_send_error_message(xact,
152
+                sgw_ue ? sgw_ue->sgw_s11_teid : gtp2_message->h.teid,
153
                 OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
154
         return;
155
     }
156
@@ -1129,7 +1156,7 @@
157
 
158
 void mme_s11_handle_delete_bearer_request(
159
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
160
-        ogs_gtp2_delete_bearer_request_t *req)
161
+        ogs_gtp2_message_t *gtp2_message)
162
 {
163
     int r;
164
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
165
@@ -1138,7 +1165,11 @@
166
     mme_sess_t *sess = NULL;
167
     sgw_ue_t *sgw_ue = NULL;
168
 
169
+    ogs_gtp2_delete_bearer_request_t *req = NULL;
170
+
171
     ogs_assert(xact);
172
+    ogs_assert(gtp2_message);
173
+    req = &gtp2_message->delete_bearer_request;
174
     ogs_assert(req);
175
 
176
     ogs_debug("Delete Bearer Request");
177
@@ -1199,7 +1230,8 @@
178
     }
179
 
180
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
181
-        ogs_gtp2_send_error_message(xact, sgw_ue ? sgw_ue->sgw_s11_teid : 0,
182
+        ogs_gtp2_send_error_message(xact,
183
+                sgw_ue ? sgw_ue->sgw_s11_teid : gtp2_message->h.teid,
184
                 OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE,
185
                 OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
186
         return;
187
@@ -1250,7 +1282,7 @@
188
 
189
 void mme_s11_handle_release_access_bearers_response(
190
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
191
-        ogs_gtp2_release_access_bearers_response_t *rsp)
192
+        ogs_gtp2_message_t *gtp2_message)
193
 {
194
     int r, rv;
195
     uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
196
@@ -1262,6 +1294,10 @@
197
     mme_sess_t *sess = NULL;
198
     mme_bearer_t *bearer = NULL;
199
 
200
+    ogs_gtp2_release_access_bearers_response_t *rsp = NULL;
201
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/mme/mme-s11-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/mme/mme-s11-handler.h Changed
59
 
1
@@ -27,44 +27,44 @@
2
 #endif
3
 
4
 void mme_s11_handle_echo_request(
5
-        ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req);
6
+        ogs_gtp_xact_t *xact, ogs_gtp2_message_t *gtp2_message);
7
 void mme_s11_handle_echo_response(
8
-        ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *rsp);
9
+        ogs_gtp_xact_t *xact, ogs_gtp2_message_t *gtp2_message);
10
 void mme_s11_handle_create_session_response(
11
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
12
-        ogs_gtp2_create_session_response_t *rsp);
13
+        ogs_gtp2_message_t *gtp2_message);
14
 void mme_s11_handle_modify_bearer_response(
15
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
16
-        ogs_gtp2_modify_bearer_response_t *rsp);
17
+        ogs_gtp2_message_t *gtp2_message);
18
 void mme_s11_handle_delete_session_response(
19
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
20
-        ogs_gtp2_delete_session_response_t *rsp);
21
+        ogs_gtp2_message_t *gtp2_message);
22
 void mme_s11_handle_create_bearer_request(
23
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
24
-        ogs_gtp2_create_bearer_request_t *req);
25
+        ogs_gtp2_message_t *gtp2_message);
26
 void mme_s11_handle_update_bearer_request(
27
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
28
-        ogs_gtp2_update_bearer_request_t *req);
29
+        ogs_gtp2_message_t *gtp2_message);
30
 void mme_s11_handle_delete_bearer_request(
31
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
32
-        ogs_gtp2_delete_bearer_request_t *req);
33
+        ogs_gtp2_message_t *gtp2_message);
34
 
35
 void mme_s11_handle_release_access_bearers_response(
36
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
37
-        ogs_gtp2_release_access_bearers_response_t *rsp);
38
+        ogs_gtp2_message_t *gtp2_message);
39
 void mme_s11_handle_downlink_data_notification(
40
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
41
-        ogs_gtp2_downlink_data_notification_t *noti);
42
+        ogs_gtp2_message_t *gtp2_message);
43
 void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
44
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
45
-        ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp);
46
+        ogs_gtp2_message_t *gtp2_message);
47
 void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
48
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
49
-        ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp);
50
+        ogs_gtp2_message_t *gtp2_message);
51
 
52
 void mme_s11_handle_bearer_resource_failure_indication(
53
         ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
54
-        ogs_gtp2_bearer_resource_failure_indication_t *ind);
55
+        ogs_gtp2_message_t *gtp2_message);
56
 
57
 #ifdef __cplusplus
58
 }
59
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/mme/mme-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/mme/mme-sm.c Changed
132
 
1
@@ -79,7 +79,7 @@
2
 
3
     ogs_gtp_node_t *gnode = NULL;
4
     ogs_gtp_xact_t *xact = NULL;
5
-    ogs_gtp2_message_t gtp_message;
6
+    ogs_gtp2_message_t gtp2_message;
7
     ogs_gtp1_message_t gtp1_message;
8
 
9
     mme_vlr_t *vlr = NULL;
10
@@ -650,7 +650,7 @@
11
         pkbuf = e->pkbuf;
12
         ogs_assert(pkbuf);
13
 
14
-        if (ogs_gtp2_parse_msg(&gtp_message, pkbuf) != OGS_OK) {
15
+        if (ogs_gtp2_parse_msg(&gtp2_message, pkbuf) != OGS_OK) {
16
             ogs_error("ogs_gtp2_parse_msg() failed");
17
             ogs_pkbuf_free(pkbuf);
18
             break;
19
@@ -659,7 +659,7 @@
20
         gnode = e->gnode;
21
         ogs_assert(gnode);
22
 
23
-        rv = ogs_gtp_xact_receive(gnode, &gtp_message.h, &xact);
24
+        rv = ogs_gtp_xact_receive(gnode, &gtp2_message.h, &xact);
25
         if (rv != OGS_OK) {
26
             ogs_pkbuf_free(pkbuf);
27
             break;
28
@@ -694,9 +694,9 @@
29
          *   However in this case, the cause code shall not be set to
30
          *   "Context not found".
31
          */
32
-        if (gtp_message.h.teid_presence && gtp_message.h.teid != 0) {
33
+        if (gtp2_message.h.teid_presence && gtp2_message.h.teid != 0) {
34
             /* Cause is not "Context not found" */
35
-            mme_ue = mme_ue_find_by_s11_local_teid(gtp_message.h.teid);
36
+            mme_ue = mme_ue_find_by_s11_local_teid(gtp2_message.h.teid);
37
         } else if (xact->local_teid) { /* rx no TEID or TEID=0 */
38
             /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some
39
              * conditions, such as cause "Session context not found". In those
40
@@ -706,69 +706,60 @@
41
             mme_ue = mme_ue_find_by_s11_local_teid(xact->local_teid);
42
         }
43
 
44
-        switch (gtp_message.h.type) {
45
+        switch (gtp2_message.h.type) {
46
         case OGS_GTP2_ECHO_REQUEST_TYPE:
47
-            mme_s11_handle_echo_request(xact, &gtp_message.echo_request);
48
+            mme_s11_handle_echo_request(xact, &gtp2_message);
49
             break;
50
         case OGS_GTP2_ECHO_RESPONSE_TYPE:
51
-            mme_s11_handle_echo_response(xact, &gtp_message.echo_response);
52
+            mme_s11_handle_echo_response(xact, &gtp2_message);
53
             break;
54
         case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
55
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
56
-            mme_s11_handle_create_session_response(
57
-                xact, mme_ue, &gtp_message.create_session_response);
58
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
59
+            mme_s11_handle_create_session_response(xact, mme_ue, &gtp2_message);
60
             break;
61
         case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE:
62
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
63
-            mme_s11_handle_modify_bearer_response(
64
-                xact, mme_ue, &gtp_message.modify_bearer_response);
65
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
66
+            mme_s11_handle_modify_bearer_response(xact, mme_ue, &gtp2_message);
67
             break;
68
         case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
69
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
70
-            mme_s11_handle_delete_session_response(
71
-                xact, mme_ue, &gtp_message.delete_session_response);
72
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
73
+            mme_s11_handle_delete_session_response(xact, mme_ue, &gtp2_message);
74
             break;
75
         case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
76
-            mme_s11_handle_create_bearer_request(
77
-                xact, mme_ue, &gtp_message.create_bearer_request);
78
+            mme_s11_handle_create_bearer_request(xact, mme_ue, &gtp2_message);
79
             break;
80
         case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
81
-            mme_s11_handle_update_bearer_request(
82
-                xact, mme_ue, &gtp_message.update_bearer_request);
83
+            mme_s11_handle_update_bearer_request(xact, mme_ue, &gtp2_message);
84
             break;
85
         case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
86
-            mme_s11_handle_delete_bearer_request(
87
-                xact, mme_ue, &gtp_message.delete_bearer_request);
88
+            mme_s11_handle_delete_bearer_request(xact, mme_ue, &gtp2_message);
89
             break;
90
         case OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
91
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
92
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
93
             mme_s11_handle_release_access_bearers_response(
94
-                xact, mme_ue, &gtp_message.release_access_bearers_response);
95
+                xact, mme_ue, &gtp2_message);
96
             break;
97
         case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
98
             mme_s11_handle_downlink_data_notification(
99
-                xact, mme_ue, &gtp_message.downlink_data_notification);
100
+                xact, mme_ue, &gtp2_message);
101
             break;
102
         case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
103
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
104
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
105
             mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
106
-                xact, mme_ue,
107
-                &gtp_message.create_indirect_data_forwarding_tunnel_response);
108
+                xact, mme_ue, &gtp2_message);
109
             break;
110
         case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
111
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
112
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
113
             mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
114
-                xact, mme_ue,
115
-                &gtp_message.delete_indirect_data_forwarding_tunnel_response);
116
+                xact, mme_ue, &gtp2_message);
117
             break;
118
         case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
119
-            if (!gtp_message.h.teid_presence) ogs_error("No TEID");
120
+            if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
121
             mme_s11_handle_bearer_resource_failure_indication(
122
-                xact, mme_ue,
123
-                &gtp_message.bearer_resource_failure_indication);
124
+                xact, mme_ue, &gtp2_message);
125
             break;
126
         default:
127
-            ogs_warn("Not implemented(type:%d)", gtp_message.h.type);
128
+            ogs_warn("Not implemented(type:%d)", gtp2_message.h.type);
129
             break;
130
         }
131
         ogs_pkbuf_free(pkbuf);
132
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwc/pfcp-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwc/pfcp-sm.c Changed
38
 
1
@@ -305,8 +305,7 @@
2
                 sess->sgwu_sxa_seid = be64toh(up_f_seid->seid);
3
             } else {
4
                 sgwc_sxa_handle_session_establishment_response(
5
-                    sess, xact, e->gtp_message,
6
-                    &message->pfcp_session_establishment_response);
7
+                    sess, xact, e->gtp_message, message);
8
             }
9
             break;
10
 
11
@@ -314,23 +313,20 @@
12
             if (!message->h.seid_presence) ogs_error("No SEID");
13
 
14
             sgwc_sxa_handle_session_modification_response(
15
-                sess, xact, e->gtp_message,
16
-                &message->pfcp_session_modification_response);
17
+                sess, xact, e->gtp_message, message);
18
             break;
19
 
20
         case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE:
21
             if (!message->h.seid_presence) ogs_error("No SEID");
22
 
23
             sgwc_sxa_handle_session_deletion_response(
24
-                sess, xact, e->gtp_message,
25
-                &message->pfcp_session_deletion_response);
26
+                sess, xact, e->gtp_message, message);
27
             break;
28
 
29
         case OGS_PFCP_SESSION_REPORT_REQUEST_TYPE:
30
             if (!message->h.seid_presence) ogs_error("No SEID");
31
 
32
-            sgwc_sxa_handle_session_report_request(
33
-                sess, xact, &message->pfcp_session_report_request);
34
+            sgwc_sxa_handle_session_report_request(sess, xact, message);
35
             break;
36
 
37
         default:
38
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwc/s11-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwc/s11-handler.c Changed
152
 
1
@@ -174,7 +174,7 @@
2
 
3
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
4
         ogs_gtp_send_error_message(
5
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
6
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
7
                 OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
8
         return;
9
     }
10
@@ -215,7 +215,7 @@
11
 
12
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
13
         ogs_gtp_send_error_message(
14
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
15
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
16
                 OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
17
         return;
18
     }
19
@@ -263,7 +263,7 @@
20
     ogs_assert(sess->pfcp_node);
21
     if (!OGS_FSM_CHECK(&sess->pfcp_node->sm, sgwc_pfcp_state_associated)) {
22
         ogs_gtp_send_error_message(
23
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
24
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
25
                 OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
26
                 OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING);
27
         return;
28
@@ -424,7 +424,7 @@
29
 
30
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
31
         ogs_gtp_send_error_message(
32
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
33
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
34
                 OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
35
         return;
36
     }
37
@@ -532,7 +532,7 @@
38
     if (i == 0) {
39
         ogs_error("No Bearer");
40
         ogs_gtp_send_error_message(
41
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
42
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
43
                 OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
44
         return;
45
     }
46
@@ -610,7 +610,7 @@
47
 
48
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
49
         ogs_gtp_send_error_message(
50
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
51
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
52
                 OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
53
         return;
54
     }
55
@@ -630,7 +630,7 @@
56
         indication->scope_indication == 1) {
57
         ogs_error("Invalid Indication");
58
         ogs_gtp_send_error_message(
59
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
60
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
61
                 OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE,
62
                 OGS_GTP2_CAUSE_INVALID_MESSAGE_FORMAT);
63
         return;
64
@@ -1129,7 +1129,7 @@
65
 
66
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
67
         ogs_gtp_send_error_message(
68
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
69
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
70
                 OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause_value);
71
         return;
72
     }
73
@@ -1236,7 +1236,7 @@
74
 
75
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
76
         ogs_gtp_send_error_message(
77
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
78
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
79
                 OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
80
                 cause_value);
81
         return;
82
@@ -1254,7 +1254,7 @@
83
         if (req->bearer_contextsi.eps_bearer_id.presence == 0) {
84
             ogs_error("No EBI");
85
             ogs_gtp_send_error_message(
86
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
87
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
88
                 OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
89
                 OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
90
             return;
91
@@ -1277,7 +1277,7 @@
92
             rv = ogs_gtp2_f_teid_to_ip(req_teid, &tunnel->remote_ip);
93
             if (rv != OGS_OK) {
94
                 ogs_gtp_send_error_message(s11_xact,
95
-                        sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
96
+                        sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
97
                 OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
98
                 OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
99
                 return;
100
@@ -1312,7 +1312,7 @@
101
             rv = ogs_gtp2_f_teid_to_ip(req_teid, &tunnel->remote_ip);
102
             if (rv != OGS_OK) {
103
                 ogs_gtp_send_error_message(s11_xact,
104
-                        sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
105
+                        sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
106
                 OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
107
                 OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
108
                 return;
109
@@ -1346,12 +1346,13 @@
110
 
111
 void sgwc_s11_handle_delete_indirect_data_forwarding_tunnel_request(
112
         sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
113
-        ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *recv_message)
114
+        ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
115
 {
116
     sgwc_sess_t *sess = NULL;
117
     uint8_t cause_value = 0;
118
 
119
     ogs_assert(s11_xact);
120
+    ogs_assert(message);
121
 
122
     ogs_debug("Delete Indirect Data Forwarding Tunnel Request");
123
 
124
@@ -1367,7 +1368,8 @@
125
 
126
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
127
         ogs_gtp_send_error_message(
128
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
129
+                s11_xact,
130
+                sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
131
                 OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
132
                 cause_value);
133
         return;
134
@@ -1442,7 +1444,7 @@
135
 
136
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
137
         ogs_gtp_send_error_message(
138
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
139
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
140
                 OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
141
         return;
142
     }
143
@@ -1463,7 +1465,7 @@
144
 
145
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
146
         ogs_gtp_send_error_message(
147
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
148
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : message->h.teid,
149
                 OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
150
         return;
151
     }
152
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwc/s5c-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwc/s5c-handler.c Changed
51
 
1
@@ -573,7 +573,8 @@
2
     }
3
 
4
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
5
-        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
6
+        ogs_gtp_send_error_message(s5c_xact,
7
+                sess ? sess->pgw_s5c_teid : message->h.teid,
8
                 OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
9
         return;
10
     }
11
@@ -601,7 +602,8 @@
12
     }
13
 
14
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
15
-        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
16
+        ogs_gtp_send_error_message(s5c_xact,
17
+                sess ? sess->pgw_s5c_teid : message->h.teid,
18
                 OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
19
         return;
20
     }
21
@@ -631,7 +633,8 @@
22
 
23
     rv = ogs_gtp2_f_teid_to_ip(pgw_s5u_teid, &ul_tunnel->remote_ip);
24
     if (rv != OGS_OK) {
25
-        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
26
+        ogs_gtp_send_error_message(s5c_xact,
27
+                sess ? sess->pgw_s5c_teid : message->h.teid,
28
                 OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE,
29
                 OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
30
         return;
31
@@ -709,7 +712,8 @@
32
     }
33
 
34
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
35
-        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
36
+        ogs_gtp_send_error_message(s5c_xact,
37
+                sess ? sess->pgw_s5c_teid : message->h.teid,
38
                 OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
39
         return;
40
     }
41
@@ -850,7 +854,8 @@
42
     }
43
 
44
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
45
-        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
46
+        ogs_gtp_send_error_message(s5c_xact,
47
+                sess ? sess->pgw_s5c_teid : message->h.teid,
48
                 OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE, cause_value);
49
         return;
50
     }
51
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwc/sxa-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwc/sxa-handler.c Changed
201
 
1
@@ -127,7 +127,7 @@
2
 void sgwc_sxa_handle_session_establishment_response(
3
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
4
         ogs_gtp2_message_t *recv_message,
5
-        ogs_pfcp_session_establishment_response_t *pfcp_rsp)
6
+        ogs_pfcp_message_t *pfcp_message)
7
 {
8
     int rv;
9
     uint8_t cause_value = 0;
10
@@ -155,11 +155,13 @@
11
 
12
     ogs_gtp2_indication_t *indication = NULL;
13
 
14
+    ogs_pfcp_session_establishment_response_t *pfcp_rsp = NULL;
15
+
16
     ogs_debug("Session Establishment Response");
17
 
18
     ogs_assert(pfcp_xact);
19
-    ogs_assert(pfcp_rsp);
20
     ogs_assert(recv_message);
21
+    ogs_assert(pfcp_message);
22
 
23
     create_session_request = &recv_message->create_session_request;
24
     ogs_assert(create_session_request);
25
@@ -167,6 +169,9 @@
26
     s11_xact = pfcp_xact->assoc_xact;
27
     ogs_assert(s11_xact);
28
 
29
+    pfcp_rsp = &pfcp_message->pfcp_session_establishment_response;
30
+    ogs_assert(pfcp_rsp);
31
+
32
     ogs_pfcp_xact_commit(pfcp_xact);
33
 
34
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
35
@@ -246,7 +251,8 @@
36
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
37
         if (sess) sgwc_ue = sess->sgwc_ue;
38
         ogs_gtp_send_error_message(
39
-                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
40
+                s11_xact,
41
+                sgwc_ue ? sgwc_ue->mme_s11_teid : recv_message->h.teid,
42
                 OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
43
         return;
44
     }
45
@@ -270,7 +276,8 @@
46
         if (dl_tunnel->local_addr == NULL && dl_tunnel->local_addr6 == NULL) {
47
             ogs_error("No UP F-TEID");
48
             ogs_gtp_send_error_message(
49
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
50
+                    s11_xact,
51
+                    sgwc_ue ? sgwc_ue->mme_s11_teid : recv_message->h.teid,
52
                     OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
53
                     OGS_GTP2_CAUSE_GRE_KEY_NOT_FOUND);
54
             return;
55
@@ -444,7 +451,7 @@
56
 void sgwc_sxa_handle_session_modification_response(
57
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
58
         ogs_gtp2_message_t *recv_message,
59
-        ogs_pfcp_session_modification_response_t *pfcp_rsp)
60
+        ogs_pfcp_message_t *pfcp_message)
61
 {
62
     int i, rv, len = 0;
63
     uint8_t cause_value = 0;
64
@@ -463,14 +470,19 @@
65
 
66
     ogs_gtp2_cause_t cause;
67
 
68
+    ogs_pfcp_session_modification_response_t *pfcp_rsp = NULL;
69
+
70
     ogs_debug("Session Modification Response");
71
 
72
     ogs_assert(pfcp_xact);
73
-    ogs_assert(pfcp_rsp);
74
+    ogs_assert(pfcp_message);
75
 
76
     flags = pfcp_xact->modify_flags;
77
     ogs_assert(flags);
78
 
79
+    pfcp_rsp = &pfcp_message->pfcp_session_modification_response;
80
+    ogs_assert(pfcp_rsp);
81
+
82
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
83
 
84
     if (flags & OGS_PFCP_MODIFY_SESSION) {
85
@@ -597,12 +609,15 @@
86
 
87
 
88
         } else if (flags & OGS_PFCP_MODIFY_ACTIVATE) {
89
+            ogs_assert(recv_message);
90
+
91
             if (flags & OGS_PFCP_MODIFY_UL_ONLY) {
92
                 s11_xact = pfcp_xact->assoc_xact;
93
                 ogs_assert(s11_xact);
94
 
95
                 ogs_gtp_send_error_message(
96
-                        s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
97
+                        s11_xact,
98
+                        sgwc_ue ? sgwc_ue->mme_s11_teid : recv_message->h.teid,
99
                         OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
100
 
101
             } else if (flags & OGS_PFCP_MODIFY_DL_ONLY) {
102
@@ -610,19 +625,26 @@
103
                 ogs_assert(s11_xact);
104
 
105
                 ogs_gtp_send_error_message(
106
-                        s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
107
+                        s11_xact,
108
+                        sgwc_ue ? sgwc_ue->mme_s11_teid : recv_message->h.teid,
109
                         OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
110
             } else {
111
                 ogs_fatal("Invalid modify_flags0x%llx", (long long)flags);
112
                 ogs_assert_if_reached();
113
             }
114
         } else if (flags & OGS_PFCP_MODIFY_DEACTIVATE) {
115
-            s11_xact = pfcp_xact->assoc_xact;
116
-            ogs_assert(s11_xact);
117
+            if (flags & OGS_PFCP_MODIFY_ERROR_INDICATION) {
118
+            } else {
119
+                ogs_assert(recv_message);
120
 
121
-            ogs_gtp_send_error_message(
122
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
123
-                    OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause_value);
124
+                s11_xact = pfcp_xact->assoc_xact;
125
+                ogs_assert(s11_xact);
126
+
127
+                ogs_gtp_send_error_message(
128
+                        s11_xact,
129
+                        sgwc_ue ? sgwc_ue->mme_s11_teid : recv_message->h.teid,
130
+                        OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause_value);
131
+            }
132
         }
133
 
134
         ogs_pfcp_xact_commit(pfcp_xact);
135
@@ -989,6 +1011,7 @@
136
 
137
         s11_xact = pfcp_xact->assoc_xact;
138
         ogs_assert(s11_xact);
139
+        ogs_assert(recv_message);
140
 
141
         ogs_list_copy(&bearer_to_modify_list,
142
                 &pfcp_xact->bearer_to_modify_list);
143
@@ -1002,7 +1025,6 @@
144
             ogs_gtp2_f_teid_t sgw_s1u_teidOGS_BEARER_PER_UE;
145
             int sgw_s1u_lenOGS_BEARER_PER_UE;
146
 
147
-            ogs_assert(recv_message);
148
             gtp_rsp = &recv_message->create_session_response;
149
             ogs_assert(gtp_rsp);
150
 
151
@@ -1071,7 +1093,6 @@
152
 
153
                 ogs_gtp2_indication_t *indication = NULL;
154
 
155
-                ogs_assert(recv_message);
156
                 gtp_req = &recv_message->modify_bearer_request;
157
                 ogs_assert(gtp_req);
158
 
159
@@ -1210,6 +1231,7 @@
160
         } else {
161
             s11_xact = pfcp_xact->assoc_xact;
162
             ogs_assert(s11_xact);
163
+            ogs_assert(recv_message);
164
 
165
             ogs_pfcp_xact_commit(pfcp_xact);
166
 
167
@@ -1260,7 +1282,7 @@
168
 void sgwc_sxa_handle_session_deletion_response(
169
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
170
         ogs_gtp2_message_t *gtp_message,
171
-        ogs_pfcp_session_deletion_response_t *pfcp_rsp)
172
+        ogs_pfcp_message_t *pfcp_message)
173
 {
174
     int rv;
175
     uint8_t cause_value = 0;
176
@@ -1271,9 +1293,14 @@
177
     ogs_gtp_xact_t *gtp_xact = NULL;
178
     ogs_pkbuf_t *pkbuf = NULL;
179
 
180
+    ogs_pfcp_session_deletion_response_t *pfcp_rsp = NULL;
181
+
182
     ogs_debug("Session Deletion Response");
183
 
184
     ogs_assert(pfcp_xact);
185
+    ogs_assert(pfcp_message);
186
+
187
+    pfcp_rsp = &pfcp_message->pfcp_session_deletion_response;
188
     ogs_assert(pfcp_rsp);
189
 
190
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
191
@@ -1315,7 +1342,7 @@
192
          * 2. SMF sends Delete Session Response to SGW/MME.
193
          */
194
         if (sess) sgwc_ue = sess->sgwc_ue;
195
-        teid = sgwc_ue ? sgwc_ue->mme_s11_teid : 0;
196
+        teid = sgwc_ue ? sgwc_ue->mme_s11_teid : gtp_message->h.teid;
197
         break;
198
     case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
199
         /*
200
@@ -1385,7 +1412,7 @@
201
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwc/sxa-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwc/sxa-handler.h Changed
24
 
1
@@ -29,18 +29,18 @@
2
 void sgwc_sxa_handle_session_establishment_response(
3
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
4
         ogs_gtp2_message_t *recv_message,
5
-        ogs_pfcp_session_establishment_response_t *pfcp_rsp);
6
+        ogs_pfcp_message_t *pfcp_message);
7
 void sgwc_sxa_handle_session_modification_response(
8
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
9
         ogs_gtp2_message_t *recv_message,
10
-        ogs_pfcp_session_modification_response_t *pfcp_rsp);
11
+        ogs_pfcp_message_t *pfcp_message);
12
 void sgwc_sxa_handle_session_deletion_response(
13
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
14
         ogs_gtp2_message_t *gtp_message,
15
-        ogs_pfcp_session_deletion_response_t *pfcp_rsp);
16
+        ogs_pfcp_message_t *pfcp_message);
17
 void sgwc_sxa_handle_session_report_request(
18
         sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
19
-        ogs_pfcp_session_report_request_t *pfcp_req);
20
+        ogs_pfcp_message_t *pfcp_message);
21
 
22
 #ifdef __cplusplus
23
 }
24
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwu/pfcp-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwu/pfcp-sm.c Changed
26
 
1
@@ -280,20 +280,16 @@
2
             sess = sgwu_sess_add_by_message(message);
3
             if (sess)
4
                 OGS_SETUP_PFCP_NODE(sess, node);
5
-            sgwu_sxa_handle_session_establishment_request(
6
-                sess, xact, &message->pfcp_session_establishment_request);
7
+            sgwu_sxa_handle_session_establishment_request(sess, xact, message);
8
             break;
9
         case OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE:
10
-            sgwu_sxa_handle_session_modification_request(
11
-                sess, xact, &message->pfcp_session_modification_request);
12
+            sgwu_sxa_handle_session_modification_request(sess, xact, message);
13
             break;
14
         case OGS_PFCP_SESSION_DELETION_REQUEST_TYPE:
15
-            sgwu_sxa_handle_session_deletion_request(
16
-                sess, xact, &message->pfcp_session_deletion_request);
17
+            sgwu_sxa_handle_session_deletion_request(sess, xact, message);
18
             break;
19
         case OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE:
20
-            sgwu_sxa_handle_session_report_response(
21
-                sess, xact, &message->pfcp_session_report_response);
22
+            sgwu_sxa_handle_session_report_response(sess, xact, message);
23
             break;
24
         default:
25
             ogs_error("Not implemented PFCP message type%d",
26
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwu/sxa-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwu/sxa-handler.c Changed
124
 
1
@@ -22,8 +22,7 @@
2
 #include "sxa-handler.h"
3
 
4
 void sgwu_sxa_handle_session_establishment_request(
5
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, 
6
-        ogs_pfcp_session_establishment_request_t *req)
7
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
8
 {
9
     ogs_pfcp_pdr_t *pdr = NULL;
10
     ogs_pfcp_far_t *far = NULL;
11
@@ -36,7 +35,11 @@
12
     ogs_pfcp_sereq_flags_t sereq_flags;
13
     bool restoration_indication = false;
14
 
15
+    ogs_pfcp_session_establishment_request_t *req = NULL;
16
+
17
     ogs_assert(xact);
18
+    ogs_assert(message);
19
+    req = &message->pfcp_session_establishment_request;
20
     ogs_assert(req);
21
 
22
     ogs_debug("Session Establishment Request");
23
@@ -45,7 +48,8 @@
24
 
25
     if (!sess) {
26
         ogs_error("No Context");
27
-        ogs_pfcp_send_error_message(xact, 0,
28
+        ogs_pfcp_send_error_message(
29
+                xact, sess ? sess->sgwc_sxa_f_seid.seid : message->h.seid,
30
                 OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE,
31
                 OGS_PFCP_CAUSE_MANDATORY_IE_MISSING, 0);
32
         return;
33
@@ -142,14 +146,14 @@
34
 
35
 cleanup:
36
     ogs_pfcp_sess_clear(&sess->pfcp);
37
-    ogs_pfcp_send_error_message(xact, sess ? sess->sgwu_sxa_seid : 0,
38
+    ogs_pfcp_send_error_message(
39
+            xact, sess ? sess->sgwc_sxa_f_seid.seid : message->h.seid,
40
             OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE,
41
             cause_value, offending_ie_value);
42
 }
43
 
44
 void sgwu_sxa_handle_session_modification_request(
45
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, 
46
-        ogs_pfcp_session_modification_request_t *req)
47
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
48
 {
49
     ogs_pfcp_pdr_t *pdr = NULL;
50
     ogs_pfcp_far_t *far = NULL;
51
@@ -159,7 +163,11 @@
52
     uint8_t offending_ie_value = 0;
53
     int i;
54
 
55
+    ogs_pfcp_session_modification_request_t *req = NULL;
56
+
57
     ogs_assert(xact);
58
+    ogs_assert(message);
59
+    req = &message->pfcp_session_modification_request;
60
     ogs_assert(req);
61
 
62
     ogs_debug("Session Modification Request");
63
@@ -168,7 +176,8 @@
64
 
65
     if (!sess) {
66
         ogs_error("No Context");
67
-        ogs_pfcp_send_error_message(xact, 0,
68
+        ogs_pfcp_send_error_message(
69
+                xact, sess ? sess->sgwc_sxa_f_seid.seid : message->h.seid,
70
                 OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE,
71
                 OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
72
         return;
73
@@ -309,23 +318,28 @@
74
 
75
 cleanup:
76
     ogs_pfcp_sess_clear(&sess->pfcp);
77
-    ogs_pfcp_send_error_message(xact, sess ? sess->sgwu_sxa_seid : 0,
78
+    ogs_pfcp_send_error_message(
79
+            xact, sess ? sess->sgwc_sxa_f_seid.seid : message->h.seid,
80
             OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE,
81
             cause_value, offending_ie_value);
82
 }
83
 
84
 void sgwu_sxa_handle_session_deletion_request(
85
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
86
-        ogs_pfcp_session_deletion_request_t *req)
87
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
88
 {
89
+    ogs_pfcp_session_deletion_request_t *req = NULL;
90
+
91
     ogs_assert(xact);
92
+    ogs_assert(message);
93
+    req = &message->pfcp_session_deletion_request;
94
     ogs_assert(req);
95
 
96
     ogs_debug("Session Deletion Request");
97
 
98
     if (!sess) {
99
         ogs_error("No Context");
100
-        ogs_pfcp_send_error_message(xact, 0,
101
+        ogs_pfcp_send_error_message(
102
+                xact, sess ? sess->sgwc_sxa_f_seid.seid : message->h.seid,
103
                 OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE,
104
                 OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
105
         return;
106
@@ -339,12 +353,15 @@
107
 }
108
 
109
 void sgwu_sxa_handle_session_report_response(
110
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
111
-        ogs_pfcp_session_report_response_t *rsp)
112
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
113
 {
114
     uint8_t cause_value = 0;
115
 
116
+    ogs_pfcp_session_report_response_t *rsp = NULL;
117
+
118
     ogs_assert(xact);
119
+    ogs_assert(message);
120
+    rsp = &message->pfcp_session_report_response;
121
     ogs_assert(rsp);
122
 
123
     ogs_pfcp_xact_commit(xact);
124
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/sgwu/sxa-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/sgwu/sxa-handler.h Changed
24
 
1
@@ -27,18 +27,14 @@
2
 #endif
3
 
4
 void sgwu_sxa_handle_session_establishment_request(
5
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
6
-        ogs_pfcp_session_establishment_request_t *req);
7
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
8
 void sgwu_sxa_handle_session_modification_request(
9
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
10
-        ogs_pfcp_session_modification_request_t *req);
11
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
12
 void sgwu_sxa_handle_session_deletion_request(
13
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
14
-        ogs_pfcp_session_deletion_request_t *req);
15
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
16
 
17
 void sgwu_sxa_handle_session_report_response(
18
-        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact,
19
-        ogs_pfcp_session_report_response_t *rsp);
20
+        sgwu_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
21
 
22
 #ifdef __cplusplus
23
 }
24
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/gsm-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/gsm-sm.c Changed
106
 
1
@@ -218,8 +218,7 @@
2
         switch(gtp2_message->h.type) {
3
         case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
4
             gtp2_cause = smf_s5c_handle_create_session_request(sess,
5
-                            e->gtp_xact,
6
-                            &e->gtp2_message->create_session_request);
7
+                            e->gtp_xact, gtp2_message);
8
             if (gtp2_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
9
                 send_gtp_create_err_msg(sess, e->gtp_xact, gtp2_cause);
10
                 return;
11
@@ -337,6 +336,7 @@
12
     ogs_diam_gy_message_t *gy_message = NULL;
13
     ogs_diam_gx_message_t *gx_message = NULL;
14
     uint32_t diam_err;
15
+    bool need_gy_terminate = false;
16
 
17
     ogs_assert(s);
18
     ogs_assert(e);
19
@@ -392,7 +392,7 @@
20
             case OGS_DIAM_GY_CC_REQUEST_TYPE_INITIAL_REQUEST:
21
                 ogs_assert(e->gtp_xact);
22
                 diam_err = smf_gy_handle_cca_initial_request(sess,
23
-                                gy_message, e->gtp_xact);
24
+                                gy_message, e->gtp_xact, &need_gy_terminate);
25
                 sess->sm_data.gy_ccr_init_in_flight = false;
26
                 sess->sm_data.gy_cca_init_err = diam_err;
27
                 goto test_can_proceed;
28
@@ -422,8 +422,16 @@
29
                 smf_epc_pfcp_send_session_establishment_request(
30
                     sess, e->gtp_xact, 0));
31
         } else {
32
-            /* FIXME: tear down Gx/Gy session
33
-             * if its sm_data.*init_err == ER_DIAMETER_SUCCESS */
34
+            /* Tear down Gx/Gy session if its sm_data.*init_err == ER_DIAMETER_SUCCESS */
35
+            if (sess->sm_data.gx_cca_init_err == ER_DIAMETER_SUCCESS) {
36
+                sess->sm_data.gx_ccr_term_in_flight = true;
37
+                smf_gx_send_ccr(sess, e->gtp_xact, OGS_DIAM_GX_CC_REQUEST_TYPE_TERMINATION_REQUEST);
38
+            }
39
+            if (smf_use_gy_iface() == 1 &&
40
+                (sess->sm_data.gy_cca_init_err == ER_DIAMETER_SUCCESS || need_gy_terminate)) {
41
+                sess->sm_data.gy_ccr_term_in_flight = true;
42
+                smf_gy_send_ccr(sess, e->gtp_xact, OGS_DIAM_GY_CC_REQUEST_TYPE_TERMINATION_REQUEST);
43
+            }
44
             uint8_t gtp_cause = gtp_cause_from_diameter(
45
                                     e->gtp_xact->gtp_version, diam_err, NULL);
46
             send_gtp_create_err_msg(sess, e->gtp_xact, gtp_cause);
47
@@ -612,8 +620,7 @@
48
                 ogs_assert(gtp_xact);
49
 
50
                 pfcp_cause = smf_epc_n4_handle_session_establishment_response(
51
-                        sess, pfcp_xact,
52
-                        &pfcp_message->pfcp_session_establishment_response);
53
+                        sess, pfcp_xact, pfcp_message);
54
                 if (pfcp_cause != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
55
                     /* FIXME: tear down Gy and Gx */
56
                     gtp_cause = gtp_cause_from_pfcp(
57
@@ -662,8 +669,7 @@
58
                 smf_bearer_binding(sess);
59
             } else {
60
                 pfcp_cause = smf_5gc_n4_handle_session_establishment_response(
61
-                        sess, pfcp_xact,
62
-                        &pfcp_message->pfcp_session_establishment_response);
63
+                        sess, pfcp_xact, pfcp_message);
64
                 if (pfcp_cause != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
65
                     OGS_FSM_TRAN(s, smf_gsm_state_5gc_n1_n2_reject);
66
                     return;
67
@@ -775,8 +781,7 @@
68
         switch(gtp2_message->h.type) {
69
         case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
70
             gtp2_cause = smf_s5c_handle_delete_session_request(
71
-                            sess, e->gtp_xact,
72
-                            &gtp2_message->delete_session_request);
73
+                            sess, e->gtp_xact, gtp2_message);
74
             if (gtp2_cause != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
75
                 ogs_gtp2_send_error_message(e->gtp_xact, sess->sgw_s5c_teid,
76
                         OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, gtp2_cause);
77
@@ -786,7 +791,7 @@
78
             break;
79
         case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
80
             release = smf_s5c_handle_delete_bearer_response(
81
-                sess, e->gtp_xact, &e->gtp2_message->delete_bearer_response);
82
+                sess, e->gtp_xact, gtp2_message);
83
             if (release) {
84
                 e->gtp_xact = NULL;
85
                 OGS_FSM_TRAN(s, smf_gsm_state_wait_pfcp_deletion);
86
@@ -1301,8 +1306,7 @@
87
                 gtp_xact = pfcp_xact->assoc_xact;
88
 
89
                 pfcp_cause = smf_epc_n4_handle_session_deletion_response(
90
-                            sess, pfcp_xact,
91
-                            &pfcp_message->pfcp_session_deletion_response);
92
+                            sess, pfcp_xact, pfcp_message);
93
                 if (pfcp_cause != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
94
                     /* FIXME: tear down Gy and Gx */
95
                     ogs_assert(gtp_xact);
96
@@ -1325,8 +1329,7 @@
97
                 ogs_pfcp_xact_commit(pfcp_xact);
98
 
99
                 status = smf_5gc_n4_handle_session_deletion_response(
100
-                            sess, stream, trigger,
101
-                            &pfcp_message->pfcp_session_deletion_response);
102
+                            sess, stream, trigger, pfcp_message);
103
                 if (status != OGS_SBI_HTTP_STATUS_OK) {
104
                     ogs_error(
105
                         "%d smf_5gc_n4_handle_session_deletion_response() "
106
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/gy-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/gy-handler.c Changed
57
 
1
@@ -113,24 +113,41 @@
2
     }
3
 }
4
 
5
-/* Returns ER_DIAMETER_SUCCESS on success, Diameter error code on failue. */
6
+/* Returns ER_DIAMETER_SUCCESS on success, Diameter error code on failue.
7
+ * Upon failure, CCR-Terminate is needed based on "need_termination" value (this
8
+ * may happen eg. if messaged RC is successful but MSCC RC is rejected). */
9
 uint32_t smf_gy_handle_cca_initial_request(
10
         smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
11
-        ogs_gtp_xact_t *gtp_xact)
12
+        ogs_gtp_xact_t *gtp_xact,
13
+        bool *need_termination)
14
 {
15
     smf_bearer_t *bearer;
16
 
17
     ogs_assert(sess);
18
     ogs_assert(gy_message);
19
     ogs_assert(gtp_xact);
20
+    ogs_assert(need_termination);
21
 
22
     ogs_debug("Gy CCA Initial");
23
     ogs_debug("    SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x",
24
             sess->sgw_s5c_teid, sess->smf_n4_teid);
25
 
26
-    if (gy_message->result_code != ER_DIAMETER_SUCCESS)
27
+    *need_termination = false;
28
+    if (gy_message->result_code != ER_DIAMETER_SUCCESS) {
29
+        ogs_warn("Gy CCA Initial Diameter failure: res=%u",
30
+            gy_message->result_code);
31
         return gy_message->err ? *gy_message->err :
32
                                  ER_DIAMETER_AUTHENTICATION_REJECTED;
33
+    }
34
+    if (gy_message->cca.result_code != ER_DIAMETER_SUCCESS) {
35
+        ogs_warn("Gy CCA Initial Diameter Multiple-Services-Credit-Control Result-Code=%u",
36
+            gy_message->cca.result_code);
37
+        /* Message RC was successful but MSCC was rejected. The session needs to
38
+         * be tear down through CCR-T: */
39
+        *need_termination = true;
40
+        return gy_message->cca.err ? *gy_message->cca.err :
41
+                                     ER_DIAMETER_AUTHENTICATION_REJECTED;
42
+    }
43
 
44
     bearer = smf_default_bearer_in_sess(sess);
45
     ogs_assert(bearer);
46
@@ -173,8 +190,8 @@
47
             sess->sgw_s5c_teid, sess->smf_n4_teid);
48
 
49
     if (gy_message->result_code != ER_DIAMETER_SUCCESS) {
50
-        ogs_warn("Gy CCA Update Diameter failure: res=%u err=%u",
51
-            gy_message->result_code, *gy_message->err);
52
+        ogs_warn("Gy CCA Update Diameter failure: Result-Code=%u",
53
+            gy_message->result_code);
54
         return gy_message->err ? *gy_message->err :
55
                                  ER_DIAMETER_AUTHENTICATION_REJECTED;
56
     }
57
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/gy-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/gy-handler.h Changed
11
 
1
@@ -29,7 +29,8 @@
2
 
3
 uint32_t smf_gy_handle_cca_initial_request(
4
         smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
5
-        ogs_gtp_xact_t *gtp_xact);
6
+        ogs_gtp_xact_t *gtp_xact,
7
+        bool *need_termination);
8
 uint32_t smf_gy_handle_cca_update_request(
9
         smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
10
         ogs_pfcp_xact_t *pfcp_xact);
11
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/n4-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/n4-handler.c Changed
192
 
1
@@ -144,7 +144,7 @@
2
  * other cause value on failure */
3
 uint8_t smf_5gc_n4_handle_session_establishment_response(
4
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
5
-        ogs_pfcp_session_establishment_response_t *rsp)
6
+        ogs_pfcp_message_t *pfcp_message)
7
 {
8
     int i;
9
 
10
@@ -156,8 +156,12 @@
11
     ogs_pfcp_pdr_t *pdr = NULL;
12
     ogs_pfcp_far_t *far = NULL;
13
 
14
+    ogs_pfcp_session_establishment_response_t *rsp = NULL;
15
+
16
     ogs_assert(sess);
17
     ogs_assert(xact);
18
+    ogs_assert(pfcp_message);
19
+    rsp = &pfcp_message->pfcp_session_establishment_response;
20
     ogs_assert(rsp);
21
 
22
     ogs_debug("Session Establishment Response 5gc");
23
@@ -240,18 +244,22 @@
24
 
25
 void smf_5gc_n4_handle_session_modification_response(
26
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
27
-        ogs_pfcp_session_modification_response_t *rsp)
28
+        ogs_pfcp_message_t *pfcp_message)
29
 {
30
     int status = 0;
31
     uint64_t flags = 0;
32
     ogs_sbi_stream_t *stream = NULL;
33
     smf_bearer_t *qos_flow = NULL;
34
 
35
+    ogs_pfcp_session_modification_response_t *rsp = NULL;
36
+
37
     OGS_LIST(pdr_to_create_list);
38
 
39
     ogs_debug("Session Modification Response 5gc");
40
 
41
     ogs_assert(xact);
42
+    ogs_assert(pfcp_message);
43
+    rsp = &pfcp_message->pfcp_session_modification_response;
44
     ogs_assert(rsp);
45
 
46
     flags = xact->modify_flags;
47
@@ -665,12 +673,16 @@
48
 
49
 int smf_5gc_n4_handle_session_deletion_response(
50
         smf_sess_t *sess, ogs_sbi_stream_t *stream, int trigger,
51
-        ogs_pfcp_session_deletion_response_t *rsp)
52
+        ogs_pfcp_message_t *pfcp_message)
53
 {
54
     int status = 0;
55
 
56
+    ogs_pfcp_session_deletion_response_t *rsp = NULL;
57
+
58
     ogs_debug("Session Deletion Response 5gc");
59
 
60
+    ogs_assert(pfcp_message);
61
+    rsp = &pfcp_message->pfcp_session_deletion_response;
62
     ogs_assert(rsp);
63
     ogs_assert(trigger);
64
 
65
@@ -725,7 +737,7 @@
66
  * other cause value on failure */
67
 uint8_t smf_epc_n4_handle_session_establishment_response(
68
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
69
-        ogs_pfcp_session_establishment_response_t *rsp)
70
+        ogs_pfcp_message_t *pfcp_message)
71
 {
72
     uint8_t cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
73
 
74
@@ -733,8 +745,12 @@
75
 
76
     ogs_pfcp_f_seid_t *up_f_seid = NULL;
77
 
78
+    ogs_pfcp_session_establishment_response_t *rsp = NULL;
79
+
80
     ogs_assert(sess);
81
     ogs_assert(xact);
82
+    ogs_assert(pfcp_message);
83
+    rsp = &pfcp_message->pfcp_session_establishment_response;
84
     ogs_assert(rsp);
85
 
86
     ogs_debug("Session Establishment Response epc");
87
@@ -828,7 +844,7 @@
88
 void smf_epc_n4_handle_session_modification_response(
89
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
90
         ogs_gtp2_message_t *recv_message,
91
-        ogs_pfcp_session_modification_response_t *rsp)
92
+        ogs_pfcp_message_t *pfcp_message)
93
 {
94
     int i;
95
 
96
@@ -844,9 +860,13 @@
97
     ogs_pfcp_pdr_t *pdr = NULL;
98
     ogs_pfcp_far_t *far = NULL;
99
 
100
+    ogs_pfcp_session_modification_response_t *rsp = NULL;
101
+
102
     OGS_LIST(pdr_to_create_list);
103
 
104
     ogs_assert(xact);
105
+    ogs_assert(pfcp_message);
106
+    rsp = &pfcp_message->pfcp_session_modification_response;
107
     ogs_assert(rsp);
108
 
109
     ogs_debug("Session Modification Response epc");
110
@@ -1093,13 +1113,17 @@
111
 
112
 uint8_t smf_epc_n4_handle_session_deletion_response(
113
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
114
-        ogs_pfcp_session_deletion_response_t *rsp)
115
+        ogs_pfcp_message_t *pfcp_message)
116
 {
117
     smf_bearer_t *bearer = NULL;
118
     unsigned int i;
119
 
120
+    ogs_pfcp_session_deletion_response_t *rsp = NULL;
121
+
122
     ogs_assert(sess);
123
     ogs_assert(xact);
124
+    ogs_assert(pfcp_message);
125
+    rsp = &pfcp_message->pfcp_session_deletion_response;
126
     ogs_assert(rsp);
127
 
128
     ogs_debug("Session Deletion Response epc");
129
@@ -1149,7 +1173,7 @@
130
 
131
 void smf_n4_handle_session_report_request(
132
         smf_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
133
-        ogs_pfcp_session_report_request_t *pfcp_req)
134
+        ogs_pfcp_message_t *pfcp_message)
135
 {
136
     smf_ue_t *smf_ue = NULL;
137
     smf_bearer_t *qos_flow = NULL;
138
@@ -1162,9 +1186,13 @@
139
     uint16_t pdr_id = 0;
140
     unsigned int i;
141
 
142
+    ogs_pfcp_session_report_request_t *pfcp_req = NULL;
143
+
144
     smf_metrics_inst_global_inc(SMF_METR_GLOB_CTR_SM_N4SESSIONREPORT);
145
 
146
     ogs_assert(pfcp_xact);
147
+    ogs_assert(pfcp_message);
148
+    pfcp_req = &pfcp_message->pfcp_session_report_request;
149
     ogs_assert(pfcp_req);
150
 
151
     ogs_debug("Session Report Request");
152
@@ -1182,7 +1210,8 @@
153
     }
154
 
155
     if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
156
-        ogs_pfcp_send_error_message(pfcp_xact, 0,
157
+        ogs_pfcp_send_error_message(pfcp_xact,
158
+                sess ? sess->upf_n4_seid : pfcp_message->h.seid,
159
                 OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
160
                 cause_value, 0);
161
         return;
162
@@ -1222,7 +1251,8 @@
163
                     if (paging_policy_indication_value) {
164
                         ogs_warn("Not implement - "
165
                                 "Paging Policy Indication Value");
166
-                        ogs_pfcp_send_error_message(pfcp_xact, 0,
167
+                        ogs_pfcp_send_error_message(pfcp_xact,
168
+                                sess ? sess->upf_n4_seid : pfcp_message->h.seid,
169
                                 OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
170
                                 OGS_PFCP_CAUSE_SERVICE_NOT_SUPPORTED, 0);
171
                         return;
172
@@ -1232,7 +1262,8 @@
173
                         qos_flow = smf_qos_flow_find_by_qfi(sess, qfi);
174
                         if (!qos_flow) {
175
                             ogs_error("Cannot find the QoS Flow%d", qfi);
176
-                            ogs_pfcp_send_error_message(pfcp_xact, 0,
177
+                            ogs_pfcp_send_error_message(pfcp_xact,
178
+                                sess ? sess->upf_n4_seid : pfcp_message->h.seid,
179
                                 OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
180
                                 OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
181
                             return;
182
@@ -1257,7 +1288,8 @@
183
 
184
         if (!pdr) {
185
             ogs_error("No Context");
186
-            ogs_pfcp_send_error_message(pfcp_xact, 0,
187
+            ogs_pfcp_send_error_message(pfcp_xact,
188
+                    sess ? sess->upf_n4_seid : pfcp_message->h.seid,
189
                     OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
190
                     OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
191
             return;
192
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/n4-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/n4-handler.h Changed
37
 
1
@@ -28,28 +28,28 @@
2
 
3
 uint8_t smf_5gc_n4_handle_session_establishment_response(
4
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
5
-        ogs_pfcp_session_establishment_response_t *rsp);
6
+        ogs_pfcp_message_t *pfcp_message);
7
 void smf_5gc_n4_handle_session_modification_response(
8
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
9
-        ogs_pfcp_session_modification_response_t *rsp);
10
+        ogs_pfcp_message_t *pfcp_message);
11
 int smf_5gc_n4_handle_session_deletion_response(
12
         smf_sess_t *sess, ogs_sbi_stream_t *stream, int trigger,
13
-        ogs_pfcp_session_deletion_response_t *rsp);
14
+        ogs_pfcp_message_t *pfcp_message);
15
 
16
 uint8_t smf_epc_n4_handle_session_establishment_response(
17
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
18
-        ogs_pfcp_session_establishment_response_t *rsp);
19
+        ogs_pfcp_message_t *pfcp_message);
20
 void smf_epc_n4_handle_session_modification_response(
21
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
22
         ogs_gtp2_message_t *recv_message,
23
-        ogs_pfcp_session_modification_response_t *rsp);
24
+        ogs_pfcp_message_t *pfcp_message);
25
 uint8_t smf_epc_n4_handle_session_deletion_response(
26
         smf_sess_t *sess, ogs_pfcp_xact_t *xact,
27
-        ogs_pfcp_session_deletion_response_t *rsp);
28
+        ogs_pfcp_message_t *pfcp_message);
29
 
30
 void smf_n4_handle_session_report_request(
31
         smf_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
32
-        ogs_pfcp_session_report_request_t *pfcp_req);
33
+        ogs_pfcp_message_t *pfcp_message);
34
 
35
 uint8_t gtp_cause_from_pfcp(uint8_t pfcp_cause, uint8_t gtp_version);
36
 
37
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/pfcp-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/pfcp-sm.c Changed
24
 
1
@@ -337,11 +337,10 @@
2
 
3
             if (xact->epc)
4
                 smf_epc_n4_handle_session_modification_response(
5
-                    sess, xact, e->gtp2_message,
6
-                    &message->pfcp_session_modification_response);
7
+                    sess, xact, e->gtp2_message, message);
8
             else
9
                 smf_5gc_n4_handle_session_modification_response(
10
-                    sess, xact, &message->pfcp_session_modification_response);
11
+                    sess, xact, message);
12
             break;
13
 
14
         case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE:
15
@@ -371,7 +370,7 @@
16
             if (!message->h.seid_presence) ogs_error("No SEID");
17
 
18
             smf_n4_handle_session_report_request(
19
-                sess, xact, &message->pfcp_session_report_request);
20
+                sess, xact, message);
21
             break;
22
 
23
         default:
24
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/s5c-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/s5c-handler.c Changed
201
 
1
@@ -70,7 +70,7 @@
2
 
3
 uint8_t smf_s5c_handle_create_session_request(
4
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
5
-        ogs_gtp2_create_session_request_t *req)
6
+        ogs_gtp2_message_t *gtp2_message)
7
 {
8
     char buf1OGS_ADDRSTRLEN;
9
     char buf2OGS_ADDRSTRLEN;
10
@@ -89,8 +89,11 @@
11
     ogs_gtp2_ambr_t *ambr = NULL;
12
     uint16_t decoded = 0;
13
 
14
+    ogs_gtp2_create_session_request_t *req = NULL;
15
+
16
     ogs_assert(sess);
17
     ogs_assert(xact);
18
+    req = &gtp2_message->create_session_request;
19
     ogs_assert(req);
20
 
21
     ogs_debug("Create Session Request");
22
@@ -104,7 +107,18 @@
23
     if (req->sender_f_teid_for_control_plane.presence == 0) {
24
         ogs_error("No TEID");
25
         cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
26
+    } else {
27
+        /* Control Plane(DL) : SGW-S5C */
28
+        sgw_s5c_teid = req->sender_f_teid_for_control_plane.data;
29
+        ogs_assert(sgw_s5c_teid);
30
+        sess->sgw_s5c_teid = be32toh(sgw_s5c_teid->teid);
31
+        rv = ogs_gtp2_f_teid_to_ip(sgw_s5c_teid, &sess->sgw_s5c_ip);
32
+        ogs_assert(rv == OGS_OK);
33
+
34
+        ogs_debug("    SGW_S5C_TEID0x%x SMF_N4_TEID0x%x",
35
+                sess->sgw_s5c_teid, sess->smf_n4_teid);
36
     }
37
+
38
     if (req->bearer_contexts_to_be_created0.presence == 0) {
39
         ogs_error("No Bearer");
40
         cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
41
@@ -278,16 +292,6 @@
42
         sess->ipv4 ? OGS_INET_NTOP(&sess->ipv4->addr, buf1) : "",
43
         sess->ipv6 ? OGS_INET6_NTOP(&sess->ipv6->addr, buf2) : "");
44
 
45
-    /* Control Plane(DL) : SGW-S5C */
46
-    sgw_s5c_teid = req->sender_f_teid_for_control_plane.data;
47
-    ogs_assert(sgw_s5c_teid);
48
-    sess->sgw_s5c_teid = be32toh(sgw_s5c_teid->teid);
49
-    rv = ogs_gtp2_f_teid_to_ip(sgw_s5c_teid, &sess->sgw_s5c_ip);
50
-    ogs_assert(rv == OGS_OK);
51
-
52
-    ogs_debug("    SGW_S5C_TEID0x%x SMF_N4_TEID0x%x",
53
-            sess->sgw_s5c_teid, sess->smf_n4_teid);
54
-
55
     /* Remove all previous bearer */
56
     smf_bearer_remove_all(sess);
57
 
58
@@ -422,11 +426,14 @@
59
 
60
 uint8_t smf_s5c_handle_delete_session_request(
61
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
62
-        ogs_gtp2_delete_session_request_t *req)
63
+        ogs_gtp2_message_t *gtp2_message)
64
 {
65
+    ogs_gtp2_delete_session_request_t *req = NULL;
66
+
67
     ogs_debug("Delete Session Request");
68
 
69
     ogs_assert(xact);
70
+    req = &gtp2_message->delete_session_request;
71
     ogs_assert(req);
72
 
73
     if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
74
@@ -479,7 +486,7 @@
75
 
76
 void smf_s5c_handle_modify_bearer_request(
77
         smf_sess_t *sess, ogs_gtp_xact_t *gtp_xact,
78
-        ogs_pkbuf_t *gtpbuf, ogs_gtp2_modify_bearer_request_t *req)
79
+        ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *gtp2_message)
80
 {
81
     int rv, i;
82
     uint8_t cause_value = 0;
83
@@ -488,9 +495,13 @@
84
     smf_ue_t *smf_ue = NULL;
85
     smf_bearer_t *bearer = NULL;
86
 
87
+    ogs_gtp2_modify_bearer_request_t *req = NULL;
88
+
89
     ogs_debug("Modify Bearer Request");
90
 
91
     ogs_assert(gtp_xact);
92
+    ogs_assert(gtp2_message);
93
+    req = &gtp2_message->modify_bearer_request;
94
     ogs_assert(req);
95
 
96
     /************************
97
@@ -504,7 +515,8 @@
98
     }
99
 
100
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
101
-        ogs_gtp2_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
102
+        ogs_gtp2_send_error_message(gtp_xact,
103
+                sess ? sess->sgw_s5c_teid : gtp2_message->h.teid,
104
                 OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
105
         return;
106
     }
107
@@ -648,7 +660,7 @@
108
 
109
 void smf_s5c_handle_create_bearer_response(
110
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
111
-        ogs_gtp2_create_bearer_response_t *rsp)
112
+        ogs_gtp2_message_t *gtp2_message)
113
 {
114
     int rv;
115
     uint8_t cause_value;
116
@@ -657,7 +669,10 @@
117
     smf_bearer_t *bearer = NULL;
118
     ogs_pfcp_far_t *dl_far = NULL;
119
 
120
+    ogs_gtp2_create_bearer_response_t *rsp = NULL;
121
+
122
     ogs_assert(sess);
123
+    rsp = &gtp2_message->create_bearer_response;
124
     ogs_assert(rsp);
125
 
126
     ogs_debug("Create Bearer Response");
127
@@ -822,7 +837,7 @@
128
 
129
 void smf_s5c_handle_update_bearer_response(
130
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
131
-        ogs_gtp2_update_bearer_response_t *rsp)
132
+        ogs_gtp2_message_t *gtp2_message)
133
 {
134
     int rv;
135
     uint8_t cause_value;
136
@@ -831,7 +846,10 @@
137
     uint64_t pfcp_flags = 0;
138
     smf_bearer_t *bearer = NULL;
139
 
140
+    ogs_gtp2_update_bearer_response_t *rsp = NULL;
141
+
142
     ogs_assert(sess);
143
+    rsp = &gtp2_message->update_bearer_response;
144
     ogs_assert(rsp);
145
 
146
     ogs_debug("Update Bearer Response");
147
@@ -929,13 +947,16 @@
148
 /* return true if entire session must be released */
149
 bool smf_s5c_handle_delete_bearer_response(
150
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
151
-        ogs_gtp2_delete_bearer_response_t *rsp)
152
+        ogs_gtp2_message_t *gtp2_message)
153
 {
154
     int rv;
155
     uint8_t cause_value;
156
     smf_bearer_t *bearer = NULL;
157
 
158
+    ogs_gtp2_delete_bearer_response_t *rsp = NULL;
159
+
160
     ogs_assert(sess);
161
+    rsp = &gtp2_message->delete_bearer_response;
162
     ogs_assert(rsp);
163
 
164
     ogs_debug("Delete Bearer Response");
165
@@ -1132,7 +1153,7 @@
166
 
167
 void smf_s5c_handle_bearer_resource_command(
168
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
169
-        ogs_gtp2_bearer_resource_command_t *cmd)
170
+        ogs_gtp2_message_t *gtp2_message)
171
 {
172
     int rv;
173
     uint8_t cause_value = 0;
174
@@ -1151,7 +1172,11 @@
175
     int qos_update = 0;
176
     int tft_delete = 0;
177
 
178
+    ogs_gtp2_bearer_resource_command_t *cmd = NULL;
179
+
180
     ogs_assert(xact);
181
+    ogs_assert(gtp2_message);
182
+    cmd = &gtp2_message->bearer_resource_command;
183
     ogs_assert(cmd);
184
 
185
     ogs_debug("Bearer Resource Command");
186
@@ -1186,7 +1211,8 @@
187
     }
188
 
189
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
190
-        ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
191
+        ogs_gtp2_send_error_message(xact,
192
+                sess ? sess->sgw_s5c_teid : gtp2_message->h.teid,
193
                 OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
194
         return;
195
     }
196
@@ -1211,7 +1237,8 @@
197
     }
198
 
199
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
200
-        ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
201
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/s5c-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/s5c-handler.h Changed
34
 
1
@@ -33,25 +33,25 @@
2
 
3
 uint8_t smf_s5c_handle_create_session_request(
4
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
5
-        ogs_gtp2_create_session_request_t *req);
6
+        ogs_gtp2_message_t *gtp2_message);
7
 uint8_t smf_s5c_handle_delete_session_request(
8
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
9
-        ogs_gtp2_delete_session_request_t *req);
10
+        ogs_gtp2_message_t *gtp2_message);
11
 void smf_s5c_handle_modify_bearer_request(
12
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
13
-        ogs_pkbuf_t *gtpbuf, ogs_gtp2_modify_bearer_request_t *req);
14
+        ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *gtp2_message);
15
 void smf_s5c_handle_create_bearer_response(
16
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
17
-        ogs_gtp2_create_bearer_response_t *rsp);
18
+        ogs_gtp2_message_t *gtp2_message);
19
 void smf_s5c_handle_update_bearer_response(
20
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
21
-        ogs_gtp2_update_bearer_response_t *rsp);
22
+        ogs_gtp2_message_t *gtp2_message);
23
 bool smf_s5c_handle_delete_bearer_response(
24
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
25
-        ogs_gtp2_delete_bearer_response_t *rsp);
26
+        ogs_gtp2_message_t *gtp2_message);
27
 void smf_s5c_handle_bearer_resource_command(
28
         smf_sess_t *sess, ogs_gtp_xact_t *xact,
29
-        ogs_gtp2_bearer_resource_command_t *cmd);
30
+        ogs_gtp2_message_t *gtp2_message);
31
 
32
 #ifdef __cplusplus
33
 }
34
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/smf/smf-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/smf/smf-sm.c Changed
49
 
1
@@ -144,7 +144,7 @@
2
             }
3
             if (!sess) {
4
                 ogs_error("No Session");
5
-                ogs_gtp2_send_error_message(gtp_xact, 0,
6
+                ogs_gtp2_send_error_message(gtp_xact, gtp2_message.h.teid,
7
                         OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
8
                         OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
9
                 break;
10
@@ -158,7 +158,7 @@
11
             smf_metrics_inst_gtp_node_inc(smf_gnode->metrics, SMF_METR_GTP_NODE_CTR_S5C_RX_DELETESESSIONREQ);
12
             if (!sess) {
13
                 ogs_error("No Session");
14
-                ogs_gtp2_send_error_message(gtp_xact, 0,
15
+                ogs_gtp2_send_error_message(gtp_xact, gtp2_message.h.teid,
16
                         OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE,
17
                         OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
18
                 break;
19
@@ -169,17 +169,17 @@
20
         case OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE:
21
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
22
             smf_s5c_handle_modify_bearer_request(
23
-                sess, gtp_xact, recvbuf, &gtp2_message.modify_bearer_request);
24
+                sess, gtp_xact, recvbuf, &gtp2_message);
25
             break;
26
         case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE:
27
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
28
             smf_s5c_handle_create_bearer_response(
29
-                sess, gtp_xact, &gtp2_message.create_bearer_response);
30
+                sess, gtp_xact, &gtp2_message);
31
             break;
32
         case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE:
33
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
34
             smf_s5c_handle_update_bearer_response(
35
-                sess, gtp_xact, &gtp2_message.update_bearer_response);
36
+                sess, gtp_xact, &gtp2_message);
37
             break;
38
         case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
39
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
40
@@ -194,7 +194,7 @@
41
         case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
42
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
43
             smf_s5c_handle_bearer_resource_command(
44
-                sess, gtp_xact, &gtp2_message.bearer_resource_command);
45
+                sess, gtp_xact, &gtp2_message);
46
             break;
47
         default:
48
             ogs_warn("Not implemented(type:%d)", gtp2_message.h.type);
49
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/upf/n4-handler.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/upf/n4-handler.c Changed
128
 
1
@@ -44,8 +44,7 @@
2
 }
3
 
4
 void upf_n4_handle_session_establishment_request(
5
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
6
-        ogs_pfcp_session_establishment_request_t *req)
7
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
8
 {
9
     ogs_pfcp_pdr_t *pdr = NULL;
10
     ogs_pfcp_far_t *far = NULL;
11
@@ -58,9 +57,13 @@
12
     ogs_pfcp_sereq_flags_t sereq_flags;
13
     bool restoration_indication = false;
14
 
15
+    ogs_pfcp_session_establishment_request_t *req = NULL;
16
+
17
     upf_metrics_inst_global_inc(UPF_METR_GLOB_CTR_SM_N4SESSIONESTABREQ);
18
 
19
     ogs_assert(xact);
20
+    ogs_assert(message);
21
+    req = &message->pfcp_session_establishment_request;
22
     ogs_assert(req);
23
 
24
     ogs_debug("Session Establishment Request");
25
@@ -69,7 +72,8 @@
26
 
27
     if (!sess) {
28
         ogs_error("No Context");
29
-        ogs_pfcp_send_error_message(xact, 0,
30
+        ogs_pfcp_send_error_message(
31
+                xact, sess ? sess->smf_n4_f_seid.seid : message->h.seid,
32
                 OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE,
33
                 OGS_PFCP_CAUSE_MANDATORY_IE_MISSING, 0);
34
         upf_metrics_inst_by_cause_add(OGS_PFCP_CAUSE_MANDATORY_IE_MISSING,
35
@@ -214,14 +218,14 @@
36
     upf_metrics_inst_by_cause_add(cause_value,
37
             UPF_METR_CTR_SM_N4SESSIONESTABFAIL, 1);
38
     ogs_pfcp_sess_clear(&sess->pfcp);
39
-    ogs_pfcp_send_error_message(xact, sess ? sess->smf_n4_f_seid.seid : 0,
40
+    ogs_pfcp_send_error_message(
41
+            xact, sess ? sess->smf_n4_f_seid.seid : message->h.seid,
42
             OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE,
43
             cause_value, offending_ie_value);
44
 }
45
 
46
 void upf_n4_handle_session_modification_request(
47
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
48
-        ogs_pfcp_session_modification_request_t *req)
49
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
50
 {
51
     ogs_pfcp_pdr_t *pdr = NULL;
52
     ogs_pfcp_far_t *far = NULL;
53
@@ -231,7 +235,11 @@
54
     uint8_t offending_ie_value = 0;
55
     int i;
56
 
57
+    ogs_pfcp_session_modification_request_t *req = NULL;
58
+
59
     ogs_assert(xact);
60
+    ogs_assert(message);
61
+    req = &message->pfcp_session_modification_request;
62
     ogs_assert(req);
63
 
64
     ogs_debug("Session Modification Request");
65
@@ -240,7 +248,8 @@
66
 
67
     if (!sess) {
68
         ogs_error("No Context");
69
-        ogs_pfcp_send_error_message(xact, 0,
70
+        ogs_pfcp_send_error_message(
71
+                xact, sess ? sess->smf_n4_f_seid.seid : message->h.seid,
72
                 OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE,
73
                 OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
74
         return;
75
@@ -413,25 +422,30 @@
76
 
77
 cleanup:
78
     ogs_pfcp_sess_clear(&sess->pfcp);
79
-    ogs_pfcp_send_error_message(xact, sess ? sess->smf_n4_f_seid.seid : 0,
80
+    ogs_pfcp_send_error_message(
81
+            xact, sess ? sess->smf_n4_f_seid.seid : message->h.seid,
82
             OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE,
83
             cause_value, offending_ie_value);
84
 }
85
 
86
 void upf_n4_handle_session_deletion_request(
87
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
88
-        ogs_pfcp_session_deletion_request_t *req)
89
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
90
 {
91
     ogs_pfcp_qer_t *qer = NULL;
92
 
93
+    ogs_pfcp_session_deletion_request_t *req = NULL;
94
+
95
     ogs_assert(xact);
96
+    ogs_assert(message);
97
+    req = &message->pfcp_session_deletion_request;
98
     ogs_assert(req);
99
 
100
     ogs_debug("Session Deletion Request");
101
 
102
     if (!sess) {
103
         ogs_error("No Context");
104
-        ogs_pfcp_send_error_message(xact, 0,
105
+        ogs_pfcp_send_error_message(xact,
106
+                sess ? sess->smf_n4_f_seid.seid : message->h.seid,
107
                 OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE,
108
                 OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0);
109
         return;
110
@@ -446,12 +460,15 @@
111
 }
112
 
113
 void upf_n4_handle_session_report_response(
114
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
115
-        ogs_pfcp_session_report_response_t *rsp)
116
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message)
117
 {
118
     uint8_t cause_value = 0;
119
 
120
+    ogs_pfcp_session_report_response_t *rsp = NULL;
121
+
122
     ogs_assert(xact);
123
+    ogs_assert(message);
124
+    rsp = &message->pfcp_session_report_response;
125
     ogs_assert(rsp);
126
 
127
     ogs_pfcp_xact_commit(xact);
128
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/upf/n4-handler.h -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/upf/n4-handler.h Changed
24
 
1
@@ -27,18 +27,14 @@
2
 #endif
3
 
4
 void upf_n4_handle_session_establishment_request(
5
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
6
-        ogs_pfcp_session_establishment_request_t *req);
7
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
8
 void upf_n4_handle_session_modification_request(
9
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
10
-        ogs_pfcp_session_modification_request_t *req);
11
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
12
 void upf_n4_handle_session_deletion_request(
13
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
14
-        ogs_pfcp_session_deletion_request_t *req);
15
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
16
 
17
 void upf_n4_handle_session_report_response(
18
-        upf_sess_t *sess, ogs_pfcp_xact_t *xact,
19
-        ogs_pfcp_session_report_response_t *rsp);
20
+        upf_sess_t *sess, ogs_pfcp_xact_t *xact, ogs_pfcp_message_t *message);
21
 
22
 #ifdef __cplusplus
23
 }
24
open5gs_2.7.0.126.eb2b.202404042026.tar.xz/src/upf/pfcp-sm.c -> open5gs_2.7.0.128.30648.202404052026.tar.xz/src/upf/pfcp-sm.c Changed
26
 
1
@@ -284,20 +284,16 @@
2
             sess = upf_sess_add_by_message(message);
3
             if (sess)
4
                 OGS_SETUP_PFCP_NODE(sess, node);
5
-            upf_n4_handle_session_establishment_request(
6
-                sess, xact, &message->pfcp_session_establishment_request);
7
+            upf_n4_handle_session_establishment_request(sess, xact, message);
8
             break;
9
         case OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE:
10
-            upf_n4_handle_session_modification_request(
11
-                sess, xact, &message->pfcp_session_modification_request);
12
+            upf_n4_handle_session_modification_request(sess, xact, message);
13
             break;
14
         case OGS_PFCP_SESSION_DELETION_REQUEST_TYPE:
15
-            upf_n4_handle_session_deletion_request(
16
-                sess, xact, &message->pfcp_session_deletion_request);
17
+            upf_n4_handle_session_deletion_request(sess, xact, message);
18
             break;
19
         case OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE:
20
-            upf_n4_handle_session_report_response(
21
-                sess, xact, &message->pfcp_session_report_response);
22
+            upf_n4_handle_session_report_response(sess, xact, message);
23
             break;
24
         default:
25
             ogs_error("Not implemented PFCP message type%d",
26