Changes of Revision 965

open5gs_2.7.2.4610.056b.202502102026.dsc -> open5gs_2.7.2.4612.8715.202502112026.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.2.4610.056b.202502102026
6
+Version: 2.7.2.4612.8715.202502112026
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
- 5fb441b769b36afe0c5bfce0fd434574c15a2e9c 14524760 open5gs_2.7.2.4610.056b.202502102026.tar.xz
15
+ 46b81168d8cbfa60580dd76ab64a305edb71c00a 14525680 open5gs_2.7.2.4612.8715.202502112026.tar.xz
16
 Checksums-Sha256:
17
- 4c24a2224aa072de3f58622019a72f948c29bc7d9078a65ec5eb3329674b44fc 14524760 open5gs_2.7.2.4610.056b.202502102026.tar.xz
18
+ ccdca04e595a22b22058d8d287c90a9899979ea5fcc7644bbba246c50dde77f2 14525680 open5gs_2.7.2.4612.8715.202502112026.tar.xz
19
 Files:
20
- b57529aa51f5ae2a2320922b9f7bafe5 14524760 open5gs_2.7.2.4610.056b.202502102026.tar.xz
21
+ ec297c86edbc43570b85e59829274e4d 14525680 open5gs_2.7.2.4612.8715.202502112026.tar.xz
22
open5gs_2.7.2.4610.056b.202502102026.tar.xz/.tarball-version -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/.tarball-version Changed
4
 
1
@@ -1 +1 @@
2
-2.7.2.4610-056b.202502102026
3
+2.7.2.4612-8715.202502112026
4
open5gs_2.7.2.4610.056b.202502102026.tar.xz/debian/changelog -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.7.2.4610.056b.202502102026) unstable; urgency=medium
3
+open5gs (2.7.2.4612.8715.202502112026) unstable; urgency=medium
4
 
5
   * Automatically generated changelog entry for building the Osmocom nightly feed
6
 
7
- -- Osmocom OBS scripts <info@osmocom.org>  Mon, 10 Feb 2025 20:27:53 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org>  Tue, 11 Feb 2025 20:27:55 +0000
9
 
10
 open5gs (2.7.2) unstable; urgency=medium
11
 
12
open5gs_2.7.2.4610.056b.202502102026.tar.xz/lib/sbi/message.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/lib/sbi/message.c Changed
108
 
1
@@ -63,6 +63,10 @@
2
     if (message->param.discovery_option)
3
         ogs_sbi_discovery_option_free(message->param.discovery_option);
4
 
5
+    /* Query parameters */
6
+    for (i = 0; i < message->param.num_of_fields; i++)
7
+        ogs_free(message->param.fieldsi);
8
+
9
     /* JSON Data */
10
     if (message->NFProfile)
11
         OpenAPI_nf_profile_free(message->NFProfile);
12
@@ -109,6 +113,8 @@
13
                 message->Amf3GppAccessRegistrationModification);
14
     if (message->SmfRegistration)
15
         OpenAPI_smf_registration_free(message->SmfRegistration);
16
+    if (message->Nssai)
17
+        OpenAPI_nssai_free(message->Nssai);
18
     if (message->AccessAndMobilitySubscriptionData)
19
         OpenAPI_access_and_mobility_subscription_data_free(
20
                 message->AccessAndMobilitySubscriptionData);
21
@@ -652,6 +658,26 @@
22
         if (sNSSAI.sd)
23
             ogs_free(sNSSAI.sd);
24
     }
25
+    if (message->param.num_of_fields) {
26
+        char *fields;
27
+
28
+        fields = ogs_strdup(message->param.fields0);
29
+        if (!fields) {
30
+            ogs_error("ogs_strdup() failed");
31
+            return NULL;
32
+        }
33
+
34
+        for (i = 1; i < message->param.num_of_fields; i++)
35
+            fields = ogs_mstrcatf(
36
+                    fields, ",%s", message->param.fieldsi);
37
+
38
+        if (fields) {
39
+            ogs_sbi_header_set(request->http.params,
40
+                    OGS_SBI_PARAM_FIELDS, fields);
41
+            ogs_free(fields);
42
+        }
43
+
44
+    }
45
     if (message->param.ipv4addr) {
46
         ogs_sbi_header_set(request->http.params,
47
                 OGS_SBI_PARAM_IPV4ADDR, message->param.ipv4addr);
48
@@ -956,6 +982,30 @@
49
                     cJSON_Delete(item);
50
                 }
51
             }
52
+        } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_FIELDS)) {
53
+            char *_v = ogs_hash_this_val(hi), *v = NULL;
54
+            char *token = NULL;
55
+            char *saveptr = NULL;
56
+
57
+            v = ogs_strdup(_v);
58
+            ogs_assert(v);
59
+
60
+            token = ogs_strtok_r(v, ",", &saveptr);
61
+            while (token != NULL) {
62
+                if (message->param.num_of_fields < OGS_SBI_MAX_NUM_OF_FIELDS) {
63
+                        message->param.fields
64
+                        message->param.num_of_fields = ogs_strdup(token);
65
+                    ogs_assert(message->param.fields
66
+                        message->param.num_of_fields);
67
+                    message->param.num_of_fields++;
68
+                    token = ogs_strtok_r(NULL, ",", &saveptr);
69
+                } else {
70
+                    ogs_error("Fields in query exceed MAX_NUM_OF_FIELDS");
71
+                    break;
72
+                }
73
+            }
74
+
75
+            ogs_free(v);
76
         } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_IPV4ADDR)) {
77
             message->param.ipv4addr = ogs_hash_this_val(hi);
78
         } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_IPV6PREFIX)) {
79
@@ -1221,6 +1271,9 @@
80
     } else if (message->SmfRegistration) {
81
         item = OpenAPI_smf_registration_convertToJSON(message->SmfRegistration);
82
         ogs_assert(item);
83
+    } else if (message->Nssai) {
84
+        item = OpenAPI_nssai_convertToJSON(message->Nssai);
85
+        ogs_assert(item);
86
     } else if (message->AccessAndMobilitySubscriptionData) {
87
         item = OpenAPI_access_and_mobility_subscription_data_convertToJSON(
88
                 message->AccessAndMobilitySubscriptionData);
89
@@ -1685,6 +1738,18 @@
90
 
91
         CASE(OGS_SBI_SERVICE_NAME_NUDM_SDM)
92
             SWITCH(message->h.resource.component1)
93
+            CASE(OGS_SBI_RESOURCE_NAME_NSSAI)
94
+                if (message->res_status < 300) {
95
+                    message->Nssai = OpenAPI_nssai_parseFromJSON(item);
96
+                    if (!message->Nssai) {
97
+                        rv = OGS_ERROR;
98
+                        ogs_error("JSON parse error");
99
+                    }
100
+                } else {
101
+                    ogs_error("HTTP ERROR Status : %d", message->res_status);
102
+                }
103
+                break;
104
+
105
             CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
106
                 if (message->res_status < 300) {
107
                     message->AccessAndMobilitySubscriptionData =
108
open5gs_2.7.2.4610.056b.202502102026.tar.xz/lib/sbi/message.h -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/lib/sbi/message.h Changed
42
 
1
@@ -93,6 +93,7 @@
2
 #define OGS_SBI_RESOURCE_NAME_SM_DATA               "sm-data"
3
 #define OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA       "smf-select-data"
4
 #define OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA "ue-context-in-smf-data"
5
+#define OGS_SBI_RESOURCE_NAME_NSSAI                 "nssai"
6
 #define OGS_SBI_RESOURCE_NAME_SMF_SELECTION_SUBSCRIPTION_DATA \
7
                                             "smf-selection-subscription-data"
8
 #define OGS_SBI_RESOURCE_NAME_SDM_SUBSCRIPTIONS     "sdm-subscriptions"
9
@@ -347,9 +348,15 @@
10
 #define OGS_SBI_PARAM_TAI                           "tai"
11
 #define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \
12
         "slice-info-request-for-pdu-session"
13
+#define OGS_SBI_PARAM_FIELDS                        "fields"
14
 #define OGS_SBI_PARAM_IPV4ADDR                      "ipv4Addr"
15
 #define OGS_SBI_PARAM_IPV6PREFIX                    "ipv6Prefix"
16
 
17
+#define OGS_SBI_PARAM_FIELDS_GPSIS                       "gpsis"
18
+#define OGS_SBI_PARAM_FIELDS_SUBSCRIBED_UE_AMBR          "subscribedUeAmbr"
19
+#define OGS_SBI_PARAM_FIELDS_NSSAI                       "nssai"
20
+#define OGS_SBI_MAX_NUM_OF_FIELDS                         8
21
+
22
 #define OGS_SBI_CONTENT_JSON_TYPE                   \
23
     OGS_SBI_APPLICATION_TYPE "/" OGS_SBI_APPLICATION_JSON_TYPE
24
 #define OGS_SBI_CONTENT_PROBLEM_TYPE                \
25
@@ -484,6 +491,8 @@
26
         OpenAPI_nf_type_e nf_type;
27
         int limit;
28
         char *dnn;
29
+        int num_of_fields;
30
+        char *fieldsOGS_SBI_MAX_NUM_OF_FIELDS;
31
 
32
         /* Shared memory */
33
         ogs_plmn_id_t plmn_id;
34
@@ -519,6 +528,7 @@
35
     OpenAPI_amf3_gpp_access_registration_t *Amf3GppAccessRegistration;
36
     OpenAPI_amf3_gpp_access_registration_modification_t
37
         *Amf3GppAccessRegistrationModification;
38
+    OpenAPI_nssai_t *Nssai;
39
     OpenAPI_access_and_mobility_subscription_data_t
40
         *AccessAndMobilitySubscriptionData;
41
     OpenAPI_smf_selection_subscription_data_t *SmfSelectionSubscriptionData;
42
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/nudm-handler.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/nudm-handler.c Changed
67
 
1
@@ -75,7 +75,7 @@
2
 
3
         r = udm_ue_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
4
                 udm_nudr_dr_build_authentication_subscription,
5
-                udm_ue, stream, NULL);
6
+                udm_ue, stream, UDM_SBI_NO_STATE, NULL);
7
         ogs_expect(r == OGS_OK);
8
         ogs_assert(r != OGS_ERROR);
9
 
10
@@ -165,7 +165,7 @@
11
 
12
         r = udm_ue_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
13
                 udm_nudr_dr_build_authentication_subscription,
14
-                udm_ue, stream, udm_ue->sqn);
15
+                udm_ue, stream, UDM_SBI_NO_STATE, udm_ue->sqn);
16
         ogs_expect(r == OGS_OK);
17
         ogs_assert(r != OGS_ERROR);
18
     }
19
@@ -237,7 +237,7 @@
20
 
21
     r = udm_ue_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
22
             udm_nudr_dr_build_update_authentication_status,
23
-            udm_ue, stream, NULL);
24
+            udm_ue, stream, UDM_SBI_NO_STATE, NULL);
25
     ogs_expect(r == OGS_OK);
26
     ogs_assert(r != OGS_ERROR);
27
 
28
@@ -346,7 +346,8 @@
29
                 message->Amf3GppAccessRegistration);
30
 
31
     r = udm_ue_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
32
-            udm_nudr_dr_build_update_amf_context, udm_ue, stream, NULL);
33
+            udm_nudr_dr_build_update_amf_context, udm_ue, stream,
34
+            UDM_SBI_NO_STATE, NULL);
35
     ogs_expect(r == OGS_OK);
36
     ogs_assert(r != OGS_ERROR);
37
 
38
@@ -473,7 +474,7 @@
39
 
40
     r = udm_ue_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
41
             udm_nudr_dr_build_patch_amf_context,
42
-            udm_ue, stream, PatchItemList);
43
+            udm_ue, stream, UDM_SBI_NO_STATE, PatchItemList);
44
     ogs_expect(r == OGS_OK);
45
     ogs_assert(r != OGS_ERROR);
46
 
47
@@ -587,7 +588,8 @@
48
         OpenAPI_smf_registration_copy(sess->smf_registration, SmfRegistration);
49
 
50
     r = udm_sess_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
51
-            udm_nudr_dr_build_update_smf_context, sess, stream, NULL);
52
+            udm_nudr_dr_build_update_smf_context, sess, stream,
53
+            UDM_SBI_NO_STATE, NULL);
54
     ogs_expect(r == OGS_OK);
55
     ogs_assert(r != OGS_ERROR);
56
 
57
@@ -608,7 +610,8 @@
58
     ogs_assert(udm_ue);
59
 
60
     r = udm_sess_sbi_discover_and_send(OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
61
-            udm_nudr_dr_build_delete_smf_context, sess, stream, NULL);
62
+            udm_nudr_dr_build_delete_smf_context, sess, stream,
63
+            UDM_SBI_NO_STATE, NULL);
64
     ogs_expect(r == OGS_OK);
65
     ogs_assert(r != OGS_ERROR);
66
 
67
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/nudr-build.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/nudr-build.c Changed
14
 
1
@@ -239,6 +239,12 @@
2
             (char *)OGS_SBI_RESOURCE_NAME_SMF_SELECTION_SUBSCRIPTION_DATA;
3
         break;
4
 
5
+    CASE(OGS_SBI_RESOURCE_NAME_NSSAI)
6
+        sendmsg.h.resource.component4 = (char *)OGS_SBI_RESOURCE_NAME_AM_DATA;
7
+        sendmsg.param.fields0 = (char *)OGS_SBI_RESOURCE_NAME_NSSAI;
8
+        sendmsg.param.num_of_fields = 1;
9
+        break;
10
+
11
     DEFAULT
12
     END
13
 
14
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/nudr-handler.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/nudr-handler.c Changed
49
 
1
@@ -18,6 +18,7 @@
2
  */
3
 
4
 #include "nudr-handler.h"
5
+#include "sbi-path.h"
6
 
7
 bool udm_nudr_dr_handle_subscription_authentication(
8
     udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg)
9
@@ -601,7 +602,8 @@
10
 }
11
 
12
 bool udm_nudr_dr_handle_subscription_provisioned(
13
-    udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg)
14
+    udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, int state,
15
+    ogs_sbi_message_t *recvmsg)
16
 {
17
     char *strerror = NULL;
18
     ogs_sbi_server_t *server = NULL;
19
@@ -636,6 +638,29 @@
20
 
21
         memset(&sendmsg, 0, sizeof(sendmsg));
22
 
23
+        /* Check if original request was for /nudm-sdm/v2/{supi}/nssai */
24
+        if (state == UDM_SBI_UE_PROVISIONED_NSSAI_ONLY) {
25
+            OpenAPI_nssai_t *Nssai = NULL;
26
+            Nssai = AccessAndMobilitySubscriptionData->nssai;
27
+            if (!Nssai) {
28
+                ogs_error("%s No Nssai", udm_ue->supi);
29
+                ogs_assert(true ==
30
+                    ogs_sbi_server_send_error(
31
+                        stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST,
32
+                        recvmsg, "No Nssai",
33
+                        udm_ue->supi, NULL));
34
+                return false;
35
+            }
36
+
37
+            sendmsg.Nssai = OpenAPI_nssai_copy(sendmsg.Nssai, Nssai);
38
+            response = ogs_sbi_build_response(&sendmsg, recvmsg->res_status);
39
+            ogs_assert(response);
40
+            ogs_assert(true == ogs_sbi_server_send_response(stream, response));
41
+            OpenAPI_nssai_free(sendmsg.Nssai);
42
+
43
+            break;
44
+        }
45
+
46
         sendmsg.AccessAndMobilitySubscriptionData =
47
             OpenAPI_access_and_mobility_subscription_data_copy(
48
                 sendmsg.AccessAndMobilitySubscriptionData,
49
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/nudr-handler.h -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/nudr-handler.h Changed
11
 
1
@@ -31,7 +31,8 @@
2
 bool udm_nudr_dr_handle_subscription_context(
3
     udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
4
 bool udm_nudr_dr_handle_subscription_provisioned(
5
-    udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
6
+    udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, int state,
7
+    ogs_sbi_message_t *recvmsg);
8
 
9
 bool udm_nudr_dr_handle_smf_registration(
10
     udm_sess_t *sess, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
11
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/sbi-path.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/sbi-path.c Changed
55
 
1
@@ -102,7 +102,7 @@
2
         ogs_sbi_service_type_e service_type,
3
         ogs_sbi_discovery_option_t *discovery_option,
4
         ogs_sbi_build_f build,
5
-        void *context, ogs_sbi_stream_t *stream, void *data)
6
+        void *context, ogs_sbi_stream_t *stream, int state, void *data)
7
 {
8
     ogs_sbi_xact_t *xact = NULL;
9
     int r;
10
@@ -123,6 +123,8 @@
11
         return OGS_ERROR;
12
     }
13
 
14
+    xact->state = state;
15
+
16
     if (stream) {
17
         xact->assoc_stream_id = ogs_sbi_id_from_stream(stream);
18
         ogs_assert(xact->assoc_stream_id >= OGS_MIN_POOL_ID &&
19
@@ -143,7 +145,7 @@
20
         ogs_sbi_service_type_e service_type,
21
         ogs_sbi_discovery_option_t *discovery_option,
22
         ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data),
23
-        udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data)
24
+        udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, int state, void *data)
25
 {
26
     int r;
27
 
28
@@ -151,7 +153,7 @@
29
 
30
     r = udm_sbi_discover_and_send(
31
             udm_ue->id, &udm_ue->sbi, service_type, discovery_option,
32
-            (ogs_sbi_build_f)build, udm_ue, stream, data);
33
+            (ogs_sbi_build_f)build, udm_ue, stream, state, data);
34
     if (r != OGS_OK) {
35
         ogs_error("udm_ue_sbi_discover_and_send() failed");
36
         ogs_assert(true ==
37
@@ -168,7 +170,7 @@
38
         ogs_sbi_service_type_e service_type,
39
         ogs_sbi_discovery_option_t *discovery_option,
40
         ogs_sbi_request_t *(*build)(udm_sess_t *sess, void *data),
41
-        udm_sess_t *sess, ogs_sbi_stream_t *stream, void *data)
42
+        udm_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data)
43
 {
44
     int r;
45
 
46
@@ -176,7 +178,7 @@
47
 
48
     r = udm_sbi_discover_and_send(
49
             sess->id, &sess->sbi, service_type, discovery_option,
50
-            (ogs_sbi_build_f)build, sess, stream, data);
51
+            (ogs_sbi_build_f)build, sess, stream, state, data);
52
     if (r != OGS_OK) {
53
         ogs_error("udm_sess_sbi_discover_and_send() failed");
54
         ogs_assert(true ==
55
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/sbi-path.h -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/sbi-path.h Changed
24
 
1
@@ -31,16 +31,20 @@
2
 
3
 bool udm_sbi_send_request(
4
         ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
5
+
6
+#define UDM_SBI_NO_STATE                                   0
7
+#define UDM_SBI_UE_PROVISIONED_NSSAI_ONLY                  1
8
+
9
 int udm_ue_sbi_discover_and_send(
10
         ogs_sbi_service_type_e service_type,
11
         ogs_sbi_discovery_option_t *discovery_option,
12
         ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data),
13
-        udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data);
14
+        udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, int state, void *data);
15
 int udm_sess_sbi_discover_and_send(
16
         ogs_sbi_service_type_e service_type,
17
         ogs_sbi_discovery_option_t *discovery_option,
18
         ogs_sbi_request_t *(*build)(udm_sess_t *sess, void *data),
19
-        udm_sess_t *sess, ogs_sbi_stream_t *stream, void *data);
20
+        udm_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data);
21
 
22
 #ifdef __cplusplus
23
 }
24
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/udm-sm.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/udm-sm.c Changed
34
 
1
@@ -176,16 +176,19 @@
2
                 udm_ue = udm_ue_find_by_suci_or_supi(
3
                         message.h.resource.component0);
4
                 if (!udm_ue) {
5
-                    if (!strcmp(message.h.method,
6
-                                OGS_SBI_HTTP_METHOD_POST)) {
7
+                    SWITCH(message.h.method)
8
+                    CASE(OGS_SBI_HTTP_METHOD_POST)
9
+                    CASE(OGS_SBI_HTTP_METHOD_GET)
10
                         udm_ue = udm_ue_add(message.h.resource.component0);
11
                         if (!udm_ue) {
12
                             ogs_error("Invalid Request %s",
13
                                     message.h.resource.component0);
14
                         }
15
-                    } else {
16
+                        break;
17
+
18
+                    DEFAULT
19
                         ogs_error("Invalid HTTP method %s", message.h.method);
20
-                    }
21
+                    END
22
                 }
23
             }
24
 
25
@@ -461,6 +464,8 @@
26
                         e->h.sbi.data =
27
                             OGS_UINT_TO_POINTER(sbi_xact->assoc_stream_id);
28
 
29
+                    e->h.sbi.state = sbi_xact->state;
30
+
31
                     ogs_sbi_xact_remove(sbi_xact);
32
 
33
                     udm_ue = udm_ue_find_by_id(udm_ue_id);
34
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udm/ue-sm.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udm/ue-sm.c Changed
29
 
1
@@ -196,7 +196,17 @@
2
                     r = udm_ue_sbi_discover_and_send(
3
                             OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
4
                             udm_nudr_dr_build_query_subscription_provisioned,
5
-                            udm_ue, stream, message);
6
+                            udm_ue, stream, UDM_SBI_NO_STATE, message);
7
+                    ogs_expect(r == OGS_OK);
8
+                    ogs_assert(r != OGS_ERROR);
9
+                    break;
10
+
11
+                CASE(OGS_SBI_RESOURCE_NAME_NSSAI)
12
+                    r = udm_ue_sbi_discover_and_send(
13
+                            OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
14
+                            udm_nudr_dr_build_query_subscription_provisioned,
15
+                            udm_ue, stream, UDM_SBI_UE_PROVISIONED_NSSAI_ONLY,
16
+                            message);
17
                     ogs_expect(r == OGS_OK);
18
                     ogs_assert(r != OGS_ERROR);
19
                     break;
20
@@ -305,7 +315,7 @@
21
                     SWITCH(message->h.resource.component3)
22
                     CASE(OGS_SBI_RESOURCE_NAME_PROVISIONED_DATA)
23
                         udm_nudr_dr_handle_subscription_provisioned(
24
-                                udm_ue, stream, message);
25
+                                udm_ue, stream, e->h.sbi.state, message);
26
                         break;
27
 
28
                     DEFAULT
29
open5gs_2.7.2.4610.056b.202502102026.tar.xz/src/udr/nudr-handler.c -> open5gs_2.7.2.4612.8715.202502112026.tar.xz/src/udr/nudr-handler.c Changed
188
 
1
@@ -467,6 +467,9 @@
2
     SWITCH(recvmsg->h.resource.component4)
3
     CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
4
         int i;
5
+        bool processGpsi = false;
6
+        bool processUeAmbr = false;
7
+        bool processNssai = false;
8
 
9
         OpenAPI_access_and_mobility_subscription_data_t
10
             AccessAndMobilitySubscriptionData;
11
@@ -480,77 +483,110 @@
12
 
13
         OpenAPI_lnode_t *node = NULL;
14
 
15
-        GpsiList = OpenAPI_list_create();
16
-        for (i = 0; i < subscription_data.num_of_msisdn; i++) {
17
-            char *gpsi = ogs_msprintf("%s-%s",
18
-                    OGS_ID_GPSI_TYPE_MSISDN, subscription_data.msisdni.bcd);
19
-            ogs_assert(gpsi);
20
-            OpenAPI_list_add(GpsiList, gpsi);
21
-        }
22
-
23
-        SubscribedUeAmbr.uplink = ogs_sbi_bitrate_to_string(
24
-                subscription_data.ambr.uplink, OGS_SBI_BITRATE_KBPS);
25
-        SubscribedUeAmbr.downlink = ogs_sbi_bitrate_to_string(
26
-                subscription_data.ambr.downlink, OGS_SBI_BITRATE_KBPS);
27
+        memset(&AccessAndMobilitySubscriptionData, 0,
28
+                sizeof(AccessAndMobilitySubscriptionData));
29
 
30
+        memset(&SubscribedUeAmbr, 0, sizeof(SubscribedUeAmbr));
31
         memset(&NSSAI, 0, sizeof(NSSAI));
32
-        DefaultSingleNssaiList = OpenAPI_list_create();
33
-        for (i = 0; i < subscription_data.num_of_slice; i++) {
34
-            slice_data = &subscription_data.slicei;
35
-
36
-            if (slice_data->default_indicator == false)
37
-                continue;
38
 
39
-            Snssai = ogs_calloc(1, sizeof(*Snssai));
40
-            ogs_assert(Snssai);
41
+        /* Apply filtering based on fields query parameter */
42
+        if (recvmsg->param.num_of_fields) {
43
+            for (i = 0; i < recvmsg->param.num_of_fields; i++) {
44
+                SWITCH(recvmsg->param.fieldsi)
45
+                CASE(OGS_SBI_PARAM_FIELDS_GPSIS)
46
+                    processGpsi = true;
47
+                    break;
48
+                CASE(OGS_SBI_PARAM_FIELDS_SUBSCRIBED_UE_AMBR)
49
+                    processUeAmbr = true;
50
+                    break;
51
+                CASE(OGS_SBI_PARAM_FIELDS_NSSAI)
52
+                    processNssai = true;
53
+                    break;
54
+                DEFAULT
55
+                    ogs_error("Unexpected field! %s",
56
+                            recvmsg->param.fieldsi);
57
+                END
58
+            }
59
+        } else {
60
+            processGpsi = true;
61
+            processUeAmbr = true;
62
+            processNssai = true;
63
+        }
64
 
65
-            Snssai->sst = slice_data->s_nssai.sst;
66
-            Snssai->sd = ogs_s_nssai_sd_to_string(slice_data->s_nssai.sd);
67
+        if (processGpsi) {
68
+            GpsiList = OpenAPI_list_create();
69
+            for (i = 0; i < subscription_data.num_of_msisdn; i++) {
70
+                char *gpsi = ogs_msprintf("%s-%s",
71
+                        OGS_ID_GPSI_TYPE_MSISDN,
72
+                        subscription_data.msisdni.bcd);
73
+                ogs_assert(gpsi);
74
+                OpenAPI_list_add(GpsiList, gpsi);
75
+            }
76
 
77
-            OpenAPI_list_add(DefaultSingleNssaiList, Snssai);
78
-        }
79
-        if (DefaultSingleNssaiList->count) {
80
-            NSSAI.default_single_nssais = DefaultSingleNssaiList;
81
+            if (GpsiList->count)
82
+                AccessAndMobilitySubscriptionData.gpsis = GpsiList;
83
         }
84
 
85
-        SingleNssaiList = OpenAPI_list_create();
86
-        for (i = 0; i < subscription_data.num_of_slice; i++) {
87
-            slice_data = &subscription_data.slicei;
88
+        if (processUeAmbr) {
89
+            SubscribedUeAmbr.uplink = ogs_sbi_bitrate_to_string(
90
+                    subscription_data.ambr.uplink, OGS_SBI_BITRATE_KBPS);
91
+            SubscribedUeAmbr.downlink = ogs_sbi_bitrate_to_string(
92
+                    subscription_data.ambr.downlink, OGS_SBI_BITRATE_KBPS);
93
 
94
-            if (slice_data->default_indicator == true)
95
-                continue;
96
+            AccessAndMobilitySubscriptionData.subscribed_ue_ambr =
97
+                &SubscribedUeAmbr;
98
+        }
99
 
100
-            Snssai = ogs_calloc(1, sizeof(*Snssai));
101
-            ogs_assert(Snssai);
102
+        if (processNssai) {
103
+            DefaultSingleNssaiList = OpenAPI_list_create();
104
+            for (i = 0; i < subscription_data.num_of_slice; i++) {
105
+                slice_data = &subscription_data.slicei;
106
 
107
-            Snssai->sst = slice_data->s_nssai.sst;
108
-            Snssai->sd = ogs_s_nssai_sd_to_string(slice_data->s_nssai.sd);
109
+                if (slice_data->default_indicator == false)
110
+                    continue;
111
 
112
-            OpenAPI_list_add(SingleNssaiList, Snssai);
113
-        }
114
+                Snssai = ogs_calloc(1, sizeof(*Snssai));
115
+                ogs_assert(Snssai);
116
 
117
-        if (DefaultSingleNssaiList->count) {
118
-            if (SingleNssaiList->count) {
119
-                NSSAI.single_nssais = SingleNssaiList;
120
+                Snssai->sst = slice_data->s_nssai.sst;
121
+                Snssai->sd = ogs_s_nssai_sd_to_string(slice_data->s_nssai.sd);
122
+
123
+                OpenAPI_list_add(DefaultSingleNssaiList, Snssai);
124
             }
125
-        } else {
126
-            if (SingleNssaiList->count) {
127
-                ogs_fatal("No Default S-NSSAI");
128
-                ogs_assert_if_reached();
129
+            if (DefaultSingleNssaiList->count) {
130
+                NSSAI.default_single_nssais = DefaultSingleNssaiList;
131
             }
132
-        }
133
 
134
-        memset(&AccessAndMobilitySubscriptionData, 0,
135
-                sizeof(AccessAndMobilitySubscriptionData));
136
+            SingleNssaiList = OpenAPI_list_create();
137
+            for (i = 0; i < subscription_data.num_of_slice; i++) {
138
+                slice_data = &subscription_data.slicei;
139
+
140
+                if (slice_data->default_indicator == true)
141
+                    continue;
142
 
143
-        if (GpsiList->count)
144
-            AccessAndMobilitySubscriptionData.gpsis = GpsiList;
145
+                Snssai = ogs_calloc(1, sizeof(*Snssai));
146
+                ogs_assert(Snssai);
147
 
148
-        AccessAndMobilitySubscriptionData.subscribed_ue_ambr =
149
-            &SubscribedUeAmbr;
150
+                Snssai->sst = slice_data->s_nssai.sst;
151
+                Snssai->sd = ogs_s_nssai_sd_to_string(slice_data->s_nssai.sd);
152
 
153
-        if (DefaultSingleNssaiList->count)
154
-            AccessAndMobilitySubscriptionData.nssai = &NSSAI;
155
+                OpenAPI_list_add(SingleNssaiList, Snssai);
156
+            }
157
+
158
+            if (DefaultSingleNssaiList->count) {
159
+                if (SingleNssaiList->count) {
160
+                    NSSAI.single_nssais = SingleNssaiList;
161
+                }
162
+            } else {
163
+                if (SingleNssaiList->count) {
164
+                    ogs_fatal("No Default S-NSSAI");
165
+                    ogs_assert_if_reached();
166
+                }
167
+            }
168
+
169
+            if (DefaultSingleNssaiList->count)
170
+                AccessAndMobilitySubscriptionData.nssai = &NSSAI;
171
+        }
172
 
173
         memset(&sendmsg, 0, sizeof(sendmsg));
174
         sendmsg.AccessAndMobilitySubscriptionData =
175
@@ -565,8 +601,10 @@
176
         }
177
         OpenAPI_list_free(GpsiList);
178
 
179
-        ogs_free(SubscribedUeAmbr.uplink);
180
-        ogs_free(SubscribedUeAmbr.downlink);
181
+        if (SubscribedUeAmbr.uplink)
182
+            ogs_free(SubscribedUeAmbr.uplink);
183
+        if (SubscribedUeAmbr.downlink)
184
+            ogs_free(SubscribedUeAmbr.downlink);
185
 
186
         OpenAPI_list_for_each(DefaultSingleNssaiList, node) {
187
             OpenAPI_snssai_t *Snssai = node->data;
188