We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 28
open5gs_2.4.8.202207240002.dsc -> open5gs_2.4.8.202207250002.dsc
Changed
x
1
2
Source: open5gs
3
Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
Architecture: any
5
-Version: 2.4.8.202207240002
6
+Version: 2.4.8.202207250002
7
Maintainer: Harald Welte <laforge@gnumonks.org>
8
Uploaders: Sukchan Lee <acetcom@gmail.com>
9
Homepage: https://open5gs.org
10
11
open5gs-udr deb net optional arch=any
12
open5gs-upf deb net optional arch=any
13
Checksums-Sha1:
14
- a817c7bb979ac93ae6ddced2415884bea86d2ab9 11456572 open5gs_2.4.8.202207240002.tar.xz
15
+ 8fc909756d2593e0d8d4e67eee0b2c74eb2c01f5 11457528 open5gs_2.4.8.202207250002.tar.xz
16
Checksums-Sha256:
17
- ff8a9228b5067fd8aadd1f09aee880d0102e3e64553a720fde146817eed1b77c 11456572 open5gs_2.4.8.202207240002.tar.xz
18
+ 0434cbed773ff92d587b1f282d413f45da1fead1eb6d9176cebe9668856cdf75 11457528 open5gs_2.4.8.202207250002.tar.xz
19
Files:
20
- 5a47aa968aad5e630cc2f600472174c6 11456572 open5gs_2.4.8.202207240002.tar.xz
21
+ 7eb7efce92ad40619d1f254e4e9b3dee 11457528 open5gs_2.4.8.202207250002.tar.xz
22
open5gs_2.4.8.202207240002.tar.xz/configs/sample.yaml.in -> open5gs_2.4.8.202207250002.tar.xz/configs/sample.yaml.in
Changed
44
1
2
#
3
# <SBI Client>>
4
#
5
-# o SBI Client(http://127.0.0.10:7777)
6
+# o SBI Client(http://127.0.1.10:7777)
7
# sbi:
8
-# addr: 127.0.0.10
9
+# addr: 127.0.1.10
10
# port: 7777
11
#
12
-# o SBI Client(https://127.0.0.10:443, http://scp.open5gs.org:80)
13
+# o SBI Client(https://127.0.1.10:443, http://scp.open5gs.org:80)
14
# sbi:
15
-# - addr: 127.0.0.10
16
+# - addr: 127.0.1.10
17
# tls:
18
# key: scp.key
19
# pem: scp.pem
20
# - name: scp.open5gs.org
21
#
22
-# o SBI Client(http://fd69:f21d:873c:fa::1:80)
23
-# If prefer_ipv4 is true, http://127.0.0.10:80 is selected.
24
+# o SBI Client(http://fd69:f21d:873c:fb::1:80)
25
+# If prefer_ipv4 is true, http://127.0.1.10:80 is selected.
26
#
27
# sbi:
28
# addr:
29
-# - 127.0.0.10
30
-# - fd69:f21d:873c:fa::1
31
+# - 127.0.1.10
32
+# - fd69:f21d:873c:fb::1
33
#
34
# o SBI Option (Default)
35
# - tcp_nodelay : true
36
# - so_linger.l_onoff : false
37
#
38
# sbi:
39
-# addr: 127.0.0.10
40
+# addr: 127.0.1.10
41
# option:
42
# tcp_nodelay: false
43
# so_linger:
44
open5gs_2.4.8.202207240002.tar.xz/debian/changelog -> open5gs_2.4.8.202207250002.tar.xz/debian/changelog
Changed
12
1
2
-open5gs (2.4.8.202207240002) UNRELEASED; urgency=medium
3
+open5gs (2.4.8.202207250002) UNRELEASED; urgency=medium
4
5
* Snapshot build
6
7
- -- Sukchan Lee <acetcom@gmail.com> Sun, 24 Jul 2022 00:09:15 +0000
8
+ -- Sukchan Lee <acetcom@gmail.com> Mon, 25 Jul 2022 00:09:22 +0000
9
10
open5gs (2.4.8) unstable; urgency=medium
11
12
open5gs_2.4.8.202207240002.tar.xz/debian/control -> open5gs_2.4.8.202207250002.tar.xz/debian/control
Changed
163
1
2
Package: open5gs-common
3
Architecture: any
4
Multi-Arch: same
5
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
6
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
7
${misc:Depends}
8
Description: 5G Core and EPC (Shared Files)
9
Open5GS is a C-language implementation of 5G Core and EPC
10
11
Package: open5gs-mme
12
Architecture: any
13
Multi-Arch: same
14
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
15
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
16
${misc:Depends},
17
open5gs-common (= ${binary:Version})
18
Description: MME (Mobility Management Entity)
19
20
Package: open5gs-sgwc
21
Architecture: any
22
Multi-Arch: same
23
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
24
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
25
${misc:Depends},
26
open5gs-common (= ${binary:Version})
27
Description: SGW-C (Serving Gateway - Control Plane)
28
29
Package: open5gs-smf
30
Architecture: any
31
Multi-Arch: same
32
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
33
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
34
${misc:Depends},
35
open5gs-common (= ${binary:Version})
36
Description: SMF (Session Management Function)
37
38
Package: open5gs-amf
39
Architecture: any
40
Multi-Arch: same
41
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
42
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
43
${misc:Depends},
44
open5gs-common (= ${binary:Version})
45
Description: AMF (Access and Mobility Management Function)
46
47
Package: open5gs-sgwu
48
Architecture: any
49
Multi-Arch: same
50
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
51
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
52
${misc:Depends},
53
open5gs-common (= ${binary:Version})
54
Description: SGW-U (Serving Gateway - User Plane)
55
56
Package: open5gs-upf
57
Architecture: any
58
Multi-Arch: same
59
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
60
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
61
${misc:Depends},
62
udev,
63
open5gs-common (= ${binary:Version})
64
65
Package: open5gs-hss
66
Architecture: any
67
Multi-Arch: same
68
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
69
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
70
${misc:Depends},
71
mongodb-org | mongodb,
72
open5gs-common (= ${binary:Version})
73
74
Package: open5gs-pcrf
75
Architecture: any
76
Multi-Arch: same
77
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
78
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
79
${misc:Depends},
80
mongodb-org | mongodb,
81
open5gs-common (= ${binary:Version})
82
83
Package: open5gs-nrf
84
Architecture: any
85
Multi-Arch: same
86
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
87
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
88
${misc:Depends},
89
open5gs-common (= ${binary:Version})
90
Description: NRF (Network Repository Function)
91
92
Package: open5gs-ausf
93
Architecture: any
94
Multi-Arch: same
95
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
96
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
97
${misc:Depends},
98
open5gs-common (= ${binary:Version})
99
Description: AUSF (Authentication Server Function)
100
101
Package: open5gs-udm
102
Architecture: any
103
Multi-Arch: same
104
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
105
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
106
${misc:Depends},
107
open5gs-common (= ${binary:Version})
108
Description: UDM (Unified Data Management)
109
110
Package: open5gs-pcf
111
Architecture: any
112
Multi-Arch: same
113
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
114
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
115
${misc:Depends},
116
open5gs-common (= ${binary:Version})
117
Description: PCF (Policy Control Function)
118
119
Package: open5gs-nssf
120
Architecture: any
121
Multi-Arch: same
122
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
123
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
124
${misc:Depends},
125
open5gs-common (= ${binary:Version})
126
Description: NSSF (Network Slice Selection Function)
127
128
Package: open5gs-bsf
129
Architecture: any
130
Multi-Arch: same
131
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
132
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
133
${misc:Depends},
134
open5gs-common (= ${binary:Version})
135
Description: BSF (Binding Support Function)
136
137
Package: open5gs-udr
138
Architecture: any
139
Multi-Arch: same
140
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${shlibs:Depends},
141
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${shlibs:Depends},
142
${misc:Depends},
143
open5gs-common (= ${binary:Version})
144
Description: UDR (Unified Data Repository)
145
146
Package: open5gs
147
Architecture: any
148
Multi-Arch: same
149
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${misc:Depends},
150
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends},
151
open5gs-common (= ${binary:Version}),
152
open5gs-mme (= ${binary:Version}),
153
open5gs-sgwc (= ${binary:Version}),
154
155
Package: open5gs-dbg
156
Architecture: any
157
Multi-Arch: same
158
-Depends: osmocom-nightly (= 1.0.0.202207240002), ${misc:Depends},
159
+Depends: osmocom-nightly (= 1.0.0.202207250002), ${misc:Depends},
160
open5gs (= ${binary:Version})
161
Description: Debug symbols for Open5GS
162
Open5GS is a C-language implementation of 5G Core and EPC
163
open5gs_2.4.8.202207240002.tar.xz/lib/app/ogs-context.c -> open5gs_2.4.8.202207250002.tar.xz/lib/app/ogs-context.c
Changed
74
1
2
3
static void recalculate_pool_size(void)
4
{
5
+ self.pool.packet = self.max.ue * OGS_MAX_NUM_OF_PACKET_BUFFER;
6
+
7
#define MAX_NUM_OF_TUNNEL 3 /* Num of Tunnel per Bearer */
8
self.pool.sess = self.max.ue * OGS_MAX_NUM_OF_SESS;
9
self.pool.bearer = self.pool.sess * OGS_MAX_NUM_OF_BEARER;
10
self.pool.tunnel = self.pool.bearer * MAX_NUM_OF_TUNNEL;
11
12
-#define MAX_NUM_OF_TIMER 16
13
- self.pool.timer = self.max.ue * MAX_NUM_OF_TIMER;
14
-#define MAX_NUM_OF_MESSAGE 16
15
- self.pool.message = self.max.ue * MAX_NUM_OF_MESSAGE;
16
-#define MAX_NUM_OF_EVENT 16
17
- self.pool.event = self.max.ue * MAX_NUM_OF_EVENT;
18
+#define OGS_MAX_NUM_OF_NF_SUBSCRIPTION 4 /* Num of Subscription per NF */
19
+ self.pool.nf_service = self.max.gnb * OGS_MAX_NUM_OF_NF_SERVICE;
20
21
- self.pool.packet = self.max.ue * OGS_MAX_NUM_OF_PACKET_BUFFER;
22
+#define POOL_NUM_PER_UE 16
23
+#define POOL_NUM_PER_GNB 8
24
+ self.pool.timer = self.max.ue * POOL_NUM_PER_UE;
25
+ self.pool.message = self.max.ue * POOL_NUM_PER_UE;
26
+ self.pool.event = self.max.ue * POOL_NUM_PER_UE;
27
+ self.pool.socket = self.max.ue * POOL_NUM_PER_UE;
28
+ self.pool.subscription = self.max.ue * POOL_NUM_PER_UE;
29
+ self.pool.xact = self.max.ue * POOL_NUM_PER_UE;
30
31
self.pool.nf = self.max.gnb;
32
33
-#define MAX_NUM_OF_SOCKET 8
34
- self.pool.socket = self.max.ue * MAX_NUM_OF_SOCKET;
35
-
36
-#define MAX_NUM_OF_XACT 8
37
- self.pool.gtp_xact = self.max.ue * MAX_NUM_OF_XACT;
38
- self.pool.gtp_node = self.max.gtp_peer;
39
-
40
- self.pool.pfcp_xact = self.max.ue * MAX_NUM_OF_XACT;
41
- self.pool.pfcp_node = self.pool.nf;
42
-
43
-#define MAX_NUM_OF_NF_SERVICE 16 /* Num of NF Service per NF Instance */
44
-#define MAX_NUM_OF_SBI_MESSAGE 4 /* Num of HTTP(s) Request/Response per NF */
45
-#define MAX_NUM_OF_NF_SUBSCRIPTION 4 /* Num of Subscription per NF */
46
- self.pool.nf_service = self.pool.nf * MAX_NUM_OF_NF_SERVICE;
47
- self.pool.nf_subscription = self.pool.nf * MAX_NUM_OF_NF_SUBSCRIPTION;
48
-
49
#define MAX_CSMAP_POOL 128
50
self.pool.csmap = MAX_CSMAP_POOL; /* Num of TAI-LAI Mapping Table */
51
52
53
54
#define MAX_NUM_OF_UE 1024 /* Num of UE per AMF/MME */
55
#define MAX_NUM_OF_GNB 64 /* Num of gNB per AMF/MME */
56
-#define MAX_NUM_OF_GTP_PEER 64 /* Num of gtp_node per SGW/PGW */
57
58
self.max.gnb = MAX_NUM_OF_GNB;
59
self.max.ue = MAX_NUM_OF_UE;
60
- self.max.gtp_peer = MAX_NUM_OF_GTP_PEER;
61
62
ogs_pkbuf_default_init(&self.pool.defconfig);
63
64
65
!strcmp(max_key, "enb")) {
66
const char *v = ogs_yaml_iter_value(&max_iter);
67
if (v) self.max.gnb = atoi(v);
68
- } else if (!strcmp(max_key, "gtp_peer")) {
69
- const char *v = ogs_yaml_iter_value(&max_iter);
70
- if (v) self.max.gtp_peer = atoi(v);
71
} else
72
ogs_warn("unknown key `%s`", max_key);
73
}
74
open5gs_2.4.8.202207240002.tar.xz/lib/app/ogs-context.h -> open5gs_2.4.8.202207250002.tar.xz/lib/app/ogs-context.h
Changed
38
1
2
3
struct {
4
ogs_pkbuf_config_t defconfig;
5
- uint64_t packet;
6
7
- uint64_t nf;
8
+ uint64_t packet;
9
10
uint64_t sess;
11
uint64_t bearer;
12
uint64_t tunnel;
13
- uint64_t nf_service;
14
- uint64_t nf_subscription;
15
16
- uint64_t csmap;
17
+ uint64_t nf_service;
18
19
+ uint64_t timer;
20
uint64_t message;
21
uint64_t event;
22
- uint64_t timer;
23
-
24
uint64_t socket;
25
- uint64_t gtp_xact;
26
- uint64_t gtp_node;
27
- uint64_t pfcp_xact;
28
- uint64_t pfcp_node;
29
+ uint64_t subscription;
30
+ uint64_t xact;
31
+
32
+ uint64_t nf;
33
+
34
+ uint64_t csmap;
35
36
uint64_t impi;
37
uint64_t impu;
38
open5gs_2.4.8.202207240002.tar.xz/lib/core/ogs-3gpp-types.h -> open5gs_2.4.8.202207250002.tar.xz/lib/core/ogs-3gpp-types.h
Changed
30
1
2
#define OGS_BEARER_PER_UE 8 /* Num of Bearer per UE */
3
#define OGS_MAX_NUM_OF_PACKET_BUFFER 64 /* Num of PacketBuffer per UE */
4
5
+/* Num of NF Service per NF Instance */
6
+#define OGS_MAX_NUM_OF_NF_SERVICE 16
7
+
8
/*
9
* The array of TLV messages is limited to 8.
10
* So, Flow(PDI.SDF_Filter) in PDR is limited to 8.
11
12
#define OGS_PLMN_ID_LEN 3
13
#define OGS_MAX_PLMN_ID_BCD_LEN 6
14
15
+#define OGS_CHRGCHARS_LEN 2
16
+
17
#define OGS_BCD_TO_BUFFER_LEN(x) (((x)+1)/2)
18
#define OGS_MAX_IMSI_BCD_LEN 15
19
#define OGS_MAX_IMSI_LEN \
20
21
uint32_t context_identifier; /* EPC */
22
bool default_dnn_indicator; /* 5GC */
23
24
+ uint8_t charging_characteristicsOGS_CHRGCHARS_LEN;
25
+ bool charging_characteristics_presence;
26
+
27
#define OGS_PDU_SESSION_TYPE_IPV4 1
28
#define OGS_PDU_SESSION_TYPE_IPV6 2
29
#define OGS_PDU_SESSION_TYPE_IPV4V6 3
30
open5gs_2.4.8.202207240002.tar.xz/lib/diameter/s6a/message.c -> open5gs_2.4.8.202207250002.tar.xz/lib/diameter/s6a/message.c
Changed
17
1
2
struct dict_object *ogs_diam_s6a_max_bandwidth_ul = NULL;
3
struct dict_object *ogs_diam_s6a_max_bandwidth_dl = NULL;
4
struct dict_object *ogs_diam_s6a_pdn_type = NULL;
5
+struct dict_object *ogs_diam_s6a_3gpp_charging_characteristics = NULL;
6
struct dict_object *ogs_diam_s6a_served_party_ip_address = NULL;
7
struct dict_object *ogs_diam_s6a_eps_subscribed_qos_profile = NULL;
8
struct dict_object *ogs_diam_s6a_qos_class_identifier = NULL;
9
10
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "All-APN-Configurations-Included-Indicator", &ogs_diam_s6a_all_apn_configuration_included_indicator);
11
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", &ogs_diam_s6a_apn_configuration);
12
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "PDN-Type", &ogs_diam_s6a_pdn_type);
13
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "3GPP-Charging-Characteristics", &ogs_diam_s6a_3gpp_charging_characteristics);
14
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Served-Party-IP-Address", &ogs_diam_s6a_served_party_ip_address);
15
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", &ogs_diam_s6a_subscription_data);
16
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscriber-Status", &ogs_diam_s6a_subscriber_status);
17
open5gs_2.4.8.202207240002.tar.xz/lib/diameter/s6a/message.h -> open5gs_2.4.8.202207250002.tar.xz/lib/diameter/s6a/message.h
Changed
9
1
2
extern struct dict_object *ogs_diam_s6a_max_bandwidth_ul;
3
extern struct dict_object *ogs_diam_s6a_max_bandwidth_dl;
4
extern struct dict_object *ogs_diam_s6a_pdn_type;
5
+extern struct dict_object *ogs_diam_s6a_3gpp_charging_characteristics;
6
extern struct dict_object *ogs_diam_s6a_served_party_ip_address;
7
extern struct dict_object *ogs_diam_s6a_eps_subscribed_qos_profile;
8
extern struct dict_object *ogs_diam_s6a_qos_class_identifier;
9
open5gs_2.4.8.202207240002.tar.xz/lib/gtp/context.c -> open5gs_2.4.8.202207250002.tar.xz/lib/gtp/context.c
Changed
10
1
2
3
ogs_log_install_domain(&__ogs_gtp_domain, "gtp", ogs_core()->log.level);
4
5
- ogs_pool_init(&pool, ogs_app()->pool.gtp_node);
6
+ ogs_pool_init(&pool, ogs_app()->pool.nf);
7
ogs_pool_init(&ogs_gtpu_resource_pool, num_of_gtpu_resource);
8
9
context_initialized = 1;
10
open5gs_2.4.8.202207240002.tar.xz/lib/gtp/xact.c -> open5gs_2.4.8.202207250002.tar.xz/lib/gtp/xact.c
Changed
10
1
2
{
3
ogs_assert(ogs_gtp_xact_initialized == 0);
4
5
- ogs_pool_init(&pool, ogs_app()->pool.gtp_xact);
6
+ ogs_pool_init(&pool, ogs_app()->pool.xact);
7
8
g_xact_id = 0;
9
10
open5gs_2.4.8.202207240002.tar.xz/lib/pfcp/context.c -> open5gs_2.4.8.202207250002.tar.xz/lib/pfcp/context.c
Changed
10
1
2
3
ogs_log_install_domain(&__ogs_pfcp_domain, "pfcp", ogs_core()->log.level);
4
5
- ogs_pool_init(&ogs_pfcp_node_pool, ogs_app()->pool.pfcp_node);
6
+ ogs_pool_init(&ogs_pfcp_node_pool, ogs_app()->pool.nf);
7
8
ogs_pool_init(&ogs_pfcp_sess_pool, ogs_app()->pool.sess);
9
10
open5gs_2.4.8.202207240002.tar.xz/lib/pfcp/xact.c -> open5gs_2.4.8.202207250002.tar.xz/lib/pfcp/xact.c
Changed
10
1
2
{
3
ogs_assert(ogs_pfcp_xact_initialized == 0);
4
5
- ogs_pool_init(&pool, ogs_app()->pool.pfcp_xact);
6
+ ogs_pool_init(&pool, ogs_app()->pool.xact);
7
8
g_xact_id = 0;
9
10
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/context.c -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/context.c
Changed
135
1
2
ogs_pool_init(&nf_instance_pool, ogs_app()->pool.nf);
3
ogs_pool_init(&nf_service_pool, ogs_app()->pool.nf_service);
4
5
- ogs_pool_init(&xact_pool, ogs_app()->pool.message);
6
+ ogs_pool_init(&xact_pool, ogs_app()->pool.xact);
7
8
ogs_list_init(&self.subscription_list);
9
- ogs_pool_init(&subscription_pool, ogs_app()->pool.nf_subscription);
10
+ ogs_pool_init(&subscription_pool, ogs_app()->pool.subscription);
11
12
ogs_pool_init(&smf_info_pool, ogs_app()->pool.nf);
13
14
15
nf_service_associate_client(nf_service);
16
}
17
18
-void ogs_sbi_select_nf(
19
- ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state)
20
+bool ogs_sbi_discovery_param_is_matched(
21
+ ogs_sbi_nf_instance_t *nf_instance,
22
+ OpenAPI_nf_type_e target_nf_type,
23
+ ogs_sbi_discovery_option_t *discovery_option)
24
{
25
- ogs_sbi_nf_instance_t *nf_instance = NULL;
26
+ ogs_assert(nf_instance);
27
+ ogs_assert(ogs_sbi_self()->nf_state_registered);
28
+ ogs_assert(target_nf_type);
29
30
- ogs_assert(sbi_object);
31
- ogs_assert(nf_type);
32
- ogs_assert(state);
33
+ if (!OGS_FSM_CHECK(&nf_instance->sm,
34
+ ogs_sbi_self()->nf_state_registered)) return false;
35
36
- ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
37
- if (OGS_FSM_CHECK(&nf_instance->sm, state) &&
38
- nf_instance->nf_type == nf_type) {
39
- OGS_SBI_SETUP_NF(sbi_object, nf_type, nf_instance);
40
- break;
41
- }
42
+ if (nf_instance->nf_type != target_nf_type) return false;
43
+
44
+ if (discovery_option) {
45
+ if (discovery_option->target_nf_instance_id &&
46
+ strcmp(nf_instance->id,
47
+ discovery_option->target_nf_instance_id) != 0)
48
+ return false;
49
}
50
+
51
+ return true;
52
}
53
54
-void ogs_sbi_select_nf_by_instanceid(
55
- ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state,
56
- char *nf_instance_id)
57
+void ogs_sbi_select_nf(
58
+ ogs_sbi_object_t *sbi_object,
59
+ OpenAPI_nf_type_e target_nf_type,
60
+ ogs_sbi_discovery_option_t *discovery_option)
61
{
62
ogs_sbi_nf_instance_t *nf_instance = NULL;
63
64
+ ogs_assert(ogs_sbi_self()->nf_state_registered);
65
ogs_assert(sbi_object);
66
- ogs_assert(nf_type);
67
- ogs_assert(state);
68
+ ogs_assert(target_nf_type);
69
70
ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
71
- if (OGS_FSM_CHECK(&nf_instance->sm, state) &&
72
- (nf_instance->nf_type == nf_type) &&
73
- (!(strcmp(nf_instance->id, nf_instance_id)))) {
74
- OGS_SBI_SETUP_NF(sbi_object, nf_type, nf_instance);
75
- break;
76
- }
77
+ if (ogs_sbi_discovery_param_is_matched(
78
+ nf_instance, target_nf_type, discovery_option) == false)
79
+ continue;
80
+
81
+ OGS_SBI_SETUP_NF(sbi_object, target_nf_type, nf_instance);
82
+ break;
83
}
84
}
85
86
87
}
88
89
ogs_sbi_xact_t *ogs_sbi_xact_add(
90
- OpenAPI_nf_type_e target_nf_type, ogs_sbi_object_t *sbi_object,
91
- ogs_sbi_build_f build, void *context, void *data,
92
- void (*timer_cb)(void *data))
93
+ ogs_sbi_object_t *sbi_object,
94
+ OpenAPI_nf_type_e target_nf_type,
95
+ ogs_sbi_discovery_option_t *discovery_option,
96
+ ogs_sbi_build_f build, void *context, void *data)
97
{
98
ogs_sbi_xact_t *xact = NULL;
99
100
+ ogs_assert(ogs_sbi_self()->client_wait_expire);
101
ogs_assert(sbi_object);
102
103
ogs_pool_alloc(&xact_pool, &xact);
104
ogs_expect_or_return_val(xact, NULL);
105
memset(xact, 0, sizeof(ogs_sbi_xact_t));
106
107
- xact->target_nf_type = target_nf_type;
108
xact->sbi_object = sbi_object;
109
110
+ xact->target_nf_type = target_nf_type;
111
+ xact->discovery_option = discovery_option;
112
+
113
xact->request = (*build)(context, data);
114
if (!xact->request) {
115
ogs_error("SBI build failed");
116
117
}
118
119
xact->t_response = ogs_timer_add(
120
- ogs_app()->timer_mgr, timer_cb, xact);
121
+ ogs_app()->timer_mgr, ogs_sbi_self()->client_wait_expire, xact);
122
if (!xact->t_response) {
123
ogs_error("ogs_timer_add() failed");
124
ogs_sbi_request_free(xact->request);
125
126
sbi_object = xact->sbi_object;
127
ogs_assert(sbi_object);
128
129
+ if (xact->discovery_option)
130
+ ogs_sbi_discovery_option_free(xact->discovery_option);
131
+
132
ogs_assert(xact->t_response);
133
ogs_timer_delete(xact->t_response);
134
135
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/context.h -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/context.h
Changed
50
1
2
3
const char *content_encoding;
4
5
+ void (*client_wait_expire)(void *data);
6
+ ogs_fsm_handler_t nf_state_registered;
7
+
8
} ogs_sbi_context_t;
9
10
typedef struct ogs_sbi_nf_instance_s {
11
12
ogs_lnode_t lnode;
13
14
OpenAPI_nf_type_e target_nf_type;
15
+ ogs_sbi_discovery_option_t *discovery_option;
16
17
ogs_sbi_request_t *request;
18
ogs_timer_t *t_response;
19
20
(__nFInstance)->reference_count); \
21
} while(0)
22
23
+bool ogs_sbi_discovery_param_is_matched(
24
+ ogs_sbi_nf_instance_t *nf_instance,
25
+ OpenAPI_nf_type_e target_nf_type,
26
+ ogs_sbi_discovery_option_t *discovery_option);
27
+
28
void ogs_sbi_select_nf(
29
- ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state);
30
-void ogs_sbi_select_nf_by_instanceid(
31
- ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state,
32
- char *nf_instance_id);
33
+ ogs_sbi_object_t *sbi_object,
34
+ OpenAPI_nf_type_e target_nf_type,
35
+ ogs_sbi_discovery_option_t *discovery_option);
36
37
void ogs_sbi_object_free(ogs_sbi_object_t *sbi_object);
38
39
ogs_sbi_xact_t *ogs_sbi_xact_add(
40
- OpenAPI_nf_type_e target_nf_type, ogs_sbi_object_t *sbi_object,
41
- ogs_sbi_build_f build, void *context, void *data,
42
- void (*timer_cb)(void *data));
43
+ ogs_sbi_object_t *sbi_object,
44
+ OpenAPI_nf_type_e target_nf_type,
45
+ ogs_sbi_discovery_option_t *discovery_option,
46
+ ogs_sbi_build_f build, void *context, void *data);
47
void ogs_sbi_xact_remove(ogs_sbi_xact_t *xact);
48
void ogs_sbi_xact_remove_all(ogs_sbi_object_t *sbi_object);
49
ogs_sbi_xact_t *ogs_sbi_xact_cycle(ogs_sbi_xact_t *xact);
50
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/message.c -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/message.c
Changed
201
1
2
3
ogs_assert(message);
4
5
+ /* Discovery Option */
6
+ if (message->param.discovery_option)
7
+ ogs_sbi_discovery_option_free(message->param.discovery_option);
8
+
9
+ /* JSON Data */
10
if (message->NFProfile)
11
OpenAPI_nf_profile_free(message->NFProfile);
12
if (message->ProblemDetails)
13
14
if (message->DeregistrationData)
15
OpenAPI_deregistration_data_free(message->DeregistrationData);
16
17
+ /* HTTP Part */
18
for (i = 0; i < message->num_of_part; i++) {
19
if (message->parti.pkbuf)
20
ogs_pkbuf_free(message->parti.pkbuf);
21
22
23
ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
24
{
25
+ int i;
26
ogs_sbi_request_t *request = NULL;
27
28
ogs_assert(message);
29
30
request->h.uri = ogs_strdup(message->h.uri);
31
ogs_expect_or_return_val(request->h.uri, NULL);
32
} else {
33
- int i;
34
-
35
ogs_expect_or_return_val(message->h.service.name, NULL);
36
request->h.service.name = ogs_strdup(message->h.service.name);
37
ogs_expect_or_return_val(message->h.api.version, NULL);
38
39
message->h.resource.componenti);
40
}
41
42
- /* URL Param */
43
- if (message->param.nf_id) {
44
- ogs_sbi_header_set(request->http.params,
45
- OGS_SBI_PARAM_NF_ID, message->param.nf_id);
46
- }
47
- if (message->param.nf_type) {
48
- char *v = OpenAPI_nf_type_ToString(message->param.nf_type);
49
+ /* Discovery Parameter */
50
+ if (message->param.target_nf_type) {
51
+ char *v = OpenAPI_nf_type_ToString(message->param.target_nf_type);
52
ogs_expect_or_return_val(v, NULL);
53
- ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_NF_TYPE, v);
54
+ ogs_sbi_header_set(request->http.params,
55
+ OGS_SBI_PARAM_TARGET_NF_TYPE, v);
56
}
57
if (message->param.requester_nf_type) {
58
char *v = OpenAPI_nf_type_ToString(message->param.requester_nf_type);
59
60
ogs_sbi_header_set(request->http.params,
61
OGS_SBI_PARAM_REQUESTER_NF_TYPE, v);
62
}
63
- if (message->param.target_nf_type) {
64
- char *v = OpenAPI_nf_type_ToString(message->param.target_nf_type);
65
- ogs_expect_or_return_val(v, NULL);
66
+
67
+ /* Discovery Option Parameter */
68
+ if (message->param.discovery_option) {
69
+ ogs_sbi_discovery_option_t *discovery_option =
70
+ message->param.discovery_option;
71
+
72
+ if (discovery_option->target_nf_instance_id) {
73
+ ogs_sbi_header_set(request->http.params,
74
+ OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID,
75
+ discovery_option->target_nf_instance_id);
76
+ }
77
+ if (discovery_option->requester_nf_instance_id) {
78
+ ogs_sbi_header_set(request->http.params,
79
+ OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID,
80
+ discovery_option->requester_nf_instance_id);
81
+ }
82
+ if (discovery_option->num_of_service_names) {
83
+ char *v = NULL;
84
+ cJSON *item = NULL;
85
+
86
+ item = cJSON_CreateStringArray(
87
+ (const char * const*)discovery_option->service_names,
88
+ discovery_option->num_of_service_names);
89
+ ogs_expect_or_return_val(item, NULL);
90
+
91
+ v = cJSON_Print(item);
92
+ ogs_expect_or_return_val(v, NULL);
93
+ cJSON_Delete(item);
94
+
95
+ ogs_sbi_header_set(
96
+ request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v);
97
+ ogs_free(v);
98
+ }
99
+ }
100
+
101
+ /* URL Query Paramemter */
102
+ if (message->param.nf_id) {
103
ogs_sbi_header_set(request->http.params,
104
- OGS_SBI_PARAM_TARGET_NF_TYPE, v);
105
+ OGS_SBI_PARAM_NF_ID, message->param.nf_id);
106
+ }
107
+ if (message->param.nf_type) {
108
+ char *v = OpenAPI_nf_type_ToString(message->param.nf_type);
109
+ ogs_expect_or_return_val(v, NULL);
110
+ ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_NF_TYPE, v);
111
}
112
if (message->param.limit) {
113
char *v = ogs_msprintf("%d", message->param.limit);
114
115
{
116
int rv;
117
ogs_hash_index_t *hi;
118
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
119
+ bool discovery_option_presence = false;
120
121
ogs_assert(request);
122
ogs_assert(message);
123
124
return OGS_ERROR;
125
}
126
127
+ discovery_option_presence = false;
128
+ discovery_option = ogs_sbi_discovery_option_new();
129
+ ogs_assert(discovery_option);
130
+
131
for (hi = ogs_hash_first(request->http.params);
132
hi; hi = ogs_hash_next(hi)) {
133
- if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_ID)) {
134
- message->param.nf_id = ogs_hash_this_val(hi);
135
- } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_TYPE)) {
136
- message->param.nf_type =
137
- OpenAPI_nf_type_FromString(ogs_hash_this_val(hi));
138
- } else if (!strcmp(ogs_hash_this_key(hi),
139
+ /* Discovery Parameter */
140
+ if (!strcmp(ogs_hash_this_key(hi),
141
OGS_SBI_PARAM_TARGET_NF_TYPE)) {
142
message->param.target_nf_type =
143
OpenAPI_nf_type_FromString(ogs_hash_this_val(hi));
144
145
OGS_SBI_PARAM_REQUESTER_NF_TYPE)) {
146
message->param.requester_nf_type =
147
OpenAPI_nf_type_FromString(ogs_hash_this_val(hi));
148
+
149
+ /* Discovery Option Parameter */
150
+ } else if (!strcmp(ogs_hash_this_key(hi),
151
+ OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID)) {
152
+ discovery_option_presence = true;
153
+ ogs_sbi_discovery_option_set_target_nf_instance_id(
154
+ discovery_option, ogs_hash_this_val(hi));
155
+ } else if (!strcmp(ogs_hash_this_key(hi),
156
+ OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID)) {
157
+ discovery_option_presence = true;
158
+ ogs_sbi_discovery_option_set_requester_nf_instance_id(
159
+ discovery_option, ogs_hash_this_val(hi));
160
+ } else if (!strcmp(ogs_hash_this_key(hi),
161
+ OGS_SBI_PARAM_SERVICE_NAMES)) {
162
+ char *v = NULL;
163
+ cJSON *array = NULL, *item = NULL;
164
+
165
+ v = ogs_hash_this_val(hi);
166
+ if (v) {
167
+ array = cJSON_Parse(v);
168
+ if (cJSON_IsArray(array)) {
169
+
170
+ discovery_option_presence = true;
171
+
172
+ cJSON_ArrayForEach(item, array) {
173
+ char *names = cJSON_GetStringValue(item);
174
+ if (names)
175
+ ogs_sbi_discovery_option_add_service_names(
176
+ discovery_option, names);
177
+ }
178
+ }
179
+ cJSON_Delete(array);
180
+ }
181
+
182
+ /* URL Query Parameter */
183
+ } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_ID)) {
184
+ message->param.nf_id = ogs_hash_this_val(hi);
185
+ } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_TYPE)) {
186
+ message->param.nf_type =
187
+ OpenAPI_nf_type_FromString(ogs_hash_this_val(hi));
188
} else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_LIMIT)) {
189
message->param.limit = atoi(ogs_hash_this_val(hi));
190
} else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_DNN)) {
191
192
}
193
}
194
195
+ if (discovery_option_presence == true)
196
+ /* message->param.discovery_option will be freed()
197
+ * in ogs_sbi_message_free() */
198
+ message->param.discovery_option = discovery_option;
199
+ else
200
+ ogs_sbi_discovery_option_free(discovery_option);
201
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/message.h -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/message.h
Changed
149
1
2
#define OGS_SBI_NBSF_MANAGEMENT_ES3XX 4
3
#define OGS_SBI_NBSF_MANAGEMENT_EXTENDED_SAME_PCF 5
4
5
-#define OGS_SBI_PARAM_NF_ID "nf-id"
6
-#define OGS_SBI_PARAM_NF_TYPE "nf-type"
7
-#define OGS_SBI_PARAM_TARGET_NF_TYPE "target-nf-type"
8
-#define OGS_SBI_PARAM_REQUESTER_NF_TYPE "requester-nf-type"
9
-#define OGS_SBI_PARAM_LIMIT "limit"
10
-#define OGS_SBI_PARAM_DNN "dnn"
11
-#define OGS_SBI_PARAM_PLMN_ID "plmn-id"
12
-#define OGS_SBI_PARAM_SINGLE_NSSAI "single-nssai"
13
-#define OGS_SBI_PARAM_SNSSAI "snssai"
14
-#define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \
15
- "slice-info-request-for-pdu-session"
16
-#define OGS_SBI_PARAM_IPV4ADDR "ipv4Addr"
17
-#define OGS_SBI_PARAM_IPV6PREFIX "ipv6Prefix"
18
-
19
#define OGS_SBI_ACCEPT "Accept"
20
#define OGS_SBI_ACCEPT_ENCODING "Accept-Encoding"
21
#define OGS_SBI_CONTENT_TYPE "Content-Type"
22
23
#define OGS_SBI_APPLICATION_5GNAS_TYPE "vnd.3gpp.5gnas"
24
#define OGS_SBI_APPLICATION_NGAP_TYPE "vnd.3gpp.ngap"
25
26
-#define OGS_SBI_CUSTOM_3GPP_COMMON "3gpp-Sbi-"
27
-#define OGS_SBI_CUSTOM_MESSAGE_PRIORITY "3gpp-Sbi-Message-Priority"
28
-#define OGS_SBI_CUSTOM_CALLBACK "3gpp-Sbi-Callback"
29
-#define OGS_SBI_CUSTOM_TARGET_APIROOT "3gpp-Sbi-Target-apiRoot"
30
-#define OGS_SBI_CUSTOM_ROUTING_BINDING "3gpp-Sbi-Routing-Binding"
31
-#define OGS_SBI_CUSTOM_BINDING "3gpp-Sbi-Binding"
32
-#define OGS_SBI_CUSTOM_DISCOVERY_COMMON "3gpp-Sbi-Discovery-"
33
-#define OGS_SBI_CUSTOM_PRODUCER_ID "3gpp-Sbi-Producer-Id"
34
-#define OGS_SBI_CUSTOM_OCI "3gpp-Sbi-Oci"
35
-#define OGS_SBI_CUSTOM_CLIENT_CREDENTIALS "3gpp-Sbi-Client-Credentials"
36
-#define OGS_SBI_CUSTOM_NRF_URI "3gpp-Sbi-Nrf-Uri"
37
-#define OGS_SBI_CUSTOM_TARGET_NF_ID "3gpp-Sbi-Target-Nf-Id"
38
-#define OGS_SBI_CUSTOM_ACCESS_SCOPE "3gpp-Sbi-Access-Scope"
39
-#define OGS_SBI_CUSTOM_ACCESS_TOKEN "3gpp-Sbi-Access-Token"
40
+#define OGS_SBI_CUSTOM_3GPP_COMMON "3gpp-Sbi-"
41
+#define OGS_SBI_CUSTOM_MESSAGE_PRIORITY \
42
+ OGS_SBI_CUSTOM_3GPP_COMMON "Message-Priority"
43
+#define OGS_SBI_CUSTOM_CALLBACK \
44
+ OGS_SBI_CUSTOM_3GPP_COMMON "Callback"
45
+#define OGS_SBI_CUSTOM_TARGET_APIROOT \
46
+ OGS_SBI_CUSTOM_3GPP_COMMON "Target-apiRoot"
47
+#define OGS_SBI_CUSTOM_ROUTING_BINDING \
48
+ OGS_SBI_CUSTOM_3GPP_COMMON "Routing-Binding"
49
+#define OGS_SBI_CUSTOM_BINDING \
50
+ OGS_SBI_CUSTOM_3GPP_COMMON "Binding"
51
+#define OGS_SBI_CUSTOM_DISCOVERY_COMMON \
52
+ OGS_SBI_CUSTOM_3GPP_COMMON "Discovery-"
53
+#define OGS_SBI_CUSTOM_DISCOVERY_TARGET_NF_TYPE \
54
+ OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_TARGET_NF_TYPE
55
+#define OGS_SBI_CUSTOM_DISCOVERY_REQUESTER_NF_TYPE \
56
+ OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_REQUESTER_NF_TYPE
57
+#define OGS_SBI_CUSTOM_DISCOVERY_TARGET_NF_INSTANCE_ID \
58
+ OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID
59
+#define OGS_SBI_CUSTOM_DISCOVERY_REQUESTER_NF_INSTANCE_ID \
60
+ OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID
61
+#define OGS_SBI_CUSTOM_DISCOVERY_SERVICE_NAMES \
62
+ OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_SERVICE_NAMES
63
+#define OGS_SBI_CUSTOM_PRODUCER_ID \
64
+ OGS_SBI_CUSTOM_3GPP_COMMON "Producer-Id"
65
+#define OGS_SBI_CUSTOM_OCI \
66
+ OGS_SBI_CUSTOM_3GPP_COMMON "Oci"
67
+#define OGS_SBI_CUSTOM_CLIENT_CREDENTIALS \
68
+ OGS_SBI_CUSTOM_3GPP_COMMON "Client-Credentials"
69
+#define OGS_SBI_CUSTOM_NRF_URI \
70
+ OGS_SBI_CUSTOM_3GPP_COMMON "Nrf-Uri"
71
+#define OGS_SBI_CUSTOM_TARGET_NF_ID \
72
+ OGS_SBI_CUSTOM_3GPP_COMMON "Target-Nf-Id"
73
+#define OGS_SBI_CUSTOM_ACCESS_SCOPE \
74
+ OGS_SBI_CUSTOM_3GPP_COMMON "Access-Scope"
75
+#define OGS_SBI_CUSTOM_ACCESS_TOKEN \
76
+ OGS_SBI_CUSTOM_3GPP_COMMON "Access-Token"
77
+
78
+#define OGS_SBI_PARAM_TARGET_NF_TYPE "target-nf-type"
79
+#define OGS_SBI_PARAM_REQUESTER_NF_TYPE "requester-nf-type"
80
+#define OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID "target-nf-instance-id"
81
+#define OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID "requester-nf-instance-id"
82
+#define OGS_SBI_PARAM_SERVICE_NAMES "service-names"
83
+
84
+#define OGS_SBI_PARAM_NF_ID "nf-id"
85
+#define OGS_SBI_PARAM_NF_TYPE "nf-type"
86
+#define OGS_SBI_PARAM_LIMIT "limit"
87
+#define OGS_SBI_PARAM_DNN "dnn"
88
+#define OGS_SBI_PARAM_PLMN_ID "plmn-id"
89
+#define OGS_SBI_PARAM_SINGLE_NSSAI "single-nssai"
90
+#define OGS_SBI_PARAM_SNSSAI "snssai"
91
+#define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \
92
+ "slice-info-request-for-pdu-session"
93
+#define OGS_SBI_PARAM_IPV4ADDR "ipv4Addr"
94
+#define OGS_SBI_PARAM_IPV6PREFIX "ipv6Prefix"
95
96
#define OGS_SBI_CONTENT_JSON_TYPE \
97
OGS_SBI_APPLICATION_TYPE "/" OGS_SBI_APPLICATION_JSON_TYPE
98
99
ogs_pkbuf_t *pkbuf;
100
} ogs_sbi_part_t;
101
102
+typedef struct ogs_sbi_discovery_option_s {
103
+ char *target_nf_instance_id;
104
+ char *requester_nf_instance_id;
105
+
106
+ int num_of_service_names;
107
+ char *service_namesOGS_MAX_NUM_OF_NF_SERVICE;
108
+} ogs_sbi_discovery_option_t;
109
+
110
typedef struct ogs_sbi_message_s {
111
ogs_sbi_header_t h;
112
113
114
} http;
115
116
struct {
117
+ /* Discovery Parameter */
118
OpenAPI_nf_type_e target_nf_type;
119
OpenAPI_nf_type_e requester_nf_type;
120
+
121
+ /* Discovery Option Parameter */
122
+ ogs_sbi_discovery_option_t *discovery_option;
123
+
124
+ /* URL Query Parameter */
125
char *nf_id;
126
OpenAPI_nf_type_e nf_type;
127
int limit;
128
129
130
void ogs_sbi_http_hash_free(ogs_hash_t *hash);
131
132
+ogs_sbi_discovery_option_t *ogs_sbi_discovery_option_new(void);
133
+void ogs_sbi_discovery_option_free(
134
+ ogs_sbi_discovery_option_t *discovery_option);
135
+
136
+void ogs_sbi_discovery_option_set_target_nf_instance_id(
137
+ ogs_sbi_discovery_option_t *discovery_option,
138
+ char *target_nf_instance_id);
139
+void ogs_sbi_discovery_option_set_requester_nf_instance_id(
140
+ ogs_sbi_discovery_option_t *discovery_option,
141
+ char *requester_nf_instance_id);
142
+void ogs_sbi_discovery_option_add_service_names(
143
+ ogs_sbi_discovery_option_t *discovery_option,
144
+ char *service_name);
145
+
146
#ifdef __cplusplus
147
}
148
#endif
149
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/nnrf-build.c -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/nnrf-build.c
Changed
20
1
2
}
3
4
ogs_sbi_request_t *ogs_nnrf_disc_build_discover(
5
- OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type)
6
+ OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type,
7
+ ogs_sbi_discovery_option_t *discovery_option)
8
{
9
ogs_sbi_message_t message;
10
ogs_sbi_request_t *request = NULL;
11
12
message.param.target_nf_type = target_nf_type;
13
message.param.requester_nf_type = requester_nf_type;
14
15
+ message.param.discovery_option = discovery_option;
16
+
17
request = ogs_sbi_build_request(&message);
18
19
return request;
20
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/nnrf-build.h -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/nnrf-build.h
Changed
11
1
2
ogs_sbi_request_t *ogs_nnrf_nfm_build_profile_retrieve(char *nf_instance_id);
3
4
ogs_sbi_request_t *ogs_nnrf_disc_build_discover(
5
- OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type);
6
+ OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type,
7
+ ogs_sbi_discovery_option_t *discovery_option);
8
9
#ifdef __cplusplus
10
}
11
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/path.c -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/path.c
Changed
161
1
2
#include "ogs-sbi.h"
3
#include "ogs-app.h"
4
5
-bool ogs_sbi_send(ogs_sbi_nf_instance_t *nf_instance,
6
+bool ogs_sbi_send_request(ogs_sbi_nf_instance_t *nf_instance,
7
ogs_sbi_client_cb_f client_cb, ogs_sbi_xact_t *xact)
8
{
9
ogs_sbi_request_t *request = NULL;
10
11
return true;
12
}
13
14
-bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact,
15
- ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb)
16
+bool ogs_sbi_discover_and_send(
17
+ ogs_sbi_object_t *sbi_object,
18
+ OpenAPI_nf_type_e target_nf_type,
19
+ OpenAPI_nf_type_e requester_nf_type,
20
+ ogs_sbi_discovery_option_t *discovery_option,
21
+ ogs_sbi_client_cb_f client_cb, void *data)
22
{
23
ogs_sbi_nf_instance_t *nf_instance = NULL;
24
25
- ogs_assert(xact);
26
- ogs_assert(xact->sbi_object);
27
- ogs_assert(xact->target_nf_type);
28
- ogs_assert(nf_state_registered);
29
+ ogs_assert(sbi_object);
30
+ ogs_assert(target_nf_type);
31
+ ogs_assert(requester_nf_type);
32
ogs_assert(client_cb);
33
34
/* Target NF-Instance */
35
- nf_instance = OGS_SBI_NF_INSTANCE(xact->sbi_object, xact->target_nf_type);
36
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
37
if (!nf_instance) {
38
- ogs_assert(xact->target_nf_type != OpenAPI_nf_type_NRF);
39
- ogs_sbi_select_nf(
40
- xact->sbi_object, xact->target_nf_type, nf_state_registered);
41
- nf_instance = OGS_SBI_NF_INSTANCE(
42
- xact->sbi_object, xact->target_nf_type);
43
+ ogs_assert(target_nf_type != OpenAPI_nf_type_NRF);
44
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
45
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
46
}
47
48
if (nf_instance) {
49
- return ogs_sbi_send(nf_instance, client_cb, xact);
50
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
51
}
52
53
/* NRF NF-Instance */
54
- nf_instance = OGS_SBI_NF_INSTANCE(xact->sbi_object, OpenAPI_nf_type_NRF);
55
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, OpenAPI_nf_type_NRF);
56
if (!nf_instance) {
57
- ogs_sbi_select_nf(
58
- xact->sbi_object, OpenAPI_nf_type_NRF, nf_state_registered);
59
- nf_instance = OGS_SBI_NF_INSTANCE(
60
- xact->sbi_object, OpenAPI_nf_type_NRF);
61
+ ogs_sbi_select_nf(sbi_object, OpenAPI_nf_type_NRF, NULL);
62
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, OpenAPI_nf_type_NRF);
63
}
64
65
if (nf_instance) {
66
ogs_warn("Try to discover %s",
67
- OpenAPI_nf_type_ToString(xact->target_nf_type));
68
+ OpenAPI_nf_type_ToString(target_nf_type));
69
return ogs_nnrf_disc_send_nf_discover(
70
- nf_instance, xact->target_nf_type, xact);
71
+ nf_instance,
72
+ target_nf_type, requester_nf_type, discovery_option,
73
+ data);
74
}
75
76
- ogs_error("Cannot discover %s",
77
- OpenAPI_nf_type_ToString(xact->target_nf_type));
78
+ ogs_error("Cannot discover %s", OpenAPI_nf_type_ToString(target_nf_type));
79
80
return false;
81
}
82
83
return ogs_sbi_scp_send_request(client, client->cb, request, nf_instance);
84
}
85
86
-bool ogs_sbi_discover_by_nf_instanceid_and_send(ogs_sbi_xact_t *xact,
87
- ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb,
88
- char *nf_instance_id)
89
-{
90
- ogs_sbi_nf_instance_t *nf_instance = NULL;
91
-
92
- ogs_assert(xact);
93
- ogs_assert(xact->sbi_object);
94
- ogs_assert(xact->target_nf_type);
95
- ogs_assert(nf_state_registered);
96
- ogs_assert(client_cb);
97
- ogs_assert(nf_instance_id);
98
-
99
- /* Target NF-Instance - search by NF Instance Id */
100
- ogs_assert(xact->target_nf_type != OpenAPI_nf_type_NRF);
101
- ogs_sbi_select_nf_by_instanceid(
102
- xact->sbi_object, xact->target_nf_type, nf_state_registered,
103
- nf_instance_id);
104
-
105
- nf_instance = OGS_SBI_NF_INSTANCE(
106
- xact->sbi_object, xact->target_nf_type);
107
-
108
- if (nf_instance) {
109
- return ogs_sbi_send(nf_instance, client_cb, xact);
110
- }
111
-
112
- /* NRF NF-Instance */
113
- nf_instance = OGS_SBI_NF_INSTANCE(xact->sbi_object, OpenAPI_nf_type_NRF);
114
- if (!nf_instance) {
115
- ogs_sbi_select_nf(
116
- xact->sbi_object, OpenAPI_nf_type_NRF, nf_state_registered);
117
- nf_instance = OGS_SBI_NF_INSTANCE(
118
- xact->sbi_object, OpenAPI_nf_type_NRF);
119
- }
120
-
121
- if (nf_instance) {
122
- ogs_warn("Try to retrieve %s", nf_instance_id);
123
- return ogs_nnrf_nfm_send_nf_profile_retrieve(nf_instance,
124
- nf_instance_id, xact);
125
- }
126
-
127
- ogs_error("Cannot retrieve %s", nf_instance_id);
128
- return false;
129
-}
130
-
131
bool ogs_nnrf_nfm_send_nf_update(ogs_sbi_nf_instance_t *nf_instance)
132
{
133
ogs_sbi_request_t *request = NULL;
134
135
client, client->cb, request, subscription);
136
}
137
138
-bool ogs_nnrf_disc_send_nf_discover(ogs_sbi_nf_instance_t *nf_instance,
139
- OpenAPI_nf_type_e target_nf_type, void *data)
140
+bool ogs_nnrf_disc_send_nf_discover(
141
+ ogs_sbi_nf_instance_t *nf_instance,
142
+ OpenAPI_nf_type_e target_nf_type,
143
+ OpenAPI_nf_type_e requester_nf_type,
144
+ ogs_sbi_discovery_option_t *discovery_option,
145
+ void *data)
146
{
147
ogs_sbi_client_t *client = NULL;
148
ogs_sbi_request_t *request = NULL;
149
150
ogs_assert(nf_instance);
151
+ ogs_assert(target_nf_type);
152
+ ogs_assert(requester_nf_type);
153
154
- ogs_assert(ogs_sbi_self()->nf_instance);
155
request = ogs_nnrf_disc_build_discover(
156
- target_nf_type, ogs_sbi_self()->nf_instance->nf_type);
157
+ target_nf_type, requester_nf_type, discovery_option);
158
ogs_expect_or_return_val(request, false);
159
160
client = nf_instance->client;
161
open5gs_2.4.8.202207240002.tar.xz/lib/sbi/path.h -> open5gs_2.4.8.202207250002.tar.xz/lib/sbi/path.h
Changed
37
1
2
extern "C" {
3
#endif
4
5
-bool ogs_sbi_send(ogs_sbi_nf_instance_t *nf_instance,
6
+bool ogs_sbi_send_request(ogs_sbi_nf_instance_t *nf_instance,
7
ogs_sbi_client_cb_f client_cb, ogs_sbi_xact_t *xact);
8
-bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact,
9
- ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb);
10
-bool ogs_sbi_discover_by_nf_instanceid_and_send(ogs_sbi_xact_t *xact,
11
- ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb,
12
- char *nf_instance_id);
13
+bool ogs_sbi_discover_and_send(
14
+ ogs_sbi_object_t *sbi_object,
15
+ OpenAPI_nf_type_e target_nf_type,
16
+ OpenAPI_nf_type_e requester_nf_type,
17
+ ogs_sbi_discovery_option_t *discovery_option,
18
+ ogs_sbi_client_cb_f client_cb, void *data);
19
20
bool ogs_nnrf_nfm_send_nf_register(
21
ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_request_t *(*build)(void));
22
23
bool ogs_nnrf_nfm_send_nf_status_unsubscribe(
24
ogs_sbi_subscription_t *subscription);
25
26
-bool ogs_nnrf_disc_send_nf_discover(ogs_sbi_nf_instance_t *nf_instance,
27
- OpenAPI_nf_type_e target_nf_type, void *data);
28
+bool ogs_nnrf_disc_send_nf_discover(
29
+ ogs_sbi_nf_instance_t *nf_instance,
30
+ OpenAPI_nf_type_e target_nf_type,
31
+ OpenAPI_nf_type_e requester_nf_type,
32
+ ogs_sbi_discovery_option_t *discovery_option,
33
+ void *data);
34
35
#define ogs_sbi_send_http_status_no_content(__sTREAM) \
36
ogs_sbi_send_response(__sTREAM, OGS_SBI_HTTP_STATUS_NO_CONTENT)
37
open5gs_2.4.8.202207240002.tar.xz/src/amf/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/context.c
Changed
74
1
2
return ogs_pool_cycle(&amf_sess_pool, sess);
3
}
4
5
-void amf_ue_select_nf(amf_ue_t *amf_ue, OpenAPI_nf_type_e nf_type)
6
-{
7
- ogs_assert(amf_ue);
8
- ogs_assert(nf_type);
9
-
10
- ogs_sbi_select_nf(&amf_ue->sbi, nf_type, amf_nf_state_registered);
11
-}
12
-
13
-void amf_sess_select_nf(amf_sess_t *sess, OpenAPI_nf_type_e nf_type)
14
-{
15
- ogs_assert(sess);
16
- ogs_assert(nf_type);
17
-
18
- if (nf_type == OpenAPI_nf_type_SMF)
19
- amf_sess_select_smf(sess);
20
- else
21
- ogs_sbi_select_nf(&sess->sbi, nf_type, amf_nf_state_registered);
22
-}
23
-
24
static bool check_smf_info(amf_sess_t *sess, ogs_list_t *nf_info_list);
25
26
-void amf_sess_select_smf(amf_sess_t *sess)
27
+void amf_sbi_select_nf(
28
+ ogs_sbi_object_t *sbi_object,
29
+ OpenAPI_nf_type_e target_nf_type,
30
+ ogs_sbi_discovery_option_t *discovery_option)
31
{
32
ogs_sbi_nf_instance_t *nf_instance = NULL;
33
+ amf_sess_t *sess = NULL;
34
35
- ogs_assert(sess);
36
+ ogs_assert(ogs_sbi_self()->nf_state_registered);
37
+ ogs_assert(sbi_object);
38
+ ogs_assert(target_nf_type);
39
+
40
+ switch(sbi_object->type) {
41
+ case OGS_SBI_OBJ_UE_TYPE:
42
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
43
+ break;
44
+ case OGS_SBI_OBJ_SESS_TYPE:
45
+ sess = (amf_sess_t *)sbi_object;
46
+ ogs_assert(sess);
47
+
48
+ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
49
+ if (ogs_sbi_discovery_param_is_matched(
50
+ nf_instance, target_nf_type, discovery_option) == false)
51
+ continue;
52
+
53
+ if (target_nf_type == OpenAPI_nf_type_SMF) {
54
+ if (check_smf_info(sess, &nf_instance->nf_info_list) == false)
55
+ continue;
56
+ }
57
58
- ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
59
- if (OGS_FSM_CHECK(&nf_instance->sm, amf_nf_state_registered) &&
60
- nf_instance->nf_type == OpenAPI_nf_type_SMF &&
61
- check_smf_info(sess, &nf_instance->nf_info_list) == true) {
62
- OGS_SBI_SETUP_NF(&sess->sbi, OpenAPI_nf_type_SMF, nf_instance);
63
+ OGS_SBI_SETUP_NF(sbi_object, target_nf_type, nf_instance);
64
break;
65
}
66
+ break;
67
+ default:
68
+ ogs_fatal("(NF discover search result) Not implemented %d",
69
+ sbi_object->type);
70
+ ogs_assert_if_reached();
71
}
72
}
73
74
open5gs_2.4.8.202207240002.tar.xz/src/amf/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/amf/context.h
Changed
16
1
2
amf_ue_t *amf_ue_cycle(amf_ue_t *amf_ue);
3
amf_sess_t *amf_sess_cycle(amf_sess_t *sess);
4
5
-void amf_ue_select_nf(amf_ue_t *amf_ue, OpenAPI_nf_type_e nf_type);
6
-void amf_sess_select_nf(amf_sess_t *sess, OpenAPI_nf_type_e nf_type);
7
-
8
-void amf_sess_select_smf(amf_sess_t *sess);
9
+void amf_sbi_select_nf(
10
+ ogs_sbi_object_t *sbi_object,
11
+ OpenAPI_nf_type_e target_nf_type,
12
+ ogs_sbi_discovery_option_t *discovery_option);
13
14
#define AMF_SESSION_SYNC_DONE(__aMF, __sTATE) \
15
(amf_sess_xact_state_count(__aMF, __sTATE) == 0)
16
open5gs_2.4.8.202207240002.tar.xz/src/amf/gmm-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/gmm-handler.c
Changed
76
1
2
authentication_response_parameter->length);
3
4
ogs_assert(true ==
5
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL,
6
- amf_nausf_auth_build_authenticate_confirmation));
7
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
8
+ amf_nausf_auth_build_authenticate_confirmation, amf_ue, NULL));
9
10
return OGS_OK;
11
}
12
13
nf_instance = OGS_SBI_NF_INSTANCE(
14
&sess->sbi, OpenAPI_nf_type_SMF);
15
if (!nf_instance) {
16
- amf_sess_select_smf(sess);
17
+ amf_sbi_select_nf(&sess->sbi, OpenAPI_nf_type_SMF, NULL);
18
nf_instance = OGS_SBI_NF_INSTANCE(
19
&sess->sbi, OpenAPI_nf_type_SMF);
20
}
21
22
if (nf_instance) {
23
ogs_assert(true ==
24
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
25
- sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL,
26
- amf_nsmf_pdusession_build_create_sm_context));
27
+ amf_sess_sbi_discover_and_send(
28
+ OpenAPI_nf_type_SMF, NULL,
29
+ amf_nsmf_pdusession_build_create_sm_context,
30
+ sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL));
31
} else {
32
ogs_assert(true ==
33
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_NSSF,
34
- sess, 0, NULL, amf_nnssf_nsselection_build_get));
35
+ amf_sess_sbi_discover_and_send(
36
+ OpenAPI_nf_type_NSSF, NULL,
37
+ amf_nnssf_nsselection_build_get, sess, 0, NULL));
38
}
39
40
} else {
41
42
param.cause = OpenAPI_cause_REL_DUE_TO_DUPLICATE_SESSION_ID;
43
44
ogs_assert(true ==
45
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
46
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
47
+ amf_nsmf_pdusession_build_update_sm_context,
48
sess, AMF_UPDATE_SM_CONTEXT_DUPLICATED_PDU_SESSION_ID,
49
- ¶m, amf_nsmf_pdusession_build_update_sm_context));
50
+ ¶m));
51
}
52
53
} else {
54
55
param.ue_timezone = true;
56
57
ogs_assert(true ==
58
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
59
- sess, AMF_UPDATE_SM_CONTEXT_N1_RELEASED, ¶m,
60
- amf_nsmf_pdusession_build_update_sm_context));
61
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
62
+ amf_nsmf_pdusession_build_update_sm_context,
63
+ sess, AMF_UPDATE_SM_CONTEXT_N1_RELEASED, ¶m));
64
} else {
65
66
ogs_assert(true ==
67
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
68
- sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m,
69
- amf_nsmf_pdusession_build_update_sm_context));
70
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
71
+ amf_nsmf_pdusession_build_update_sm_context,
72
+ sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m));
73
}
74
75
switch (gsm_header->message_type) {
76
open5gs_2.4.8.202207240002.tar.xz/src/amf/gmm-sm.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/gmm-sm.c
Changed
144
1
2
if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
3
ogs_assert(true ==
4
amf_ue_sbi_discover_and_send(
5
- OpenAPI_nf_type_PCF, amf_ue, NULL,
6
- amf_npcf_am_policy_control_build_create));
7
+ OpenAPI_nf_type_PCF, NULL,
8
+ amf_npcf_am_policy_control_build_create,
9
+ amf_ue, NULL));
10
OGS_FSM_TRAN(s, &gmm_state_initial_context_setup);
11
break;
12
}
13
14
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
15
if (amf_sess_xact_count(amf_ue) == xact_count) {
16
ogs_assert(true ==
17
- amf_ue_sbi_discover_and_send(
18
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
19
- amf_nausf_auth_build_authenticate));
20
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
21
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
22
}
23
24
OGS_FSM_TRAN(s, &gmm_state_authentication);
25
26
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
27
if (amf_sess_xact_count(amf_ue) == xact_count) {
28
ogs_assert(true ==
29
- amf_ue_sbi_discover_and_send(
30
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
31
- amf_nausf_auth_build_authenticate));
32
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
33
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
34
}
35
36
OGS_FSM_TRAN(s, &gmm_state_authentication);
37
38
case OGS_5GMM_CAUSE_NGKSI_ALREADY_IN_USE:
39
ogs_warn("Authentication failure(ngKSI already in use)");
40
ogs_assert(true ==
41
- amf_ue_sbi_discover_and_send(
42
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
43
- amf_nausf_auth_build_authenticate));
44
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
45
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
46
return;
47
48
case OGS_5GMM_CAUSE_SYNCH_FAILURE:
49
50
break;
51
}
52
ogs_assert(true ==
53
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue,
54
- authentication_failure_parameter->auts,
55
- amf_nausf_auth_build_authenticate));
56
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
57
+ amf_nausf_auth_build_authenticate,
58
+ amf_ue, authentication_failure_parameter->auts));
59
return;
60
61
default:
62
63
}
64
65
ogs_assert(true ==
66
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL,
67
- amf_nausf_auth_build_authenticate));
68
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
69
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
70
break;
71
72
case OGS_NAS_5GS_5GMM_STATUS:
73
74
amf_ue->nhcc = 1;
75
76
ogs_assert(true ==
77
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue, NULL,
78
- amf_nudm_uecm_build_registration));
79
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
80
+ amf_nudm_uecm_build_registration, amf_ue, NULL));
81
82
if (amf_ue->nas.message_type == OGS_NAS_5GS_REGISTRATION_REQUEST) {
83
OGS_FSM_TRAN(s, &gmm_state_initial_context_setup);
84
85
}
86
87
ogs_assert(true ==
88
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL,
89
- amf_nausf_auth_build_authenticate));
90
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
91
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
92
93
OGS_FSM_TRAN(s, &gmm_state_authentication);
94
break;
95
96
CASE(OGS_SBI_HTTP_METHOD_PUT)
97
ogs_assert(true ==
98
amf_ue_sbi_discover_and_send(
99
- OpenAPI_nf_type_UDM, amf_ue,
100
- (char *)OGS_SBI_RESOURCE_NAME_AM_DATA,
101
- amf_nudm_sdm_build_get));
102
+ OpenAPI_nf_type_UDM, NULL,
103
+ amf_nudm_sdm_build_get,
104
+ amf_ue, (char *)OGS_SBI_RESOURCE_NAME_AM_DATA));
105
break;
106
107
DEFAULT
108
109
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
110
if (amf_sess_xact_count(amf_ue) == xact_count) {
111
ogs_assert(true ==
112
- amf_ue_sbi_discover_and_send(
113
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
114
- amf_nausf_auth_build_authenticate));
115
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
116
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
117
}
118
OGS_FSM_TRAN(s, &gmm_state_authentication);
119
break;
120
121
if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
122
ogs_assert(true ==
123
amf_ue_sbi_discover_and_send(
124
- OpenAPI_nf_type_PCF, amf_ue, NULL,
125
- amf_npcf_am_policy_control_build_create));
126
+ OpenAPI_nf_type_PCF, NULL,
127
+ amf_npcf_am_policy_control_build_create,
128
+ amf_ue, NULL));
129
OGS_FSM_TRAN(s, &gmm_state_initial_context_setup);
130
break;
131
}
132
133
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
134
if (amf_sess_xact_count(amf_ue) == xact_count) {
135
ogs_assert(true ==
136
- amf_ue_sbi_discover_and_send(
137
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
138
- amf_nausf_auth_build_authenticate));
139
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
140
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
141
}
142
143
OGS_FSM_TRAN(s, &gmm_state_authentication);
144
open5gs_2.4.8.202207240002.tar.xz/src/amf/namf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/namf-handler.c
Changed
13
1
2
3
if (ogs_list_count(&amf_ue->sess_list) == 0)
4
ogs_assert(true ==
5
- amf_ue_sbi_discover_and_send(
6
- OpenAPI_nf_type_PCF, amf_ue,
7
- NULL, amf_npcf_am_policy_control_build_delete));
8
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
9
+ amf_npcf_am_policy_control_build_delete, amf_ue, NULL));
10
11
OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_de_registered);
12
}
13
open5gs_2.4.8.202207240002.tar.xz/src/amf/ngap-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/ngap-handler.c
Changed
131
1
2
ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size);
3
4
ogs_assert(true ==
5
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
6
- sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m,
7
- amf_nsmf_pdusession_build_update_sm_context));
8
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
9
+ amf_nsmf_pdusession_build_update_sm_context,
10
+ sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m));
11
12
ogs_pkbuf_free(param.n2smbuf);
13
}
14
15
ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size);
16
17
ogs_assert(true ==
18
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
19
- sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m,
20
- amf_nsmf_pdusession_build_update_sm_context));
21
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
22
+ amf_nsmf_pdusession_build_update_sm_context,
23
+ sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m));
24
25
ogs_pkbuf_free(param.n2smbuf);
26
}
27
28
amf_ue->deactivation.cause = NGAP_CauseNas_normal_release;
29
30
ogs_assert(true ==
31
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
32
- sess, AMF_UPDATE_SM_CONTEXT_SETUP_FAIL, ¶m,
33
- amf_nsmf_pdusession_build_update_sm_context));
34
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
35
+ amf_nsmf_pdusession_build_update_sm_context,
36
+ sess, AMF_UPDATE_SM_CONTEXT_SETUP_FAIL, ¶m));
37
38
ogs_pkbuf_free(param.n2smbuf);
39
}
40
41
ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size);
42
43
ogs_assert(true ==
44
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
45
- sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m,
46
- amf_nsmf_pdusession_build_update_sm_context));
47
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
48
+ amf_nsmf_pdusession_build_update_sm_context,
49
+ sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m));
50
51
ogs_pkbuf_free(param.n2smbuf);
52
}
53
54
ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size);
55
56
ogs_assert(true ==
57
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
58
- sess, AMF_UPDATE_SM_CONTEXT_N2_RELEASED, ¶m,
59
- amf_nsmf_pdusession_build_update_sm_context));
60
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
61
+ amf_nsmf_pdusession_build_update_sm_context,
62
+ sess, AMF_UPDATE_SM_CONTEXT_N2_RELEASED, ¶m));
63
64
ogs_pkbuf_free(param.n2smbuf);
65
}
66
67
ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size);
68
69
ogs_assert(true ==
70
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
71
- sess, AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST, ¶m,
72
- amf_nsmf_pdusession_build_update_sm_context));
73
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
74
+ amf_nsmf_pdusession_build_update_sm_context,
75
+ sess, AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST, ¶m));
76
77
ogs_pkbuf_free(param.n2smbuf);
78
}
79
80
param.TargetID = TargetID;
81
82
ogs_assert(true ==
83
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
84
- sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQUIRED, ¶m,
85
- amf_nsmf_pdusession_build_update_sm_context));
86
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
87
+ amf_nsmf_pdusession_build_update_sm_context,
88
+ sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQUIRED, ¶m));
89
90
ogs_pkbuf_free(param.n2smbuf);
91
}
92
93
param.hoState = OpenAPI_ho_state_PREPARED;
94
95
ogs_assert(true ==
96
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
97
- sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQ_ACK, ¶m,
98
- amf_nsmf_pdusession_build_update_sm_context));
99
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
100
+ amf_nsmf_pdusession_build_update_sm_context,
101
+ sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQ_ACK, ¶m));
102
103
ogs_pkbuf_free(param.n2smbuf);
104
}
105
106
param.ngApCause.value = (int)Cause->choice.radioNetwork;
107
108
ogs_assert(true ==
109
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
110
- sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_CANCEL, ¶m,
111
- amf_nsmf_pdusession_build_update_sm_context));
112
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
113
+ amf_nsmf_pdusession_build_update_sm_context,
114
+ sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_CANCEL, ¶m));
115
}
116
}
117
118
119
param.hoState = OpenAPI_ho_state_COMPLETED;
120
121
ogs_assert(true ==
122
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
123
- sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_NOTIFY, ¶m,
124
- amf_nsmf_pdusession_build_update_sm_context));
125
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
126
+ amf_nsmf_pdusession_build_update_sm_context,
127
+ sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_NOTIFY, ¶m));
128
}
129
}
130
131
open5gs_2.4.8.202207240002.tar.xz/src/amf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/nnrf-handler.c
Changed
122
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
- amf_ue_t *amf_ue = NULL;
6
- amf_sess_t *sess = NULL;
7
- ogs_sbi_nf_instance_t *nf_instance = NULL;
8
+ OpenAPI_nf_type_e target_nf_type = 0;
9
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
10
11
OpenAPI_search_result_t *SearchResult = NULL;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
return;
27
}
28
29
- amf_nnrf_handle_nf_discover_search_result(sbi_object, SearchResult);
30
+ amf_nnrf_handle_nf_discover_search_result(
31
+ sbi_object, target_nf_type, discovery_option, SearchResult);
32
33
- ogs_assert(xact->target_nf_type);
34
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
35
- if (!nf_instance) {
36
- ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE &&
37
- sbi_object->type < OGS_SBI_OBJ_TOP);
38
- switch(sbi_object->type) {
39
- case OGS_SBI_OBJ_UE_TYPE:
40
- amf_ue = (amf_ue_t *)sbi_object;
41
- ogs_assert(amf_ue);
42
- ogs_error("%s (NF discover) No %s", amf_ue->suci,
43
- OpenAPI_nf_type_ToString(xact->target_nf_type));
44
- ogs_assert(OGS_OK ==
45
- nas_5gs_send_gmm_reject_from_sbi(amf_ue,
46
- OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT));
47
- break;
48
- case OGS_SBI_OBJ_SESS_TYPE:
49
- sess = (amf_sess_t *)sbi_object;
50
- ogs_assert(sess);
51
- ogs_error("%d:%d (NF discover) No %s", sess->psi, sess->pti,
52
- OpenAPI_nf_type_ToString(xact->target_nf_type));
53
- if (sess->payload_container_type) {
54
- ogs_assert(OGS_OK ==
55
- nas_5gs_send_back_gsm_message(sess,
56
- OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED,
57
- AMF_NAS_BACKOFF_TIME));
58
- } else {
59
- ogs_assert(OGS_OK ==
60
- ngap_send_error_indication2(amf_ue,
61
- NGAP_Cause_PR_transport,
62
- NGAP_CauseTransport_transport_resource_unavailable));
63
- }
64
- break;
65
- default:
66
- ogs_fatal("(NF discover) Not implemented %s:%d",
67
- OpenAPI_nf_type_ToString(xact->target_nf_type),
68
- sbi_object->type);
69
- ogs_assert_if_reached();
70
- }
71
- } else {
72
- ogs_assert(true == amf_sbi_send(nf_instance, xact));
73
- }
74
+ amf_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
75
+
76
+ ogs_expect(true == amf_sbi_send_request(sbi_object, target_nf_type, xact));
77
}
78
79
void amf_nnrf_handle_nf_discover_search_result(
80
- ogs_sbi_object_t *sbi_object, OpenAPI_search_result_t *SearchResult)
81
+ ogs_sbi_object_t *sbi_object,
82
+ OpenAPI_nf_type_e target_nf_type,
83
+ ogs_sbi_discovery_option_t *discovery_option,
84
+ OpenAPI_search_result_t *SearchResult)
85
{
86
bool handled;
87
88
89
}
90
91
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
92
- amf_ue_t *amf_ue = NULL;
93
- amf_sess_t *sess = NULL;
94
-
95
handled = ogs_sbi_nnrf_handle_nf_profile(
96
nf_instance, NFProfile, NULL, NULL);
97
if (!handled) {
98
99
continue;
100
}
101
102
- switch(sbi_object->type) {
103
- case OGS_SBI_OBJ_UE_TYPE:
104
- amf_ue = (amf_ue_t *)sbi_object;
105
- ogs_assert(amf_ue);
106
- amf_ue_select_nf(amf_ue, nf_instance->nf_type);
107
- break;
108
- case OGS_SBI_OBJ_SESS_TYPE:
109
- sess = (amf_sess_t *)sbi_object;
110
- ogs_assert(sess);
111
- amf_sess_select_nf(sess, nf_instance->nf_type);
112
- break;
113
- default:
114
- ogs_fatal("(NF discover search result) Not implemented %d",
115
- sbi_object->type);
116
- ogs_assert_if_reached();
117
- }
118
-
119
/* TIME : Update validity from NRF */
120
if (SearchResult->is_validity_period &&
121
SearchResult->validity_period) {
122
open5gs_2.4.8.202207240002.tar.xz/src/amf/nnrf-handler.h -> open5gs_2.4.8.202207250002.tar.xz/src/amf/nnrf-handler.h
Changed
13
1
2
void amf_nnrf_handle_nf_discover(
3
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg);
4
void amf_nnrf_handle_nf_discover_search_result(
5
- ogs_sbi_object_t *sbi_object, OpenAPI_search_result_t *SearchResult);
6
+ ogs_sbi_object_t *sbi_object,
7
+ OpenAPI_nf_type_e target_nf_type,
8
+ ogs_sbi_discovery_option_t *discovery_option,
9
+ OpenAPI_search_result_t *SearchResult);
10
11
#ifdef __cplusplus
12
}
13
open5gs_2.4.8.202207240002.tar.xz/src/amf/nsmf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/nsmf-handler.c
Changed
63
1
2
if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
3
ogs_assert(true ==
4
amf_ue_sbi_discover_and_send(
5
- OpenAPI_nf_type_PCF, amf_ue, NULL,
6
- amf_npcf_am_policy_control_build_create));
7
+ OpenAPI_nf_type_PCF, NULL,
8
+ amf_npcf_am_policy_control_build_create,
9
+ amf_ue, NULL));
10
} else {
11
CLEAR_AMF_UE_TIMER(amf_ue->t3550);
12
ogs_assert(OGS_OK ==
13
14
ogs_warn("%s:%d Receive Update SM context"
15
"(DUPLICATED_PDU_SESSION_ID)", amf_ue->supi, sess->psi);
16
17
- amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF,
18
- sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL,
19
- amf_nsmf_pdusession_build_create_sm_context);
20
+ amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL,
21
+ amf_nsmf_pdusession_build_create_sm_context,
22
+ sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL);
23
24
} else if (state == AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST) {
25
26
27
28
if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
29
ogs_assert(true ==
30
- amf_ue_sbi_discover_and_send(
31
- OpenAPI_nf_type_PCF, amf_ue, NULL,
32
- amf_npcf_am_policy_control_build_create));
33
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
34
+ amf_npcf_am_policy_control_build_create, amf_ue, NULL));
35
} else {
36
CLEAR_AMF_UE_TIMER(amf_ue->t3550);
37
ogs_assert(OGS_OK ==
38
39
if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_authentication)) {
40
41
ogs_assert(true ==
42
- amf_ue_sbi_discover_and_send(
43
- OpenAPI_nf_type_AUSF, amf_ue, NULL,
44
- amf_nausf_auth_build_authenticate));
45
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL,
46
+ amf_nausf_auth_build_authenticate, amf_ue, NULL));
47
48
} else if (OGS_FSM_CHECK(&amf_ue->sm,
49
gmm_state_de_registered)) {
50
51
*/
52
53
ogs_assert(true ==
54
- amf_ue_sbi_discover_and_send(
55
- OpenAPI_nf_type_PCF, amf_ue,
56
- NULL, amf_npcf_am_policy_control_build_delete));
57
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
58
+ amf_npcf_am_policy_control_build_delete,
59
+ amf_ue, NULL));
60
61
} else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) {
62
/*
63
open5gs_2.4.8.202207240002.tar.xz/src/amf/nudm-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/nudm-handler.c
Changed
35
1
2
}
3
4
ogs_assert(true ==
5
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue,
6
- (char *)OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA,
7
- amf_nudm_sdm_build_get));
8
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
9
+ amf_nudm_sdm_build_get,
10
+ amf_ue, (char *)OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA));
11
break;
12
13
CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
14
15
}
16
}
17
ogs_assert(true ==
18
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue,
19
- (char *)OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA,
20
- amf_nudm_sdm_build_get));
21
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
22
+ amf_nudm_sdm_build_get,
23
+ amf_ue, (char *)OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA));
24
break;
25
26
CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
27
ogs_assert(true ==
28
- amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, amf_ue,
29
- NULL, amf_npcf_am_policy_control_build_create));
30
+ amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
31
+ amf_npcf_am_policy_control_build_create, amf_ue, NULL));
32
break;
33
34
DEFAULT
35
open5gs_2.4.8.202207240002.tar.xz/src/amf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/amf/sbi-path.c
Changed
201
1
2
3
#include "sbi-path.h"
4
#include "nas-path.h"
5
+#include "ngap-path.h"
6
#include "nnrf-handler.h"
7
8
static int server_cb(ogs_sbi_request_t *request, void *data)
9
10
ogs_sbi_nf_instance_t *nf_instance = NULL;
11
ogs_sbi_nf_service_t *service = NULL;
12
13
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
14
- return OGS_ERROR;
15
-
16
/* Add SELF NF instance */
17
nf_instance = ogs_sbi_self()->nf_instance;
18
ogs_assert(nf_instance);
19
20
amf_nf_fsm_init(nf_instance);
21
}
22
23
+ /* Timer expiration handler of client wait timer */
24
+ ogs_sbi_self()->client_wait_expire = amf_timer_sbi_client_wait_expire;
25
+
26
+ /* NF register state in NF state machine */
27
+ ogs_sbi_self()->nf_state_registered =
28
+ (ogs_fsm_handler_t)amf_nf_state_registered;
29
+
30
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
31
+ return OGS_ERROR;
32
+
33
return OGS_OK;
34
}
35
36
37
ogs_sbi_server_stop_all();
38
}
39
40
-bool amf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
41
+bool amf_sbi_send_request(
42
+ ogs_sbi_object_t *sbi_object,
43
+ OpenAPI_nf_type_e target_nf_type,
44
+ void *data)
45
{
46
- return ogs_sbi_send(nf_instance, client_cb, xact);
47
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
48
+
49
+ ogs_assert(sbi_object);
50
+ ogs_assert(target_nf_type);
51
+ ogs_assert(data);
52
+
53
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
54
+ if (!nf_instance) {
55
+ amf_ue_t *amf_ue = NULL;
56
+ amf_sess_t *sess = NULL;
57
+
58
+ ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE &&
59
+ sbi_object->type < OGS_SBI_OBJ_TOP);
60
+ switch(sbi_object->type) {
61
+ case OGS_SBI_OBJ_UE_TYPE:
62
+ amf_ue = (amf_ue_t *)sbi_object;
63
+ ogs_assert(amf_ue);
64
+ ogs_error("%s (NF discover) No %s", amf_ue->suci,
65
+ OpenAPI_nf_type_ToString(target_nf_type));
66
+ ogs_assert(OGS_OK ==
67
+ nas_5gs_send_gmm_reject_from_sbi(amf_ue,
68
+ OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT));
69
+ break;
70
+ case OGS_SBI_OBJ_SESS_TYPE:
71
+ sess = (amf_sess_t *)sbi_object;
72
+ ogs_assert(sess);
73
+ ogs_error("%d:%d (NF discover) No %s", sess->psi, sess->pti,
74
+ OpenAPI_nf_type_ToString(target_nf_type));
75
+ if (sess->payload_container_type) {
76
+ ogs_assert(OGS_OK ==
77
+ nas_5gs_send_back_gsm_message(sess,
78
+ OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED,
79
+ AMF_NAS_BACKOFF_TIME));
80
+ } else {
81
+ ogs_assert(OGS_OK ==
82
+ ngap_send_error_indication2(amf_ue,
83
+ NGAP_Cause_PR_transport,
84
+ NGAP_CauseTransport_transport_resource_unavailable));
85
+ }
86
+ break;
87
+ default:
88
+ ogs_fatal("(NF discover) Not implemented %s:%d",
89
+ OpenAPI_nf_type_ToString(target_nf_type),
90
+ sbi_object->type);
91
+ ogs_assert_if_reached();
92
+ }
93
+
94
+ return false;
95
+ }
96
+
97
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
98
}
99
100
bool amf_ue_sbi_discover_and_send(
101
- OpenAPI_nf_type_e target_nf_type, amf_ue_t *amf_ue, void *data,
102
- ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data))
103
+ OpenAPI_nf_type_e target_nf_type,
104
+ ogs_sbi_discovery_option_t *discovery_option,
105
+ ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data),
106
+ amf_ue_t *amf_ue, void *data)
107
{
108
ogs_sbi_xact_t *xact = NULL;
109
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
110
+
111
+ ogs_assert(ogs_sbi_self()->nf_instance);
112
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
113
+ ogs_assert(requester_nf_type);
114
115
ogs_assert(target_nf_type);
116
ogs_assert(amf_ue);
117
ogs_assert(build);
118
119
- xact = ogs_sbi_xact_add(target_nf_type, &amf_ue->sbi,
120
- (ogs_sbi_build_f)build, amf_ue, data,
121
- amf_timer_sbi_client_wait_expire);
122
+ xact = ogs_sbi_xact_add(
123
+ &amf_ue->sbi, target_nf_type, discovery_option,
124
+ (ogs_sbi_build_f)build, amf_ue, data);
125
if (!xact) {
126
ogs_error("amf_ue_sbi_discover_and_send() failed");
127
ogs_assert(OGS_OK ==
128
129
return false;
130
}
131
132
- if (ogs_sbi_discover_and_send(xact,
133
- (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
134
+ if (ogs_sbi_discover_and_send(
135
+ &amf_ue->sbi,
136
+ target_nf_type, requester_nf_type, discovery_option,
137
+ client_cb, xact) != true) {
138
ogs_error("amf_ue_sbi_discover_and_send() failed");
139
ogs_sbi_xact_remove(xact);
140
ogs_assert(OGS_OK ==
141
142
return true;
143
}
144
145
-bool amf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
146
- amf_sess_t *sess, int state, void *data,
147
- ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data))
148
+bool amf_sess_sbi_discover_and_send(
149
+ OpenAPI_nf_type_e target_nf_type,
150
+ ogs_sbi_discovery_option_t *discovery_option,
151
+ ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data),
152
+ amf_sess_t *sess, int state, void *data)
153
{
154
ogs_sbi_xact_t *xact = NULL;
155
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
156
+
157
+ ogs_assert(ogs_sbi_self()->nf_instance);
158
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
159
+ ogs_assert(requester_nf_type);
160
161
ogs_assert(target_nf_type);
162
ogs_assert(sess);
163
ogs_assert(build);
164
165
- xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
166
- (ogs_sbi_build_f)build, sess, data,
167
- amf_timer_sbi_client_wait_expire);
168
+ xact = ogs_sbi_xact_add(
169
+ &sess->sbi, target_nf_type, discovery_option,
170
+ (ogs_sbi_build_f)build, sess, data);
171
if (!xact) {
172
ogs_error("amf_sess_sbi_discover_and_send() failed");
173
ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess,
174
175
176
xact->state = state;
177
178
- if (ogs_sbi_discover_and_send(xact,
179
- (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
180
+ if (ogs_sbi_discover_and_send(
181
+ &sess->sbi,
182
+ target_nf_type, requester_nf_type, discovery_option,
183
+ client_cb, xact) != true) {
184
ogs_error("amf_sess_sbi_discover_and_send() failed");
185
ogs_sbi_xact_remove(xact);
186
ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess,
187
188
}
189
190
amf_nnrf_handle_nf_discover_search_result(
191
- &sess->sbi, message.SearchResult);
192
+ &sess->sbi, OpenAPI_nf_type_SMF, NULL, message.SearchResult);
193
+
194
+ amf_sbi_select_nf(&sess->sbi, OpenAPI_nf_type_SMF, NULL);
195
196
if (!OGS_SBI_NF_INSTANCE(&sess->sbi, OpenAPI_nf_type_SMF)) {
197
ogs_error("Cannot discover %s",
198
199
goto cleanup;
200
}
201
open5gs_2.4.8.202207240002.tar.xz/src/amf/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/amf/sbi-path.h
Changed
36
1
2
int amf_sbi_open(void);
3
void amf_sbi_close(void);
4
5
-bool amf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-bool amf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
7
- amf_ue_t *amf_ue, void *data,
8
- ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data));
9
+bool amf_sbi_send_request(
10
+ ogs_sbi_object_t *sbi_object,
11
+ OpenAPI_nf_type_e target_nf_type,
12
+ void *data);
13
+bool amf_ue_sbi_discover_and_send(
14
+ OpenAPI_nf_type_e target_nf_type,
15
+ ogs_sbi_discovery_option_t *discovery_option,
16
+ ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data),
17
+ amf_ue_t *amf_ue, void *data);
18
19
#define AMF_CREATE_SM_CONTEXT_NO_STATE 0
20
#define AMF_UPDATE_SM_CONTEXT_ACTIVATED 11
21
22
#define AMF_REMOVE_S1_CONTEXT_BY_LO_CONNREFUSED 51
23
#define AMF_REMOVE_S1_CONTEXT_BY_RESET_ALL 52
24
#define AMF_REMOVE_S1_CONTEXT_BY_RESET_PARTIAL 53
25
-bool amf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
26
- amf_sess_t *sess, int state, void *data,
27
- ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data));
28
+bool amf_sess_sbi_discover_and_send(
29
+ OpenAPI_nf_type_e target_nf_type,
30
+ ogs_sbi_discovery_option_t *discovery_option,
31
+ ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data),
32
+ amf_sess_t *sess, int state, void *data);
33
34
bool amf_sess_sbi_discover_by_nsi(
35
OpenAPI_nf_type_e target_nf_type, amf_sess_t *sess);
36
open5gs_2.4.8.202207240002.tar.xz/src/ausf/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/context.c
Changed
13
1
2
{
3
return ogs_pool_cycle(&ausf_ue_pool, ausf_ue);
4
}
5
-
6
-void ausf_ue_select_nf(ausf_ue_t *ausf_ue, OpenAPI_nf_type_e nf_type)
7
-{
8
- ogs_assert(ausf_ue);
9
- ogs_assert(nf_type);
10
-
11
- ogs_sbi_select_nf(&ausf_ue->sbi, nf_type, ausf_nf_state_registered);
12
-}
13
open5gs_2.4.8.202207240002.tar.xz/src/ausf/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/context.h
Changed
10
1
2
3
ausf_ue_t *ausf_ue_cycle(ausf_ue_t *ausf_ue);
4
5
-void ausf_ue_select_nf(ausf_ue_t *ausf_ue, OpenAPI_nf_type_e nf_type);
6
-
7
#ifdef __cplusplus
8
}
9
#endif
10
open5gs_2.4.8.202207240002.tar.xz/src/ausf/nausf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/nausf-handler.c
Changed
26
1
2
ogs_assert(ausf_ue->serving_network_name);
3
4
ogs_assert(true ==
5
- ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, ausf_ue, stream,
6
- AuthenticationInfo->resynchronization_info,
7
- ausf_nudm_ueau_build_get));
8
+ ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
9
+ ausf_nudm_ueau_build_get,
10
+ ausf_ue, stream, AuthenticationInfo->resynchronization_info));
11
12
return true;
13
}
14
15
}
16
17
ogs_assert(true ==
18
- ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, ausf_ue, stream, NULL,
19
- ausf_nudm_ueau_build_result_confirmation_inform));
20
+ ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
21
+ ausf_nudm_ueau_build_result_confirmation_inform,
22
+ ausf_ue, stream, NULL));
23
24
return true;
25
}
26
open5gs_2.4.8.202207240002.tar.xz/src/ausf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/nnrf-handler.c
Changed
61
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- ausf_ue_t *ausf_ue = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- ausf_ue = (ausf_ue_t *)sbi_object;
39
- ogs_assert(ausf_ue);
40
- ausf_ue_select_nf(ausf_ue, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->is_validity_period &&
44
SearchResult->validity_period) {
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
- if (!nf_instance) {
52
- ogs_error("(NF discover) No %s",
53
- OpenAPI_nf_type_ToString(xact->target_nf_type));
54
- } else {
55
- ogs_assert(true == ausf_sbi_send(nf_instance, xact));
56
- }
57
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
58
+
59
+ ogs_expect(true == ausf_sbi_send_request(sbi_object, target_nf_type, xact));
60
}
61
open5gs_2.4.8.202207240002.tar.xz/src/ausf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/sbi-path.c
Changed
94
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = ausf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)ausf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
ogs_sbi_server_stop_all();
30
}
31
32
-bool ausf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
33
+bool ausf_sbi_send_request(
34
+ ogs_sbi_object_t *sbi_object,
35
+ OpenAPI_nf_type_e target_nf_type,
36
+ void *data)
37
{
38
- return ogs_sbi_send(nf_instance, client_cb, xact);
39
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
40
+
41
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
42
+ if (!nf_instance) {
43
+ ogs_error("(NF discover) No %s",
44
+ OpenAPI_nf_type_ToString(target_nf_type));
45
+ return false;
46
+ }
47
+
48
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
49
}
50
51
-bool ausf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
52
- ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data,
53
- ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data))
54
+bool ausf_sbi_discover_and_send(
55
+ OpenAPI_nf_type_e target_nf_type,
56
+ ogs_sbi_discovery_option_t *discovery_option,
57
+ ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data),
58
+ ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data)
59
{
60
ogs_sbi_xact_t *xact = NULL;
61
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
62
+
63
+ ogs_assert(ogs_sbi_self()->nf_instance);
64
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
65
+ ogs_assert(requester_nf_type);
66
67
ogs_assert(target_nf_type);
68
ogs_assert(ausf_ue);
69
ogs_assert(stream);
70
ogs_assert(build);
71
72
- xact = ogs_sbi_xact_add(target_nf_type, &ausf_ue->sbi,
73
- (ogs_sbi_build_f)build, ausf_ue, data,
74
- ausf_timer_sbi_client_wait_expire);
75
+ xact = ogs_sbi_xact_add(
76
+ &ausf_ue->sbi, target_nf_type, discovery_option,
77
+ (ogs_sbi_build_f)build, ausf_ue, data);
78
if (!xact) {
79
ogs_error("ausf_sbi_discover_and_send() failed");
80
ogs_assert(true ==
81
82
83
xact->assoc_stream = stream;
84
85
- if (ogs_sbi_discover_and_send(xact,
86
- (ogs_fsm_handler_t)ausf_nf_state_registered, client_cb) != true) {
87
+ if (ogs_sbi_discover_and_send(
88
+ &ausf_ue->sbi,
89
+ target_nf_type, requester_nf_type, discovery_option,
90
+ client_cb, xact) != true) {
91
ogs_error("ausf_sbi_discover_and_send() failed");
92
ogs_sbi_xact_remove(xact);
93
ogs_assert(true ==
94
open5gs_2.4.8.202207240002.tar.xz/src/ausf/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/ausf/sbi-path.h
Changed
21
1
2
int ausf_sbi_open(void);
3
void ausf_sbi_close(void);
4
5
-bool ausf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-bool ausf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
7
- ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data,
8
- ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data));
9
+bool ausf_sbi_send_request(
10
+ ogs_sbi_object_t *sbi_object,
11
+ OpenAPI_nf_type_e target_nf_type,
12
+ void *data);
13
+bool ausf_sbi_discover_and_send(
14
+ OpenAPI_nf_type_e target_nf_type,
15
+ ogs_sbi_discovery_option_t *discovery_option,
16
+ ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data),
17
+ ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data);
18
19
#ifdef __cplusplus
20
}
21
open5gs_2.4.8.202207240002.tar.xz/src/bsf/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/bsf/context.c
Changed
13
1
2
return ogs_hash_get(self.ipv6prefix_hash,
3
&ipv6prefix, (ipv6prefix.len >> 3) + 1);
4
}
5
-
6
-void bsf_sess_select_nf(bsf_sess_t *sess, OpenAPI_nf_type_e nf_type)
7
-{
8
- ogs_assert(sess);
9
- ogs_assert(nf_type);
10
-
11
- ogs_sbi_select_nf(&sess->sbi, nf_type, bsf_nf_state_registered);
12
-}
13
open5gs_2.4.8.202207240002.tar.xz/src/bsf/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/bsf/context.h
Changed
10
1
2
bsf_sess_t *bsf_sess_find_by_ipv4addr(char *ipv4addr_string);
3
bsf_sess_t *bsf_sess_find_by_ipv6prefix(char *ipv6prefix_string);
4
5
-void bsf_sess_select_nf(bsf_sess_t *sess, OpenAPI_nf_type_e nf_type);
6
-
7
#ifdef __cplusplus
8
}
9
#endif
10
open5gs_2.4.8.202207240002.tar.xz/src/bsf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/bsf/nnrf-handler.c
Changed
61
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- bsf_sess_t *sess = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- sess = (bsf_sess_t *)sbi_object;
39
- ogs_assert(sess);
40
- bsf_sess_select_nf(sess, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->is_validity_period &&
44
SearchResult->validity_period) {
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
- if (!nf_instance) {
52
- ogs_error("(NF discover) No %s",
53
- OpenAPI_nf_type_ToString(xact->target_nf_type));
54
- } else {
55
- bsf_sbi_send(nf_instance, xact);
56
- }
57
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
58
+
59
+ ogs_expect(true == bsf_sbi_send_request(sbi_object, target_nf_type, xact));
60
}
61
open5gs_2.4.8.202207240002.tar.xz/src/bsf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/bsf/sbi-path.c
Changed
94
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = bsf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)bsf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
ogs_sbi_server_stop_all();
30
}
31
32
-bool bsf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
33
+bool bsf_sbi_send_request(
34
+ ogs_sbi_object_t *sbi_object,
35
+ OpenAPI_nf_type_e target_nf_type,
36
+ void *data)
37
{
38
- return ogs_sbi_send(nf_instance, client_cb, xact);
39
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
40
+
41
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
42
+ if (!nf_instance) {
43
+ ogs_error("(NF discover) No %s",
44
+ OpenAPI_nf_type_ToString(target_nf_type));
45
+ return false;
46
+ }
47
+
48
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
49
}
50
51
-bool bsf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
52
- bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data,
53
- ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data))
54
+bool bsf_sbi_discover_and_send(
55
+ OpenAPI_nf_type_e target_nf_type,
56
+ ogs_sbi_discovery_option_t *discovery_option,
57
+ ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data),
58
+ bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data)
59
{
60
ogs_sbi_xact_t *xact = NULL;
61
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
62
63
- ogs_assert(target_nf_type);
64
+ ogs_assert(ogs_sbi_self()->nf_instance);
65
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
66
+ ogs_assert(requester_nf_type);
67
68
ogs_assert(sess);
69
ogs_assert(stream);
70
ogs_assert(build);
71
72
- xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
73
- (ogs_sbi_build_f)build, sess, data,
74
- bsf_timer_sbi_client_wait_expire);
75
+ xact = ogs_sbi_xact_add(
76
+ &sess->sbi, target_nf_type, discovery_option,
77
+ (ogs_sbi_build_f)build, sess, data);
78
if (!xact) {
79
ogs_error("bsf_sbi_discover_and_send() failed");
80
ogs_assert(true ==
81
82
83
xact->assoc_stream = stream;
84
85
- if (ogs_sbi_discover_and_send(xact,
86
- (ogs_fsm_handler_t)bsf_nf_state_registered, client_cb) != true) {
87
+ if (ogs_sbi_discover_and_send(
88
+ &sess->sbi,
89
+ target_nf_type, requester_nf_type, discovery_option,
90
+ client_cb, xact) != true) {
91
ogs_error("bsf_sbi_discover_and_send() failed");
92
ogs_sbi_xact_remove(xact);
93
ogs_assert(true ==
94
open5gs_2.4.8.202207240002.tar.xz/src/bsf/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/bsf/sbi-path.h
Changed
22
1
2
int bsf_sbi_open(void);
3
void bsf_sbi_close(void);
4
5
-bool bsf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-
7
-bool bsf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
8
- bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data,
9
- ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data));
10
+bool bsf_sbi_send_request(
11
+ ogs_sbi_object_t *sbi_object,
12
+ OpenAPI_nf_type_e target_nf_type,
13
+ void *data);
14
+bool bsf_sbi_discover_and_send(
15
+ OpenAPI_nf_type_e target_nf_type,
16
+ ogs_sbi_discovery_option_t *discovery_option,
17
+ ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data),
18
+ bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data);
19
20
void bsf_sbi_send_response(ogs_sbi_stream_t *stream, int status);
21
22
open5gs_2.4.8.202207240002.tar.xz/src/mme/mme-context.h -> open5gs_2.4.8.202207250002.tar.xz/src/mme/mme-context.h
Changed
10
1
2
/* HSS Info */
3
ogs_bitrate_t ambr; /* UE-AMBR */
4
uint32_t network_access_mode; /* Permitted EPS Attach Type */
5
+ uint8_t charging_characteristicsOGS_CHRGCHARS_LEN; /* Subscription Level Charging Characteristics */
6
+ bool charging_characteristics_presence;
7
8
uint32_t context_identifier; /* default APN */
9
10
open5gs_2.4.8.202207240002.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/mme/mme-fd-path.c
Changed
65
1
2
{
3
int ret;
4
5
+ char bufOGS_CHRGCHARS_LEN;
6
+
7
struct sess_state *sess_data = NULL;
8
struct timespec ts;
9
struct session *session;
10
11
ogs_warn("no subscribed Network-Access-Mode, defaulting to PACKET_AND_CIRCUIT (0)");
12
}
13
14
+ /* AVP: '3GPP-Charging-Characteristics'(13)
15
+ * For GGSN, it contains the charging characteristics for
16
+ * this PDP Context received in the Create PDP Context
17
+ * Request Message (only available in R99 and later releases).
18
+ * For PGW, it contains the charging characteristics for the
19
+ * IP-CAN bearer.
20
+ * Reference: 3GPP TS 29.061 16.4.7.2 13
21
+ */
22
+ ret = fd_avp_search_avp(avp, ogs_diam_s6a_3gpp_charging_characteristics, &avpch1);
23
+ ogs_assert(ret == 0);
24
+ if (avpch1) {
25
+ ret = fd_msg_avp_hdr(avpch1, &hdr);
26
+ memcpy(mme_ue->charging_characteristics,
27
+ OGS_HEX(hdr->avp_value->os.data, (int)hdr->avp_value->os.len, buf), OGS_CHRGCHARS_LEN);
28
+ mme_ue->charging_characteristics_presence = true;
29
+ } else {
30
+ memcpy(mme_ue->charging_characteristics, (uint8_t *)"\x00\x00", OGS_CHRGCHARS_LEN);
31
+ mme_ue->charging_characteristics_presence = false;
32
+ }
33
+
34
/* AVP: 'AMBR'(1435)
35
* The Amber AVP contains the Max-Requested-Bandwidth-UL and
36
* Max-Requested-Bandwidth-DL AVPs.
37
38
error++;
39
}
40
41
+ /* AVP: '3GPP-Charging-Characteristics'(13)
42
+ * For GGSN, it contains the charging characteristics for
43
+ * this PDP Context received in the Create PDP Context
44
+ * Request Message (only available in R99 and later releases).
45
+ * For PGW, it contains the charging characteristics for the
46
+ * IP-CAN bearer.
47
+ * Reference: 3GPP TS 29.061 16.4.7.2 13
48
+ */
49
+ ret = fd_avp_search_avp(avpch2, ogs_diam_s6a_3gpp_charging_characteristics,
50
+ &avpch3);
51
+ ogs_assert(ret == 0);
52
+ if (avpch3) {
53
+ ret = fd_msg_avp_hdr(avpch3, &hdr);
54
+ memcpy(session->charging_characteristics,
55
+ OGS_HEX(hdr->avp_value->os.data, (int)hdr->avp_value->os.len, buf), OGS_CHRGCHARS_LEN);
56
+ session->charging_characteristics_presence = true;
57
+ } else {
58
+ memcpy(session->charging_characteristics, (uint8_t *)"\x00\x00", OGS_CHRGCHARS_LEN);
59
+ session->charging_characteristics_presence = false;
60
+ }
61
+
62
/* AVP: 'Served-Party-IP-Address'(848)
63
* The Served-Party-IP-Address AVP holds the IP address of
64
* either the calling or called party, depending on whether
65
open5gs_2.4.8.202207240002.tar.xz/src/mme/mme-s11-build.c -> open5gs_2.4.8.202207250002.tar.xz/src/mme/mme-s11-build.c
Changed
20
1
2
req->ue_time_zone.data = &ue_timezone;
3
req->ue_time_zone.len = sizeof(ue_timezone);
4
5
- req->charging_characteristics.presence = 1;
6
- req->charging_characteristics.data = (uint8_t *)"\x54\x00";
7
- req->charging_characteristics.len = 2;
8
+ if (session->charging_characteristics_presence == true) {
9
+ req->charging_characteristics.presence = 1;
10
+ req->charging_characteristics.data = session->charging_characteristics;
11
+ req->charging_characteristics.len = OGS_CHRGCHARS_LEN;
12
+ } else if (mme_ue->charging_characteristics_presence == true) {
13
+ req->charging_characteristics.presence = 1;
14
+ req->charging_characteristics.data = mme_ue->charging_characteristics;
15
+ req->charging_characteristics.len = OGS_CHRGCHARS_LEN;
16
+ }
17
18
gtp_message.h.type = type;
19
return ogs_gtp2_build_msg(>p_message);
20
open5gs_2.4.8.202207240002.tar.xz/src/mme/mme-s6a-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/mme/mme-s6a-handler.c
Changed
13
1
2
3
memcpy(&mme_ue->sessioni.smf_ip, &slice_data->sessioni.smf_ip,
4
sizeof(mme_ue->sessioni.smf_ip));
5
+
6
+ memcpy(&mme_ue->sessioni.charging_characteristics, &slice_data->sessioni.charging_characteristics,
7
+ sizeof(mme_ue->sessioni.charging_characteristics));
8
+ mme_ue->sessioni.charging_characteristics_presence =
9
+ slice_data->sessioni.charging_characteristics_presence;
10
}
11
12
mme_ue->num_of_session = i;
13
open5gs_2.4.8.202207240002.tar.xz/src/nrf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/nrf/nnrf-handler.c
Changed
48
1
2
ogs_sbi_message_t sendmsg;
3
ogs_sbi_response_t *response = NULL;
4
ogs_sbi_nf_instance_t *nf_instance = NULL;
5
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
6
7
OpenAPI_search_result_t *SearchResult = NULL;
8
int i;
9
10
SearchResult->nf_instances = OpenAPI_list_create();
11
ogs_assert(SearchResult->nf_instances);
12
13
+ if (recvmsg->param.discovery_option)
14
+ discovery_option = recvmsg->param.discovery_option;
15
+
16
+ if (discovery_option) {
17
+ if (discovery_option->target_nf_instance_id) {
18
+ ogs_debug("target-nf-instance-id%s",
19
+ discovery_option->target_nf_instance_id);
20
+ }
21
+ if (discovery_option->requester_nf_instance_id) {
22
+ ogs_debug("requester-nf-instance-id%s",
23
+ discovery_option->requester_nf_instance_id);
24
+ }
25
+ if (discovery_option->num_of_service_names) {
26
+ for (i = 0; i < discovery_option->num_of_service_names; i++)
27
+ ogs_debug("%d service-names%s", i,
28
+ discovery_option->service_namesi);
29
+ }
30
+ }
31
+
32
i = 0;
33
ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
34
if (nf_instance->nf_type != recvmsg->param.target_nf_type)
35
continue;
36
- if (nf_instance->nf_type == recvmsg->param.requester_nf_type)
37
- continue;
38
+
39
+ if (discovery_option) {
40
+ if (discovery_option->target_nf_instance_id &&
41
+ strcmp(nf_instance->id,
42
+ discovery_option->target_nf_instance_id) != 0)
43
+ continue;
44
+ }
45
46
if (!recvmsg->param.limit ||
47
(recvmsg->param.limit && i < recvmsg->param.limit)) {
48
open5gs_2.4.8.202207240002.tar.xz/src/nrf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/nrf/sbi-path.c
Changed
28
1
2
{
3
ogs_sbi_nf_instance_t *nf_instance = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Initialize SCP NF Instance */
9
nf_instance = ogs_sbi_self()->scp_instance;
10
if (nf_instance) {
11
12
client->cb = client_notify_cb;
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = nrf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)nrf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
open5gs_2.4.8.202207240002.tar.xz/src/nrf/timer.c -> open5gs_2.4.8.202207250002.tar.xz/src/nrf/timer.c
Changed
10
1
2
{
3
timer_send_event(NRF_TIMER_SUBSCRIPTION_VALIDITY, data);
4
}
5
+
6
+void nrf_timer_sbi_client_wait_expire(void *data)
7
+{
8
+ timer_send_event(NRF_TIMER_SBI_CLIENT_WAIT, data);
9
+}
10
open5gs_2.4.8.202207240002.tar.xz/src/nrf/timer.h -> open5gs_2.4.8.202207250002.tar.xz/src/nrf/timer.h
Changed
17
1
2
3
NRF_TIMER_NF_INSTANCE_NO_HEARTBEAT,
4
NRF_TIMER_SUBSCRIPTION_VALIDITY,
5
+ NRF_TIMER_SBI_CLIENT_WAIT,
6
7
MAX_NUM_OF_NRF_TIMER,
8
9
10
11
void nrf_timer_nf_instance_no_heartbeat(void *data);
12
void nrf_timer_subscription_validity(void *data);
13
+void nrf_timer_sbi_client_wait_expire(void *data);
14
15
#ifdef __cplusplus
16
}
17
open5gs_2.4.8.202207240002.tar.xz/src/nssf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/nssf/sbi-path.c
Changed
28
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = nssf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)nssf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
open5gs_2.4.8.202207240002.tar.xz/src/nssf/timer.c -> open5gs_2.4.8.202207250002.tar.xz/src/nssf/timer.c
Changed
10
1
2
{
3
sbi_timer_send_event(NSSF_TIMER_SUBSCRIPTION_VALIDITY, data);
4
}
5
+
6
+void nssf_timer_sbi_client_wait_expire(void *data)
7
+{
8
+ sbi_timer_send_event(NSSF_TIMER_SBI_CLIENT_WAIT, data);
9
+}
10
open5gs_2.4.8.202207240002.tar.xz/src/nssf/timer.h -> open5gs_2.4.8.202207250002.tar.xz/src/nssf/timer.h
Changed
17
1
2
NSSF_TIMER_NF_INSTANCE_NO_HEARTBEAT,
3
NSSF_TIMER_NF_INSTANCE_VALIDITY,
4
NSSF_TIMER_SUBSCRIPTION_VALIDITY,
5
+ NSSF_TIMER_SBI_CLIENT_WAIT,
6
7
MAX_NUM_OF_NSSF_TIMER,
8
9
10
void nssf_timer_nf_instance_no_heartbeat(void *data);
11
void nssf_timer_nf_instance_validity(void *data);
12
void nssf_timer_subscription_validity(void *data);
13
+void nssf_timer_sbi_client_wait_expire(void *data);
14
15
#ifdef __cplusplus
16
}
17
open5gs_2.4.8.202207240002.tar.xz/src/pcf/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/context.c
Changed
24
1
2
return ogs_pool_cycle(&pcf_sess_pool, sess);
3
}
4
5
-void pcf_ue_select_nf(pcf_ue_t *pcf_ue, OpenAPI_nf_type_e nf_type)
6
-{
7
- ogs_assert(pcf_ue);
8
- ogs_assert(nf_type);
9
-
10
- ogs_sbi_select_nf(&pcf_ue->sbi, nf_type, pcf_nf_state_registered);
11
-}
12
-
13
-void pcf_sess_select_nf(pcf_sess_t *sess, OpenAPI_nf_type_e nf_type)
14
-{
15
- ogs_assert(sess);
16
- ogs_assert(nf_type);
17
-
18
- ogs_sbi_select_nf(&sess->sbi, nf_type, pcf_nf_state_registered);
19
-}
20
-
21
pcf_app_t *pcf_app_add(pcf_sess_t *sess)
22
{
23
pcf_app_t *app = NULL;
24
open5gs_2.4.8.202207240002.tar.xz/src/pcf/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/context.h
Changed
11
1
2
pcf_ue_t *pcf_ue_cycle(pcf_ue_t *pcf_ue);
3
pcf_sess_t *pcf_sess_cycle(pcf_sess_t *sess);
4
5
-void pcf_ue_select_nf(pcf_ue_t *pcf_ue, OpenAPI_nf_type_e nf_type);
6
-void pcf_sess_select_nf(pcf_sess_t *sess, OpenAPI_nf_type_e nf_type);
7
-
8
pcf_app_t *pcf_app_add(pcf_sess_t *sess);
9
int pcf_app_remove(pcf_app_t *app);
10
void pcf_app_remove_all(pcf_sess_t *sess);
11
open5gs_2.4.8.202207240002.tar.xz/src/pcf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/nnrf-handler.c
Changed
97
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
- pcf_ue_t *pcf_ue = NULL;
6
- pcf_sess_t *sess = NULL;
7
+ OpenAPI_nf_type_e target_nf_type = 0;
8
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
9
+
10
ogs_sbi_nf_instance_t *nf_instance = NULL;
11
12
OpenAPI_search_result_t *SearchResult = NULL;
13
OpenAPI_lnode_t *node = NULL;
14
bool handled;
15
16
+ ogs_assert(recvmsg);
17
ogs_assert(xact);
18
sbi_object = xact->sbi_object;
19
ogs_assert(sbi_object);
20
- ogs_assert(recvmsg);
21
+ target_nf_type = xact->target_nf_type;
22
+ ogs_assert(target_nf_type);
23
+
24
+ discovery_option = xact->discovery_option;
25
26
SearchResult = recvmsg->SearchResult;
27
if (!SearchResult) {
28
29
}
30
31
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
32
- pcf_ue_t *pcf_ue = NULL;
33
- pcf_sess_t *sess = NULL;
34
-
35
handled = ogs_sbi_nnrf_handle_nf_profile(
36
nf_instance, NFProfile, NULL, NULL);
37
if (!handled) {
38
39
continue;
40
}
41
42
- switch(sbi_object->type) {
43
- case OGS_SBI_OBJ_UE_TYPE:
44
- pcf_ue = (pcf_ue_t *)sbi_object;
45
- ogs_assert(pcf_ue);
46
- pcf_ue_select_nf(pcf_ue, nf_instance->nf_type);
47
- break;
48
- case OGS_SBI_OBJ_SESS_TYPE:
49
- sess = (pcf_sess_t *)sbi_object;
50
- ogs_assert(sess);
51
- pcf_sess_select_nf(sess, nf_instance->nf_type);
52
- break;
53
- default:
54
- ogs_fatal("(NF discover search result) Not implemented %d",
55
- sbi_object->type);
56
- ogs_assert_if_reached();
57
- }
58
-
59
/* TIME : Update validity from NRF */
60
if (SearchResult->is_validity_period &&
61
SearchResult->validity_period) {
62
63
}
64
}
65
66
- ogs_assert(xact->target_nf_type);
67
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
68
- if (!nf_instance) {
69
- ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE &&
70
- sbi_object->type < OGS_SBI_OBJ_TOP);
71
- switch(sbi_object->type) {
72
- case OGS_SBI_OBJ_UE_TYPE:
73
- pcf_ue = (pcf_ue_t *)sbi_object;
74
- ogs_assert(pcf_ue);
75
- ogs_error("%s (NF discover) No %s", pcf_ue->supi,
76
- OpenAPI_nf_type_ToString(xact->target_nf_type));
77
- break;
78
- case OGS_SBI_OBJ_SESS_TYPE:
79
- sess = (pcf_sess_t *)sbi_object;
80
- ogs_assert(sess);
81
- ogs_error("%d (NF discover) No %s", sess->psi,
82
- OpenAPI_nf_type_ToString(xact->target_nf_type));
83
- break;
84
- default:
85
- ogs_fatal("(NF discover) Not implemented %s:%d",
86
- OpenAPI_nf_type_ToString(xact->target_nf_type),
87
- sbi_object->type);
88
- ogs_assert_if_reached();
89
- }
90
- } else {
91
- ogs_assert(true == pcf_sbi_send(nf_instance, xact));
92
- }
93
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
94
+
95
+ ogs_expect(true == pcf_sbi_send_request(sbi_object, target_nf_type, xact));
96
}
97
open5gs_2.4.8.202207240002.tar.xz/src/pcf/npcf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/npcf-handler.c
Changed
35
1
2
pcf_ue->subscribed_ue_ambr, PolicyAssociationRequest->ue_ambr);
3
4
ogs_assert(true ==
5
- pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDR, pcf_ue, stream, NULL,
6
- pcf_nudr_dr_build_query_am_data));
7
+ pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
8
+ pcf_nudr_dr_build_query_am_data, pcf_ue, stream, NULL));
9
10
return true;
11
}
12
13
sess->subscribed_default_qos, SmPolicyContextData->subs_def_qos);
14
15
ogs_assert(true ==
16
- pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_UDR, sess, stream, NULL,
17
- pcf_nudr_dr_build_query_sm_data));
18
+ pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
19
+ pcf_nudr_dr_build_query_sm_data, sess, stream, NULL));
20
21
return true;
22
23
24
ogs_assert(true == ogs_sbi_server_send_response(stream, response));
25
} else {
26
ogs_assert(true ==
27
- pcf_sess_sbi_discover_and_send(
28
- OpenAPI_nf_type_BSF, sess, stream, NULL,
29
- pcf_nbsf_management_build_de_register));
30
+ pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, NULL,
31
+ pcf_nbsf_management_build_de_register, sess, stream, NULL));
32
}
33
34
return true;
35
open5gs_2.4.8.202207240002.tar.xz/src/pcf/nudr-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/nudr-handler.c
Changed
13
1
2
}
3
4
ogs_assert(true ==
5
- pcf_sess_sbi_discover_and_send(
6
- OpenAPI_nf_type_BSF, sess, stream, NULL,
7
- pcf_nbsf_management_build_register));
8
+ pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, NULL,
9
+ pcf_nbsf_management_build_register, sess, stream, NULL));
10
11
return true;
12
13
open5gs_2.4.8.202207240002.tar.xz/src/pcf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/sbi-path.c
Changed
157
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = pcf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)pcf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
ogs_sbi_server_stop_all();
30
}
31
32
-bool pcf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
33
+bool pcf_sbi_send_request(
34
+ ogs_sbi_object_t *sbi_object,
35
+ OpenAPI_nf_type_e target_nf_type,
36
+ void *data)
37
{
38
- return ogs_sbi_send(nf_instance, client_cb, xact);
39
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
40
+
41
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
42
+ if (!nf_instance) {
43
+ pcf_ue_t *pcf_ue = NULL;
44
+ pcf_sess_t *sess = NULL;
45
+
46
+ ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE &&
47
+ sbi_object->type < OGS_SBI_OBJ_TOP);
48
+ switch(sbi_object->type) {
49
+ case OGS_SBI_OBJ_UE_TYPE:
50
+ pcf_ue = (pcf_ue_t *)sbi_object;
51
+ ogs_assert(pcf_ue);
52
+ ogs_error("%s (NF discover) No %s", pcf_ue->supi,
53
+ OpenAPI_nf_type_ToString(target_nf_type));
54
+ break;
55
+ case OGS_SBI_OBJ_SESS_TYPE:
56
+ sess = (pcf_sess_t *)sbi_object;
57
+ ogs_assert(sess);
58
+ ogs_error("%d (NF discover) No %s", sess->psi,
59
+ OpenAPI_nf_type_ToString(target_nf_type));
60
+ break;
61
+ default:
62
+ ogs_fatal("(NF discover) Not implemented %s:%d",
63
+ OpenAPI_nf_type_ToString(target_nf_type),
64
+ sbi_object->type);
65
+ ogs_assert_if_reached();
66
+ }
67
+
68
+ return false;
69
+ }
70
+
71
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
72
}
73
74
-static bool pcf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
75
- ogs_sbi_object_t *sbi_object, ogs_sbi_stream_t *stream,
76
- ogs_sbi_build_f build, void *context, void *data)
77
+static bool pcf_sbi_discover_and_send(
78
+ ogs_sbi_object_t *sbi_object,
79
+ OpenAPI_nf_type_e target_nf_type,
80
+ ogs_sbi_discovery_option_t *discovery_option,
81
+ ogs_sbi_build_f build,
82
+ void *context, ogs_sbi_stream_t *stream, void *data)
83
{
84
ogs_sbi_xact_t *xact = NULL;
85
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
86
+
87
+ ogs_assert(ogs_sbi_self()->nf_instance);
88
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
89
+ ogs_assert(requester_nf_type);
90
91
ogs_assert(target_nf_type);
92
ogs_assert(sbi_object);
93
ogs_assert(stream);
94
ogs_assert(build);
95
96
- xact = ogs_sbi_xact_add(target_nf_type, sbi_object,
97
- build, context, data,
98
- pcf_timer_sbi_client_wait_expire);
99
+ xact = ogs_sbi_xact_add(
100
+ sbi_object, target_nf_type, discovery_option,
101
+ build, context, data);
102
ogs_expect_or_return_val(xact, false);
103
104
xact->assoc_stream = stream;
105
106
- if (ogs_sbi_discover_and_send(xact,
107
- (ogs_fsm_handler_t)pcf_nf_state_registered, client_cb) != true) {
108
+ if (ogs_sbi_discover_and_send(
109
+ sbi_object,
110
+ target_nf_type, requester_nf_type, discovery_option,
111
+ client_cb, xact) != true) {
112
ogs_error("ogs_sbi_discover_and_send() failed");
113
ogs_sbi_xact_remove(xact);
114
return false;
115
116
return true;
117
}
118
119
-bool pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
120
- pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data,
121
- ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data))
122
+bool pcf_ue_sbi_discover_and_send(
123
+ OpenAPI_nf_type_e target_nf_type,
124
+ ogs_sbi_discovery_option_t *discovery_option,
125
+ ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data),
126
+ pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data)
127
{
128
- if (pcf_sbi_discover_and_send(target_nf_type, &pcf_ue->sbi, stream,
129
- (ogs_sbi_build_f)build, pcf_ue, data) != true) {
130
+ if (pcf_sbi_discover_and_send(
131
+ &pcf_ue->sbi, target_nf_type, discovery_option,
132
+ (ogs_sbi_build_f)build, pcf_ue, stream, data) != true) {
133
ogs_error("pcf_ue_sbi_discover_and_send() failed");
134
ogs_assert(true ==
135
ogs_sbi_server_send_error(stream,
136
137
return true;
138
}
139
140
-bool pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
141
- pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data,
142
- ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data))
143
+bool pcf_sess_sbi_discover_and_send(
144
+ OpenAPI_nf_type_e target_nf_type,
145
+ ogs_sbi_discovery_option_t *discovery_option,
146
+ ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data),
147
+ pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data)
148
{
149
- if (pcf_sbi_discover_and_send(target_nf_type, &sess->sbi, stream,
150
- (ogs_sbi_build_f)build, sess, data) != true) {
151
+ if (pcf_sbi_discover_and_send(
152
+ &sess->sbi, target_nf_type, discovery_option,
153
+ (ogs_sbi_build_f)build, sess, stream, data) != true) {
154
ogs_error("pcf_sess_sbi_discover_and_send() failed");
155
ogs_assert(true ==
156
ogs_sbi_server_send_error(stream,
157
open5gs_2.4.8.202207240002.tar.xz/src/pcf/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/pcf/sbi-path.h
Changed
29
1
2
int pcf_sbi_open(void);
3
void pcf_sbi_close(void);
4
5
-bool pcf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-bool pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
7
- pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data,
8
- ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data));
9
-bool pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
10
- pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data,
11
- ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data));
12
+bool pcf_sbi_send_request(
13
+ ogs_sbi_object_t *sbi_object,
14
+ OpenAPI_nf_type_e target_nf_type,
15
+ void *data);
16
+bool pcf_ue_sbi_discover_and_send(
17
+ OpenAPI_nf_type_e target_nf_type,
18
+ ogs_sbi_discovery_option_t *discovery_option,
19
+ ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data),
20
+ pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data);
21
+bool pcf_sess_sbi_discover_and_send(
22
+ OpenAPI_nf_type_e target_nf_type,
23
+ ogs_sbi_discovery_option_t *discovery_option,
24
+ ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data),
25
+ pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data);
26
27
bool pcf_sbi_send_am_policy_control_notify(pcf_ue_t *pcf_ue);
28
bool pcf_sbi_send_smpolicycontrol_update_notify(
29
open5gs_2.4.8.202207240002.tar.xz/src/scp/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/scp/context.c
Changed
13
1
2
{
3
return ogs_pool_find(&scp_conn_pool, index);
4
}
5
-
6
-void scp_conn_select_nf(scp_conn_t *sess, OpenAPI_nf_type_e nf_type)
7
-{
8
- ogs_assert(sess);
9
- ogs_assert(nf_type);
10
-
11
- ogs_sbi_select_nf(&sess->sbi, nf_type, scp_nf_state_registered);
12
-}
13
open5gs_2.4.8.202207240002.tar.xz/src/scp/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/scp/context.h
Changed
10
1
2
3
scp_conn_t *scp_conn_find(uint32_t index);
4
5
-void scp_conn_select_nf(scp_conn_t *sess, OpenAPI_nf_type_e nf_type);
6
-
7
#ifdef __cplusplus
8
}
9
#endif
10
open5gs_2.4.8.202207240002.tar.xz/src/scp/nf-sm.c -> open5gs_2.4.8.202207250002.tar.xz/src/scp/nf-sm.c
Changed
49
1
2
nf_instance->time.heartbeat_interval +
3
ogs_app()->time.nf_instance.no_heartbeat_margin));
4
}
5
+
6
+ ogs_assert(true ==
7
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
8
+ ogs_sbi_self()->nf_instance->nf_type,
9
+ ogs_sbi_self()->nf_instance->id,
10
+ OpenAPI_nf_type_AMF));
11
+ ogs_assert(true ==
12
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
13
+ ogs_sbi_self()->nf_instance->nf_type,
14
+ ogs_sbi_self()->nf_instance->id,
15
+ OpenAPI_nf_type_AUSF));
16
+ ogs_assert(true ==
17
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
18
+ ogs_sbi_self()->nf_instance->nf_type,
19
+ ogs_sbi_self()->nf_instance->id,
20
+ OpenAPI_nf_type_BSF));
21
+ ogs_assert(true ==
22
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
23
+ ogs_sbi_self()->nf_instance->nf_type,
24
+ ogs_sbi_self()->nf_instance->id,
25
+ OpenAPI_nf_type_NSSF));
26
+ ogs_assert(true ==
27
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
28
+ ogs_sbi_self()->nf_instance->nf_type,
29
+ ogs_sbi_self()->nf_instance->id,
30
+ OpenAPI_nf_type_PCF));
31
+ ogs_assert(true ==
32
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
33
+ ogs_sbi_self()->nf_instance->nf_type,
34
+ ogs_sbi_self()->nf_instance->id,
35
+ OpenAPI_nf_type_SMF));
36
+ ogs_assert(true ==
37
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
38
+ ogs_sbi_self()->nf_instance->nf_type,
39
+ ogs_sbi_self()->nf_instance->id,
40
+ OpenAPI_nf_type_UDM));
41
+ ogs_assert(true ==
42
+ ogs_nnrf_nfm_send_nf_status_subscribe(client,
43
+ ogs_sbi_self()->nf_instance->nf_type,
44
+ ogs_sbi_self()->nf_instance->id,
45
+ OpenAPI_nf_type_UDR));
46
}
47
48
break;
49
open5gs_2.4.8.202207240002.tar.xz/src/scp/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/scp/nnrf-handler.c
Changed
61
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- scp_conn_t *conn = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- conn = (scp_conn_t *)sbi_object;
39
- ogs_assert(conn);
40
- scp_conn_select_nf(conn, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->is_validity_period &&
44
SearchResult->validity_period) {
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
52
+
53
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
54
if (!nf_instance) {
55
ogs_error("(NF discover) No %s",
56
- OpenAPI_nf_type_ToString(xact->target_nf_type));
57
+ OpenAPI_nf_type_ToString(target_nf_type));
58
} else {
59
scp_sbi_send(nf_instance, xact);
60
}
61
open5gs_2.4.8.202207240002.tar.xz/src/scp/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/scp/sbi-path.c
Changed
129
1
2
{
3
ogs_sbi_nf_instance_t *nf_instance = NULL;
4
5
- if (ogs_sbi_server_start_all(request_handler) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
scp_nf_fsm_init(nf_instance);
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = scp_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)scp_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(request_handler) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
return OGS_ERROR;
30
}
31
} else {
32
- ogs_sbi_message_t message;
33
+ scp_event_t *e = NULL;
34
+ int rv;
35
36
- ogs_error("Unknown HTTP Headers");
37
- ogs_error(" %s:%s", source->h.method, source->h.uri);
38
- for (hi = ogs_hash_first(source->http.headers);
39
- hi; hi = ogs_hash_next(hi)) {
40
- char *key = (char *)ogs_hash_this_key(hi);
41
- char *val = ogs_hash_this_val(hi);
42
- ogs_error(" %s:%s", key, val);
43
- }
44
+ ogs_assert(source);
45
+ ogs_assert(data);
46
47
- rv = ogs_sbi_parse_request(&message, source);
48
+ e = scp_event_new(SCP_EVT_SBI_SERVER);
49
+ ogs_assert(e);
50
+
51
+ e->sbi.request = source;
52
+ e->sbi.data = data;
53
+
54
+ rv = ogs_queue_push(ogs_app()->queue, e);
55
if (rv != OGS_OK) {
56
- ogs_error("cannot parse HTTP sbi_message");
57
- ogs_assert(true ==
58
- ogs_sbi_server_send_error(
59
- stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST,
60
- NULL, "cannot parse HTTP sbi_message", NULL));
61
+ ogs_error("ogs_queue_push() failed:%d", (int)rv);
62
+ ogs_sbi_request_free(source);
63
+ scp_event_free(e);
64
return OGS_ERROR;
65
}
66
-
67
- ogs_assert(true ==
68
- ogs_sbi_server_send_error(
69
- stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST,
70
- &message, "SCP - HTTP Client", NULL));
71
-
72
- ogs_sbi_message_free(&message);
73
-
74
- return OGS_OK;
75
}
76
77
return OGS_OK;
78
79
80
bool scp_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
81
{
82
- return ogs_sbi_send(nf_instance, client_cb, xact);
83
+ return ogs_sbi_send_request(nf_instance, client_cb, xact);
84
}
85
86
-bool scp_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
87
- scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data,
88
- ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data))
89
+bool scp_sbi_discover_and_send(
90
+ OpenAPI_nf_type_e target_nf_type,
91
+ ogs_sbi_discovery_option_t *discovery_option,
92
+ ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data),
93
+ scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data)
94
{
95
ogs_sbi_xact_t *xact = NULL;
96
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
97
98
- ogs_assert(target_nf_type);
99
+ ogs_assert(ogs_sbi_self()->nf_instance);
100
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
101
+ ogs_assert(requester_nf_type);
102
103
ogs_assert(conn);
104
ogs_assert(stream);
105
ogs_assert(build);
106
107
- xact = ogs_sbi_xact_add(target_nf_type, &conn->sbi,
108
- (ogs_sbi_build_f)build, conn, data,
109
- scp_timer_sbi_client_wait_expire);
110
+ xact = ogs_sbi_xact_add(
111
+ &conn->sbi, target_nf_type, discovery_option,
112
+ (ogs_sbi_build_f)build, conn, data);
113
if (!xact) {
114
ogs_error("scp_sbi_discover_and_send() failed");
115
ogs_assert(true ==
116
117
118
xact->assoc_stream = stream;
119
120
- if (ogs_sbi_discover_and_send(xact,
121
- (ogs_fsm_handler_t)scp_nf_state_registered, client_cb) != true) {
122
+ if (ogs_sbi_discover_and_send(
123
+ &conn->sbi,
124
+ target_nf_type, requester_nf_type, discovery_option,
125
+ client_cb, xact) != true) {
126
ogs_error("scp_sbi_discover_and_send() failed");
127
ogs_sbi_xact_remove(xact);
128
ogs_assert(true ==
129
open5gs_2.4.8.202207240002.tar.xz/src/scp/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/scp/sbi-path.h
Changed
16
1
2
3
bool scp_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
4
5
-bool scp_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
6
- scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data,
7
- ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data));
8
+bool scp_sbi_discover_and_send(
9
+ OpenAPI_nf_type_e target_nf_type,
10
+ ogs_sbi_discovery_option_t *discovery_option,
11
+ ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data),
12
+ scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data);
13
14
#ifdef __cplusplus
15
}
16
open5gs_2.4.8.202207240002.tar.xz/src/smf/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/context.c
Changed
25
1
2
ogs_log_install_domain(&__smf_log_domain, "smf", ogs_core()->log.level);
3
ogs_log_install_domain(&__gsm_log_domain, "gsm", ogs_core()->log.level);
4
5
- ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.gtp_node);
6
+ ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.nf);
7
ogs_pool_init(&smf_ue_pool, ogs_app()->max.ue);
8
ogs_pool_init(&smf_sess_pool, ogs_app()->pool.sess);
9
ogs_pool_init(&smf_bearer_pool, ogs_app()->pool.bearer);
10
11
return ogs_pool_cycle(&smf_bearer_pool, qos_flow);
12
}
13
14
-void smf_sess_select_nf(smf_sess_t *sess, OpenAPI_nf_type_e nf_type)
15
-{
16
- ogs_assert(sess);
17
- ogs_assert(nf_type);
18
-
19
- ogs_sbi_select_nf(&sess->sbi, nf_type, smf_nf_state_registered);
20
-}
21
-
22
smf_pf_t *smf_pf_add(smf_bearer_t *bearer)
23
{
24
smf_sess_t *sess = NULL;
25
open5gs_2.4.8.202207240002.tar.xz/src/smf/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/smf/context.h
Changed
10
1
2
smf_bearer_t *smf_qos_flow_cycle(smf_bearer_t *qos_flow);
3
smf_bearer_t *smf_bearer_cycle(smf_bearer_t *bearer);
4
5
-void smf_sess_select_nf(smf_sess_t *sess, OpenAPI_nf_type_e nf_type);
6
-
7
smf_pf_t *smf_pf_add(smf_bearer_t *bearer);
8
int smf_pf_remove(smf_pf_t *pf);
9
void smf_pf_remove_all(smf_bearer_t *bearer);
10
open5gs_2.4.8.202207240002.tar.xz/src/smf/gsm-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/gsm-handler.c
Changed
14
1
2
}
3
4
ogs_assert(true ==
5
- smf_sbi_discover_and_send(OpenAPI_nf_type_UDM, sess, stream,
6
- 0, (char *)OGS_SBI_RESOURCE_NAME_SM_DATA,
7
- smf_nudm_sdm_build_get));
8
+ smf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL,
9
+ smf_nudm_sdm_build_get,
10
+ sess, stream, 0, (char *)OGS_SBI_RESOURCE_NAME_SM_DATA));
11
12
return OGS_OK;
13
}
14
open5gs_2.4.8.202207240002.tar.xz/src/smf/gsm-sm.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/gsm-sm.c
Changed
15
1
2
NGAP_CauseNas_normal_release;
3
4
ogs_assert(true ==
5
- smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream,
6
- OGS_PFCP_DELETE_TRIGGER_UE_REQUESTED, ¶m,
7
- smf_npcf_smpolicycontrol_build_delete));
8
+ smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
9
+ smf_npcf_smpolicycontrol_build_delete,
10
+ sess, stream,
11
+ OGS_PFCP_DELETE_TRIGGER_UE_REQUESTED, ¶m));
12
} else {
13
ogs_error("%s:%d No PolicyAssociationId",
14
smf_ue->supi, sess->psi);
15
open5gs_2.4.8.202207240002.tar.xz/src/smf/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/nnrf-handler.c
Changed
133
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- smf_sess_t *sess = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- sess = (smf_sess_t *)sbi_object;
39
- ogs_assert(sess);
40
- smf_sess_select_nf(sess, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->is_validity_period &&
44
SearchResult->validity_period) {
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
- if (!nf_instance) {
52
- ogs_error("(NF discover) No %s",
53
- OpenAPI_nf_type_ToString(xact->target_nf_type));
54
- } else {
55
- ogs_assert(true == smf_sbi_send(nf_instance, xact));
56
- }
57
-}
58
-
59
-void smf_nnrf_handle_nf_profile_retrieve(
60
- ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
61
-{
62
- ogs_sbi_object_t *sbi_object = NULL;
63
- ogs_sbi_nf_instance_t *nf_instance = NULL;
64
-
65
- OpenAPI_nf_profile_t *NFProfile = NULL;
66
- bool handled;
67
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
68
69
- ogs_assert(xact);
70
- sbi_object = xact->sbi_object;
71
- ogs_assert(sbi_object);
72
- ogs_assert(recvmsg);
73
-
74
- NFProfile = recvmsg->NFProfile;
75
- if (!NFProfile) {
76
- ogs_error("No NFProfile");
77
- return;
78
- }
79
-
80
- nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id);
81
- if (!nf_instance) {
82
- nf_instance = ogs_sbi_nf_instance_add();
83
- ogs_assert(nf_instance);
84
- ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id);
85
-
86
- smf_nf_fsm_init(nf_instance);
87
-
88
- ogs_info("%s (NF-discover) NF registered", nf_instance->id);
89
- } else {
90
- nf_instance->reference_count++;
91
-
92
- OGS_FSM_TRAN(&nf_instance->sm, smf_nf_state_registered);
93
- ogs_fsm_dispatch(&nf_instance->sm, NULL);
94
-
95
- ogs_warn("%s (NF-discover) NF has already been added",
96
- NFProfile->nf_instance_id);
97
- }
98
-
99
- if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
100
- smf_sess_t *sess = NULL;
101
-
102
- handled = ogs_sbi_nnrf_handle_nf_profile(
103
- nf_instance, NFProfile, NULL, NULL);
104
- if (!handled) {
105
- ogs_error("ogs_sbi_nnrf_handle_nf_profile() failed %s",
106
- nf_instance->id);
107
- SMF_NF_INSTANCE_CLEAR("NRF-discover", nf_instance);
108
- return;
109
- }
110
-
111
- handled = ogs_sbi_client_associate(nf_instance);
112
- if (!handled) {
113
- ogs_error("%s Cannot assciate NF EndPoint", nf_instance->id);
114
- SMF_NF_INSTANCE_CLEAR("NRF-discover", nf_instance);
115
- return;
116
- }
117
-
118
- sess = (smf_sess_t *)sbi_object;
119
- ogs_assert(sess);
120
- smf_sess_select_nf(sess, nf_instance->nf_type);
121
-
122
- ogs_info("%s (NF-discover) NF Profile updated", nf_instance->id);
123
- }
124
-
125
- if (!nf_instance) {
126
- ogs_error("(NF discover) No %s",
127
- OpenAPI_nf_type_ToString(xact->target_nf_type));
128
- } else {
129
- ogs_assert(true == smf_sbi_send(nf_instance, xact));
130
- }
131
+ ogs_expect(true == smf_sbi_send_request(sbi_object, target_nf_type, xact));
132
}
133
open5gs_2.4.8.202207240002.tar.xz/src/smf/nnrf-handler.h -> open5gs_2.4.8.202207250002.tar.xz/src/smf/nnrf-handler.h
Changed
10
1
2
3
void smf_nnrf_handle_nf_discover(
4
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg);
5
-void smf_nnrf_handle_nf_profile_retrieve(
6
- ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg);
7
8
#ifdef __cplusplus
9
}
10
open5gs_2.4.8.202207240002.tar.xz/src/smf/npcf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/npcf-handler.c
Changed
14
1
2
3
memset(¶m, 0, sizeof(param));
4
ogs_assert(true ==
5
- smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, NULL,
6
- OGS_PFCP_DELETE_TRIGGER_PCF_INITIATED, ¶m,
7
- smf_npcf_smpolicycontrol_build_delete));
8
+ smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
9
+ smf_npcf_smpolicycontrol_build_delete,
10
+ sess, NULL, OGS_PFCP_DELETE_TRIGGER_PCF_INITIATED, ¶m));
11
12
return true;
13
}
14
open5gs_2.4.8.202207240002.tar.xz/src/smf/nsmf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/nsmf-handler.c
Changed
29
1
2
param.ue_timezone = true;
3
4
ogs_assert(true ==
5
- smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream,
6
- OGS_PFCP_DELETE_TRIGGER_AMF_UPDATE_SM_CONTEXT, ¶m,
7
- smf_npcf_smpolicycontrol_build_delete));
8
+ smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
9
+ smf_npcf_smpolicycontrol_build_delete,
10
+ sess, stream,
11
+ OGS_PFCP_DELETE_TRIGGER_AMF_UPDATE_SM_CONTEXT, ¶m));
12
}
13
} else {
14
ogs_error("No PolicyAssociationId");
15
16
17
if (sess->policy_association_id) {
18
ogs_assert(true ==
19
- smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream,
20
- OGS_PFCP_DELETE_TRIGGER_AMF_RELEASE_SM_CONTEXT, ¶m,
21
- smf_npcf_smpolicycontrol_build_delete));
22
+ smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
23
+ smf_npcf_smpolicycontrol_build_delete,
24
+ sess, stream,
25
+ OGS_PFCP_DELETE_TRIGGER_AMF_RELEASE_SM_CONTEXT, ¶m));
26
} else {
27
ogs_error("No PolicyAssociationId");
28
ogs_assert(true ==
29
open5gs_2.4.8.202207240002.tar.xz/src/smf/nudm-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/nudm-handler.c
Changed
12
1
2
ogs_free(sendmsg.http.location);
3
4
ogs_assert(true ==
5
- smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream,
6
- 0, NULL, smf_npcf_smpolicycontrol_build_create));
7
+ smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL,
8
+ smf_npcf_smpolicycontrol_build_create, sess, stream, 0, NULL));
9
10
return true;
11
12
open5gs_2.4.8.202207240002.tar.xz/src/smf/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/sbi-path.c
Changed
152
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = smf_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)smf_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
ogs_sbi_server_stop_all();
30
}
31
32
-bool smf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
33
+bool smf_sbi_send_request(
34
+ ogs_sbi_object_t *sbi_object,
35
+ OpenAPI_nf_type_e target_nf_type,
36
+ void *data)
37
{
38
- return ogs_sbi_send(nf_instance, client_cb, xact);
39
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
40
+
41
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
42
+ if (!nf_instance) {
43
+ ogs_error("(NF discover) No %s",
44
+ OpenAPI_nf_type_ToString(target_nf_type));
45
+ return false;
46
+ }
47
+
48
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
49
}
50
51
-bool smf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
52
- smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data,
53
- ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data))
54
+bool smf_sbi_discover_and_send(
55
+ OpenAPI_nf_type_e target_nf_type,
56
+ ogs_sbi_discovery_option_t *discovery_option,
57
+ ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data),
58
+ smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data)
59
{
60
- ogs_sbi_xact_t *xact = NULL;
61
smf_ue_t *smf_ue = NULL;
62
+ ogs_sbi_xact_t *xact = NULL;
63
64
- ogs_assert(target_nf_type);
65
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
66
67
ogs_assert(sess);
68
smf_ue = sess->smf_ue;
69
ogs_assert(smf_ue);
70
71
+ ogs_assert(ogs_sbi_self()->nf_instance);
72
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
73
+ ogs_assert(requester_nf_type);
74
+
75
ogs_assert(build);
76
77
- xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
78
- (ogs_sbi_build_f)build, sess, data,
79
- smf_timer_sbi_client_wait_expire);
80
+ xact = ogs_sbi_xact_add(
81
+ &sess->sbi, target_nf_type, discovery_option,
82
+ (ogs_sbi_build_f)build, sess, data);
83
if (!xact) {
84
ogs_error("smf_sbi_discover_and_send() failed");
85
ogs_assert(true ==
86
87
xact->state = state;
88
xact->assoc_stream = stream;
89
90
- if (ogs_sbi_discover_and_send(xact,
91
- (ogs_fsm_handler_t)smf_nf_state_registered, client_cb) != true) {
92
+ if (ogs_sbi_discover_and_send(
93
+ &sess->sbi,
94
+ target_nf_type, requester_nf_type, discovery_option,
95
+ client_cb, xact) != true) {
96
ogs_error("smf_sbi_discover_and_send() failed");
97
ogs_sbi_xact_remove(xact);
98
99
100
void smf_namf_comm_send_n1_n2_message_transfer(
101
smf_sess_t *sess, smf_n1_n2_message_transfer_param_t *param)
102
{
103
- ogs_sbi_xact_t *xact = NULL;
104
smf_ue_t *smf_ue = NULL;
105
+ ogs_sbi_xact_t *xact = NULL;
106
+
107
+ OpenAPI_nf_type_e target_nf_type = OpenAPI_nf_type_NULL;
108
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
109
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
110
111
ogs_assert(param);
112
ogs_assert(param->state);
113
114
smf_ue = sess->smf_ue;
115
ogs_assert(smf_ue);
116
117
- xact = ogs_sbi_xact_add(OpenAPI_nf_type_AMF, &sess->sbi,
118
+ ogs_assert(ogs_sbi_self()->nf_instance);
119
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
120
+ ogs_assert(requester_nf_type);
121
+
122
+ target_nf_type = OpenAPI_nf_type_AMF;
123
+
124
+ discovery_option = ogs_sbi_discovery_option_new();
125
+ ogs_assert(discovery_option);
126
+ ogs_sbi_discovery_option_set_target_nf_instance_id(
127
+ discovery_option, sess->serving_nf_id);
128
+
129
+ xact = ogs_sbi_xact_add(
130
+ &sess->sbi, target_nf_type, discovery_option,
131
(ogs_sbi_build_f)smf_namf_comm_build_n1_n2_message_transfer,
132
- sess, param, smf_timer_sbi_client_wait_expire);
133
+ sess, param);
134
if (!xact) {
135
ogs_error("smf_namf_comm_send_n1_n2_message_transfer() failed");
136
return;
137
138
139
xact->state = param->state;
140
141
- if (ogs_sbi_discover_by_nf_instanceid_and_send(xact,
142
- (ogs_fsm_handler_t)smf_nf_state_registered, client_cb,
143
- sess->serving_nf_id) != true)
144
- {
145
+ if (ogs_sbi_discover_and_send(
146
+ &sess->sbi,
147
+ target_nf_type, requester_nf_type, discovery_option,
148
+ client_cb, xact) != true) {
149
ogs_error("smf_namf_comm_send_n1_n2_message_transfer() failed");
150
ogs_sbi_xact_remove(xact);
151
}
152
open5gs_2.4.8.202207240002.tar.xz/src/smf/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/smf/sbi-path.h
Changed
22
1
2
int smf_sbi_open(void);
3
void smf_sbi_close(void);
4
5
-bool smf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-
7
-bool smf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
8
- smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data,
9
- ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data));
10
+bool smf_sbi_send_request(
11
+ ogs_sbi_object_t *sbi_object,
12
+ OpenAPI_nf_type_e target_nf_type,
13
+ void *data);
14
+bool smf_sbi_discover_and_send(
15
+ OpenAPI_nf_type_e target_nf_type,
16
+ ogs_sbi_discovery_option_t *discovery_option,
17
+ ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data),
18
+ smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data);
19
20
void smf_namf_comm_send_n1_n2_message_transfer(
21
smf_sess_t *sess, smf_n1_n2_message_transfer_param_t *param);
22
open5gs_2.4.8.202207240002.tar.xz/src/smf/smf-sm.c -> open5gs_2.4.8.202207250002.tar.xz/src/smf/smf-sm.c
Changed
34
1
2
3
SWITCH(sbi_message.h.resource.component0)
4
CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES)
5
+ nf_instance = e->sbi.data;
6
+ ogs_assert(nf_instance);
7
+ ogs_assert(OGS_FSM_STATE(&nf_instance->sm));
8
9
- SWITCH(sbi_message.h.method)
10
- CASE(OGS_SBI_HTTP_METHOD_GET)
11
- sbi_xact = e->sbi.data;
12
- ogs_assert(sbi_xact);
13
-
14
- if (sbi_message.res_status == OGS_SBI_HTTP_STATUS_OK)
15
- smf_nnrf_handle_nf_profile_retrieve(
16
- sbi_xact, &sbi_message);
17
- else
18
- ogs_error("HTTP response error %d",
19
- sbi_message.res_status);
20
- break;
21
- DEFAULT
22
- nf_instance = e->sbi.data;
23
- ogs_assert(nf_instance);
24
- ogs_assert(OGS_FSM_STATE(&nf_instance->sm));
25
-
26
- e->sbi.message = &sbi_message;
27
- ogs_fsm_dispatch(&nf_instance->sm, e);
28
- END
29
+ e->sbi.message = &sbi_message;
30
+ ogs_fsm_dispatch(&nf_instance->sm, e);
31
break;
32
33
CASE(OGS_SBI_RESOURCE_NAME_SUBSCRIPTIONS)
34
open5gs_2.4.8.202207240002.tar.xz/src/udm/context.c -> open5gs_2.4.8.202207250002.tar.xz/src/udm/context.c
Changed
13
1
2
{
3
return ogs_pool_cycle(&udm_ue_pool, udm_ue);
4
}
5
-
6
-void udm_ue_select_nf(udm_ue_t *udm_ue, OpenAPI_nf_type_e nf_type)
7
-{
8
- ogs_assert(udm_ue);
9
- ogs_assert(nf_type);
10
-
11
- ogs_sbi_select_nf(&udm_ue->sbi, nf_type, udm_nf_state_registered);
12
-}
13
open5gs_2.4.8.202207240002.tar.xz/src/udm/context.h -> open5gs_2.4.8.202207250002.tar.xz/src/udm/context.h
Changed
10
1
2
3
udm_ue_t *udm_ue_cycle(udm_ue_t *udm_ue);
4
5
-void udm_ue_select_nf(udm_ue_t *udm_ue, OpenAPI_nf_type_e nf_type);
6
-
7
#ifdef __cplusplus
8
}
9
#endif
10
open5gs_2.4.8.202207240002.tar.xz/src/udm/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/udm/nnrf-handler.c
Changed
61
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- udm_ue_t *udm_ue = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- udm_ue = (udm_ue_t *)sbi_object;
39
- ogs_assert(udm_ue);
40
- udm_ue_select_nf(udm_ue, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->is_validity_period &&
44
SearchResult->validity_period) {
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
- if (!nf_instance) {
52
- ogs_error("(NF discover) No %s",
53
- OpenAPI_nf_type_ToString(xact->target_nf_type));
54
- } else {
55
- ogs_assert(true == udm_sbi_send(nf_instance, xact));
56
- }
57
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
58
+
59
+ ogs_expect(true == udm_sbi_send_request(sbi_object, target_nf_type, xact));
60
}
61
open5gs_2.4.8.202207240002.tar.xz/src/udm/nudm-handler.c -> open5gs_2.4.8.202207250002.tar.xz/src/udm/nudm-handler.c
Changed
63
1
2
ResynchronizationInfo = AuthenticationInfoRequest->resynchronization_info;
3
if (!ResynchronizationInfo) {
4
5
- ogs_assert(true == udm_sbi_discover_and_send(
6
- OpenAPI_nf_type_UDR, udm_ue, stream, NULL,
7
- udm_nudr_dr_build_authentication_subscription));
8
+ ogs_assert(true ==
9
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
10
+ udm_nudr_dr_build_authentication_subscription,
11
+ udm_ue, stream, NULL));
12
13
} else {
14
uint8_t randOGS_RAND_LEN;
15
16
ogs_uint64_to_buffer(sqn, OGS_SQN_LEN, udm_ue->sqn);
17
18
ogs_assert(true ==
19
- udm_sbi_discover_and_send(OpenAPI_nf_type_UDR,
20
- udm_ue, stream, udm_ue->sqn,
21
- udm_nudr_dr_build_authentication_subscription));
22
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
23
+ udm_nudr_dr_build_authentication_subscription,
24
+ udm_ue, stream, udm_ue->sqn));
25
}
26
27
return true;
28
29
udm_ue->auth_event, message->AuthEvent);
30
31
ogs_assert(true ==
32
- udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, udm_ue, stream, NULL,
33
- udm_nudr_dr_build_update_authentication_status));
34
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
35
+ udm_nudr_dr_build_update_authentication_status,
36
+ udm_ue, stream, NULL));
37
38
return true;
39
}
40
41
message->Amf3GppAccessRegistration);
42
43
ogs_assert(true ==
44
- udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, udm_ue, stream, NULL,
45
- udm_nudr_dr_build_update_amf_context));
46
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
47
+ udm_nudr_dr_build_update_amf_context, udm_ue, stream, NULL));
48
49
return true;
50
}
51
52
}
53
54
ogs_assert(true ==
55
- udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, udm_ue, stream,
56
- PatchItemList, udm_nudr_dr_build_patch_amf_context));
57
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
58
+ udm_nudr_dr_build_patch_amf_context,
59
+ udm_ue, stream, PatchItemList));
60
61
return true;
62
}
63
open5gs_2.4.8.202207240002.tar.xz/src/udm/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/udm/sbi-path.c
Changed
94
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = udm_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)udm_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
29
ogs_sbi_server_stop_all();
30
}
31
32
-bool udm_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
33
+bool udm_sbi_send_request(
34
+ ogs_sbi_object_t *sbi_object,
35
+ OpenAPI_nf_type_e target_nf_type,
36
+ void *data)
37
{
38
- return ogs_sbi_send(nf_instance, client_cb, xact);
39
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
40
+
41
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
42
+ if (!nf_instance) {
43
+ ogs_error("(NF discover) No %s",
44
+ OpenAPI_nf_type_ToString(target_nf_type));
45
+ return false;
46
+ }
47
+
48
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
49
}
50
51
-bool udm_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
52
- udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data,
53
- ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data))
54
+bool udm_sbi_discover_and_send(
55
+ OpenAPI_nf_type_e target_nf_type,
56
+ ogs_sbi_discovery_option_t *discovery_option,
57
+ ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data),
58
+ udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data)
59
{
60
ogs_sbi_xact_t *xact = NULL;
61
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
62
+
63
+ ogs_assert(ogs_sbi_self()->nf_instance);
64
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
65
+ ogs_assert(requester_nf_type);
66
67
ogs_assert(target_nf_type);
68
ogs_assert(udm_ue);
69
ogs_assert(stream);
70
ogs_assert(build);
71
72
- xact = ogs_sbi_xact_add(target_nf_type, &udm_ue->sbi,
73
- (ogs_sbi_build_f)build, udm_ue, data,
74
- udm_timer_sbi_client_wait_expire);
75
+ xact = ogs_sbi_xact_add(
76
+ &udm_ue->sbi, target_nf_type, discovery_option,
77
+ (ogs_sbi_build_f)build, udm_ue, data);
78
if (!xact) {
79
ogs_error("udm_sbi_discover_and_send() failed");
80
ogs_assert(true ==
81
82
83
xact->assoc_stream = stream;
84
85
- if (ogs_sbi_discover_and_send(xact,
86
- (ogs_fsm_handler_t)udm_nf_state_registered, client_cb) != true) {
87
+ if (ogs_sbi_discover_and_send(
88
+ &udm_ue->sbi,
89
+ target_nf_type, requester_nf_type, discovery_option,
90
+ client_cb, xact) != true) {
91
ogs_error("udm_sbi_discover_and_send() failed");
92
ogs_sbi_xact_remove(xact);
93
ogs_assert(true ==
94
open5gs_2.4.8.202207240002.tar.xz/src/udm/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/src/udm/sbi-path.h
Changed
21
1
2
int udm_sbi_open(void);
3
void udm_sbi_close(void);
4
5
-bool udm_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-bool udm_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
7
- udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data,
8
- ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data));
9
+bool udm_sbi_send_request(
10
+ ogs_sbi_object_t *sbi_object,
11
+ OpenAPI_nf_type_e target_nf_type,
12
+ void *data);
13
+bool udm_sbi_discover_and_send(
14
+ OpenAPI_nf_type_e target_nf_type,
15
+ ogs_sbi_discovery_option_t *discovery_option,
16
+ ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data),
17
+ udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data);
18
19
#ifdef __cplusplus
20
}
21
open5gs_2.4.8.202207240002.tar.xz/src/udm/ue-sm.c -> open5gs_2.4.8.202207250002.tar.xz/src/udm/ue-sm.c
Changed
14
1
2
CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
3
CASE(OGS_SBI_RESOURCE_NAME_SM_DATA)
4
ogs_assert(true ==
5
- udm_sbi_discover_and_send(
6
- OpenAPI_nf_type_UDR, udm_ue, stream, message,
7
- udm_nudr_dr_build_query_subscription_provisioned));
8
+ udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL,
9
+ udm_nudr_dr_build_query_subscription_provisioned,
10
+ udm_ue, stream, message));
11
break;
12
13
CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
14
open5gs_2.4.8.202207240002.tar.xz/src/udr/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/src/udr/sbi-path.c
Changed
28
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = udr_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)udr_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
return OGS_OK;
26
}
27
28
open5gs_2.4.8.202207240002.tar.xz/src/udr/timer.c -> open5gs_2.4.8.202207250002.tar.xz/src/udr/timer.c
Changed
10
1
2
{
3
sbi_timer_send_event(UDR_TIMER_SUBSCRIPTION_VALIDITY, data);
4
}
5
+
6
+void udr_timer_sbi_client_wait_expire(void *data)
7
+{
8
+ sbi_timer_send_event(UDR_TIMER_SBI_CLIENT_WAIT, data);
9
+}
10
open5gs_2.4.8.202207240002.tar.xz/src/udr/timer.h -> open5gs_2.4.8.202207250002.tar.xz/src/udr/timer.h
Changed
17
1
2
UDR_TIMER_NF_INSTANCE_NO_HEARTBEAT,
3
UDR_TIMER_NF_INSTANCE_VALIDITY,
4
UDR_TIMER_SUBSCRIPTION_VALIDITY,
5
+ UDR_TIMER_SBI_CLIENT_WAIT,
6
7
MAX_NUM_OF_UDR_TIMER,
8
9
10
void udr_timer_nf_instance_no_heartbeat(void *data);
11
void udr_timer_nf_instance_validity(void *data);
12
void udr_timer_subscription_validity(void *data);
13
+void udr_timer_sbi_client_wait_expire(void *data);
14
15
#ifdef __cplusplus
16
}
17
open5gs_2.4.8.202207240002.tar.xz/tests/af/af-sm.c -> open5gs_2.4.8.202207250002.tar.xz/tests/af/af-sm.c
Changed
12
1
2
3
switch(e->local_id) {
4
case AF_LOCAL_DISCOVER_AND_SEND:
5
- af_sbi_discover_and_send(e->local.target_nf_type,
6
- e->sess, e->local.data, e->local.build);
7
+ af_sbi_discover_and_send(e->local.target_nf_type, NULL,
8
+ e->local.build, e->sess, e->local.data);
9
break;
10
case AF_LOCAL_SEND_TO_PCF:
11
af_sbi_send_to_pcf(e->sess, e->local.data, e->local.build);
12
open5gs_2.4.8.202207240002.tar.xz/tests/af/context.c -> open5gs_2.4.8.202207250002.tar.xz/tests/af/context.c
Changed
16
1
2
pcf_app_session_id, strlen(pcf_app_session_id));
3
}
4
5
-void af_sess_select_nf(af_sess_t *sess, OpenAPI_nf_type_e nf_type)
6
-{
7
- ogs_assert(sess);
8
- ogs_assert(nf_type);
9
-
10
- ogs_sbi_select_nf(&sess->sbi, nf_type, af_nf_state_registered);
11
-}
12
-
13
static ogs_sbi_client_t *find_client_by_fqdn(char *fqdn, int port)
14
{
15
int rv;
16
open5gs_2.4.8.202207240002.tar.xz/tests/af/context.h -> open5gs_2.4.8.202207250002.tar.xz/tests/af/context.h
Changed
10
1
2
af_sess_t *af_sess_find_by_af_app_session_id(char *af_app_session_id);
3
af_sess_t *af_sess_find_by_pcf_app_session_id(char *pcf_app_session_id);
4
5
-void af_sess_select_nf(af_sess_t *sess, OpenAPI_nf_type_e nf_type);
6
-
7
void af_sess_associate_pcf_client(af_sess_t *sess);
8
9
#ifdef __cplusplus
10
open5gs_2.4.8.202207240002.tar.xz/tests/af/nnrf-handler.c -> open5gs_2.4.8.202207250002.tar.xz/tests/af/nnrf-handler.c
Changed
61
1
2
ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg)
3
{
4
ogs_sbi_object_t *sbi_object = NULL;
5
+ OpenAPI_nf_type_e target_nf_type = 0;
6
+ ogs_sbi_discovery_option_t *discovery_option = NULL;
7
ogs_sbi_nf_instance_t *nf_instance = NULL;
8
9
OpenAPI_search_result_t *SearchResult = NULL;
10
OpenAPI_lnode_t *node = NULL;
11
bool handled;
12
13
+ ogs_assert(recvmsg);
14
ogs_assert(xact);
15
sbi_object = xact->sbi_object;
16
ogs_assert(sbi_object);
17
- ogs_assert(recvmsg);
18
+ target_nf_type = xact->target_nf_type;
19
+ ogs_assert(target_nf_type);
20
+
21
+ discovery_option = xact->discovery_option;
22
23
SearchResult = recvmsg->SearchResult;
24
if (!SearchResult) {
25
26
}
27
28
if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) {
29
- af_sess_t *sess = NULL;
30
-
31
handled = ogs_sbi_nnrf_handle_nf_profile(
32
nf_instance, NFProfile, NULL, NULL);
33
if (!handled) {
34
35
continue;
36
}
37
38
- sess = (af_sess_t *)sbi_object;
39
- ogs_assert(sess);
40
- af_sess_select_nf(sess, nf_instance->nf_type);
41
-
42
/* TIME : Update validity from NRF */
43
if (SearchResult->validity_period) {
44
nf_instance->time.validity_duration =
45
46
}
47
}
48
49
- ogs_assert(xact->target_nf_type);
50
- nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type);
51
- if (!nf_instance) {
52
- ogs_error("(NF discover) No %s",
53
- OpenAPI_nf_type_ToString(xact->target_nf_type));
54
- } else {
55
- af_sbi_send(nf_instance, xact);
56
- }
57
+ ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option);
58
+
59
+ ogs_expect(true == af_sbi_send_request(sbi_object, target_nf_type, xact));
60
}
61
open5gs_2.4.8.202207240002.tar.xz/tests/af/sbi-path.c -> open5gs_2.4.8.202207250002.tar.xz/tests/af/sbi-path.c
Changed
93
1
2
ogs_sbi_nf_instance_t *nf_instance = NULL;
3
ogs_sbi_nf_service_t *service = NULL;
4
5
- if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
6
- return OGS_ERROR;
7
-
8
/* Add SELF NF instance */
9
nf_instance = ogs_sbi_self()->nf_instance;
10
ogs_assert(nf_instance);
11
12
}
13
}
14
15
+ /* Timer expiration handler of client wait timer */
16
+ ogs_sbi_self()->client_wait_expire = af_timer_sbi_client_wait_expire;
17
+
18
+ /* NF register state in NF state machine */
19
+ ogs_sbi_self()->nf_state_registered =
20
+ (ogs_fsm_handler_t)af_nf_state_registered;
21
+
22
+ if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
23
+ return OGS_ERROR;
24
+
25
+
26
return OGS_OK;
27
}
28
29
30
client, client->cb, request, nf_instance);
31
}
32
33
-void af_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact)
34
+bool af_sbi_send_request(
35
+ ogs_sbi_object_t *sbi_object,
36
+ OpenAPI_nf_type_e target_nf_type,
37
+ void *data)
38
{
39
- ogs_sbi_send(nf_instance, client_cb, xact);
40
+ ogs_sbi_nf_instance_t *nf_instance = NULL;
41
+
42
+ nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type);
43
+ if (!nf_instance) {
44
+ ogs_error("(NF discover) No %s",
45
+ OpenAPI_nf_type_ToString(target_nf_type));
46
+ return false;
47
+ }
48
+
49
+ return ogs_sbi_send_request(nf_instance, client_cb, data);
50
}
51
52
-void af_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
53
- af_sess_t *sess, void *data,
54
- ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data))
55
+void af_sbi_discover_and_send(
56
+ OpenAPI_nf_type_e target_nf_type,
57
+ ogs_sbi_discovery_option_t *discovery_option,
58
+ ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data),
59
+ af_sess_t *sess, void *data)
60
{
61
ogs_sbi_xact_t *xact = NULL;
62
+ OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL;
63
+
64
+ ogs_assert(ogs_sbi_self()->nf_instance);
65
+ requester_nf_type = ogs_sbi_self()->nf_instance->nf_type;
66
+ ogs_assert(requester_nf_type);
67
68
ogs_assert(target_nf_type);
69
70
ogs_assert(sess);
71
ogs_assert(build);
72
73
- xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
74
- (ogs_sbi_build_f)build, sess, data,
75
- af_timer_sbi_client_wait_expire);
76
+ xact = ogs_sbi_xact_add(
77
+ &sess->sbi, target_nf_type, discovery_option,
78
+ (ogs_sbi_build_f)build, sess, data);
79
if (!xact) {
80
ogs_error("af_sbi_discover_and_send() failed");
81
return;
82
}
83
84
- if (ogs_sbi_discover_and_send(xact,
85
- (ogs_fsm_handler_t)af_nf_state_registered, client_cb) != true) {
86
+ if (ogs_sbi_discover_and_send(
87
+ &sess->sbi,
88
+ target_nf_type, requester_nf_type, discovery_option,
89
+ client_cb, xact) != true) {
90
ogs_error("af_sbi_discover_and_send() failed");
91
return;
92
}
93
open5gs_2.4.8.202207240002.tar.xz/tests/af/sbi-path.h -> open5gs_2.4.8.202207250002.tar.xz/tests/af/sbi-path.h
Changed
22
1
2
3
bool af_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance);
4
5
-void af_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact);
6
-
7
-void af_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
8
- af_sess_t *sess, void *data,
9
- ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data));
10
+bool af_sbi_send_request(
11
+ ogs_sbi_object_t *sbi_object,
12
+ OpenAPI_nf_type_e target_nf_type,
13
+ void *data);
14
+void af_sbi_discover_and_send(
15
+ OpenAPI_nf_type_e target_nf_type,
16
+ ogs_sbi_discovery_option_t *discovery_option,
17
+ ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data),
18
+ af_sess_t *sess, void *data);
19
20
void af_sbi_send_to_pcf(
21
af_sess_t *sess, void *data,
22
open5gs_2.4.8.202207240002.tar.xz/tests/app/5gc-init.c -> open5gs_2.4.8.202207250002.tar.xz/tests/app/5gc-init.c
Changed
11
1
2
if (udm_thread) ogs_thread_destroy(udm_thread);
3
if (ausf_thread) ogs_thread_destroy(ausf_thread);
4
5
- if (nrf_thread) ogs_thread_destroy(nrf_thread);
6
if (scp_thread) ogs_thread_destroy(scp_thread);
7
+ if (nrf_thread) ogs_thread_destroy(nrf_thread);
8
}
9
10
void test_5gc_init(void)
11
open5gs_2.4.8.202207240002.tar.xz/tests/app/app-init.c -> open5gs_2.4.8.202207250002.tar.xz/tests/app/app-init.c
Changed
12
1
2
3
if (hss_thread) ogs_thread_destroy(hss_thread);
4
if (pcrf_thread) ogs_thread_destroy(pcrf_thread);
5
- if (nrf_thread) ogs_thread_destroy(nrf_thread);
6
+
7
if (scp_thread) ogs_thread_destroy(scp_thread);
8
+ if (nrf_thread) ogs_thread_destroy(nrf_thread);
9
}
10
11
void test_app_init(void)
12