Changes of Revision 515

commit_91674ffa8a107022dfea14a49be1d74a24abaec6.txt Added
commit_deef017dfeb276f5f6a17c286df0646c17e9b201.txt Deleted
open5gs_2.7.2.4491.deef.dsc -> open5gs_2.7.2.4504.9167.dsc Changed
x
 
1
@@ -2,7 +2,7 @@
2
 Source: open5gs
3
 Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-scp, open5gs-sepp, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
 Architecture: any
5
-Version: 2.7.2.4491.deef
6
+Version: 2.7.2.4504.9167
7
 Maintainer: Harald Welte <laforge@gnumonks.org>
8
 Uploaders: Sukchan Lee <acetcom@gmail.com>
9
 Homepage: https://open5gs.org
10
@@ -32,8 +32,8 @@
11
  open5gs-udr deb net optional arch=any
12
  open5gs-upf deb net optional arch=any
13
 Checksums-Sha1:
14
- b05a111f04f7d70a08d6a397c833717563c97321 14504128 open5gs_2.7.2.4491.deef.tar.xz
15
+ 7b63adb70999e174ea10ce5689fc67c2144e9ae2 14505484 open5gs_2.7.2.4504.9167.tar.xz
16
 Checksums-Sha256:
17
- 7d827c6942ab5b0bf7d3afa6c2ef1489a9f45e1945aba2fc026a9ab4442b5d70 14504128 open5gs_2.7.2.4491.deef.tar.xz
18
+ 3b961d7626d4fe7bf7d82df266d0f109dc23eb72ee6109ac41352bef2dcf8c20 14505484 open5gs_2.7.2.4504.9167.tar.xz
19
 Files:
20
- 699d1d7f69a89cb5a5235d976aa41173 14504128 open5gs_2.7.2.4491.deef.tar.xz
21
+ 2b4ad2975fb0cd822168edb830a1579d 14505484 open5gs_2.7.2.4504.9167.tar.xz
22
open5gs_2.7.2.4491.deef.tar.xz/.tarball-version -> open5gs_2.7.2.4504.9167.tar.xz/.tarball-version Changed
4
 
1
@@ -1 +1 @@
2
-2.7.2.4491-deef
3
+2.7.2.4504-9167
4
open5gs_2.7.2.4491.deef.tar.xz/configs/meson.build -> open5gs_2.7.2.4504.9167.tar.xz/configs/meson.build Changed
9
 
1
@@ -39,6 +39,7 @@
2
     slice.yaml
3
     srsenb.yaml
4
     non3gpp.yaml
5
+    transfer.yaml
6
 '''.split()
7
 
8
 foreach file : example_conf
9
open5gs_2.7.2.4504.9167.tar.xz/configs/transfer.yaml.in Added
273
 
1
@@ -0,0 +1,271 @@
2
+db_uri: mongodb://localhost/open5gs
3
+
4
+logger:
5
+
6
+test:
7
+  serving:
8
+    - plmn_id:
9
+        mcc: 999
10
+        mnc: 70
11
+
12
+global:
13
+  parameter:
14
+#    no_nrf: true
15
+#    no_scp: true
16
+    no_sepp: true
17
+#    no_amf: true
18
+#    no_smf: true
19
+#    no_upf: true
20
+#    no_ausf: true
21
+#    no_udm: true
22
+#    no_pcf: true
23
+#    no_nssf: true
24
+#    no_bsf: true
25
+#    no_udr: true
26
+    no_mme: true
27
+    no_sgwc: true
28
+    no_sgwu: true
29
+    no_pcrf: true
30
+    no_hss: true
31
+
32
+smf:
33
+  sbi:
34
+    server:
35
+      - address: 127.0.0.4
36
+        port: 7777
37
+    client:
38
+      scp:
39
+        - uri: http://127.0.0.200:7777
40
+  pfcp:
41
+    server:
42
+      - address: 127.0.0.4
43
+    client:
44
+      upf:
45
+        - address: 127.0.0.7
46
+  gtpc:
47
+    server:
48
+      - address: 127.0.0.4
49
+  gtpu:
50
+    server:
51
+      - address: 127.0.0.4
52
+  metrics:
53
+    server:
54
+      - address: 127.0.0.4
55
+        port: 9090
56
+  session:
57
+    - subnet: 10.45.0.0/16
58
+      gateway: 10.45.0.1
59
+    - subnet: 2001:db8:cafe::/48
60
+      gateway: 2001:db8:cafe::1
61
+  dns:
62
+    - 8.8.8.8
63
+    - 8.8.4.4
64
+    - 2001:4860:4860::8888
65
+    - 2001:4860:4860::8844
66
+  mtu: 1400
67
+  freeDiameter:
68
+    identity: smf.localdomain
69
+    realm: localdomain
70
+    listen_on: 127.0.0.4
71
+    no_fwd: true
72
+    load_extension:
73
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dbg_msg_dumps.fdx
74
+        conf: 0x8888
75
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_rfc5777.fdx
76
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_mip6i.fdx
77
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_nasreq.fdx
78
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_nas_mipv6.fdx
79
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_dcca.fdx
80
+      - module: @build_subprojects_freeDiameter_extensions_dir@/dict_dcca_3gpp/dict_dcca_3gpp.fdx
81
+    connect:
82
+      - identity: pcrf.localdomain
83
+        address: 127.0.0.9
84
+
85
+amf:
86
+  sbi:
87
+    server:
88
+      - address: 127.0.0.5
89
+        port: 7777
90
+    client:
91
+      scp:
92
+        - uri: http://127.0.0.200:7777
93
+  ngap:
94
+    server:
95
+      - address: 127.0.0.5
96
+  metrics:
97
+    server:
98
+      - address: 127.0.0.5
99
+        port: 9090
100
+  guami:
101
+    - plmn_id:
102
+        mcc: 999
103
+        mnc: 70
104
+      amf_id:
105
+        region: 2
106
+        set: 1
107
+        pointer: 31
108
+  tai:
109
+    - plmn_id:
110
+        mcc: 999
111
+        mnc: 70
112
+      tac: 1
113
+  plmn_support:
114
+    - plmn_id:
115
+        mcc: 999
116
+        mnc: 70
117
+      s_nssai:
118
+        - sst: 1
119
+  security:
120
+    integrity_order :  NIA2, NIA1, NIA0 
121
+    ciphering_order :  NEA0, NEA1, NEA2 
122
+  network_name:
123
+    full: Open5GS
124
+  amf_name: open5gs-amf0
125
+  time:
126
+    t3512:
127
+      value: 540     # 9 mintues * 60 = 540 seconds
128
+
129
+# amf #2
130
+amf:
131
+  sbi:
132
+    server:
133
+      - address: 127.0.0.50
134
+        port: 7777
135
+    client:
136
+      scp:
137
+        - uri: http://127.0.0.200:7777
138
+  ngap:
139
+    server:
140
+      - address: 127.0.0.50
141
+  metrics:
142
+    server:
143
+      - address: 127.0.0.50
144
+        port: 9090
145
+  guami:
146
+    - plmn_id:
147
+        mcc: 999
148
+        mnc: 70
149
+      amf_id:
150
+        region: 2
151
+        set: 1
152
+        pointer: 30
153
+  tai:
154
+    - plmn_id:
155
+        mcc: 999
156
+        mnc: 70
157
+      tac: 1
158
+  plmn_support:
159
+    - plmn_id:
160
+        mcc: 999
161
+        mnc: 70
162
+      s_nssai:
163
+        - sst: 1
164
+  security:
165
+    integrity_order :  NIA2, NIA1, NIA0 
166
+    ciphering_order :  NEA0, NEA1, NEA2 
167
+  network_name:
168
+    full: Open5GS
169
+  amf_name: open5gs-amf1
170
+  time:
171
+    t3512:
172
+      value: 540     # 9 mintues * 60 = 540 seconds
173
+
174
+upf:
175
+  pfcp:
176
+    server:
177
+      - address: 127.0.0.7
178
+  gtpu:
179
+    server:
180
+      - address: 127.0.0.7
181
+  session:
182
+    - subnet: 10.45.0.0/16
183
+      gateway: 10.45.0.1
184
+    - subnet: 2001:db8:cafe::/48
185
+      gateway: 2001:db8:cafe::1
186
+  metrics:
187
+    server:
188
+      - address: 127.0.0.7
189
+        port: 9090
190
+
191
+nrf:
192
+  sbi:
193
+    server:
194
+      - address: 127.0.0.10
195
+        port: 7777
196
+
197
+scp:
198
+  sbi:
199
+    server:
200
+      - address: 127.0.0.200
201
+        port: 7777
202
+    client:
203
+      nrf:
204
+        - uri: http://127.0.0.10:7777
205
+
206
+ausf:
207
+  sbi:
208
+    server:
209
+      - address: 127.0.0.11
210
+        port: 7777
211
+    client:
212
+      scp:
213
+        - uri: http://127.0.0.200:7777
214
+
215
+udm:
216
+  hnet:
217
+    - id: 1
218
+      scheme: 1
219
+      key: @build_configs_dir@/open5gs/hnet/curve25519-1.key
220
+    - id: 2
221
+      scheme: 2
222
+      key: @build_configs_dir@/open5gs/hnet/secp256r1-2.key
223
+  sbi:
224
+    server:
225
+      - address: 127.0.0.12
226
+        port: 7777
227
+    client:
228
+      scp:
229
+        - uri: http://127.0.0.200:7777
230
+
231
+pcf:
232
+  sbi:
233
+    server:
234
+      - address: 127.0.0.13
235
+        port: 7777
236
+    client:
237
+      scp:
238
+        - uri: http://127.0.0.200:7777
239
+  metrics:
240
+    server:
241
+      - address: 127.0.0.13
242
+        port: 9090
243
+
244
+nssf:
245
+  sbi:
246
+    server:
247
+      - address: 127.0.0.14
248
+        port: 7777
249
+    client:
250
+      scp:
251
+        - uri: http://127.0.0.200:7777
252
+      nsi:
253
+        - uri: http://127.0.0.10:7777
254
+          s_nssai:
255
+            sst: 1
256
+bsf:
257
+  sbi:
258
+    server:
259
+      - address: 127.0.0.15
260
+        port: 7777
261
+    client:
262
+      scp:
263
+        - uri: http://127.0.0.200:7777
264
+
265
+udr:
266
+  sbi:
267
+    server:
268
+      - address: 127.0.0.20
269
+        port: 7777
270
+    client:
271
+      scp:
272
+        - uri: http://127.0.0.200:7777
273
open5gs_2.7.2.4491.deef.tar.xz/debian/changelog -> open5gs_2.7.2.4504.9167.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.7.2.4491.deef) unstable; urgency=medium
3
+open5gs (2.7.2.4504.9167) unstable; urgency=medium
4
 
5
   * Automatically generated changelog entry for building the Osmocom master feed
6
 
7
- -- Osmocom OBS scripts <info@osmocom.org>  Thu, 29 Aug 2024 07:40:55 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org>  Tue, 03 Sep 2024 13:49:26 +0000
9
 
10
 open5gs (2.7.2) unstable; urgency=medium
11
 
12
open5gs_2.7.2.4491.deef.tar.xz/lib/app/ogs-config.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/app/ogs-config.c Changed
50
 
1
@@ -134,6 +134,30 @@
2
     return OGS_OK;
3
 }
4
 
5
+int ogs_app_count_nf_conf_sections(const char *conf_section)
6
+{
7
+    if (!strcmp(conf_section, "amf"))
8
+        global_conf.parameter.amf_count++;
9
+    else if (!strcmp(conf_section, "smf"))
10
+        global_conf.parameter.smf_count++;
11
+    else if (!strcmp(conf_section, "upf"))
12
+        global_conf.parameter.upf_count++;
13
+    else if (!strcmp(conf_section, "ausf"))
14
+        global_conf.parameter.ausf_count++;
15
+    else if (!strcmp(conf_section, "udm"))
16
+        global_conf.parameter.udm_count++;
17
+    else if (!strcmp(conf_section, "pcf"))
18
+        global_conf.parameter.pcf_count++;
19
+    else if (!strcmp(conf_section, "nssf"))
20
+        global_conf.parameter.nssf_count++;
21
+    else if (!strcmp(conf_section, "bsf"))
22
+        global_conf.parameter.bsf_count++;
23
+    else if (!strcmp(conf_section, "udr"))
24
+        global_conf.parameter.udr_count++;
25
+
26
+    return OGS_OK;
27
+}
28
+
29
 int ogs_app_parse_global_conf(ogs_yaml_iter_t *parent)
30
 {
31
     int rv;
32
@@ -459,6 +483,7 @@
33
     int rv;
34
     yaml_document_t *document = NULL;
35
     ogs_yaml_iter_t root_iter;
36
+    int idx = 0;
37
 
38
     document = ogs_app()->document;
39
     ogs_assert(document);
40
@@ -470,7 +495,8 @@
41
     while (ogs_yaml_iter_next(&root_iter)) {
42
         const char *root_key = ogs_yaml_iter_key(&root_iter);
43
         ogs_assert(root_key);
44
-        if (!strcmp(root_key, local)) {
45
+        if (!strcmp(root_key, local) &&
46
+            (idx++ == ogs_app()->config_section_id)) {
47
             ogs_yaml_iter_t local_iter;
48
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
49
             while (ogs_yaml_iter_next(&local_iter)) {
50
open5gs_2.7.2.4491.deef.tar.xz/lib/app/ogs-config.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/app/ogs-config.h Changed
26
 
1
@@ -52,6 +52,16 @@
2
         int no_scp;
3
         int no_nrf;
4
 
5
+        int amf_count;
6
+        int smf_count;
7
+        int upf_count;
8
+        int ausf_count;
9
+        int udm_count;
10
+        int pcf_count;
11
+        int nssf_count;
12
+        int bsf_count;
13
+        int udr_count;
14
+
15
         /* Network */
16
         int no_ipv4;
17
         int no_ipv6;
18
@@ -163,6 +173,7 @@
19
 ogs_app_global_conf_t *ogs_global_conf(void);
20
 ogs_app_local_conf_t *ogs_local_conf(void);
21
 
22
+int ogs_app_count_nf_conf_sections(const char *conf_section);
23
 int ogs_app_parse_global_conf(ogs_yaml_iter_t *parent);
24
 int ogs_app_parse_local_conf(const char *local);
25
 
26
open5gs_2.7.2.4491.deef.tar.xz/lib/app/ogs-context.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/app/ogs-context.h Changed
10
 
1
@@ -85,6 +85,8 @@
2
         uint64_t max_specs;
3
     } metrics;
4
 
5
+    int config_section_id;
6
+
7
 } ogs_app_context_t;
8
 
9
 int ogs_app_context_init(void);
10
open5gs_2.7.2.4491.deef.tar.xz/lib/app/ogs-init.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/app/ogs-init.c Changed
66
 
1
@@ -35,6 +35,7 @@
2
         char *log_file;
3
         char *log_level;
4
         char *domain_mask;
5
+        char *config_section_id;
6
     } optarg;
7
 
8
     ogs_core_initialize();
9
@@ -50,7 +51,7 @@
10
     memset(&optarg, 0, sizeof(optarg));
11
 
12
     ogs_getopt_init(&options, (char**)argv);
13
-    while ((opt = ogs_getopt(&options, "c:l:e:m:")) != -1) {
14
+    while ((opt = ogs_getopt(&options, "c:l:e:m:k:")) != -1) {
15
         switch (opt) {
16
         case 'c':
17
             optarg.config_file = options.optarg;
18
@@ -64,6 +65,9 @@
19
         case 'm':
20
             optarg.domain_mask = options.optarg;
21
             break;
22
+        case 'k':
23
+            optarg.config_section_id = options.optarg;
24
+            break;
25
         case '?':
26
         default:
27
             ogs_assert_if_reached();
28
@@ -124,7 +128,14 @@
29
         ogs_app()->db_uri = ogs_env_get("DB_URI");
30
 
31
     /**************************************************************************
32
-     * Stage 6 : Print Banner
33
+     * Stage 6 : Setup configuration section ID for running multiple NF from
34
+     * same config file
35
+     */
36
+    if (optarg.config_section_id)
37
+        ogs_app()->config_section_id = atoi(optarg.config_section_id);
38
+
39
+    /**************************************************************************
40
+     * Stage 7 : Print Banner
41
      */
42
     if (ogs_app()->version) {
43
         ogs_log_print(OGS_LOG_INFO,
44
@@ -144,7 +155,7 @@
45
     }
46
 
47
     /**************************************************************************
48
-     * Stage 7 : Queue, Timer and Poll
49
+     * Stage 8 : Queue, Timer and Poll
50
      */
51
     ogs_app()->queue = ogs_queue_create(ogs_app()->pool.event);
52
     ogs_assert(ogs_app()->queue);
53
@@ -347,6 +358,12 @@
54
                 ogs_error("ogs_global_conf_parse_config() failed");
55
                 return rv;
56
             }
57
+        } else {
58
+            rv = ogs_app_count_nf_conf_sections(root_key);
59
+            if (rv != OGS_OK) {
60
+                ogs_error("ogs_app_count_nf_conf_sections() failed");
61
+                return rv;
62
+            }
63
         }
64
     }
65
 
66
open5gs_2.7.2.4491.deef.tar.xz/lib/core/abts.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/core/abts.c Changed
47
 
1
@@ -513,6 +513,7 @@
2
        "   -q             : turn off status in test\n"
3
        "   -x             : exclute test-unit (e.g. -x sctp-test)\n"
4
        "   -l             : list test-unit\n"
5
+       "   -k             : use <id> config section\n"
6
        "\n", name);
7
 }
8
 
9
@@ -523,6 +524,7 @@
10
     ogs_getopt_t options;
11
     struct {
12
         char *config_file;
13
+        char *config_section;
14
         char *log_level;
15
         char *domain_mask;
16
 
17
@@ -533,7 +535,7 @@
18
     memset(&optarg, 0, sizeof(optarg));
19
 
20
     ogs_getopt_init(&options, (char**)argv);
21
-    while ((opt = ogs_getopt(&options, "hvxlqc:e:m:dt")) != -1) {
22
+    while ((opt = ogs_getopt(&options, "hvxlqc:e:m:dtk:")) != -1) {
23
         switch (opt) {
24
         case 'h':
25
             show_help(argv0);
26
@@ -565,6 +567,9 @@
27
         case 't':
28
             optarg.enable_trace = true;
29
             break;
30
+        case 'k':
31
+            optarg.config_section = options.optarg;
32
+            break;
33
         case '?':
34
             fprintf(stderr, "%s: %s\n", argv0, options.errmsg);
35
             show_help(argv0);
36
@@ -602,6 +607,10 @@
37
         argv_outi++ = "-m";
38
         argv_outi++ = optarg.domain_mask;
39
     }
40
+    if (optarg.config_section) {
41
+        argv_outi++ = "-k";
42
+        argv_outi++ = optarg.config_section;
43
+    }
44
 
45
     argv_outi = NULL;
46
     
47
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/config.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/config.c Changed
19
 
1
@@ -105,7 +105,7 @@
2
                     fd_config->conni.addr, errno, strerror(errno));
3
             return OGS_ERROR;
4
         }
5
-        
6
+
7
         CHECK_FCT_DO( fd_ep_add_merge(
8
                 &fddpi.pi_endpoints, ai->ai_addr, ai->ai_addrlen,
9
                 EP_FL_CONF | (disc ?: EP_ACCEPTALL) ), return OGS_ERROR);
10
@@ -197,7 +197,7 @@
11
 
12
     /* Display configuration */
13
     b = fd_conf_dump(&buf, &len, NULL);
14
-    LOG_SPLIT(FD_LOG_NOTICE, NULL, 
15
+    LOG_SPLIT(FD_LOG_NOTICE, NULL,
16
             b ?: (char*)"<Error during configuration dump...>", NULL);
17
     free(buf);
18
 
19
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/init.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/init.c Changed
64
 
1
@@ -36,14 +36,14 @@
2
     if (ret != 0) {
3
         ogs_error("fd_log_handler_register() failed");
4
         return ret;
5
-    } 
6
+    }
7
 
8
     ret = fd_core_initialize();
9
     if (ret != 0) {
10
         ogs_error("fd_core_initialize() failed");
11
         return ret;
12
-    } 
13
-    
14
+    }
15
+
16
     /* Parse the configuration file */
17
     if (conffile) {
18
         CHECK_FCT_DO( fd_core_parseconf(conffile), goto error );
19
@@ -55,7 +55,10 @@
20
     CHECK_FCT( ogs_diam_message_init() );
21
 
22
     /* Initialize FD logger */
23
-    CHECK_FCT_DO( ogs_diam_logger_init(mode), goto error );
24
+    CHECK_FCT_DO( ogs_diam_logger_init(), goto error );
25
+
26
+    /* Initialize FD stats */
27
+    CHECK_FCT_DO( ogs_diam_stats_init(mode), goto error );
28
 
29
     return 0;
30
 error:
31
@@ -72,7 +75,7 @@
32
 
33
     CHECK_FCT_DO( fd_core_waitstartcomplete(), goto error );
34
 
35
-    CHECK_FCT( ogs_diam_logger_stats_start() );
36
+    CHECK_FCT( ogs_diam_stats_start() );
37
 
38
     return 0;
39
 error:
40
@@ -84,6 +87,7 @@
41
 
42
 void ogs_diam_final()
43
 {
44
+    ogs_diam_stats_final();
45
     ogs_diam_logger_final();
46
 
47
     CHECK_FCT_DO( fd_core_shutdown(), ogs_error("fd_core_shutdown() failed") );
48
@@ -118,12 +122,12 @@
49
     ogs_log_printf(level, OGS_LOG_DOMAIN, 0, NULL, 0, NULL, 0, __VA_ARGS__)
50
 
51
     switch(printlevel) {
52
-    case FD_LOG_ANNOYING: 
53
+    case FD_LOG_ANNOYING:
54
         diam_log_printf(OGS_LOG_TRACE, "%d %s\n", printlevel, buffer);
55
-        break;  
56
+        break;
57
     case FD_LOG_DEBUG:
58
         diam_log_printf(OGS_LOG_TRACE, "%d %s\n", printlevel, buffer);
59
-        break;  
60
+        break;
61
     case FD_LOG_INFO:
62
         diam_log_printf(OGS_LOG_TRACE, "%d %s\n", printlevel, buffer);
63
         break;
64
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/logger.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/logger.c Changed
123
 
1
@@ -19,57 +19,30 @@
2
 
3
 #include "ogs-diameter-common.h"
4
 
5
-static struct ogs_diam_logger_t self;
6
-
7
 static struct fd_hook_hdl *logger_hdl = NULL;
8
 static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
9
-static pthread_t fd_stats_th = (pthread_t)NULL;
10
 
11
 static ogs_diam_logger_user_handler user_handler = NULL;
12
 
13
 static void ogs_diam_logger_cb(enum fd_hook_type type, struct msg * msg,
14
     struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd,
15
     void * regdata);
16
-static void * diam_stats_worker(void * arg);
17
 
18
-int ogs_diam_logger_init(int mode)
19
+int ogs_diam_logger_init()
20
 {
21
     uint32_t mask_peers = HOOK_MASK( HOOK_PEER_CONNECT_SUCCESS );
22
 
23
-    memset(&self, 0, sizeof(struct ogs_diam_logger_t));
24
-
25
-    self.mode = mode;
26
-    self.duration = 60;       /* 60 seconds */
27
-
28
     CHECK_FCT( fd_hook_register(
29
             mask_peers, ogs_diam_logger_cb, NULL, NULL, &logger_hdl) );
30
 
31
-    CHECK_POSIX( pthread_mutex_init(&self.stats_lock, NULL) );
32
-
33
     return 0;
34
 }
35
 
36
 void ogs_diam_logger_final()
37
 {
38
-    CHECK_FCT_DO( fd_thr_term(&fd_stats_th), );
39
-    CHECK_POSIX_DO( pthread_mutex_destroy(&self.stats_lock), );
40
-
41
     if (logger_hdl) { CHECK_FCT_DO( fd_hook_unregister( logger_hdl ), ); }
42
 }
43
 
44
-struct ogs_diam_logger_t* ogs_diam_logger_self()
45
-{
46
-    return &self;
47
-}
48
-
49
-int ogs_diam_logger_stats_start()
50
-{
51
-    /* Start the statistics thread */
52
-    CHECK_POSIX( pthread_create(&fd_stats_th, NULL, diam_stats_worker, NULL) );
53
-
54
-    return 0;
55
-}
56
-
57
 void ogs_diam_logger_register(ogs_diam_logger_user_handler instance)
58
 {
59
     user_handler = instance;
60
@@ -116,62 +89,3 @@
61
     CHECK_POSIX_DO( pthread_mutex_unlock(&mtx), );
62
 }
63
 
64
-/* Function to display statistics periodically */
65
-static void * diam_stats_worker(void * arg)
66
-{
67
-    struct timespec start, now;
68
-    struct fd_stats copy;
69
-
70
-    /* Get the start time */
71
-    CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &start), );
72
-
73
-    /* Now, loop until canceled */
74
-    while (1) {
75
-        /* Display statistics every XX seconds */
76
-        sleep(self.duration);
77
-
78
-        /* Now, get the current stats */
79
-        CHECK_POSIX_DO( pthread_mutex_lock(&self.stats_lock), );
80
-        memcpy(&copy, &self.stats, sizeof(struct fd_stats));
81
-        CHECK_POSIX_DO( pthread_mutex_unlock(&self.stats_lock), );
82
-
83
-        /* Get the current execution time */
84
-        CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), );
85
-
86
-        /* Now, display everything */
87
-        ogs_trace("------- fd statistics ---------");
88
-        if (now.tv_nsec >= start.tv_nsec)
89
-        {
90
-            ogs_trace(" Executing for: %d.%06ld sec",
91
-                    (int)(now.tv_sec - start.tv_sec),
92
-                    (long)(now.tv_nsec - start.tv_nsec) / 1000);
93
-        }
94
-        else
95
-        {
96
-            ogs_trace(" Executing for: %d.%06ld sec",
97
-                    (int)(now.tv_sec - 1 - start.tv_sec),
98
-                    (long)(now.tv_nsec + 1000000000 - start.tv_nsec) / 1000);
99
-        }
100
-
101
-        if (self.mode & FD_MODE_SERVER) {
102
-            ogs_trace(" Server: %llu message(s) echoed",
103
-                    copy.nb_echoed);
104
-        }
105
-        if (self.mode & FD_MODE_CLIENT) {
106
-            ogs_trace(" Client:");
107
-            ogs_trace("   %llu message(s) sent", copy.nb_sent);
108
-            ogs_trace("   %llu error(s) received", copy.nb_errs);
109
-            ogs_trace("   %llu answer(s) received", copy.nb_recv);
110
-            ogs_trace("     fastest: %ld.%06ld sec.",
111
-                    copy.shortest / 1000000, copy.shortest % 1000000);
112
-            ogs_trace("     slowest: %ld.%06ld sec.",
113
-                    copy.longest / 1000000, copy.longest % 1000000);
114
-            ogs_trace("     Average: %ld.%06ld sec.",
115
-                    copy.avg / 1000000, copy.avg % 1000000);
116
-        }
117
-        ogs_trace("-------------------------------------");
118
-    }
119
-
120
-    return NULL; /* never called */
121
-}
122
-
123
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/logger.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/logger.h Changed
36
 
1
@@ -28,33 +28,9 @@
2
 extern "C" {
3
 #endif
4
 
5
-struct ogs_diam_logger_t {
6
-
7
-#define FD_MODE_SERVER   0x1
8
-#define FD_MODE_CLIENT   0x2
9
-    int mode;        /* default FD_MODE_SERVER | FD_MODE_CLIENT */
10
-
11
-    int duration; /* default 10 */
12
-    struct fd_stats {
13
-        unsigned long long nb_echoed; /* server */
14
-        unsigned long long nb_sent;   /* client */
15
-        unsigned long long nb_recv;   /* client */
16
-        unsigned long long nb_errs;   /* client */
17
-        unsigned long shortest;  /* fastest answer, in microseconds */
18
-        unsigned long longest;   /* slowest answer, in microseconds */
19
-        unsigned long avg;       /* average answer time, in microseconds */
20
-    } stats;
21
-
22
-    pthread_mutex_t stats_lock;
23
-};
24
-
25
-int ogs_diam_logger_init(int mode);
26
+int ogs_diam_logger_init(void);
27
 void ogs_diam_logger_final(void);
28
 
29
-struct ogs_diam_logger_t* ogs_diam_logger_self(void);
30
-
31
-int ogs_diam_logger_stats_start(void);
32
-
33
 typedef void (*ogs_diam_logger_user_handler)(
34
     enum fd_hook_type type, struct msg *msg, struct peer_hdr *peer,
35
     void *other, struct fd_hook_permsgdata *pmd, void *regdata);
36
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/meson.build -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/meson.build Changed
29
 
1
@@ -20,12 +20,14 @@
2
 
3
     message.h
4
     logger.h
5
+    stats.h
6
     base.h
7
 
8
     libapp_sip.c
9
     dict.c
10
     message.c
11
     logger.c
12
+    stats.c
13
     config.c
14
     util.c
15
     init.c
16
@@ -51,10 +53,10 @@
17
     version : libogslib_version,
18
     c_args : libdiameter_common_cc_flags,
19
     include_directories : libdiameter_common_inc, libinc,
20
-    dependencies : libcore_dep, libfdcore_dep,
21
+    dependencies : libcore_dep, libfdcore_dep, libapp_dep,
22
     install : true)
23
 
24
 libdiameter_common_dep = declare_dependency(
25
     link_with : libdiameter_common,
26
     include_directories : libdiameter_common_inc, libinc,
27
-    dependencies : libcore_dep, libfdcore_dep)
28
+    dependencies : libcore_dep, libfdcore_dep, libapp_dep)
29
open5gs_2.7.2.4491.deef.tar.xz/lib/diameter/common/ogs-diameter-common.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/ogs-diameter-common.h Changed
9
 
1
@@ -43,6 +43,7 @@
2
 
3
 #include "diameter/common/message.h"
4
 #include "diameter/common/logger.h"
5
+#include "diameter/common/stats.h"
6
 #include "diameter/common/base.h"
7
 
8
 #undef OGS_DIAMETER_INSIDE
9
open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/stats.c Added
125
 
1
@@ -0,0 +1,123 @@
2
+/*
3
+ * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
4
+ *
5
+ * This file is part of Open5GS.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ */
20
+
21
+#include "ogs-diameter-common.h"
22
+#include "ogs-app.h"
23
+
24
+static ogs_diam_stats_ctx_t self;
25
+
26
+static void diam_stats_timer_cb(void *data);
27
+
28
+int ogs_diam_stats_init(int mode)
29
+{
30
+    memset(&self, 0, sizeof(ogs_diam_stats_ctx_t));
31
+
32
+    self.mode = mode;
33
+    self.poll.t_interval = ogs_time_from_sec(60); /* 60 seconds */
34
+    self.poll.timer = ogs_timer_add(ogs_app()->timer_mgr,
35
+                diam_stats_timer_cb, 0);
36
+        ogs_assert(self.poll.timer);
37
+
38
+    CHECK_POSIX( pthread_mutex_init(&self.stats_lock, NULL) );
39
+
40
+    return 0;
41
+}
42
+
43
+void ogs_diam_stats_final()
44
+{
45
+    if (self.poll.timer)
46
+        ogs_timer_delete(self.poll.timer);
47
+    self.poll.timer = NULL;
48
+}
49
+
50
+ogs_diam_stats_ctx_t* ogs_diam_stats_self()
51
+{
52
+    return &self;
53
+}
54
+
55
+int ogs_diam_stats_start()
56
+{
57
+    /* Get the start time */
58
+    self.poll.t_start = ogs_get_monotonic_time();
59
+    /* Start the statistics timer */
60
+    self.poll.t_prev = self.poll.t_start;
61
+    ogs_timer_start(self.poll.timer, self.poll.t_interval);
62
+
63
+    return 0;
64
+}
65
+
66
+static void ogs_diam_stats_log(const ogs_diam_stats_t *stats, ogs_time_t elapsed)
67
+{
68
+    ogs_trace("------- fd statistics ---------");
69
+    ogs_trace(" Executing for: %llu.%06llu sec",
70
+              (unsigned long long)ogs_time_sec(elapsed),
71
+              (unsigned long long)ogs_time_usec(elapsed));
72
+
73
+    if (self.mode & FD_MODE_SERVER) {
74
+        ogs_trace(" Server: %llu message(s) echoed",
75
+                stats->nb_echoed);
76
+    }
77
+    if (self.mode & FD_MODE_CLIENT) {
78
+        ogs_trace(" Client:");
79
+        ogs_trace("   %llu message(s) sent", stats->nb_sent);
80
+        ogs_trace("   %llu error(s) received", stats->nb_errs);
81
+        ogs_trace("   %llu answer(s) received", stats->nb_recv);
82
+        ogs_trace("     fastest: %ld.%06ld sec.",
83
+                stats->shortest / 1000000, stats->shortest % 1000000);
84
+        ogs_trace("     slowest: %ld.%06ld sec.",
85
+                stats->longest / 1000000, stats->longest % 1000000);
86
+        ogs_trace("     Average: %ld.%06ld sec.",
87
+                stats->avg / 1000000, stats->avg % 1000000);
88
+    }
89
+    ogs_trace("-------------------------------------");
90
+}
91
+
92
+/* Function to display statistics periodically */
93
+static void diam_stats_timer_cb(void *data)
94
+{
95
+    ogs_time_t now, since_start, since_prev, next_run;
96
+    ogs_diam_stats_t copy;
97
+
98
+    /* Now, get the current stats */
99
+    CHECK_POSIX_DO( pthread_mutex_lock(&self.stats_lock), );
100
+    memcpy(&copy, &self.stats, sizeof(ogs_diam_stats_t));
101
+    CHECK_POSIX_DO( pthread_mutex_unlock(&self.stats_lock), );
102
+
103
+    /* Get the current execution time */
104
+    now = ogs_get_monotonic_time();
105
+    since_start = now - self.poll.t_start;
106
+
107
+    /* Now, display everything */
108
+    ogs_diam_stats_log(&copy, since_start);
109
+
110
+    /* Re-schedule timer: */
111
+    since_prev = now - self.poll.t_prev;
112
+    /* Avoid increasing drift: */
113
+    if (since_prev > self.poll.t_interval) {
114
+        if (since_prev - self.poll.t_interval >= self.poll.t_interval)
115
+            next_run = 1; /* 0 not accepted by ogs_timer_start() */
116
+        else
117
+            next_run = self.poll.t_interval - (since_prev - self.poll.t_interval);
118
+    } else {
119
+        next_run = self.poll.t_interval;
120
+    }
121
+    self.poll.t_prev = now;
122
+    ogs_timer_start(self.poll.timer, next_run);
123
+}
124
+
125
open5gs_2.7.2.4504.9167.tar.xz/lib/diameter/common/stats.h Added
73
 
1
@@ -0,0 +1,71 @@
2
+/*
3
+ * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
4
+ *
5
+ * This file is part of Open5GS.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ */
20
+
21
+#if !defined(OGS_DIAMETER_INSIDE) && !defined(OGS_DIAMETER_COMPILATION)
22
+#error "This header cannot be included directly."
23
+#endif
24
+
25
+#ifndef OGS_DIAM_STATS_H
26
+#define OGS_DIAM_STATS_H
27
+
28
+#ifdef __cplusplus
29
+extern "C" {
30
+#endif
31
+
32
+#include <sys/time.h>
33
+
34
+typedef struct ogs_diam_stats_s {
35
+    unsigned long long nb_echoed; /* server */
36
+    unsigned long long nb_sent;   /* client */
37
+    unsigned long long nb_recv;   /* client */
38
+    unsigned long long nb_errs;   /* client */
39
+    unsigned long shortest;  /* fastest answer, in microseconds */
40
+    unsigned long longest;   /* slowest answer, in microseconds */
41
+    unsigned long avg;       /* average answer time, in microseconds */
42
+} ogs_diam_stats_t;
43
+
44
+typedef struct ogs_diam_stats_ctx_s {
45
+
46
+#define FD_MODE_SERVER   0x1
47
+#define FD_MODE_CLIENT   0x2
48
+    int mode;        /* default FD_MODE_SERVER | FD_MODE_CLIENT */
49
+
50
+    struct poll {
51
+        ogs_timer_t *timer;
52
+        ogs_time_t t_start; /* in usecs */
53
+        ogs_time_t t_prev; /* in usecs */
54
+        ogs_time_t t_interval; /* in usecs */
55
+    } poll;
56
+    ogs_diam_stats_t stats;
57
+
58
+    pthread_mutex_t stats_lock;
59
+} ogs_diam_stats_ctx_t;
60
+
61
+int ogs_diam_stats_init(int mode);
62
+void ogs_diam_stats_final(void);
63
+
64
+ogs_diam_stats_ctx_t* ogs_diam_stats_self(void);
65
+
66
+int ogs_diam_stats_start(void);
67
+
68
+#ifdef __cplusplus
69
+}
70
+#endif
71
+
72
+#endif /* OGS_DIAM_STATS_H */
73
open5gs_2.7.2.4491.deef.tar.xz/lib/gtp/context.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/gtp/context.c Changed
19
 
1
@@ -77,6 +77,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -88,7 +89,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, local)) {
14
+        if ((!strcmp(root_key, local)) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t local_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
18
             while (ogs_yaml_iter_next(&local_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/lib/metrics/context.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/metrics/context.c Changed
19
 
1
@@ -77,6 +77,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -88,7 +89,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (local && !strcmp(root_key, local)) {
14
+        if (local && !strcmp(root_key, local) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t local_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
18
             while (ogs_yaml_iter_next(&local_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/lib/pfcp/context.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/pfcp/context.c Changed
19
 
1
@@ -219,6 +219,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -230,7 +231,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, local)) {
14
+        if ((!strcmp(root_key, local)) &&
15
+            idx++ == ogs_app()->config_section_id) {
16
             ogs_yaml_iter_t local_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
18
             while (ogs_yaml_iter_next(&local_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/lib/sbi/context.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/sbi/context.c Changed
34
 
1
@@ -213,6 +213,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -224,7 +225,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (local && !strcmp(root_key, local)) {
14
+        if (local && !strcmp(root_key, local) &&
15
+            idx++ == ogs_app()->config_section_id) {
16
             ogs_yaml_iter_t local_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
18
             while (ogs_yaml_iter_next(&local_iter)) {
19
@@ -349,11 +351,13 @@
20
         }
21
     }
22
 
23
+    idx = 0;
24
     ogs_yaml_iter_init(&root_iter, document);
25
     while (ogs_yaml_iter_next(&root_iter)) {
26
         const char *root_key = ogs_yaml_iter_key(&root_iter);
27
         ogs_assert(root_key);
28
-        if (local && !strcmp(root_key, local)) {
29
+        if (local && !strcmp(root_key, local) &&
30
+            idx++ == ogs_app()->config_section_id) {
31
             ogs_yaml_iter_t local_iter;
32
             ogs_yaml_iter_recurse(&root_iter, &local_iter);
33
             while (ogs_yaml_iter_next(&local_iter)) {
34
open5gs_2.7.2.4491.deef.tar.xz/lib/sbi/message.c -> open5gs_2.7.2.4504.9167.tar.xz/lib/sbi/message.c Changed
55
 
1
@@ -193,6 +193,10 @@
2
         OpenAPI_ue_context_transfer_req_data_free(message->UeContextTransferReqData);
3
     if (message->UeContextTransferRspData)
4
         OpenAPI_ue_context_transfer_rsp_data_free(message->UeContextTransferRspData);
5
+    if (message->UeRegStatusUpdateReqData)
6
+        OpenAPI_ue_reg_status_update_req_data_free(message->UeRegStatusUpdateReqData);
7
+    if (message->UeRegStatusUpdateRspData)
8
+        OpenAPI_ue_reg_status_update_rsp_data_free(message->UeRegStatusUpdateRspData);
9
 
10
     /* HTTP Part */
11
     for (i = 0; i < message->num_of_part; i++) {
12
@@ -1372,6 +1376,14 @@
13
         item = OpenAPI_ue_context_transfer_rsp_data_convertToJSON(
14
                 message->UeContextTransferRspData);
15
         ogs_assert(item);
16
+    } else if (message->UeRegStatusUpdateReqData) {
17
+        item = OpenAPI_ue_reg_status_update_req_data_convertToJSON(
18
+                message->UeRegStatusUpdateReqData);
19
+        ogs_assert(item);
20
+    } else if (message->UeRegStatusUpdateRspData) {
21
+        item = OpenAPI_ue_reg_status_update_rsp_data_convertToJSON(
22
+                message->UeRegStatusUpdateRspData);
23
+        ogs_assert(item);
24
     }
25
 
26
     if (item) {
27
@@ -2129,6 +2141,27 @@
28
                             rv = OGS_ERROR;
29
                             ogs_error("JSON parse error");
30
                         }
31
+                    } else {
32
+                        ogs_error("HTTP ERROR Status : %d",
33
+                            message->res_status);
34
+                    }
35
+                    break;
36
+
37
+                CASE(OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE)
38
+                    if (message->res_status == 0) {
39
+                        message->UeRegStatusUpdateReqData =
40
+                            OpenAPI_ue_reg_status_update_req_data_parseFromJSON(item);
41
+                        if (!message->UeRegStatusUpdateReqData) {
42
+                            rv = OGS_ERROR;
43
+                            ogs_error("JSON parse error");
44
+                        }
45
+                    } else if (message->res_status == OGS_SBI_HTTP_STATUS_OK) {
46
+                        message->UeRegStatusUpdateRspData =
47
+                            OpenAPI_ue_reg_status_update_rsp_data_parseFromJSON(item);
48
+                        if (!message->UeRegStatusUpdateRspData) {
49
+                            rv = OGS_ERROR;
50
+                            ogs_error("JSON parse error");
51
+                        }
52
                     } else {
53
                         ogs_error("HTTP ERROR Status : %d",
54
                             message->res_status);
55
open5gs_2.7.2.4491.deef.tar.xz/lib/sbi/message.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/sbi/message.h Changed
18
 
1
@@ -125,6 +125,7 @@
2
 #define OGS_SBI_RESOURCE_NAME_UE_CONTEXTS           "ue-contexts"
3
 #define OGS_SBI_RESOURCE_NAME_N1_N2_MESSAGES        "n1-n2-messages"
4
 #define OGS_SBI_RESOURCE_NAME_TRANSFER              "transfer"
5
+#define OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE       "transfer-update"
6
 
7
 #define OGS_SBI_RESOURCE_NAME_SM_CONTEXT_STATUS     "sm-context-status"
8
 #define OGS_SBI_RESOURCE_NAME_AM_POLICY_NOTIFY      "am-policy-notify"
9
@@ -558,6 +559,8 @@
10
     OpenAPI_sec_negotiate_rsp_data_t *SecNegotiateRspData;
11
     OpenAPI_ue_context_transfer_req_data_t *UeContextTransferReqData;
12
     OpenAPI_ue_context_transfer_rsp_data_t *UeContextTransferRspData;
13
+    OpenAPI_ue_reg_status_update_req_data_t *UeRegStatusUpdateReqData;
14
+    OpenAPI_ue_reg_status_update_rsp_data_t *UeRegStatusUpdateRspData;
15
 
16
     ogs_sbi_links_t *links;
17
 
18
open5gs_2.7.2.4491.deef.tar.xz/lib/sbi/ogs-sbi.h -> open5gs_2.7.2.4504.9167.tar.xz/lib/sbi/ogs-sbi.h Changed
10
 
1
@@ -86,6 +86,8 @@
2
 #include "model/ue_authentication_ctx.h"
3
 #include "model/ue_context_transfer_req_data.h"
4
 #include "model/ue_context_transfer_rsp_data.h"
5
+#include "model/ue_reg_status_update_req_data.h"
6
+#include "model/ue_reg_status_update_rsp_data.h"
7
 
8
 #include "custom/links.h"
9
 
10
open5gs_2.7.2.4491.deef.tar.xz/src/amf/amf-sm.c -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/amf-sm.c Changed
25
 
1
@@ -209,6 +209,23 @@
2
                     END
3
                     break;
4
 
5
+                CASE(OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE)
6
+                    SWITCH(sbi_message.h.method)
7
+                    CASE(OGS_SBI_HTTP_METHOD_POST)
8
+                        amf_namf_comm_handle_registration_status_update_request(
9
+                                stream, &sbi_message);
10
+                        break;
11
+                    DEFAULT
12
+                        ogs_error("Invalid HTTP method %s",
13
+                                sbi_message.h.method);
14
+                        ogs_assert(true ==
15
+                            ogs_sbi_server_send_error(stream,
16
+                                OGS_SBI_HTTP_STATUS_FORBIDDEN, &sbi_message,
17
+                                "Invalid HTTP method", sbi_message.h.method,
18
+                                NULL));
19
+                    END
20
+                    break;
21
+
22
                 DEFAULT
23
                     ogs_error("Invalid resource name %s",
24
                             sbi_message.h.resource.component2);
25
open5gs_2.7.2.4491.deef.tar.xz/src/amf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/context.c Changed
79
 
1
@@ -206,6 +206,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -217,7 +218,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "amf")) {
14
+        if ((!strcmp(root_key, "amf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t amf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &amf_iter);
18
             while (ogs_yaml_iter_next(&amf_iter)) {
19
@@ -1509,7 +1511,7 @@
20
      * by performing the generic UE configuration update procedure.
21
      */
22
 
23
-    /* Copying from Current to Next Guti */
24
+    /* Copying from Next to Current Guti */
25
     amf_ue->current.m_tmsi = amf_ue->next.m_tmsi;
26
     memcpy(&amf_ue->current.guti,
27
             &amf_ue->next.guti, sizeof(ogs_nas_5gs_guti_t));
28
@@ -1622,6 +1624,7 @@
29
             OGS_SBI_NPCF_AM_POLICY_CONTROL_UE_AMBR_AUTHORIZATION);
30
 
31
     amf_ue->rat_restrictions = OpenAPI_list_create();
32
+    amf_ue->to_release_session_list = OpenAPI_list_create();
33
 
34
     ogs_list_init(&amf_ue->sess_list);
35
 
36
@@ -1661,6 +1664,7 @@
37
     AMF_UE_CLEAR_5GSM_MESSAGE(amf_ue);
38
 
39
     OpenAPI_list_free(amf_ue->rat_restrictions);
40
+    OpenAPI_list_free(amf_ue->to_release_session_list);
41
 
42
     /* Remove all session context */
43
     amf_sess_remove_all(amf_ue);
44
@@ -3022,3 +3026,34 @@
45
     }
46
     return false;
47
 }
48
+
49
+void amf_ue_save_to_release_session_list(amf_ue_t *amf_ue)
50
+{
51
+    amf_sess_t *sess = NULL;
52
+
53
+    OpenAPI_list_clear(amf_ue->to_release_session_list);
54
+
55
+    ogs_list_for_each(&amf_ue->sess_list, sess) {
56
+        bool supported_s_nssai = false;
57
+        int i;
58
+        for (i = 0; i < amf_self()->num_of_plmn_support; i++) {
59
+            int j;
60
+            for (j = 0; j < amf_self()->plmn_supporti.num_of_s_nssai; j++) {
61
+                if (memcmp(&sess->s_nssai,
62
+                        &amf_self()->plmn_supporti.s_nssaij,
63
+                        sizeof(ogs_s_nssai_t)) == 0) {
64
+                    supported_s_nssai = true;
65
+                    break;
66
+                }
67
+            }
68
+            if (supported_s_nssai)
69
+                break;
70
+        }
71
+        if (!supported_s_nssai) {
72
+            double *psi = ogs_calloc(1, sizeof(*psi));
73
+            ogs_assert(psi);
74
+            *psi = (double)sess->psi;
75
+            OpenAPI_list_add(amf_ue->to_release_session_list, psi);
76
+        }
77
+    }
78
+}
79
open5gs_2.7.2.4491.deef.tar.xz/src/amf/context.h -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/context.h Changed
44
 
1
@@ -45,6 +45,14 @@
2
 
3
 typedef uint32_t amf_m_tmsi_t;
4
 
5
+typedef enum {
6
+    UE_CONTEXT_INITIAL_STATE = 0,
7
+    UE_CONTEXT_TRANSFER_OLD_AMF_STATE,
8
+    UE_CONTEXT_TRANSFER_NEW_AMF_STATE,
9
+    REGISTRATION_STATUS_UPDATE_OLD_AMF_STATE,
10
+    REGISTRATION_STATUS_UPDATE_NEW_AMF_STATE,
11
+} amf_ue_context_transfer_state_t;
12
+
13
 typedef struct amf_context_s {
14
     /* Served GUAMI */
15
     int num_of_served_guami;
16
@@ -259,6 +267,8 @@
17
     /* UE identity */
18
 #define AMF_UE_HAVE_SUCI(__aMF) \
19
     ((__aMF) && ((__aMF)->suci))
20
+#define AMF_UE_HAVE_SUPI(__aMF) \
21
+    ((__aMF) && ((__aMF)->supi))
22
     char            *suci; /* TS33.501 : SUCI */
23
     char            *supi; /* TS33.501 : SUPI */
24
     ogs_nas_5gs_mobile_identity_suci_t nas_mobile_identity_suci;
25
@@ -280,7 +290,10 @@
26
         ogs_nas_5gs_guti_t guti;
27
     } current, next;
28
 
29
+    /* UE context transfer and Registration status update */
30
     ogs_nas_5gs_guti_t old_guti;
31
+    amf_ue_context_transfer_state_t amf_ue_context_transfer_state;
32
+    OpenAPI_list_t *to_release_session_list;
33
 
34
     /* UE Info */
35
     ogs_guami_t     *guami;
36
@@ -996,6 +1009,7 @@
37
 bool amf_update_allowed_nssai(amf_ue_t *amf_ue);
38
 bool amf_ue_is_rat_restricted(amf_ue_t *amf_ue);
39
 int amf_instance_get_load(void);
40
+void amf_ue_save_to_release_session_list(amf_ue_t *amf_ue);
41
 
42
 #ifdef __cplusplus
43
 }
44
open5gs_2.7.2.4491.deef.tar.xz/src/amf/gmm-sm.c -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/gmm-sm.c Changed
276
 
1
@@ -552,19 +552,23 @@
2
                         r = OGS_ERROR;
3
 
4
                         if (sbi_message->res_status == OGS_SBI_HTTP_STATUS_OK) {
5
+                            amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_TRANSFER_NEW_AMF_STATE;
6
                             r = amf_namf_comm_handle_ue_context_transfer_response(
7
                                     sbi_message, amf_ue);
8
                             if (r != OGS_OK) {
9
                                 ogs_error("failed to handle "
10
                                         "UE_CONTEXT_TRANSFER response");
11
+                                amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
12
                             }
13
                         } else {
14
                             ogs_error("%s HTTP response error %d",
15
                                 amf_ue->suci, sbi_message->res_status);
16
+                            amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
17
                         }
18
 
19
                         if (r != OGS_OK) {
20
-                            if (!AMF_UE_HAVE_SUCI(amf_ue)) {
21
+                            if (!(AMF_UE_HAVE_SUCI(amf_ue) ||
22
+                                    AMF_UE_HAVE_SUPI(amf_ue))) {
23
                                 CLEAR_AMF_UE_TIMER(amf_ue->t3570);
24
                                 r = nas_5gs_send_identity_request(amf_ue);
25
                                 ogs_expect(r == OGS_OK);
26
@@ -1251,9 +1255,12 @@
27
 
28
             if (gmm_registration_request_from_old_amf(amf_ue,
29
                         &nas_message->gmm.registration_request) == true) {
30
+                /* Send UE context transfer to old AMF */
31
                 ogs_sbi_discovery_option_t *discovery_option = NULL;
32
                 ogs_guami_t guami;
33
 
34
+                amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
35
+
36
                 discovery_option = ogs_sbi_discovery_option_new();
37
                 ogs_assert(discovery_option);
38
 
39
@@ -1918,6 +1925,7 @@
40
     ran_ue_t *ran_ue = NULL;
41
     ogs_nas_5gs_message_t *nas_message = NULL;
42
     ogs_nas_security_header_type_t h;
43
+    ogs_sbi_message_t *sbi_message = NULL;
44
 
45
     ogs_assert(s);
46
     ogs_assert(e);
47
@@ -1998,6 +2006,38 @@
48
                 break;
49
             }
50
 
51
+            if (amf_ue->amf_ue_context_transfer_state == UE_CONTEXT_TRANSFER_NEW_AMF_STATE) {
52
+                /*
53
+                * UE context transfer message has been sent
54
+                * to old AMF after Registration request.
55
+                * Now Registrations status update needs to be sent.
56
+                */
57
+                ogs_sbi_discovery_option_t *discovery_option = NULL;
58
+                ogs_guami_t guami;
59
+                int state = e->h.sbi.state;
60
+
61
+                discovery_option = ogs_sbi_discovery_option_new();
62
+                ogs_assert(discovery_option);
63
+
64
+                memcpy(&guami.plmn_id, &amf_ue->home_plmn_id,
65
+                        sizeof(ogs_plmn_id_t));
66
+                memcpy(&guami.amf_id, &amf_ue->old_guti.amf_id,
67
+                        sizeof(ogs_amf_id_t));
68
+
69
+                ogs_sbi_discovery_option_set_guami(discovery_option, &guami);
70
+
71
+                r = amf_ue_sbi_discover_and_send(
72
+                        OGS_SBI_SERVICE_TYPE_NAMF_COMM, discovery_option,
73
+                        amf_namf_comm_build_registration_status_update,
74
+                        amf_ue, state,
75
+                        (void *)OpenAPI_ue_context_transfer_status_TRANSFERRED);
76
+                ogs_expect(r == OGS_OK);
77
+                ogs_assert(r != OGS_ERROR);
78
+
79
+                amf_ue->amf_ue_context_transfer_state = REGISTRATION_STATUS_UPDATE_NEW_AMF_STATE;
80
+                break;
81
+            }
82
+
83
             ogs_kdf_kgnb_and_kn3iwf(
84
                     amf_ue->kamf, amf_ue->ul_count.i32,
85
                     amf_ue->nas.access_type, amf_ue->kgnb);
86
@@ -2078,6 +2118,73 @@
87
             break;
88
         }
89
         break;
90
+    case OGS_EVENT_SBI_CLIENT:
91
+        sbi_message = e->h.sbi.message;
92
+        ogs_assert(sbi_message);
93
+
94
+        SWITCH(sbi_message->h.service.name)
95
+        CASE(OGS_SBI_SERVICE_NAME_NAMF_COMM)
96
+            SWITCH(sbi_message->h.resource.component0)
97
+            CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXTS)
98
+                SWITCH(sbi_message->h.resource.component2)
99
+                CASE(OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE)
100
+                    if (amf_ue->amf_ue_context_transfer_state != REGISTRATION_STATUS_UPDATE_NEW_AMF_STATE) {
101
+                        ogs_error("UE context transfer state not correct");
102
+                    }
103
+                    if (sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) {
104
+                        ogs_error("%s HTTP response error %d",
105
+                                amf_ue->supi, sbi_message->res_status);
106
+                    }
107
+                    r = amf_namf_comm_handle_registration_status_update_response(sbi_message, amf_ue);
108
+                    ogs_expect(r == OGS_OK);
109
+                    ogs_assert(r != OGS_ERROR);
110
+
111
+                    amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
112
+
113
+                    /* Continue with registration */
114
+                    ogs_kdf_kgnb_and_kn3iwf(
115
+                            amf_ue->kamf, amf_ue->ul_count.i32,
116
+                            amf_ue->nas.access_type, amf_ue->kgnb);
117
+                    ogs_kdf_nh_gnb(amf_ue->kamf, amf_ue->kgnb, amf_ue->nh);
118
+                    amf_ue->nhcc = 1;
119
+
120
+                    r = amf_ue_sbi_discover_and_send(
121
+                            OGS_SBI_SERVICE_TYPE_NUDM_UECM, NULL,
122
+                            amf_nudm_uecm_build_registration, amf_ue, 0, NULL);
123
+                    ogs_expect(r == OGS_OK);
124
+                    ogs_assert(r != OGS_ERROR);
125
+
126
+                    if (amf_ue->nas.message_type == OGS_NAS_5GS_REGISTRATION_REQUEST) {
127
+                        OGS_FSM_TRAN(s, &gmm_state_initial_context_setup);
128
+                    } else if (amf_ue->nas.message_type ==
129
+                                OGS_NAS_5GS_SERVICE_REQUEST) {
130
+                        OGS_FSM_TRAN(s, &gmm_state_registered);
131
+                    } else {
132
+                        ogs_fatal("Invalid OGS_NAS_5GS%d", amf_ue->nas.message_type);
133
+                        ogs_assert_if_reached();
134
+                    }
135
+                    break;
136
+
137
+                DEFAULT
138
+                    ogs_error("Invalid resource name %s",
139
+                            sbi_message->h.resource.component2);
140
+                    ogs_assert_if_reached();
141
+                END
142
+                break;
143
+
144
+            DEFAULT
145
+                ogs_error("Invalid resource name %s",
146
+                        sbi_message->h.resource.component0);
147
+                ogs_assert_if_reached();
148
+            END
149
+            break;
150
+
151
+        DEFAULT
152
+            ogs_error("Invalid service name %s", sbi_message->h.service.name);
153
+            ogs_assert_if_reached();
154
+        END
155
+        break;
156
+
157
     case AMF_EVENT_5GMM_TIMER:
158
         switch (e->h.timer_id) {
159
         case AMF_TIMER_T3560:
160
@@ -2508,6 +2615,7 @@
161
     ran_ue_t *ran_ue = NULL;
162
     ogs_nas_5gs_message_t *nas_message = NULL;
163
     ogs_nas_security_header_type_t h;
164
+    ogs_sbi_message_t *sbi_message = NULL;
165
 
166
     ogs_assert(s);
167
     ogs_assert(e);
168
@@ -2530,6 +2638,38 @@
169
         AMF_UE_CLEAR_5GSM_MESSAGE(amf_ue);
170
         CLEAR_AMF_UE_ALL_TIMERS(amf_ue);
171
 
172
+        if (amf_ue->amf_ue_context_transfer_state == UE_CONTEXT_TRANSFER_NEW_AMF_STATE) {
173
+            /*
174
+            * UE context transfer message has been sent
175
+            * to old AMF after Registration request.
176
+            * Now Registrations status update needs to be sent.
177
+            */
178
+            ogs_sbi_discovery_option_t *discovery_option = NULL;
179
+            ogs_guami_t guami;
180
+            int state = e->h.sbi.state;
181
+
182
+            discovery_option = ogs_sbi_discovery_option_new();
183
+            ogs_assert(discovery_option);
184
+
185
+            memcpy(&guami.plmn_id, &amf_ue->home_plmn_id,
186
+                    sizeof(ogs_plmn_id_t));
187
+            memcpy(&guami.amf_id, &amf_ue->old_guti.amf_id,
188
+                    sizeof(ogs_amf_id_t));
189
+
190
+            ogs_sbi_discovery_option_set_guami(discovery_option, &guami);
191
+
192
+            r = amf_ue_sbi_discover_and_send(
193
+                    OGS_SBI_SERVICE_TYPE_NAMF_COMM, discovery_option,
194
+                    amf_namf_comm_build_registration_status_update,
195
+                    amf_ue, state,
196
+                    (void *)OpenAPI_ue_context_transfer_status_NOT_TRANSFERRED);
197
+            ogs_expect(r == OGS_OK);
198
+            ogs_assert(r != OGS_ERROR);
199
+
200
+            amf_ue->amf_ue_context_transfer_state = REGISTRATION_STATUS_UPDATE_NEW_AMF_STATE;
201
+            break;
202
+        }
203
+
204
         xact_count = amf_sess_xact_count(amf_ue);
205
 
206
         amf_sbi_send_release_all_sessions(
207
@@ -2667,6 +2807,68 @@
208
             ogs_error("Unknown message %d", nas_message->gmm.h.message_type);
209
         }
210
         break;
211
+    case OGS_EVENT_SBI_CLIENT:
212
+        sbi_message = e->h.sbi.message;
213
+        ogs_assert(sbi_message);
214
+
215
+        ran_ue_t *ran_ue = ran_ue_find_by_id(amf_ue->ran_ue_id);
216
+        ogs_assert(ran_ue);
217
+
218
+        SWITCH(sbi_message->h.service.name)
219
+        CASE(OGS_SBI_SERVICE_NAME_NAMF_COMM)
220
+            SWITCH(sbi_message->h.resource.component0)
221
+            CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXTS)
222
+                SWITCH(sbi_message->h.resource.component2)
223
+                CASE(OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE)
224
+                    if (amf_ue->amf_ue_context_transfer_state != REGISTRATION_STATUS_UPDATE_NEW_AMF_STATE) {
225
+                        ogs_error("UE context transfer state not correct");
226
+                    }
227
+                    if (sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) {
228
+                        ogs_error("%s HTTP response error %d",
229
+                                amf_ue->supi, sbi_message->res_status);
230
+                    }
231
+                    r = amf_namf_comm_handle_registration_status_update_response(sbi_message, amf_ue);
232
+                    ogs_expect(r == OGS_OK);
233
+                    ogs_assert(r != OGS_ERROR);
234
+
235
+                    amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
236
+
237
+                    /* Continue with release command */
238
+                    xact_count = amf_sess_xact_count(amf_ue);
239
+                    amf_sbi_send_release_all_sessions(
240
+                            ran_ue, amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
241
+
242
+                    if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
243
+                        amf_sess_xact_count(amf_ue) == xact_count) {
244
+                        r = ngap_send_ran_ue_context_release_command(
245
+                                ran_ue_find_by_id(amf_ue->ran_ue_id),
246
+                                NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release,
247
+                                NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
248
+                        ogs_expect(r == OGS_OK);
249
+                        ogs_assert(r != OGS_ERROR);
250
+                    }
251
+                    break;
252
+
253
+                DEFAULT
254
+                    ogs_error("Invalid resource name %s",
255
+                            sbi_message->h.resource.component2);
256
+                    ogs_assert_if_reached();
257
+                END
258
+                break;
259
+
260
+            DEFAULT
261
+                ogs_error("Invalid resource name %s",
262
+                        sbi_message->h.resource.component0);
263
+                ogs_assert_if_reached();
264
+            END
265
+            break;
266
+
267
+        DEFAULT
268
+            ogs_error("Invalid service name %s", sbi_message->h.service.name);
269
+            ogs_assert_if_reached();
270
+
271
+        END
272
+        break;
273
 
274
     default:
275
         ogs_error("Unknown event%s", amf_event_get_name(e));
276
open5gs_2.7.2.4491.deef.tar.xz/src/amf/namf-build.c -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/namf-build.c Changed
71
 
1
@@ -31,7 +31,6 @@
2
 
3
     memset(&plmn_id, 0, sizeof(plmn_id));
4
     ogs_nas_to_plmn_id(&plmn_id, &nas_guti->nas_plmn_id);
5
-
6
     amf_id = ogs_amf_id_to_string(&nas_guti->amf_id);
7
     tmsi = ogs_uint32_to_0string(nas_guti->m_tmsi);
8
 
9
@@ -92,6 +91,61 @@
10
 
11
     request = ogs_sbi_build_request(&message);
12
     ogs_expect(request);
13
+
14
+    if (ue_context_id)
15
+        ogs_free(ue_context_id);
16
+
17
+    return request;
18
+}
19
+
20
+ogs_sbi_request_t *amf_namf_comm_build_registration_status_update(
21
+        amf_ue_t *amf_ue, void *data)
22
+{
23
+    ogs_sbi_message_t message;
24
+    ogs_sbi_request_t *request = NULL;
25
+
26
+    OpenAPI_ue_reg_status_update_req_data_t UeRegStatusUpdateReqData;
27
+    char *ue_context_id = NULL;
28
+
29
+    ogs_assert(amf_ue);
30
+    ogs_assert(data);
31
+
32
+    ue_context_id = ogs_guti_to_string(&amf_ue->old_guti);
33
+    ogs_assert(ue_context_id);
34
+
35
+    memset(&message, 0, sizeof(message));
36
+    message.h.method = (char *)OGS_SBI_HTTP_METHOD_POST;
37
+    message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NAMF_COMM;
38
+    message.h.api.version = (char *)OGS_SBI_API_V1;
39
+    message.h.resource.component0 =
40
+            (char *)OGS_SBI_RESOURCE_NAME_UE_CONTEXTS;
41
+    message.h.resource.component1 = ue_context_id;
42
+    message.h.resource.component2 =
43
+            (char *)OGS_SBI_RESOURCE_NAME_TRANSFER_UPDATE;
44
+    message.UeRegStatusUpdateReqData = &UeRegStatusUpdateReqData;
45
+
46
+    memset(&UeRegStatusUpdateReqData, 0, sizeof(UeRegStatusUpdateReqData));
47
+
48
+    UeRegStatusUpdateReqData.transfer_status =
49
+        (OpenAPI_ue_context_transfer_status_e)data;
50
+    /*
51
+     * TS 29.518
52
+     * 5.2.2.2.2 Registration Status Update
53
+     * If any network slice(s) become no longer available and there are PDU
54
+     * Session(s) associated with them, the target AMF shall include these
55
+     * PDU session(s) in the toReleaseSessionList attribute in the payload.
56
+     */
57
+    if (UeRegStatusUpdateReqData.transfer_status ==
58
+                OpenAPI_ue_context_transfer_status_TRANSFERRED) {
59
+        ogs_assert(amf_ue->to_release_session_list); /* For safety */
60
+        if (amf_ue->to_release_session_list->count) {
61
+            UeRegStatusUpdateReqData.to_release_session_list =
62
+                    amf_ue->to_release_session_list;
63
+        }
64
+    }
65
+
66
+    request = ogs_sbi_build_request(&message);
67
+    ogs_expect(request);
68
 
69
     if (ue_context_id)
70
         ogs_free(ue_context_id);
71
open5gs_2.7.2.4491.deef.tar.xz/src/amf/namf-build.h -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/namf-build.h Changed
10
 
1
@@ -28,6 +28,8 @@
2
 
3
 ogs_sbi_request_t *amf_namf_comm_build_ue_context_transfer(
4
         amf_ue_t *amf_ue, void *data);
5
+ogs_sbi_request_t *amf_namf_comm_build_registration_status_update(
6
+        amf_ue_t *amf_ue, void *data);
7
 
8
 #ifdef __cplusplus
9
 }
10
open5gs_2.7.2.4491.deef.tar.xz/src/amf/namf-handler.c -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/namf-handler.c Changed
245
 
1
@@ -1093,7 +1093,6 @@
2
     ogs_sbi_response_t *response = NULL;
3
     ogs_sbi_message_t sendmsg;
4
     amf_ue_t *amf_ue = NULL;
5
-    ran_ue_t *ran_ue = NULL;
6
 
7
     OpenAPI_ambr_t *UeAmbr = NULL;
8
     OpenAPI_list_t *MmContextList = NULL;
9
@@ -1111,7 +1110,6 @@
10
 
11
     ogs_sbi_nf_instance_t *pcf_nf_instance = NULL;
12
 
13
-    char *ue_context_id = NULL;
14
     char *encoded_gmm_capability = NULL;
15
     int status = OGS_SBI_HTTP_STATUS_OK;
16
     char hxkamf_stringOGS_KEYSTRLEN(OGS_SHA256_DIGEST_SIZE);
17
@@ -1127,20 +1125,24 @@
18
     memset(&sendmsg, 0, sizeof(sendmsg));
19
     sendmsg.UeContextTransferRspData = &UeContextTransferRspData;
20
 
21
-    ue_context_id = recvmsg->h.resource.component1;
22
-    if (!ue_context_id) {
23
+    if (!recvmsg->h.resource.component1) {
24
         status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
25
         strerror = ogs_msprintf("No UE context ID");
26
         goto cleanup;
27
     }
28
 
29
-    amf_ue = amf_ue_find_by_ue_context_id(ue_context_id);
30
+    amf_ue = amf_ue_find_by_ue_context_id(recvmsg->h.resource.component1);
31
     if (!amf_ue) {
32
         status = OGS_SBI_HTTP_STATUS_NOT_FOUND;
33
-        strerror = ogs_msprintf("CONTEXT_NOT_FOUND");
34
+        strerror = ogs_msprintf("Cannot find Context ID %s",
35
+                recvmsg->h.resource.component1);
36
         goto cleanup;
37
     }
38
 
39
+    if (amf_ue->amf_ue_context_transfer_state != UE_CONTEXT_INITIAL_STATE) {
40
+        ogs_warn("Incorrect UE context transfer state");
41
+    }
42
+
43
     if (amf_ue->supi) {
44
         UeContext.supi = amf_ue->supi;
45
         if (amf_ue->auth_result !=
46
@@ -1212,7 +1214,11 @@
47
     if (recvmsg->UeContextTransferReqData->reason ==
48
             OpenAPI_transfer_reason_MOBI_REG) {
49
         SessionContextList =
50
-            amf_namf_comm_encode_ue_session_context_list(amf_ue);
51
+               amf_namf_comm_encode_ue_session_context_list(amf_ue);
52
+        if (SessionContextList->count == 0) {
53
+            OpenAPI_list_free(SessionContextList);
54
+            SessionContextList = NULL;
55
+        }
56
         UeContext.session_context_list = SessionContextList;
57
     }
58
 
59
@@ -1222,6 +1228,8 @@
60
     ogs_assert(response);
61
     ogs_assert(true == ogs_sbi_server_send_response(stream, response));
62
 
63
+    amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_TRANSFER_OLD_AMF_STATE;
64
+
65
     if (encoded_gmm_capability)
66
         ogs_free(encoded_gmm_capability);
67
 
68
@@ -1245,13 +1253,19 @@
69
     }
70
 
71
     /*
72
-     * Context TRANSFERRED !!!
73
-     * So, we removed UE context.
74
+     * Ue context is transfered, but we must keep the UE context until the
75
+     * registartion status update is received.
76
+     *
77
+     * TS 23.502
78
+     * 4.2.2.2.2 General Registration
79
+     *
80
+     * 10. Conditional new AMF to old AMF: Namf_Communication_RegistrationStatusUpdate
81
+     * (PDU Session ID(s) to be released due to slice not supported).
82
+    * If the authentication/security procedure fails, then the Registration shall be
83
+     * rejected and the new AMF invokes the Namf_Communication_RegistrationStatusUpdate
84
+     * service operation with a reject indication towards the old AMF. The old AMF continues
85
+     * as if the UE context transfer service operation was never received.
86
      */
87
-    ran_ue = ran_ue_find_by_id(amf_ue->ran_ue_id);
88
-    if (ran_ue)
89
-        ran_ue_remove(ran_ue);
90
-    amf_ue_remove(amf_ue);
91
 
92
     return OGS_OK;
93
 
94
@@ -1352,10 +1366,13 @@
95
         amf_namf_comm_decode_ue_mm_context_list(
96
                 amf_ue, UeContext->mm_context_list);
97
 
98
-    if (UeContext->session_context_list)
99
+    if (UeContext->session_context_list) {
100
         amf_namf_comm_decode_ue_session_context_list(
101
                 amf_ue, UeContext->session_context_list);
102
-
103
+        /* Save a list of sessions to be released on old AMF */
104
+        if (UeContext->mm_context_list)
105
+            amf_ue_save_to_release_session_list(amf_ue);
106
+    }
107
     /* TODO ueRadioCapability */
108
 
109
     return OGS_OK;
110
@@ -1802,3 +1819,134 @@
111
         ogs_sbi_header_free(&header);
112
     }
113
 }
114
+
115
+int amf_namf_comm_handle_registration_status_update_request(
116
+        ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) {
117
+
118
+    ogs_sbi_response_t *response = NULL;
119
+    ogs_sbi_message_t sendmsg;
120
+    amf_ue_t *amf_ue = NULL;
121
+    ran_ue_t *ran_ue = NULL;
122
+    amf_sess_t *sess = NULL;
123
+
124
+    OpenAPI_ue_reg_status_update_req_data_t *UeRegStatusUpdateReqData =
125
+            recvmsg->UeRegStatusUpdateReqData;
126
+    OpenAPI_ue_reg_status_update_rsp_data_t UeRegStatusUpdateRspData;
127
+
128
+    int status = 0;
129
+    char *strerror = NULL;
130
+
131
+    ogs_assert(stream);
132
+    ogs_assert(recvmsg);
133
+
134
+    if (!recvmsg->h.resource.component1) {
135
+        status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
136
+        strerror = ogs_msprintf("No UE context ID");
137
+        goto cleanup;
138
+    }
139
+    amf_ue = amf_ue_find_by_ue_context_id(recvmsg->h.resource.component1);
140
+    if (!amf_ue) {
141
+        status = OGS_SBI_HTTP_STATUS_NOT_FOUND;
142
+        strerror = ogs_msprintf("Cannot find Context ID %s",
143
+                recvmsg->h.resource.component1);
144
+        goto cleanup;
145
+    }
146
+
147
+    if (amf_ue->amf_ue_context_transfer_state != UE_CONTEXT_TRANSFER_OLD_AMF_STATE) {
148
+        status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
149
+        strerror = ogs_msprintf("Incorrect UE context transfer state");
150
+        goto cleanup;
151
+    }
152
+
153
+    memset(&UeRegStatusUpdateRspData, 0, sizeof(UeRegStatusUpdateRspData));
154
+    memset(&sendmsg, 0, sizeof(sendmsg));
155
+    sendmsg.UeRegStatusUpdateRspData = &UeRegStatusUpdateRspData;
156
+
157
+    if (UeRegStatusUpdateReqData->transfer_status ==
158
+            OpenAPI_ue_context_transfer_status_TRANSFERRED) {
159
+    /*
160
+    * TS 29.518
161
+    * 5.2.2.2.2 Registration Status Update
162
+    * Once the update is received, the source AMF shall:
163
+    *  -   remove the individual ueContext resource and release any PDU session(s) in the
164
+    *      toReleaseSessionList attribute, if the transferStatus attribute included in the
165
+    *      POST request body is set to "TRANSFERRED" and if the source AMF transferred the
166
+    *      complete UE Context including all MM contexts and PDU Session Contexts.
167
+    */
168
+        UeRegStatusUpdateRspData.reg_status_transfer_complete = 1;
169
+
170
+        ran_ue = ran_ue_find_by_id(amf_ue->ran_ue_id);
171
+
172
+        if (ran_ue) {
173
+            if (UeRegStatusUpdateReqData->to_release_session_list) {
174
+                OpenAPI_lnode_t *node = NULL;
175
+                OpenAPI_list_for_each(UeRegStatusUpdateReqData->to_release_session_list, node) {
176
+                    /* A double must be read */
177
+                    uint8_t psi = *(double *)node->data;
178
+                    sess = amf_sess_find_by_psi(amf_ue, psi);
179
+                    if (SESSION_CONTEXT_IN_SMF(sess)) {
180
+                        amf_sbi_send_release_session(ran_ue, sess, AMF_RELEASE_SM_CONTEXT_NO_STATE);
181
+                    } else {
182
+                        ogs_error("%s No Session Context PSI%d",
183
+                                amf_ue->supi, psi);
184
+                        UeRegStatusUpdateRspData.reg_status_transfer_complete = 0;
185
+                    }
186
+                }
187
+            }
188
+        }
189
+
190
+        /* Clear UE context */
191
+        CLEAR_NG_CONTEXT(amf_ue);
192
+        AMF_UE_CLEAR_PAGING_INFO(amf_ue);
193
+        AMF_UE_CLEAR_N2_TRANSFER(amf_ue, pdu_session_resource_setup_request);
194
+        AMF_UE_CLEAR_5GSM_MESSAGE(amf_ue);
195
+        CLEAR_AMF_UE_ALL_TIMERS(amf_ue);
196
+        OGS_ASN_CLEAR_DATA(&amf_ue->ueRadioCapability);
197
+
198
+    } else if (UeRegStatusUpdateReqData->transfer_status ==
199
+            OpenAPI_ue_context_transfer_status_NOT_TRANSFERRED) {
200
+    /*
201
+    * TS 23.502
202
+    * 4.2.2.2.2
203
+    * If the authentication/security procedure fails, then the Registration shall be rejected and
204
+    * the new AMF invokes the Namf_Communication_RegistrationStatusUpdate service operation with
205
+    * a reject indication towards the old AMF. The old AMF continues as if the UE context transfer
206
+    * service operation was never received.
207
+    */
208
+        UeRegStatusUpdateRspData.reg_status_transfer_complete = 0;
209
+
210
+    } else {
211
+        status = OGS_SBI_HTTP_STATUS_BAD_REQUEST;
212
+        strerror = ogs_msprintf("Transfer status not supported: %d",
213
+                UeRegStatusUpdateReqData->transfer_status);
214
+        goto cleanup;
215
+    }
216
+
217
+    status = OGS_SBI_HTTP_STATUS_OK;
218
+    response = ogs_sbi_build_response(&sendmsg, status);
219
+    ogs_assert(response);
220
+    ogs_assert(true == ogs_sbi_server_send_response(stream, response));
221
+
222
+    amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
223
+
224
+    return OGS_OK;
225
+
226
+cleanup:
227
+    ogs_assert(strerror);
228
+    ogs_error("%s", strerror);
229
+
230
+    ogs_assert(true == ogs_sbi_server_send_error(stream, status, NULL, strerror, NULL, NULL));
231
+    ogs_free(strerror);
232
+
233
+    amf_ue->amf_ue_context_transfer_state = UE_CONTEXT_INITIAL_STATE;
234
+
235
+    return OGS_ERROR;
236
+}
237
+
238
+int amf_namf_comm_handle_registration_status_update_response(
239
+        ogs_sbi_message_t *recvmsg, amf_ue_t *amf_ue) {
240
+
241
+    /* Nothing to do */
242
+
243
+    return OGS_OK;
244
+}
245
open5gs_2.7.2.4491.deef.tar.xz/src/amf/namf-handler.h -> open5gs_2.7.2.4504.9167.tar.xz/src/amf/namf-handler.h Changed
12
 
1
@@ -38,6 +38,10 @@
2
         ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
3
 int amf_namf_comm_handle_ue_context_transfer_response(
4
         ogs_sbi_message_t *recvmsg, amf_ue_t *amf_ue);
5
+int amf_namf_comm_handle_registration_status_update_request(
6
+        ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
7
+int amf_namf_comm_handle_registration_status_update_response(
8
+        ogs_sbi_message_t *recvmsg, amf_ue_t *amf_ue);
9
 
10
 #ifdef __cplusplus
11
 }
12
open5gs_2.7.2.4491.deef.tar.xz/src/ausf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/ausf/context.c Changed
19
 
1
@@ -83,6 +83,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -94,7 +95,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "ausf")) {
14
+        if ((!strcmp(root_key, "ausf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t ausf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &ausf_iter);
18
             while (ogs_yaml_iter_next(&ausf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/bsf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/bsf/context.c Changed
19
 
1
@@ -82,6 +82,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -93,7 +94,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "bsf")) {
14
+        if ((!strcmp(root_key, "bsf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t bsf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &bsf_iter);
18
             while (ogs_yaml_iter_next(&bsf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/hss/hss-cx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/hss/hss-cx-path.c Changed
53
 
1
@@ -166,9 +166,9 @@
2
     ogs_debug("User-Authorization-Answer");
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     ogs_free(user_name);
13
     ogs_free(public_identity);
14
@@ -555,9 +555,9 @@
15
     ogs_debug("Multimedia-Auth-Answer");
16
 
17
     /* Add this value to the stats */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_echoed++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_echoed++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     if (authentication_scheme)
26
         ogs_free(authentication_scheme);
27
@@ -815,9 +815,9 @@
28
     ogs_debug("Server-Assignment-Answer");
29
 
30
     /* Add this value to the stats */
31
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
32
-    ogs_diam_logger_self()->stats.nb_echoed++;
33
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
34
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
35
+    ogs_diam_stats_self()->stats.nb_echoed++;
36
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
37
 
38
     if (user_data)
39
         ogs_free(user_data);
40
@@ -936,9 +936,9 @@
41
     ogs_debug("Location-Info-Answer");
42
 
43
     /* Add this value to the stats */
44
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
45
-    ogs_diam_logger_self()->stats.nb_echoed++;
46
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
47
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
48
+    ogs_diam_stats_self()->stats.nb_echoed++;
49
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
50
 
51
     ogs_free(public_identity);
52
 
53
open5gs_2.7.2.4491.deef.tar.xz/src/hss/hss-s6a-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/hss/hss-s6a-path.c Changed
66
 
1
@@ -265,9 +265,9 @@
2
     ogs_debug("Authentication-Information-Answer");
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     return 0;
13
 
14
@@ -971,9 +971,9 @@
15
     ogs_debug("Update-Location-Answer");
16
 
17
     /* Add this value to the stats */
18
-    ogs_assert( pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_echoed++;
20
-    ogs_assert( pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert( pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_echoed++;
23
+    ogs_assert( pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     ogs_subscription_data_free(&subscription_data);
26
 
27
@@ -1128,9 +1128,9 @@
28
     ogs_debug("Purge-UE-Answer");
29
 
30
     /* Add this value to the stats */
31
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
32
-    ogs_diam_logger_self()->stats.nb_echoed++;
33
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
34
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
35
+    ogs_diam_stats_self()->stats.nb_echoed++;
36
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
37
 
38
     ogs_subscription_data_free(&subscription_data);
39
 
40
@@ -1284,9 +1284,9 @@
41
     ogs_assert(ret == 0);
42
 
43
     /* Increment the counter */
44
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
45
-    ogs_diam_logger_self()->stats.nb_sent++;
46
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
47
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
48
+    ogs_diam_stats_self()->stats.nb_sent++;
49
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
50
 
51
 }
52
 
53
@@ -1485,9 +1485,9 @@
54
     ogs_assert(ret == 0);
55
 
56
     /* Increment the counter */
57
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
58
-    ogs_diam_logger_self()->stats.nb_sent++;
59
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
60
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
61
+    ogs_diam_stats_self()->stats.nb_sent++;
62
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
63
 
64
     ogs_subscription_data_free(&subscription_data);
65
 
66
open5gs_2.7.2.4491.deef.tar.xz/src/hss/hss-swx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/hss/hss-swx-path.c Changed
27
 
1
@@ -334,9 +334,9 @@
2
     ogs_debug("Multimedia-Auth-Answer");
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     if (authentication_scheme)
13
         ogs_free(authentication_scheme);
14
@@ -857,9 +857,9 @@
15
     ogs_debug("Server-Assignment-Answer");
16
 
17
     /* Add this value to the stats */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_echoed++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_echoed++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     ogs_subscription_data_free(&subscription_data);
26
     ogs_free(user_name);
27
open5gs_2.7.2.4491.deef.tar.xz/src/main.c -> open5gs_2.7.2.4504.9167.tar.xz/src/main.c Changed
47
 
1
@@ -42,6 +42,7 @@
2
        "   -D             : start as a daemon\n"
3
        "   -v             : show version number and exit\n"
4
        "   -h             : show this message and exit\n"
5
+       "   -k             : use <id> config section\n"
6
        "\n", name);
7
 }
8
 
9
@@ -104,6 +105,7 @@
10
     ogs_getopt_t options;
11
     struct {
12
         char *config_file;
13
+        char *config_section;
14
         char *log_file;
15
         char *log_level;
16
         char *domain_mask;
17
@@ -116,7 +118,7 @@
18
     memset(&optarg, 0, sizeof(optarg));
19
 
20
     ogs_getopt_init(&options, (char**)argv);
21
-    while ((opt = ogs_getopt(&options, "vhDc:l:e:m:dt")) != -1) {
22
+    while ((opt = ogs_getopt(&options, "vhDc:l:e:m:dtk:")) != -1) {
23
         switch (opt) {
24
         case 'v':
25
             show_version();
26
@@ -164,6 +166,9 @@
27
         case 't':
28
             optarg.enable_trace = true;
29
             break;
30
+        case 'k':
31
+            optarg.config_section = options.optarg;
32
+            break;
33
         case '?':
34
             fprintf(stderr, "%s: %s\n", argv0, options.errmsg);
35
             show_help(argv0);
36
@@ -196,6 +201,10 @@
37
         argv_outi++ = "-m";
38
         argv_outi++ = optarg.domain_mask;
39
     }
40
+    if (optarg.config_section) {
41
+        argv_outi++ = "-k";
42
+        argv_outi++ = optarg.config_section;
43
+    }
44
 
45
     argv_outi = NULL;
46
 
47
open5gs_2.7.2.4491.deef.tar.xz/src/mme/mme-context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/mme/mme-context.c Changed
17
 
1
@@ -158,6 +158,7 @@
2
     mme_csmap_remove_all();
3
     mme_vlr_remove_all();
4
     mme_sgsn_remove_all();
5
+    mme_hssmap_remove_all();
6
 
7
     ogs_assert(self.enb_addr_hash);
8
     ogs_hash_destroy(self.enb_addr_hash);
9
@@ -190,6 +191,7 @@
10
     ogs_pool_final(&mme_pgw_pool);
11
     ogs_pool_final(&mme_csmap_pool);
12
     ogs_pool_final(&mme_vlr_pool);
13
+    ogs_pool_final(&mme_hssmap_pool);
14
 
15
     context_initialized = 0;
16
 }
17
open5gs_2.7.2.4491.deef.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/mme/mme-fd-path.c Changed
211
 
1
@@ -858,9 +858,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 }
12
 
13
 void mme_s6a_send_air(enb_ue_t *enb_ue, mme_ue_t *mme_ue,
14
@@ -1118,30 +1118,30 @@
15
     }
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
-    } else {
37
-        ogs_diam_logger_self()->stats.shortest = dur;
38
-        ogs_diam_logger_self()->stats.longest = dur;
39
-        ogs_diam_logger_self()->stats.avg = dur;
40
+        if (dur < ogs_diam_stats_self()->stats.shortest)
41
+            ogs_diam_stats_self()->stats.shortest = dur;
42
+        if (dur > ogs_diam_stats_self()->stats.longest)
43
+            ogs_diam_stats_self()->stats.longest = dur;
44
+    } else {
45
+        ogs_diam_stats_self()->stats.shortest = dur;
46
+        ogs_diam_stats_self()->stats.longest = dur;
47
+        ogs_diam_stats_self()->stats.avg = dur;
48
     }
49
     if (error)
50
-        ogs_diam_logger_self()->stats.nb_errs++;
51
+        ogs_diam_stats_self()->stats.nb_errs++;
52
     else
53
-        ogs_diam_logger_self()->stats.nb_recv++;
54
+        ogs_diam_stats_self()->stats.nb_recv++;
55
 
56
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
57
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
58
 
59
     /* Display how long it took */
60
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
61
@@ -1315,9 +1315,9 @@
62
     ogs_assert(ret == 0);
63
 
64
     /* Increment the counter */
65
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
66
-    ogs_diam_logger_self()->stats.nb_sent++;
67
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
68
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
69
+    ogs_diam_stats_self()->stats.nb_sent++;
70
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
71
 }
72
 
73
 /* MME received Update Location Answer from HSS */
74
@@ -1543,31 +1543,31 @@
75
     }
76
 
77
     /* Free the message */
78
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
79
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
80
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
81
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
82
-    if (ogs_diam_logger_self()->stats.nb_recv) {
83
+    if (ogs_diam_stats_self()->stats.nb_recv) {
84
         /* Ponderate in the avg */
85
-        ogs_diam_logger_self()->stats.avg =
86
-            (ogs_diam_logger_self()->stats.avg *
87
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
88
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
89
+        ogs_diam_stats_self()->stats.avg =
90
+            (ogs_diam_stats_self()->stats.avg *
91
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
92
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
93
         /* Min, max */
94
-        if (dur < ogs_diam_logger_self()->stats.shortest)
95
-            ogs_diam_logger_self()->stats.shortest = dur;
96
-        if (dur > ogs_diam_logger_self()->stats.longest)
97
-            ogs_diam_logger_self()->stats.longest = dur;
98
-    } else {
99
-        ogs_diam_logger_self()->stats.shortest = dur;
100
-        ogs_diam_logger_self()->stats.longest = dur;
101
-        ogs_diam_logger_self()->stats.avg = dur;
102
+        if (dur < ogs_diam_stats_self()->stats.shortest)
103
+            ogs_diam_stats_self()->stats.shortest = dur;
104
+        if (dur > ogs_diam_stats_self()->stats.longest)
105
+            ogs_diam_stats_self()->stats.longest = dur;
106
+    } else {
107
+        ogs_diam_stats_self()->stats.shortest = dur;
108
+        ogs_diam_stats_self()->stats.longest = dur;
109
+        ogs_diam_stats_self()->stats.avg = dur;
110
     }
111
     if (error)
112
-        ogs_diam_logger_self()->stats.nb_errs++;
113
+        ogs_diam_stats_self()->stats.nb_errs++;
114
     else
115
-        ogs_diam_logger_self()->stats.nb_recv++;
116
+        ogs_diam_stats_self()->stats.nb_recv++;
117
 
118
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
119
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
120
 
121
     /* Display how long it took */
122
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
123
@@ -1676,9 +1676,9 @@
124
     ogs_assert(ret == 0);
125
 
126
     /* Increment the counter */
127
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
128
-    ogs_diam_logger_self()->stats.nb_sent++;
129
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
130
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
131
+    ogs_diam_stats_self()->stats.nb_sent++;
132
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
133
 }
134
 
135
 /* MME received Purge UE Answer from HSS */
136
@@ -1855,31 +1855,31 @@
137
     }
138
 
139
     /* Free the message */
140
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
141
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
142
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
143
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
144
-    if (ogs_diam_logger_self()->stats.nb_recv) {
145
+    if (ogs_diam_stats_self()->stats.nb_recv) {
146
         /* Ponderate in the avg */
147
-        ogs_diam_logger_self()->stats.avg =
148
-            (ogs_diam_logger_self()->stats.avg *
149
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
150
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
151
+        ogs_diam_stats_self()->stats.avg =
152
+            (ogs_diam_stats_self()->stats.avg *
153
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
154
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
155
         /* Min, max */
156
-        if (dur < ogs_diam_logger_self()->stats.shortest)
157
-            ogs_diam_logger_self()->stats.shortest = dur;
158
-        if (dur > ogs_diam_logger_self()->stats.longest)
159
-            ogs_diam_logger_self()->stats.longest = dur;
160
-    } else {
161
-        ogs_diam_logger_self()->stats.shortest = dur;
162
-        ogs_diam_logger_self()->stats.longest = dur;
163
-        ogs_diam_logger_self()->stats.avg = dur;
164
+        if (dur < ogs_diam_stats_self()->stats.shortest)
165
+            ogs_diam_stats_self()->stats.shortest = dur;
166
+        if (dur > ogs_diam_stats_self()->stats.longest)
167
+            ogs_diam_stats_self()->stats.longest = dur;
168
+    } else {
169
+        ogs_diam_stats_self()->stats.shortest = dur;
170
+        ogs_diam_stats_self()->stats.longest = dur;
171
+        ogs_diam_stats_self()->stats.avg = dur;
172
     }
173
     if (error)
174
-        ogs_diam_logger_self()->stats.nb_errs++;
175
+        ogs_diam_stats_self()->stats.nb_errs++;
176
     else
177
-        ogs_diam_logger_self()->stats.nb_recv++;
178
+        ogs_diam_stats_self()->stats.nb_recv++;
179
 
180
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
181
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
182
 
183
     /* Display how long it took */
184
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
185
@@ -1991,9 +1991,9 @@
186
     ogs_debug("Cancel-Location-Answer");
187
 
188
     /* Add this value to the stats */
189
-    ogs_assert( pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
190
-    ogs_diam_logger_self()->stats.nb_echoed++;
191
-    ogs_assert( pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
192
+    ogs_assert( pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
193
+    ogs_diam_stats_self()->stats.nb_echoed++;
194
+    ogs_assert( pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
195
 
196
     e = mme_event_new(MME_EVENT_S6A_MESSAGE);
197
     ogs_assert(e);
198
@@ -2284,9 +2284,9 @@
199
     ogs_debug("Insert-Subscriber-Data-Answer");
200
 
201
     /* Add this value to the stats */
202
-    ogs_assert( pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
203
-    ogs_diam_logger_self()->stats.nb_echoed++;
204
-    ogs_assert( pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
205
+    ogs_assert( pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
206
+    ogs_diam_stats_self()->stats.nb_echoed++;
207
+    ogs_assert( pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
208
 
209
     int rv;
210
     e = mme_event_new(MME_EVENT_S6A_MESSAGE);
211
open5gs_2.7.2.4491.deef.tar.xz/src/nssf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/nssf/context.c Changed
19
 
1
@@ -77,6 +77,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -88,7 +89,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "nssf")) {
14
+        if ((!strcmp(root_key, "nssf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t nssf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &nssf_iter);
18
             while (ogs_yaml_iter_next(&nssf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/pcf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/pcf/context.c Changed
19
 
1
@@ -275,6 +275,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -286,7 +287,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "pcf")) {
14
+        if ((!strcmp(root_key, "pcf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t pcf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &pcf_iter);
18
             while (ogs_yaml_iter_next(&pcf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/pcrf/pcrf-gx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/pcrf/pcrf-gx-path.c Changed
73
 
1
@@ -621,9 +621,9 @@
2
     ogs_debug("Credit-Control-Answer");
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) ==0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) ==0);
11
 
12
     OGS_SESSION_DATA_FREE(&gx_message.session_data);
13
 
14
@@ -1013,9 +1013,9 @@
15
     ogs_assert(ret == 0);
16
 
17
     /* Increment the counter */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_sent++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_sent++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     /* Set no error */
26
     rx_message->result_code = ER_DIAMETER_SUCCESS;
27
@@ -1121,30 +1121,30 @@
28
     }
29
 
30
     /* Free the message */
31
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
32
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
33
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
34
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
35
-    if (ogs_diam_logger_self()->stats.nb_recv) {
36
+    if (ogs_diam_stats_self()->stats.nb_recv) {
37
         /* Ponderate in the avg */
38
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
39
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
40
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
41
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
42
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
43
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
44
         /* Min, max */
45
-        if (dur < ogs_diam_logger_self()->stats.shortest)
46
-            ogs_diam_logger_self()->stats.shortest = dur;
47
-        if (dur > ogs_diam_logger_self()->stats.longest)
48
-            ogs_diam_logger_self()->stats.longest = dur;
49
+        if (dur < ogs_diam_stats_self()->stats.shortest)
50
+            ogs_diam_stats_self()->stats.shortest = dur;
51
+        if (dur > ogs_diam_stats_self()->stats.longest)
52
+            ogs_diam_stats_self()->stats.longest = dur;
53
     } else {
54
-        ogs_diam_logger_self()->stats.shortest = dur;
55
-        ogs_diam_logger_self()->stats.longest = dur;
56
-        ogs_diam_logger_self()->stats.avg = dur;
57
+        ogs_diam_stats_self()->stats.shortest = dur;
58
+        ogs_diam_stats_self()->stats.longest = dur;
59
+        ogs_diam_stats_self()->stats.avg = dur;
60
     }
61
     if (error)
62
-        ogs_diam_logger_self()->stats.nb_errs++;
63
+        ogs_diam_stats_self()->stats.nb_errs++;
64
     else
65
-        ogs_diam_logger_self()->stats.nb_recv++;
66
+        ogs_diam_stats_self()->stats.nb_recv++;
67
 
68
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 
71
     /* Display how long it took */
72
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
73
open5gs_2.7.2.4491.deef.tar.xz/src/pcrf/pcrf-rx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/pcrf/pcrf-rx-path.c Changed
40
 
1
@@ -413,9 +413,9 @@
2
     ogs_debug("PCRF AA-Answer");
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     ogs_ims_data_free(&rx_message.ims_data);
13
     
14
@@ -561,9 +561,9 @@
15
     ogs_assert(ret == 0);
16
 
17
     /* Increment the counter */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_sent++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_sent++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     return OGS_OK;
26
 }
27
@@ -746,9 +746,9 @@
28
     ogs_debug("PCRF Session-Termination-Answer");
29
 
30
     /* Add this value to the stats */
31
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
32
-    ogs_diam_logger_self()->stats.nb_echoed++;
33
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
34
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
35
+    ogs_diam_stats_self()->stats.nb_echoed++;
36
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
37
 
38
     state_cleanup(sess_data, NULL, NULL);
39
     ogs_ims_data_free(&rx_message.ims_data);
40
open5gs_2.7.2.4491.deef.tar.xz/src/smf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/smf/context.c Changed
19
 
1
@@ -294,6 +294,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -305,7 +306,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "smf")) {
14
+        if ((!strcmp(root_key, "smf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t smf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &smf_iter);
18
             while (ogs_yaml_iter_next(&smf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/smf/gx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/smf/gx-path.c Changed
73
 
1
@@ -728,9 +728,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 }
12
 
13
 /* 3GPP TS 29.212 5b.6.5 Credit-Control-Answer */
14
@@ -1089,30 +1089,30 @@
15
     }
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
+        if (dur < ogs_diam_stats_self()->stats.shortest)
37
+            ogs_diam_stats_self()->stats.shortest = dur;
38
+        if (dur > ogs_diam_stats_self()->stats.longest)
39
+            ogs_diam_stats_self()->stats.longest = dur;
40
     } else {
41
-        ogs_diam_logger_self()->stats.shortest = dur;
42
-        ogs_diam_logger_self()->stats.longest = dur;
43
-        ogs_diam_logger_self()->stats.avg = dur;
44
+        ogs_diam_stats_self()->stats.shortest = dur;
45
+        ogs_diam_stats_self()->stats.longest = dur;
46
+        ogs_diam_stats_self()->stats.avg = dur;
47
     }
48
     if (error)
49
-        ogs_diam_logger_self()->stats.nb_errs++;
50
+        ogs_diam_stats_self()->stats.nb_errs++;
51
     else
52
-        ogs_diam_logger_self()->stats.nb_recv++;
53
+        ogs_diam_stats_self()->stats.nb_recv++;
54
 
55
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
56
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
57
 
58
     /* Display how long it took */
59
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
60
@@ -1355,9 +1355,9 @@
61
     ogs_debug("Re-Auth-Answer");
62
 
63
     /* Add this value to the stats */
64
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
65
-    ogs_diam_logger_self()->stats.nb_echoed++;
66
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
67
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
68
+    ogs_diam_stats_self()->stats.nb_echoed++;
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 
71
     return 0;
72
 
73
open5gs_2.7.2.4491.deef.tar.xz/src/smf/gy-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/smf/gy-path.c Changed
73
 
1
@@ -959,9 +959,9 @@
2
 
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 }
12
 
13
 static void smf_gy_cca_cb(void *data, struct msg **msg)
14
@@ -1217,30 +1217,30 @@
15
     }
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
+        if (dur < ogs_diam_stats_self()->stats.shortest)
37
+            ogs_diam_stats_self()->stats.shortest = dur;
38
+        if (dur > ogs_diam_stats_self()->stats.longest)
39
+            ogs_diam_stats_self()->stats.longest = dur;
40
     } else {
41
-        ogs_diam_logger_self()->stats.shortest = dur;
42
-        ogs_diam_logger_self()->stats.longest = dur;
43
-        ogs_diam_logger_self()->stats.avg = dur;
44
+        ogs_diam_stats_self()->stats.shortest = dur;
45
+        ogs_diam_stats_self()->stats.longest = dur;
46
+        ogs_diam_stats_self()->stats.avg = dur;
47
     }
48
     if (error)
49
-        ogs_diam_logger_self()->stats.nb_errs++;
50
+        ogs_diam_stats_self()->stats.nb_errs++;
51
     else
52
-        ogs_diam_logger_self()->stats.nb_recv++;
53
+        ogs_diam_stats_self()->stats.nb_recv++;
54
 
55
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
56
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
57
 
58
     /* Display how long it took */
59
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
60
@@ -1367,9 +1367,9 @@
61
     ogs_debug("Re-Auth-Answer");
62
 
63
     /* Add this value to the stats */
64
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
65
-    ogs_diam_logger_self()->stats.nb_echoed++;
66
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
67
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
68
+    ogs_diam_stats_self()->stats.nb_echoed++;
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 
71
     return 0;
72
 
73
open5gs_2.7.2.4491.deef.tar.xz/src/smf/s6b-path.c -> open5gs_2.7.2.4504.9167.tar.xz/src/smf/s6b-path.c Changed
119
 
1
@@ -329,9 +329,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     ogs_free(user_name);
13
     ogs_free(visited_network_identifier);
14
@@ -460,30 +460,30 @@
15
     }
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
+        if (dur < ogs_diam_stats_self()->stats.shortest)
37
+            ogs_diam_stats_self()->stats.shortest = dur;
38
+        if (dur > ogs_diam_stats_self()->stats.longest)
39
+            ogs_diam_stats_self()->stats.longest = dur;
40
     } else {
41
-        ogs_diam_logger_self()->stats.shortest = dur;
42
-        ogs_diam_logger_self()->stats.longest = dur;
43
-        ogs_diam_logger_self()->stats.avg = dur;
44
+        ogs_diam_stats_self()->stats.shortest = dur;
45
+        ogs_diam_stats_self()->stats.longest = dur;
46
+        ogs_diam_stats_self()->stats.avg = dur;
47
     }
48
     if (error)
49
-        ogs_diam_logger_self()->stats.nb_errs++;
50
+        ogs_diam_stats_self()->stats.nb_errs++;
51
     else
52
-        ogs_diam_logger_self()->stats.nb_recv++;
53
+        ogs_diam_stats_self()->stats.nb_recv++;
54
 
55
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
56
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
57
 
58
     /* Display how long it took */
59
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
60
@@ -628,9 +628,9 @@
61
     ogs_assert(ret == 0);
62
 
63
     /* Increment the counter */
64
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
65
-    ogs_diam_logger_self()->stats.nb_sent++;
66
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
67
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
68
+    ogs_diam_stats_self()->stats.nb_sent++;
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 
71
     ogs_free(user_name);
72
 }
73
@@ -762,30 +762,30 @@
74
     }
75
 
76
     /* Free the message */
77
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
78
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
79
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
80
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
81
-    if (ogs_diam_logger_self()->stats.nb_recv) {
82
+    if (ogs_diam_stats_self()->stats.nb_recv) {
83
         /* Ponderate in the avg */
84
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
85
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
86
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
87
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
88
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
89
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
90
         /* Min, max */
91
-        if (dur < ogs_diam_logger_self()->stats.shortest)
92
-            ogs_diam_logger_self()->stats.shortest = dur;
93
-        if (dur > ogs_diam_logger_self()->stats.longest)
94
-            ogs_diam_logger_self()->stats.longest = dur;
95
+        if (dur < ogs_diam_stats_self()->stats.shortest)
96
+            ogs_diam_stats_self()->stats.shortest = dur;
97
+        if (dur > ogs_diam_stats_self()->stats.longest)
98
+            ogs_diam_stats_self()->stats.longest = dur;
99
     } else {
100
-        ogs_diam_logger_self()->stats.shortest = dur;
101
-        ogs_diam_logger_self()->stats.longest = dur;
102
-        ogs_diam_logger_self()->stats.avg = dur;
103
+        ogs_diam_stats_self()->stats.shortest = dur;
104
+        ogs_diam_stats_self()->stats.longest = dur;
105
+        ogs_diam_stats_self()->stats.avg = dur;
106
     }
107
     if (error)
108
-        ogs_diam_logger_self()->stats.nb_errs++;
109
+        ogs_diam_stats_self()->stats.nb_errs++;
110
     else
111
-        ogs_diam_logger_self()->stats.nb_recv++;
112
+        ogs_diam_stats_self()->stats.nb_recv++;
113
 
114
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
115
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
116
 
117
     /* Display how long it took */
118
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
119
open5gs_2.7.2.4491.deef.tar.xz/src/udm/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/udm/context.c Changed
19
 
1
@@ -100,6 +100,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -111,7 +112,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "udm")) {
14
+        if ((!strcmp(root_key, "udm")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t udm_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &udm_iter);
18
             while (ogs_yaml_iter_next(&udm_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/udr/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/udr/context.c Changed
19
 
1
@@ -65,6 +65,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -76,7 +77,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "udr")) {
14
+        if ((!strcmp(root_key, "udr")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t udr_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &udr_iter);
18
             while (ogs_yaml_iter_next(&udr_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/src/upf/context.c -> open5gs_2.7.2.4504.9167.tar.xz/src/upf/context.c Changed
19
 
1
@@ -130,6 +130,7 @@
2
     int rv;
3
     yaml_document_t *document = NULL;
4
     ogs_yaml_iter_t root_iter;
5
+    int idx = 0;
6
 
7
     document = ogs_app()->document;
8
     ogs_assert(document);
9
@@ -141,7 +142,8 @@
10
     while (ogs_yaml_iter_next(&root_iter)) {
11
         const char *root_key = ogs_yaml_iter_key(&root_iter);
12
         ogs_assert(root_key);
13
-        if (!strcmp(root_key, "upf")) {
14
+        if ((!strcmp(root_key, "upf")) &&
15
+            (idx++ == ogs_app()->config_section_id)) {
16
             ogs_yaml_iter_t upf_iter;
17
             ogs_yaml_iter_recurse(&root_iter, &upf_iter);
18
             while (ogs_yaml_iter_next(&upf_iter)) {
19
open5gs_2.7.2.4491.deef.tar.xz/tests/app/5gc-init.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/app/5gc-init.c Changed
155
 
1
@@ -19,18 +19,55 @@
2
 
3
 #include "test-app.h"
4
 
5
+/* If want to increase this number, check and modify run_threads() function
6
+ * for static integer to string conversion */
7
+#define OGS_MAX_NF_INSTANCES        4
8
+
9
 static ogs_thread_t *nrf_thread = NULL;
10
 static ogs_thread_t *scp_thread = NULL;
11
 static ogs_thread_t *sepp_thread = NULL;
12
-static ogs_thread_t *upf_thread = NULL;
13
-static ogs_thread_t *smf_thread = NULL;
14
-static ogs_thread_t *amf_thread = NULL;
15
-static ogs_thread_t *ausf_thread = NULL;
16
-static ogs_thread_t *udm_thread = NULL;
17
-static ogs_thread_t *pcf_thread = NULL;
18
-static ogs_thread_t *nssf_thread = NULL;
19
-static ogs_thread_t *bsf_thread = NULL;
20
-static ogs_thread_t *udr_thread = NULL;
21
+static ogs_thread_t *upf_threadsOGS_MAX_NF_INSTANCES = { NULL };
22
+static ogs_thread_t *smf_threadsOGS_MAX_NF_INSTANCES = { NULL };
23
+static ogs_thread_t *amf_threadsOGS_MAX_NF_INSTANCES = { NULL };
24
+static ogs_thread_t *ausf_threadsOGS_MAX_NF_INSTANCES = { NULL };
25
+static ogs_thread_t *udm_threadsOGS_MAX_NF_INSTANCES = { NULL };
26
+static ogs_thread_t *pcf_threadsOGS_MAX_NF_INSTANCES = { NULL };
27
+static ogs_thread_t *nssf_threadsOGS_MAX_NF_INSTANCES = { NULL };
28
+static ogs_thread_t *bsf_threadsOGS_MAX_NF_INSTANCES = { NULL };
29
+static ogs_thread_t *udr_threadsOGS_MAX_NF_INSTANCES = { NULL };
30
+
31
+
32
+static void run_threads(const char *nf_name, int count,
33
+        const char *argv_out, int argv_out_idx, ogs_thread_t *threads)
34
+{
35
+    int i;
36
+
37
+    threads0 = test_child_create(nf_name, argv_out);
38
+
39
+    for (i = 1; i < count; i++) {
40
+        const char *idx_string = NULL;;
41
+
42
+        switch (i) {
43
+            case 1: idx_string = "1"; break;
44
+            case 2: idx_string = "2"; break;
45
+            case 3: idx_string = "3"; break;
46
+            default:
47
+                idx_string = ogs_msprintf("%d", i);
48
+                ogs_warn("Missing static conversion of integer to string");
49
+                break;
50
+        }
51
+        ogs_assert(idx_string);
52
+
53
+        argv_outargv_out_idx + 0 = "-k";
54
+        argv_outargv_out_idx + 1 = idx_string;
55
+        argv_outargv_out_idx + 2 = NULL;
56
+
57
+        threadsi = test_child_create(nf_name, argv_out);
58
+    }
59
+
60
+    // reset argv_out and remove the added "-k" parameter
61
+    argv_outargv_out_idx = NULL;
62
+}
63
 
64
 int app_initialize(const char *const argv)
65
 {
66
@@ -60,25 +97,32 @@
67
         sepp_thread = test_child_create("sepp", argv_out);
68
 
69
     if (ogs_global_conf()->parameter.no_upf == 0)
70
-        upf_thread = test_child_create("upf", argv_out);
71
+        run_threads("upf", ogs_global_conf()->parameter.upf_count,
72
+                argv_out, i, upf_threads);
73
     if (ogs_global_conf()->parameter.no_smf == 0)
74
-        smf_thread = test_child_create("smf", argv_out);
75
-
76
+        run_threads("smf", ogs_global_conf()->parameter.smf_count,
77
+                argv_out, i, smf_threads);
78
     if (ogs_global_conf()->parameter.no_amf == 0)
79
-        amf_thread = test_child_create("amf", argv_out);
80
-
81
+        run_threads("amf", ogs_global_conf()->parameter.amf_count,
82
+                argv_out, i, amf_threads);
83
     if (ogs_global_conf()->parameter.no_ausf == 0)
84
-        ausf_thread = test_child_create("ausf", argv_out);
85
+        run_threads("ausf", ogs_global_conf()->parameter.ausf_count,
86
+                argv_out, i, ausf_threads);
87
     if (ogs_global_conf()->parameter.no_udm == 0)
88
-        udm_thread = test_child_create("udm", argv_out);
89
+        run_threads("udm", ogs_global_conf()->parameter.udm_count,
90
+                argv_out, i, udm_threads);
91
     if (ogs_global_conf()->parameter.no_pcf == 0)
92
-        pcf_thread = test_child_create("pcf", argv_out);
93
+        run_threads("pcf", ogs_global_conf()->parameter.pcf_count,
94
+                argv_out, i, pcf_threads);
95
     if (ogs_global_conf()->parameter.no_nssf == 0)
96
-        nssf_thread = test_child_create("nssf", argv_out);
97
+        run_threads("nssf", ogs_global_conf()->parameter.nssf_count,
98
+                argv_out, i, nssf_threads);
99
     if (ogs_global_conf()->parameter.no_bsf == 0)
100
-        bsf_thread = test_child_create("bsf", argv_out);
101
+        run_threads("bsf", ogs_global_conf()->parameter.bsf_count,
102
+                argv_out, i, bsf_threads);
103
     if (ogs_global_conf()->parameter.no_udr == 0)
104
-        udr_thread = test_child_create("udr", argv_out);
105
+        run_threads("udr", ogs_global_conf()->parameter.udr_count,
106
+                argv_out, i, udr_threads);
107
 
108
     /*
109
      * Wait for all sockets listening
110
@@ -87,22 +131,33 @@
111
      */
112
     ogs_msleep(1000);
113
 
114
-    return OGS_OK;;
115
+    return OGS_OK;
116
 }
117
 
118
 void app_terminate(void)
119
 {
120
-    if (amf_thread) ogs_thread_destroy(amf_thread);
121
+    int i;
122
 
123
-    if (smf_thread) ogs_thread_destroy(smf_thread);
124
-    if (upf_thread) ogs_thread_destroy(upf_thread);
125
-
126
-    if (udr_thread) ogs_thread_destroy(udr_thread);
127
-    if (nssf_thread) ogs_thread_destroy(nssf_thread);
128
-    if (bsf_thread) ogs_thread_destroy(bsf_thread);
129
-    if (pcf_thread) ogs_thread_destroy(pcf_thread);
130
-    if (udm_thread) ogs_thread_destroy(udm_thread);
131
-    if (ausf_thread) ogs_thread_destroy(ausf_thread);
132
+    for (i = 0; i < OGS_MAX_NF_INSTANCES; i++) {
133
+        if (amf_threadsi)
134
+            ogs_thread_destroy(amf_threadsi);
135
+        if (smf_threadsi)
136
+            ogs_thread_destroy(smf_threadsi);
137
+        if (upf_threadsi)
138
+            ogs_thread_destroy(upf_threadsi);
139
+        if (udr_threadsi)
140
+            ogs_thread_destroy(udr_threadsi);
141
+        if (nssf_threadsi)
142
+            ogs_thread_destroy(nssf_threadsi);
143
+        if (bsf_threadsi)
144
+            ogs_thread_destroy(bsf_threadsi);
145
+        if (pcf_threadsi)
146
+            ogs_thread_destroy(pcf_threadsi);
147
+        if (udm_threadsi)
148
+            ogs_thread_destroy(udm_threadsi);
149
+        if (ausf_threadsi)
150
+            ogs_thread_destroy(ausf_threadsi);
151
+    }
152
 
153
     if (sepp_thread) ogs_thread_destroy(sepp_thread);
154
     if (scp_thread) ogs_thread_destroy(scp_thread);
155
open5gs_2.7.2.4491.deef.tar.xz/tests/app/app-init.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/app/app-init.c Changed
10
 
1
@@ -103,7 +103,7 @@
2
      */
3
     ogs_msleep(5000);
4
 
5
-    return OGS_OK;;
6
+    return OGS_OK;
7
 }
8
 
9
 void app_terminate(void)
10
open5gs_2.7.2.4491.deef.tar.xz/tests/common/application.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/common/application.c Changed
31
 
1
@@ -77,7 +77,7 @@
2
     ogs_assert(rv == OGS_OK);
3
 }
4
 
5
-#define MAX_CHILD_PROCESS               16
6
+#define MAX_CHILD_PROCESS               32
7
 #define OGS_ARG_MAX                     256
8
 
9
 static ogs_proc_t processMAX_CHILD_PROCESS;
10
@@ -92,6 +92,12 @@
11
     int ret = 0, out_return_code = 0;
12
 
13
     current = &processprocess_num++;
14
+
15
+    if (process_num > MAX_CHILD_PROCESS) {
16
+        ogs_fatal("Process limit reached");
17
+        ogs_assert_if_reached();
18
+    }
19
+
20
     ret = ogs_proc_create(commandLine,
21
             ogs_proc_option_combined_stdout_stderr|
22
             ogs_proc_option_inherit_environment,
23
@@ -132,6 +138,7 @@
24
     commandLine0 = command;
25
 
26
     child = ogs_thread_create(child_main, commandLine);
27
+
28
     ogs_msleep(50);
29
 
30
     return child;
31
open5gs_2.7.2.4491.deef.tar.xz/tests/common/context.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/common/context.c Changed
31
 
1
@@ -104,9 +104,19 @@
2
     if (snode) test_self()->s1ap_addr6 = snode->addr;
3
 
4
     snode = ogs_list_first(&test_self()->ngap_list);
5
-    if (snode) test_self()->ngap_addr = snode->addr;
6
+
7
+    if (snode) {
8
+        test_self()->ngap_addr = snode->addr;
9
+        snode = ogs_list_next(snode);
10
+    }
11
+    if (snode) test_self()->ngap2_addr = snode->addr;
12
+
13
     snode = ogs_list_first(&test_self()->ngap_list6);
14
-    if (snode) test_self()->ngap_addr6 = snode->addr;
15
+    if (snode) {
16
+        test_self()->ngap_addr6 = snode->addr;
17
+        snode = ogs_list_next(snode);
18
+    }
19
+    if (snode) test_self()->ngap2_addr6 = snode->addr;
20
 
21
     if (test_self()->e_served_taiindex.list2.num) {
22
         memcpy(&test_self()->e_tai,
23
@@ -175,6 +185,7 @@
24
     while (ogs_yaml_iter_next(&root_iter)) {
25
         const char *root_key = ogs_yaml_iter_key(&root_iter);
26
         ogs_assert(root_key);
27
+
28
         if (!strcmp(root_key, "amf")) {
29
             ogs_yaml_iter_t amf_iter;
30
             ogs_yaml_iter_recurse(&root_iter, &amf_iter);
31
open5gs_2.7.2.4491.deef.tar.xz/tests/common/context.h -> open5gs_2.7.2.4504.9167.tar.xz/tests/common/context.h Changed
11
 
1
@@ -48,7 +48,9 @@
2
     ogs_list_t      ngap_list;      /* AMF NGAP IPv4 Server List */
3
     ogs_list_t      ngap_list6;     /* AMF NGAP IPv6 Server List */
4
     ogs_sockaddr_t  *ngap_addr;     /* AMF NGAP IPv4 Address */
5
+    ogs_sockaddr_t  *ngap2_addr;    /* OLD AMF NGAP IPv4 Address */
6
     ogs_sockaddr_t  *ngap_addr6;    /* AMF NGAP IPv6 Address */
7
+    ogs_sockaddr_t  *ngap2_addr6;   /* OLD AMF NGAP IPv6 Address */
8
 
9
     uint16_t        s1ap_port;      /* Default S1AP Port */
10
     ogs_list_t      s1ap_list;      /* MME S1AP IPv4 Server List */
11
open5gs_2.7.2.4491.deef.tar.xz/tests/common/sctp.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/common/sctp.c Changed
39
 
1
@@ -91,19 +91,30 @@
2
     return node;
3
 }
4
 
5
-ogs_socknode_t *testngap_client(int family)
6
+ogs_socknode_t *testngap_client(int index, int family)
7
 {
8
     int rv;
9
     ogs_sockaddr_t *addr = NULL;
10
     ogs_socknode_t *node = NULL;
11
     ogs_sock_t *sock = NULL;
12
 
13
-    if (family == AF_INET6)
14
-        ogs_assert(OGS_OK ==
15
-            ogs_copyaddrinfo(&addr, test_self()->ngap_addr6));
16
-    else
17
-        ogs_assert(OGS_OK ==
18
-            ogs_copyaddrinfo(&addr, test_self()->ngap_addr));
19
+    if (index == 1) {
20
+        if (family == AF_INET6)
21
+            ogs_assert(OGS_OK ==
22
+                ogs_copyaddrinfo(&addr, test_self()->ngap_addr6));
23
+        else
24
+            ogs_assert(OGS_OK ==
25
+                ogs_copyaddrinfo(&addr, test_self()->ngap_addr));
26
+
27
+    } else if (index == 2) {
28
+        if (family == AF_INET6)
29
+            ogs_assert(OGS_OK ==
30
+                ogs_copyaddrinfo(&addr, test_self()->ngap2_addr6));
31
+        else
32
+            ogs_assert(OGS_OK ==
33
+                ogs_copyaddrinfo(&addr, test_self()->ngap2_addr));
34
+    } else
35
+        ogs_assert_if_reached();
36
 
37
     ogs_assert(addr);
38
 
39
open5gs_2.7.2.4491.deef.tar.xz/tests/common/sctp.h -> open5gs_2.7.2.4504.9167.tar.xz/tests/common/sctp.h Changed
10
 
1
@@ -29,7 +29,7 @@
2
 ogs_socknode_t *testsctp_server(const char *ipstr, int port);
3
 ogs_socknode_t *testsctp_client(const char *ipstr, int port);
4
 ogs_socknode_t *tests1ap_client(int family);
5
-ogs_socknode_t *testngap_client(int family);
6
+ogs_socknode_t *testngap_client(int index, int family);
7
 
8
 int testsctp_send(ogs_socknode_t *node, ogs_pkbuf_t *pkbuf,
9
         int ppid, uint16_t stream_no, int type);
10
open5gs_2.7.2.4491.deef.tar.xz/tests/handover/5gc-n2-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/handover/5gc-n2-test.c Changed
66
 
1
@@ -70,10 +70,10 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* Two gNB connects to AMF */
5
-    ngap1 = testngap_client(AF_INET);
6
+    ngap1 = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap1);
8
 
9
-    ngap2 = testngap_client(AF_INET);
10
+    ngap2 = testngap_client(1, AF_INET);
11
     ABTS_PTR_NOTNULL(tc, ngap2);
12
 
13
     /* Two gNB connects to UPF */
14
@@ -501,10 +501,10 @@
15
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
16
 
17
     /* Two gNB connects to AMF */
18
-    ngap1 = testngap_client(AF_INET);
19
+    ngap1 = testngap_client(1, AF_INET);
20
     ABTS_PTR_NOTNULL(tc, ngap1);
21
 
22
-    ngap2 = testngap_client(AF_INET);
23
+    ngap2 = testngap_client(1, AF_INET);
24
     ABTS_PTR_NOTNULL(tc, ngap2);
25
 
26
     /* Two gNB connects to UPF */
27
@@ -1115,10 +1115,10 @@
28
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
29
 
30
     /* Two gNB connects to AMF */
31
-    ngap1 = testngap_client(AF_INET);
32
+    ngap1 = testngap_client(1, AF_INET);
33
     ABTS_PTR_NOTNULL(tc, ngap1);
34
 
35
-    ngap2 = testngap_client(AF_INET);
36
+    ngap2 = testngap_client(1, AF_INET);
37
     ABTS_PTR_NOTNULL(tc, ngap2);
38
 
39
     /* Two gNB connects to UPF */
40
@@ -1529,10 +1529,10 @@
41
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
42
 
43
     /* Two gNB connects to AMF */
44
-    ngap1 = testngap_client(AF_INET);
45
+    ngap1 = testngap_client(1, AF_INET);
46
     ABTS_PTR_NOTNULL(tc, ngap1);
47
 
48
-    ngap2 = testngap_client(AF_INET);
49
+    ngap2 = testngap_client(1, AF_INET);
50
     ABTS_PTR_NOTNULL(tc, ngap2);
51
 
52
     /* Two gNB connects to UPF */
53
@@ -2182,10 +2182,10 @@
54
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
55
 
56
     /* Two gNB connects to AMF */
57
-    ngap1 = testngap_client(AF_INET);
58
+    ngap1 = testngap_client(1, AF_INET);
59
     ABTS_PTR_NOTNULL(tc, ngap1);
60
 
61
-    ngap2 = testngap_client(AF_INET);
62
+    ngap2 = testngap_client(1, AF_INET);
63
     ABTS_PTR_NOTNULL(tc, ngap2);
64
 
65
     /* Two gNB connects to UPF */
66
open5gs_2.7.2.4491.deef.tar.xz/tests/handover/5gc-xn-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/handover/5gc-xn-test.c Changed
14
 
1
@@ -70,10 +70,10 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* Two gNB connects to AMF */
5
-    ngap1 = testngap_client(AF_INET);
6
+    ngap1 = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap1);
8
 
9
-    ngap2 = testngap_client(AF_INET);
10
+    ngap2 = testngap_client(1, AF_INET);
11
     ABTS_PTR_NOTNULL(tc, ngap2);
12
 
13
     /* Two gNB connects to UPF */
14
open5gs_2.7.2.4491.deef.tar.xz/tests/meson.build -> open5gs_2.7.2.4504.9167.tar.xz/tests/meson.build Changed
6
 
1
@@ -33,3 +33,4 @@
2
 subdir('310014')
3
 subdir('handover')
4
 subdir('non3gpp')
5
+subdir('transfer')
6
open5gs_2.7.2.4491.deef.tar.xz/tests/non3gpp/diameter-s6b-path.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/non3gpp/diameter-s6b-path.c Changed
27
 
1
@@ -178,9 +178,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Add this value to the stats */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_echoed++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) ==0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_echoed++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) ==0);
11
 
12
     return 0;
13
 
14
@@ -278,9 +278,9 @@
15
     ogs_assert(ret == 0);
16
 
17
     /* Add this value to the stats */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_echoed++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) ==0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_echoed++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) ==0);
24
 
25
     return 0;
26
 
27
open5gs_2.7.2.4491.deef.tar.xz/tests/non3gpp/diameter-swx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/non3gpp/diameter-swx-path.c Changed
119
 
1
@@ -273,9 +273,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 }
12
 
13
 /* Callback for incoming Multimedia-Auth-Answer messages */
14
@@ -358,30 +358,30 @@
15
     ogs_assert(err && !exp_err && result_code == ER_DIAMETER_SUCCESS);
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
+        if (dur < ogs_diam_stats_self()->stats.shortest)
37
+            ogs_diam_stats_self()->stats.shortest = dur;
38
+        if (dur > ogs_diam_stats_self()->stats.longest)
39
+            ogs_diam_stats_self()->stats.longest = dur;
40
     } else {
41
-        ogs_diam_logger_self()->stats.shortest = dur;
42
-        ogs_diam_logger_self()->stats.longest = dur;
43
-        ogs_diam_logger_self()->stats.avg = dur;
44
+        ogs_diam_stats_self()->stats.shortest = dur;
45
+        ogs_diam_stats_self()->stats.longest = dur;
46
+        ogs_diam_stats_self()->stats.avg = dur;
47
     }
48
     if (error)
49
-        ogs_diam_logger_self()->stats.nb_errs++;
50
+        ogs_diam_stats_self()->stats.nb_errs++;
51
     else
52
-        ogs_diam_logger_self()->stats.nb_recv++;
53
+        ogs_diam_stats_self()->stats.nb_recv++;
54
 
55
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
56
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
57
 
58
     /* Display how long it took */
59
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
60
@@ -525,9 +525,9 @@
61
     ogs_assert(ret == 0);
62
 
63
     /* Increment the counter */
64
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
65
-    ogs_diam_logger_self()->stats.nb_sent++;
66
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
67
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
68
+    ogs_diam_stats_self()->stats.nb_sent++;
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 }
71
 
72
 /* Callback for incoming Server-Assignment-Answer messages */
73
@@ -618,30 +618,30 @@
74
     ogs_assert(err && !exp_err && result_code == ER_DIAMETER_SUCCESS);
75
 
76
     /* Free the message */
77
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
78
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
79
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
80
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
81
-    if (ogs_diam_logger_self()->stats.nb_recv) {
82
+    if (ogs_diam_stats_self()->stats.nb_recv) {
83
         /* Ponderate in the avg */
84
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
85
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
86
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
87
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
88
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
89
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
90
         /* Min, max */
91
-        if (dur < ogs_diam_logger_self()->stats.shortest)
92
-            ogs_diam_logger_self()->stats.shortest = dur;
93
-        if (dur > ogs_diam_logger_self()->stats.longest)
94
-            ogs_diam_logger_self()->stats.longest = dur;
95
+        if (dur < ogs_diam_stats_self()->stats.shortest)
96
+            ogs_diam_stats_self()->stats.shortest = dur;
97
+        if (dur > ogs_diam_stats_self()->stats.longest)
98
+            ogs_diam_stats_self()->stats.longest = dur;
99
     } else {
100
-        ogs_diam_logger_self()->stats.shortest = dur;
101
-        ogs_diam_logger_self()->stats.longest = dur;
102
-        ogs_diam_logger_self()->stats.avg = dur;
103
+        ogs_diam_stats_self()->stats.shortest = dur;
104
+        ogs_diam_stats_self()->stats.longest = dur;
105
+        ogs_diam_stats_self()->stats.avg = dur;
106
     }
107
     if (error)
108
-        ogs_diam_logger_self()->stats.nb_errs++;
109
+        ogs_diam_stats_self()->stats.nb_errs++;
110
     else
111
-        ogs_diam_logger_self()->stats.nb_recv++;
112
+        ogs_diam_stats_self()->stats.nb_recv++;
113
 
114
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
115
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
116
 
117
     /* Display how long it took */
118
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
119
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/auth-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/auth-test.c Changed
19
 
1
@@ -64,7 +64,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -254,7 +254,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/crash-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/crash-test.c Changed
46
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -426,7 +426,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -787,7 +787,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -1045,7 +1045,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1409,7 +1409,7 @@
38
     ogs_pkbuf_t *recvbuf;
39
     ogs_ngap_message_t message;
40
 
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     sendbuf = testngap_build_ng_setup_request(0x4000, 22);
46
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/dereg-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/dereg-test.c Changed
55
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -306,7 +306,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -513,7 +513,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -963,7 +963,7 @@
29
     ogs_assert(sess);
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1254,7 +1254,7 @@
38
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
@@ -1630,7 +1630,7 @@
47
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
48
 
49
     /* gNB connects to AMF */
50
-    ngap = testngap_client(AF_INET);
51
+    ngap = testngap_client(1, AF_INET);
52
     ABTS_PTR_NOTNULL(tc, ngap);
53
 
54
     /* gNB connects to UPF */
55
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/ecc-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/ecc-test.c Changed
37
 
1
@@ -71,7 +71,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -276,7 +276,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -496,7 +496,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -702,7 +702,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/gmm-status-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/gmm-status-test.c Changed
10
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/guti-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/guti-test.c Changed
39
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -539,8 +539,8 @@
11
     test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
12
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
13
 
14
-    /* gNB connects to AMF(default configuration) */
15
-    ngap = testngap_client(AF_INET);
16
+    /* gNB connects to AMF */
17
+    ngap = testngap_client(1, AF_INET);
18
     ABTS_PTR_NOTNULL(tc, ngap);
19
 
20
     /* gNB connects to UPF */
21
@@ -997,7 +997,7 @@
22
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
23
 
24
     /* gNB connects to AMF */
25
-    ngap = testngap_client(AF_INET);
26
+    ngap = testngap_client(1, AF_INET);
27
     ABTS_PTR_NOTNULL(tc, ngap);
28
 
29
     /* gNB connects to UPF */
30
@@ -1269,7 +1269,7 @@
31
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
32
 
33
     /* gNB connects to AMF */
34
-    ngap = testngap_client(AF_INET);
35
+    ngap = testngap_client(1, AF_INET);
36
     ABTS_PTR_NOTNULL(tc, ngap);
37
 
38
     /* gNB connects to UPF */
39
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/identity-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/identity-test.c Changed
19
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -401,7 +401,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/idle-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/idle-test.c Changed
55
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -456,7 +456,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -699,7 +699,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -1052,7 +1052,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1503,7 +1503,7 @@
38
     ogs_assert(sess);
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
@@ -1857,7 +1857,7 @@
47
     ogs_assert(sess);
48
 
49
     /* gNB connects to AMF */
50
-    ngap = testngap_client(AF_INET);
51
+    ngap = testngap_client(1, AF_INET);
52
     ABTS_PTR_NOTNULL(tc, ngap);
53
 
54
     /* gNB connects to UPF */
55
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/multi-ue-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/multi-ue-test.c Changed
10
 
1
@@ -42,7 +42,7 @@
2
     bson_t *doc = NULL;
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/reset-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/reset-test.c Changed
28
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -372,7 +372,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -632,7 +632,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/simple-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/simple-test.c Changed
10
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
open5gs_2.7.2.4491.deef.tar.xz/tests/registration/ue-context-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/registration/ue-context-test.c Changed
46
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -221,7 +221,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -534,7 +534,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -977,7 +977,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1347,7 +1347,7 @@
38
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
open5gs_2.7.2.4491.deef.tar.xz/tests/slice/different-dnn-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/slice/different-dnn-test.c Changed
10
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
open5gs_2.7.2.4491.deef.tar.xz/tests/slice/paging-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/slice/paging-test.c Changed
82
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -626,7 +626,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -980,7 +980,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -1322,7 +1322,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1596,7 +1596,7 @@
38
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
@@ -1953,7 +1953,7 @@
47
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
48
 
49
     /* gNB connects to AMF */
50
-    ngap = testngap_client(AF_INET);
51
+    ngap = testngap_client(1, AF_INET);
52
     ABTS_PTR_NOTNULL(tc, ngap);
53
 
54
     /* gNB connects to UPF */
55
@@ -2350,7 +2350,7 @@
56
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
57
 
58
     /* gNB connects to AMF */
59
-    ngap = testngap_client(AF_INET);
60
+    ngap = testngap_client(1, AF_INET);
61
     ABTS_PTR_NOTNULL(tc, ngap);
62
 
63
     /* gNB connects to UPF */
64
@@ -2841,7 +2841,7 @@
65
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
66
 
67
     /* gNB connects to AMF */
68
-    ngap = testngap_client(AF_INET);
69
+    ngap = testngap_client(1, AF_INET);
70
     ABTS_PTR_NOTNULL(tc, ngap);
71
 
72
     /* gNB connects to UPF */
73
@@ -3234,7 +3234,7 @@
74
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
75
 
76
     /* gNB connects to AMF */
77
-    ngap = testngap_client(AF_INET);
78
+    ngap = testngap_client(1, AF_INET);
79
     ABTS_PTR_NOTNULL(tc, ngap);
80
 
81
     /* gNB connects to UPF */
82
open5gs_2.7.2.4491.deef.tar.xz/tests/slice/same-dnn-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/slice/same-dnn-test.c Changed
19
 
1
@@ -65,7 +65,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -366,7 +366,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
open5gs_2.7.2.4504.9167.tar.xz/tests/transfer Added
2
 
1
+(directory)
2
open5gs_2.7.2.4504.9167.tar.xz/tests/transfer/abts-main.c Added
68
 
1
@@ -0,0 +1,66 @@
2
+/*
3
+ * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
4
+ *
5
+ * This file is part of Open5GS.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ */
20
+
21
+#include "test-app.h"
22
+
23
+abts_suite * test_ue_context_transfer(abts_suite *suite);
24
+
25
+const struct testlist {
26
+    abts_suite *(*func)(abts_suite *suite);
27
+} alltests = {
28
+    {test_ue_context_transfer},
29
+    {NULL},
30
+};
31
+
32
+static void terminate(void)
33
+{
34
+    ogs_msleep(50);
35
+
36
+    test_child_terminate();
37
+    app_terminate();
38
+
39
+    test_5gc_final();
40
+    ogs_app_terminate();
41
+}
42
+
43
+static void initialize(const char *const argv)
44
+{
45
+    int rv;
46
+
47
+    rv = ogs_app_initialize(NULL, NULL, argv);
48
+    ogs_assert(rv == OGS_OK);
49
+    test_5gc_init();
50
+
51
+    rv = app_initialize(argv);
52
+    ogs_assert(rv == OGS_OK);
53
+}
54
+
55
+int main(int argc, const char *const argv)
56
+{
57
+    int i;
58
+    abts_suite *suite = NULL;
59
+
60
+    atexit(terminate);
61
+    test_app_run(argc, argv, "transfer.yaml", initialize);
62
+
63
+    for (i = 0; alltestsi.func; i++)
64
+        suite = alltestsi.func(suite);
65
+
66
+    return abts_report(suite);
67
+}
68
open5gs_2.7.2.4504.9167.tar.xz/tests/transfer/meson.build Added
30
 
1
@@ -0,0 +1,28 @@
2
+# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
3
+
4
+# This file is part of Open5GS.
5
+
6
+# This program is free software: you can redistribute it and/or modify
7
+# it under the terms of the GNU Affero General Public License as published by
8
+# the Free Software Foundation, either version 3 of the License, or
9
+# (at your option) any later version.
10
+#
11
+# This program is distributed in the hope that it will be useful,
12
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+# GNU General Public License for more details.
15
+#
16
+# You should have received a copy of the GNU General Public License
17
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
+
19
+testapp_transfer_sources = files('''
20
+    abts-main.c
21
+    ue-context-transfer-test.c
22
+'''.split())
23
+
24
+testapp_transfer_exe = executable('transfer',
25
+    sources : testapp_transfer_sources,
26
+    c_args : testunit_core_cc_flags,
27
+    dependencies : libtest5gc_dep)
28
+
29
+test('transfer', testapp_transfer_exe, is_parallel : false, suite: '5gc')
30
open5gs_2.7.2.4504.9167.tar.xz/tests/transfer/ue-context-transfer-test.c Added
3119
 
1
@@ -0,0 +1,3117 @@
2
+/*
3
+ * Copyright (C) 2019,2020 by Sukchan Lee <acetcom@gmail.com>
4
+ *
5
+ * This file is part of Open5GS.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ */
20
+
21
+#include "test-common.h"
22
+
23
+static void test1_func(abts_case *tc, void *data)
24
+{
25
+    int rv;
26
+    ogs_socknode_t *ngap1, *ngap2; /* ngap1 - Old AMF ; ngap2 - Target AMF */
27
+    ogs_socknode_t *gtpu1, *gtpu2;
28
+    ogs_pkbuf_t *gmmbuf;
29
+    ogs_pkbuf_t *gsmbuf;
30
+    ogs_pkbuf_t *nasbuf;
31
+    ogs_pkbuf_t *sendbuf;
32
+    ogs_pkbuf_t *recvbuf;
33
+    ogs_pkbuf_t *recvbuf_target;
34
+    ogs_ngap_message_t message;
35
+    int i;
36
+
37
+    uint8_t tmpOGS_HUGE_LEN;
38
+    char *_gtp_payload = "34ff0024"
39
+        "0000000100000085 010002004500001c 0c0b000040015a7a 0a2d00010a2d0002"
40
+        "00000964cd7c291f";
41
+
42
+    /* Test: 1 UE, Old AMF, Target AMF,
43
+     *       register to Old AMF, PDU session establishment, session release, deregister,
44
+     *       register to Target AMF with empty 5G GUTI, identity request and response,
45
+     *       NO UE context transfer, NO Registration status update,
46
+     *       PDU session establishment, session release, deregister */
47
+
48
+    #define NUM_OF_TEST_UE_1 1
49
+
50
+    ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
51
+    test_ue_t *test_ueNUM_OF_TEST_UE_1;
52
+    test_ue_t *test_ue_targetNUM_OF_TEST_UE_1;
53
+    test_sess_t *sess = NULL;
54
+    test_bearer_t *qos_flow = NULL;
55
+
56
+    bson_t *doc = NULL;
57
+
58
+    /* First gNB connects to Target AMF */
59
+    ngap2 = testngap_client(2, AF_INET);
60
+    ABTS_PTR_NOTNULL(tc, ngap2);
61
+
62
+    /* Second gNB connects to Old AMF */
63
+    ngap1 = testngap_client(1, AF_INET);
64
+    ABTS_PTR_NOTNULL(tc, ngap1);
65
+
66
+    /* Two gNB connects to UPF */
67
+    gtpu1 = test_gtpu_server(1, AF_INET);
68
+    ABTS_PTR_NOTNULL(tc, gtpu1);
69
+
70
+    gtpu2 = test_gtpu_server(2, AF_INET);
71
+    ABTS_PTR_NOTNULL(tc, gtpu2);
72
+
73
+    /* NG-Setup Reqeust/Response for Source gNB */
74
+    sendbuf = testngap_build_ng_setup_request(0x4000, 28);
75
+    ABTS_PTR_NOTNULL(tc, sendbuf);
76
+    rv = testgnb_ngap_send(ngap2, sendbuf);
77
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
78
+
79
+    recvbuf = testgnb_ngap_read(ngap2);
80
+    ABTS_PTR_NOTNULL(tc, recvbuf);
81
+    testngap_recv(test_ue, recvbuf);
82
+
83
+    /* NG-Setup Reqeust/Response for Target gNB */
84
+    sendbuf = testngap_build_ng_setup_request(0x4001, 28);
85
+    ABTS_PTR_NOTNULL(tc, sendbuf);
86
+    rv = testgnb_ngap_send(ngap1, sendbuf);
87
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
88
+
89
+    recvbuf_target = testgnb_ngap_read(ngap1);
90
+    ABTS_PTR_NOTNULL(tc, recvbuf_target);
91
+    testngap_recv(test_ue_target, recvbuf_target);
92
+
93
+    /* Register to Old AMF */
94
+
95
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
96
+        const char *scheme_output = {
97
+            "0000000001",
98
+            "0000000002",
99
+            "0000000003",
100
+            "0000000004",
101
+            "0000000005",
102
+        };
103
+
104
+        /* Setup Test UE & Session Context */
105
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
106
+
107
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
108
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
109
+        mobile_identity_suci.routing_indicator1 = 0;
110
+        mobile_identity_suci.routing_indicator2 = 0xf;
111
+        mobile_identity_suci.routing_indicator3 = 0xf;
112
+        mobile_identity_suci.routing_indicator4 = 0xf;
113
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
114
+        mobile_identity_suci.home_network_pki_value = 0;
115
+
116
+        test_uei = test_ue_add_by_suci(
117
+                &mobile_identity_suci, scheme_outputi);
118
+        ogs_assert(test_uei);
119
+
120
+        test_uei->nr_cgi.cell_id = 0x40001;
121
+
122
+        test_uei->nas.registration.tsc = 0;
123
+        test_uei->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
124
+        test_uei->nas.registration.follow_on_request = 1;
125
+        test_uei->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
126
+
127
+        test_uei->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
128
+        test_uei->opc_string = "e8ed289deba952e4283b54e88e6183ca";
129
+    }
130
+
131
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
132
+        if (i > 0)
133
+            test_uei->ran_ue_ngap_id = test_uei-1->ran_ue_ngap_id;
134
+        else
135
+            test_uei->ran_ue_ngap_id = 0;
136
+
137
+        /* Send PDU session establishment request */
138
+        sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
139
+        ogs_assert(sess);
140
+
141
+        /********** Insert Subscriber in Database */
142
+        doc = test_db_new_simple(test_uei);
143
+        ABTS_PTR_NOTNULL(tc, doc);
144
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_uei, doc));
145
+
146
+        /* Send Registration request */
147
+        test_uei->registration_request_param.guti = 1;
148
+        gmmbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
149
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
150
+
151
+        test_uei->registration_request_param.gmm_capability = 1;
152
+        test_uei->registration_request_param.s1_ue_network_capability = 1;
153
+        test_uei->registration_request_param.requested_nssai = 1;
154
+        test_uei->registration_request_param.last_visited_registered_tai = 1;
155
+        test_uei->registration_request_param.ue_usage_setting = 1;
156
+        nasbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
157
+        ABTS_PTR_NOTNULL(tc, nasbuf);
158
+
159
+        sendbuf = testngap_build_initial_ue_message(test_uei, gmmbuf,
160
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
161
+        ABTS_PTR_NOTNULL(tc, sendbuf);
162
+        rv = testgnb_ngap_send(ngap1, sendbuf);
163
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
164
+
165
+        /* Receive Identity request */
166
+        recvbuf = testgnb_ngap_read(ngap1);
167
+        ABTS_PTR_NOTNULL(tc, recvbuf);
168
+        testngap_recv(test_uei, recvbuf);
169
+
170
+        /* Send Identity response */
171
+        gmmbuf = testgmm_build_identity_response(test_uei);
172
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
173
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
174
+        ABTS_PTR_NOTNULL(tc, sendbuf);
175
+        rv = testgnb_ngap_send(ngap1, sendbuf);
176
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
177
+
178
+        /* Receive Authentication request */
179
+        recvbuf = testgnb_ngap_read(ngap1);
180
+        ABTS_PTR_NOTNULL(tc, recvbuf);
181
+        testngap_recv(test_uei, recvbuf);
182
+
183
+        /* Send Authentication response */
184
+        gmmbuf = testgmm_build_authentication_response(test_uei);
185
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
186
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
187
+        ABTS_PTR_NOTNULL(tc, sendbuf);
188
+        rv = testgnb_ngap_send(ngap1, sendbuf);
189
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
190
+
191
+        /* Receive Security mode command */
192
+        recvbuf = testgnb_ngap_read(ngap1);
193
+        ABTS_PTR_NOTNULL(tc, recvbuf);
194
+        testngap_recv(test_uei, recvbuf);
195
+
196
+        /* Send Security mode complete */
197
+        gmmbuf = testgmm_build_security_mode_complete(test_uei, nasbuf);
198
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
199
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
200
+        ABTS_PTR_NOTNULL(tc, sendbuf);
201
+        rv = testgnb_ngap_send(ngap1, sendbuf);
202
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
203
+
204
+        /* Receive InitialContextSetupRequest +
205
+         * Registration accept */
206
+        recvbuf = testgnb_ngap_read(ngap1);
207
+        ABTS_PTR_NOTNULL(tc, recvbuf);
208
+        testngap_recv(test_uei, recvbuf);
209
+        ABTS_INT_EQUAL(tc,
210
+                NGAP_ProcedureCode_id_InitialContextSetup,
211
+                test_uei->ngap_procedure_code);
212
+
213
+        /* Send UERadioCapabilityInfoIndication */
214
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_uei);
215
+        ABTS_PTR_NOTNULL(tc, sendbuf);
216
+        rv = testgnb_ngap_send(ngap1, sendbuf);
217
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
218
+
219
+        /* Send InitialContextSetupResponse */
220
+        sendbuf = testngap_build_initial_context_setup_response(test_uei, false);
221
+        ABTS_PTR_NOTNULL(tc, sendbuf);
222
+        rv = testgnb_ngap_send(ngap1, sendbuf);
223
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
224
+
225
+        /* Send Registration complete */
226
+        gmmbuf = testgmm_build_registration_complete(test_uei);
227
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
228
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
229
+        ABTS_PTR_NOTNULL(tc, sendbuf);
230
+        rv = testgnb_ngap_send(ngap1, sendbuf);
231
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
232
+
233
+        /* Receive Configuration update command */
234
+        recvbuf = testgnb_ngap_read(ngap1);
235
+        ABTS_PTR_NOTNULL(tc, recvbuf);
236
+        testngap_recv(test_uei, recvbuf);
237
+
238
+        sess->ul_nas_transport_param.request_type =
239
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
240
+        sess->ul_nas_transport_param.dnn = 1;
241
+        sess->ul_nas_transport_param.s_nssai = 0;
242
+
243
+        sess->pdu_session_establishment_param.ssc_mode = 1;
244
+        sess->pdu_session_establishment_param.epco = 1;
245
+
246
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
247
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
248
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
249
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
250
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
251
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
252
+        ABTS_PTR_NOTNULL(tc, sendbuf);
253
+        rv = testgnb_ngap_send(ngap1, sendbuf);
254
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
255
+
256
+        /* Receive PDUSessionResourceSetupRequest +
257
+         * DL NAS transport +
258
+         * PDU session establishment accept */
259
+        recvbuf = testgnb_ngap_read(ngap1);
260
+        ABTS_PTR_NOTNULL(tc, recvbuf);
261
+        testngap_recv(test_uei, recvbuf);
262
+        ABTS_INT_EQUAL(tc,
263
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
264
+                test_uei->ngap_procedure_code);
265
+
266
+        /* Send PDUSessionResourceSetupResponse */
267
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
268
+        ABTS_PTR_NOTNULL(tc, sendbuf);
269
+        rv = testgnb_ngap_send(ngap1, sendbuf);
270
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
271
+    }
272
+
273
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
274
+        /* Send PDU session release request */
275
+        sess = test_sess_find_by_psi(test_uei, 5);
276
+        ogs_assert(sess);
277
+
278
+        /* Send PDU Session release request */
279
+        sess->ul_nas_transport_param.request_type = 0;
280
+        sess->ul_nas_transport_param.dnn = 0;
281
+        sess->ul_nas_transport_param.s_nssai = 0;
282
+
283
+        sess->pdu_session_establishment_param.ssc_mode = 0;
284
+        sess->pdu_session_establishment_param.epco = 0;
285
+
286
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
287
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
288
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
289
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
290
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
291
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
292
+        ABTS_PTR_NOTNULL(tc, sendbuf);
293
+        rv = testgnb_ngap_send(ngap1, sendbuf);
294
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
295
+
296
+        /* Receive PDUSessionResourceReleaseCommand +
297
+         * DL NAS transport +
298
+         * PDU session release command */
299
+        recvbuf = testgnb_ngap_read(ngap1);
300
+        ABTS_PTR_NOTNULL(tc, recvbuf);
301
+        testngap_recv(test_uei, recvbuf);
302
+        ABTS_INT_EQUAL(tc,
303
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
304
+                test_uei->ngap_procedure_code);
305
+
306
+        /* Send PDUSessionResourceReleaseResponse */
307
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
308
+        ABTS_PTR_NOTNULL(tc, sendbuf);
309
+        rv = testgnb_ngap_send(ngap1, sendbuf);
310
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
311
+
312
+        /* Send UplinkNASTransport +
313
+         * UL NAS trasnport +
314
+         * PDU session resource release complete */
315
+        sess->ul_nas_transport_param.request_type = 0;
316
+        sess->ul_nas_transport_param.dnn = 0;
317
+        sess->ul_nas_transport_param.s_nssai = 0;
318
+
319
+        sess->pdu_session_establishment_param.ssc_mode = 0;
320
+        sess->pdu_session_establishment_param.epco = 0;
321
+
322
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
323
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
324
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
325
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
326
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
327
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
328
+        ABTS_PTR_NOTNULL(tc, sendbuf);
329
+        rv = testgnb_ngap_send(ngap1, sendbuf);
330
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
331
+    }
332
+
333
+    /* Stay registered on Old AMF */
334
+#if 0
335
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
336
+        /* Send De-registration request */
337
+        gmmbuf = testgmm_build_de_registration_request(test_uei, 1, true, true);
338
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
339
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
340
+        ABTS_PTR_NOTNULL(tc, sendbuf);
341
+        rv = testgnb_ngap_send(ngap1, sendbuf);
342
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
343
+
344
+        /* Receive UEContextReleaseCommand */
345
+        recvbuf = testgnb_ngap_read(ngap1);
346
+        ABTS_PTR_NOTNULL(tc, recvbuf);
347
+        testngap_recv(test_uei, recvbuf);
348
+        ABTS_INT_EQUAL(tc,
349
+                NGAP_ProcedureCode_id_UEContextRelease,
350
+                test_uei->ngap_procedure_code);
351
+
352
+        /* Send UEContextReleaseComplete */
353
+        sendbuf = testngap_build_ue_context_release_complete(test_uei);
354
+        ABTS_PTR_NOTNULL(tc, sendbuf);
355
+        rv = testgnb_ngap_send(ngap1, sendbuf);
356
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
357
+    }
358
+
359
+    ogs_msleep(300);
360
+
361
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
362
+        /********** Remove Subscriber in Database */
363
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
364
+    }
365
+
366
+    /* Clear Test UE Context */
367
+    test_ue_remove_all();
368
+#endif
369
+
370
+    ogs_msleep(100);
371
+
372
+    /* Register to Target AMF */
373
+
374
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
375
+        const char *scheme_output_target = {
376
+            "0000000001",
377
+            "0000000002",
378
+            "0000000003",
379
+            "0000000004",
380
+            "0000000005",
381
+        };
382
+
383
+        /* Setup Test UE & Session Context */
384
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
385
+
386
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
387
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
388
+        mobile_identity_suci.routing_indicator1 = 0;
389
+        mobile_identity_suci.routing_indicator2 = 0xf;
390
+        mobile_identity_suci.routing_indicator3 = 0xf;
391
+        mobile_identity_suci.routing_indicator4 = 0xf;
392
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
393
+        mobile_identity_suci.home_network_pki_value = 0;
394
+
395
+        test_ue_targeti = test_ue_add_by_suci(
396
+                &mobile_identity_suci, scheme_output_targeti);
397
+        ogs_assert(test_ue_targeti);
398
+
399
+        test_ue_targeti->nr_cgi.cell_id = 0x40000;
400
+
401
+        test_ue_targeti->nas.registration.tsc = 0;
402
+        test_ue_targeti->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
403
+        test_ue_targeti->nas.registration.follow_on_request = 1;
404
+        test_ue_targeti->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
405
+
406
+        test_ue_targeti->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
407
+        test_ue_targeti->opc_string = "e8ed289deba952e4283b54e88e6183ca";
408
+    }
409
+
410
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
411
+        if (i > 0)
412
+            test_ue_targeti->ran_ue_ngap_id = test_ue_targeti-1->ran_ue_ngap_id;
413
+        else
414
+            test_ue_targeti->ran_ue_ngap_id = 0;
415
+
416
+        /* Send PDU session establishment request */
417
+        // sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
418
+        sess = test_sess_add_by_dnn_and_psi(test_ue_targeti, "internet", 6);
419
+        ogs_assert(sess);
420
+
421
+        /********** Insert Subscriber in Database */
422
+        doc = test_db_new_simple(test_ue_targeti);
423
+        ABTS_PTR_NOTNULL(tc, doc);
424
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue_targeti, doc));
425
+
426
+        /* Send Registration request */
427
+        test_ue_targeti->registration_request_param.guti = 1;
428
+        gmmbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
429
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
430
+
431
+        test_ue_targeti->registration_request_param.gmm_capability = 1;
432
+        test_ue_targeti->registration_request_param.s1_ue_network_capability = 1;
433
+        test_ue_targeti->registration_request_param.requested_nssai = 1;
434
+        test_ue_targeti->registration_request_param.last_visited_registered_tai = 1;
435
+        test_ue_targeti->registration_request_param.ue_usage_setting = 1;
436
+        nasbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
437
+        ABTS_PTR_NOTNULL(tc, nasbuf);
438
+
439
+        sendbuf = testngap_build_initial_ue_message(test_ue_targeti, gmmbuf,
440
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
441
+        ABTS_PTR_NOTNULL(tc, sendbuf);
442
+        rv = testgnb_ngap_send(ngap2, sendbuf);
443
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
444
+
445
+        /* Receive Identity request */
446
+        recvbuf_target = testgnb_ngap_read(ngap2);
447
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
448
+        testngap_recv(test_ue_targeti, recvbuf_target);
449
+
450
+        /* Send Identity response */
451
+        gmmbuf = testgmm_build_identity_response(test_ue_targeti);
452
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
453
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
454
+        ABTS_PTR_NOTNULL(tc, sendbuf);
455
+        rv = testgnb_ngap_send(ngap2, sendbuf);
456
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
457
+
458
+        /* Receive Authentication request */
459
+        recvbuf_target = testgnb_ngap_read(ngap2);
460
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
461
+        testngap_recv(test_ue_targeti, recvbuf_target);
462
+
463
+        /* Send Authentication response */
464
+        gmmbuf = testgmm_build_authentication_response(test_ue_targeti);
465
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
466
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
467
+        ABTS_PTR_NOTNULL(tc, sendbuf);
468
+        rv = testgnb_ngap_send(ngap2, sendbuf);
469
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
470
+
471
+        /* Receive Security mode command */
472
+        recvbuf_target = testgnb_ngap_read(ngap2);
473
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
474
+        testngap_recv(test_ue_targeti, recvbuf_target);
475
+
476
+        /* Send Security mode complete */
477
+        gmmbuf = testgmm_build_security_mode_complete(test_ue_targeti, nasbuf);
478
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
479
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
480
+        ABTS_PTR_NOTNULL(tc, sendbuf);
481
+        rv = testgnb_ngap_send(ngap2, sendbuf);
482
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
483
+
484
+        /* Receive InitialContextSetupRequest +
485
+         * Registration accept */
486
+        recvbuf_target = testgnb_ngap_read(ngap2);
487
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
488
+        testngap_recv(test_ue_targeti, recvbuf_target);
489
+        ABTS_INT_EQUAL(tc,
490
+                NGAP_ProcedureCode_id_InitialContextSetup,
491
+                test_ue_targeti->ngap_procedure_code);
492
+
493
+        /* Send UERadioCapabilityInfoIndication */
494
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue_targeti);
495
+        ABTS_PTR_NOTNULL(tc, sendbuf);
496
+        rv = testgnb_ngap_send(ngap2, sendbuf);
497
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
498
+
499
+        /* Send InitialContextSetupResponse */
500
+        sendbuf = testngap_build_initial_context_setup_response(test_ue_targeti, false);
501
+        ABTS_PTR_NOTNULL(tc, sendbuf);
502
+        rv = testgnb_ngap_send(ngap2, sendbuf);
503
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
504
+
505
+        /* Send Registration complete */
506
+        gmmbuf = testgmm_build_registration_complete(test_ue_targeti);
507
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
508
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
509
+        ABTS_PTR_NOTNULL(tc, sendbuf);
510
+        rv = testgnb_ngap_send(ngap2, sendbuf);
511
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
512
+
513
+        /* Receive Configuration update command */
514
+        recvbuf_target = testgnb_ngap_read(ngap2);
515
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
516
+        testngap_recv(test_ue_targeti, recvbuf_target);
517
+
518
+        sess->ul_nas_transport_param.request_type =
519
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
520
+        sess->ul_nas_transport_param.dnn = 1;
521
+        sess->ul_nas_transport_param.s_nssai = 0;
522
+
523
+        sess->pdu_session_establishment_param.ssc_mode = 1;
524
+        sess->pdu_session_establishment_param.epco = 1;
525
+
526
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
527
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
528
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
529
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
530
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
531
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
532
+        ABTS_PTR_NOTNULL(tc, sendbuf);
533
+        rv = testgnb_ngap_send(ngap2, sendbuf);
534
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
535
+
536
+        /* Receive PDUSessionResourceSetupRequest +
537
+         * DL NAS transport +
538
+         * PDU session establishment accept */
539
+        recvbuf_target = testgnb_ngap_read(ngap2);
540
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
541
+        testngap_recv(test_ue_targeti, recvbuf_target);
542
+        ABTS_INT_EQUAL(tc,
543
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
544
+                test_ue_targeti->ngap_procedure_code);
545
+
546
+        /* Send PDUSessionResourceSetupResponse */
547
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
548
+        ABTS_PTR_NOTNULL(tc, sendbuf);
549
+        rv = testgnb_ngap_send(ngap2, sendbuf);
550
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
551
+    }
552
+
553
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
554
+        /* Send PDU session release request */
555
+        sess = test_sess_find_by_psi(test_ue_targeti, 6);
556
+        ogs_assert(sess);
557
+
558
+        /* Send PDU Session release request */
559
+        sess->ul_nas_transport_param.request_type = 0;
560
+        sess->ul_nas_transport_param.dnn = 0;
561
+        sess->ul_nas_transport_param.s_nssai = 0;
562
+
563
+        sess->pdu_session_establishment_param.ssc_mode = 0;
564
+        sess->pdu_session_establishment_param.epco = 0;
565
+
566
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
567
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
568
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
569
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
570
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
571
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
572
+        ABTS_PTR_NOTNULL(tc, sendbuf);
573
+        rv = testgnb_ngap_send(ngap2, sendbuf);
574
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
575
+
576
+        /* Receive PDUSessionResourceReleaseCommand +
577
+         * DL NAS transport +
578
+         * PDU session release command */
579
+        recvbuf_target = testgnb_ngap_read(ngap2);
580
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
581
+        testngap_recv(test_ue_targeti, recvbuf_target);
582
+        ABTS_INT_EQUAL(tc,
583
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
584
+                test_ue_targeti->ngap_procedure_code);
585
+
586
+        /* Send PDUSessionResourceReleaseResponse */
587
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
588
+        ABTS_PTR_NOTNULL(tc, sendbuf);
589
+        rv = testgnb_ngap_send(ngap2, sendbuf);
590
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
591
+
592
+        /* Send UplinkNASTransport +
593
+         * UL NAS trasnport +
594
+         * PDU session resource release complete */
595
+        sess->ul_nas_transport_param.request_type = 0;
596
+        sess->ul_nas_transport_param.dnn = 0;
597
+        sess->ul_nas_transport_param.s_nssai = 0;
598
+
599
+        sess->pdu_session_establishment_param.ssc_mode = 0;
600
+        sess->pdu_session_establishment_param.epco = 0;
601
+
602
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
603
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
604
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
605
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
606
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
607
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
608
+        ABTS_PTR_NOTNULL(tc, sendbuf);
609
+        rv = testgnb_ngap_send(ngap2, sendbuf);
610
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
611
+    }
612
+
613
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
614
+        /* Send De-registration request */
615
+        gmmbuf = testgmm_build_de_registration_request(test_ue_targeti, 1, true, true);
616
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
617
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
618
+        ABTS_PTR_NOTNULL(tc, sendbuf);
619
+        rv = testgnb_ngap_send(ngap2, sendbuf);
620
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
621
+
622
+        /* Receive UEContextReleaseCommand */
623
+        recvbuf_target = testgnb_ngap_read(ngap2);
624
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
625
+        testngap_recv(test_ue_targeti, recvbuf_target);
626
+        ABTS_INT_EQUAL(tc,
627
+                NGAP_ProcedureCode_id_UEContextRelease,
628
+                test_ue_targeti->ngap_procedure_code);
629
+
630
+        /* Send UEContextReleaseComplete */
631
+        sendbuf = testngap_build_ue_context_release_complete(test_ue_targeti);
632
+        ABTS_PTR_NOTNULL(tc, sendbuf);
633
+        rv = testgnb_ngap_send(ngap2, sendbuf);
634
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
635
+    }
636
+
637
+    ogs_msleep(300);
638
+
639
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
640
+        /********** Remove Subscriber in Database */
641
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue_targeti));
642
+    }
643
+
644
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
645
+        /********** Remove Subscriber in Database */
646
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
647
+    }
648
+
649
+    /* Clear Test UE Context */
650
+    test_ue_remove_all();
651
+
652
+    /* gNB disonncect from UPF */
653
+    testgnb_gtpu_close(gtpu2);
654
+    /* gNB disonncect from UPF */
655
+    testgnb_gtpu_close(gtpu1);
656
+
657
+    /* gNB disonncect from Target AMF */
658
+    testgnb_ngap_close(ngap2);
659
+    /* gNB disonncect from Old AMF */
660
+    testgnb_ngap_close(ngap1);
661
+
662
+}
663
+
664
+static void test2_func(abts_case *tc, void *data)
665
+{
666
+    int rv;
667
+    ogs_socknode_t *ngap1, *ngap2;
668
+    ogs_socknode_t *gtpu1, *gtpu2;
669
+    ogs_pkbuf_t *gmmbuf;
670
+    ogs_pkbuf_t *gsmbuf;
671
+    ogs_pkbuf_t *nasbuf;
672
+    ogs_pkbuf_t *sendbuf;
673
+    ogs_pkbuf_t *recvbuf;
674
+    ogs_pkbuf_t *recvbuf_target;
675
+    ogs_ngap_message_t message;
676
+    int i;
677
+
678
+    uint8_t tmpOGS_HUGE_LEN;
679
+    char *_gtp_payload = "34ff0024"
680
+        "0000000100000085 010002004500001c 0c0b000040015a7a 0a2d00010a2d0002"
681
+        "00000964cd7c291f";
682
+
683
+    #define NUM_OF_TEST_UE_1 1
684
+
685
+    /* Test: 1 UE, Old AMF, Target AMF,
686
+     *       register to Old AMF, PDU session establishment, session release, deregister,
687
+     *       register to Target AMF with Old AMF's 5G GUTI,
688
+     *       UE context transfer, Registration status update
689
+     *       PDU session establishment, session release, deregister */
690
+
691
+    ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
692
+    test_ue_t *test_ueNUM_OF_TEST_UE_1;
693
+    test_ue_t *test_ue_targetNUM_OF_TEST_UE_1;
694
+    test_sess_t *sess = NULL;
695
+    test_bearer_t *qos_flow = NULL;
696
+
697
+    bson_t *doc = NULL;
698
+
699
+    /* First gNB connects to Target AMF */
700
+    ngap2 = testngap_client(2, AF_INET);
701
+    ABTS_PTR_NOTNULL(tc, ngap2);
702
+
703
+    /* Second gNB connects to Old AMF */
704
+    ngap1 = testngap_client(1, AF_INET);
705
+    ABTS_PTR_NOTNULL(tc, ngap1);
706
+
707
+    /* Two gNB connects to UPF */
708
+    gtpu1 = test_gtpu_server(1, AF_INET);
709
+    ABTS_PTR_NOTNULL(tc, gtpu1);
710
+
711
+    gtpu2 = test_gtpu_server(2, AF_INET);
712
+    ABTS_PTR_NOTNULL(tc, gtpu2);
713
+
714
+    /* NG-Setup Reqeust/Response for Target gNB - with Target AMF */
715
+    sendbuf = testngap_build_ng_setup_request(0x4000, 28);
716
+    ABTS_PTR_NOTNULL(tc, sendbuf);
717
+    rv = testgnb_ngap_send(ngap2, sendbuf);
718
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
719
+
720
+    recvbuf = testgnb_ngap_read(ngap2);
721
+    ABTS_PTR_NOTNULL(tc, recvbuf);
722
+    testngap_recv(test_ue, recvbuf);
723
+
724
+    /* NG-Setup Reqeust/Response for Source gNB - with Old AMF */
725
+    sendbuf = testngap_build_ng_setup_request(0x4001, 28);
726
+    ABTS_PTR_NOTNULL(tc, sendbuf);
727
+    rv = testgnb_ngap_send(ngap1, sendbuf);
728
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
729
+
730
+    recvbuf_target = testgnb_ngap_read(ngap1);
731
+    ABTS_PTR_NOTNULL(tc, recvbuf_target);
732
+    testngap_recv(test_ue, recvbuf_target);
733
+
734
+    /* Register to Old AMF */
735
+
736
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
737
+        const char *scheme_output = {
738
+            "0000000001",
739
+            "0000000002",
740
+            "0000000003",
741
+            "0000000004",
742
+            "0000000005",
743
+        };
744
+
745
+        /* Setup Test UE & Session Context */
746
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
747
+
748
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
749
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
750
+        mobile_identity_suci.routing_indicator1 = 0;
751
+        mobile_identity_suci.routing_indicator2 = 0xf;
752
+        mobile_identity_suci.routing_indicator3 = 0xf;
753
+        mobile_identity_suci.routing_indicator4 = 0xf;
754
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
755
+        mobile_identity_suci.home_network_pki_value = 0;
756
+
757
+        test_uei = test_ue_add_by_suci(
758
+                &mobile_identity_suci, scheme_outputi);
759
+        ogs_assert(test_uei);
760
+
761
+        test_uei->nr_cgi.cell_id = 0x40001;
762
+
763
+        test_uei->nas.registration.tsc = 0;
764
+        test_uei->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
765
+        test_uei->nas.registration.follow_on_request = 1;
766
+        test_uei->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
767
+
768
+        test_uei->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
769
+        test_uei->opc_string = "e8ed289deba952e4283b54e88e6183ca";
770
+    }
771
+
772
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
773
+        if (i > 0)
774
+            test_uei->ran_ue_ngap_id = test_uei-1->ran_ue_ngap_id;
775
+        else
776
+            test_uei->ran_ue_ngap_id = 0;
777
+
778
+        /* pdu_id == 5 */
779
+
780
+        /* Send PDU session establishment request */
781
+        sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
782
+        ogs_assert(sess);
783
+
784
+        /********** Insert Subscriber in Database */
785
+        doc = test_db_new_simple(test_uei);
786
+        ABTS_PTR_NOTNULL(tc, doc);
787
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_uei, doc));
788
+
789
+        /* Send Registration request - with SUCI */
790
+        // test_uei->registration_request_param.guti = 1;
791
+        gmmbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
792
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
793
+
794
+        test_uei->registration_request_param.gmm_capability = 1;
795
+        test_uei->registration_request_param.s1_ue_network_capability = 1;
796
+        test_uei->registration_request_param.requested_nssai = 1;
797
+        test_uei->registration_request_param.last_visited_registered_tai = 1;
798
+        test_uei->registration_request_param.ue_usage_setting = 1;
799
+        nasbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
800
+        ABTS_PTR_NOTNULL(tc, nasbuf);
801
+
802
+        sendbuf = testngap_build_initial_ue_message(test_uei, gmmbuf,
803
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
804
+        ABTS_PTR_NOTNULL(tc, sendbuf);
805
+
806
+        rv = testgnb_ngap_send(ngap1, sendbuf);
807
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
808
+
809
+#if 0
810
+        /* Receive Identity request */
811
+        recvbuf = testgnb_ngap_read(ngap1);
812
+        ABTS_PTR_NOTNULL(tc, recvbuf);
813
+        testngap_recv(test_uei, recvbuf);
814
+
815
+        /* Send Identity response */
816
+        gmmbuf = testgmm_build_identity_response(test_uei);
817
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
818
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
819
+        ABTS_PTR_NOTNULL(tc, sendbuf);
820
+        rv = testgnb_ngap_send(ngap1, sendbuf);
821
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
822
+#endif
823
+
824
+        /* Receive Authentication request */
825
+        recvbuf = testgnb_ngap_read(ngap1);
826
+        ABTS_PTR_NOTNULL(tc, recvbuf);
827
+        testngap_recv(test_uei, recvbuf);
828
+
829
+        /* Send Authentication response */
830
+        gmmbuf = testgmm_build_authentication_response(test_uei);
831
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
832
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
833
+        ABTS_PTR_NOTNULL(tc, sendbuf);
834
+        rv = testgnb_ngap_send(ngap1, sendbuf);
835
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
836
+
837
+        /* Receive Security mode command */
838
+        recvbuf = testgnb_ngap_read(ngap1);
839
+        ABTS_PTR_NOTNULL(tc, recvbuf);
840
+        testngap_recv(test_uei, recvbuf);
841
+
842
+        /* Send Security mode complete */
843
+        gmmbuf = testgmm_build_security_mode_complete(test_uei, nasbuf);
844
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
845
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
846
+        ABTS_PTR_NOTNULL(tc, sendbuf);
847
+        rv = testgnb_ngap_send(ngap1, sendbuf);
848
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
849
+
850
+        /* Receive InitialContextSetupRequest +
851
+         * Registration accept */
852
+        recvbuf = testgnb_ngap_read(ngap1);
853
+        ABTS_PTR_NOTNULL(tc, recvbuf);
854
+        testngap_recv(test_uei, recvbuf);
855
+        ABTS_INT_EQUAL(tc,
856
+                NGAP_ProcedureCode_id_InitialContextSetup,
857
+                test_uei->ngap_procedure_code);
858
+
859
+        /* Send UERadioCapabilityInfoIndication */
860
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_uei);
861
+        ABTS_PTR_NOTNULL(tc, sendbuf);
862
+        rv = testgnb_ngap_send(ngap1, sendbuf);
863
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
864
+
865
+        /* Send InitialContextSetupResponse */
866
+        sendbuf = testngap_build_initial_context_setup_response(test_uei, false);
867
+        ABTS_PTR_NOTNULL(tc, sendbuf);
868
+        rv = testgnb_ngap_send(ngap1, sendbuf);
869
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
870
+
871
+        /* Send Registration complete */
872
+        gmmbuf = testgmm_build_registration_complete(test_uei);
873
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
874
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
875
+        ABTS_PTR_NOTNULL(tc, sendbuf);
876
+        rv = testgnb_ngap_send(ngap1, sendbuf);
877
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
878
+
879
+        /* Receive Configuration update command */
880
+        recvbuf = testgnb_ngap_read(ngap1);
881
+        ABTS_PTR_NOTNULL(tc, recvbuf);
882
+        testngap_recv(test_uei, recvbuf);
883
+
884
+        sess->ul_nas_transport_param.request_type =
885
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
886
+        sess->ul_nas_transport_param.dnn = 1;
887
+        sess->ul_nas_transport_param.s_nssai = 0;
888
+
889
+        sess->pdu_session_establishment_param.ssc_mode = 1;
890
+        sess->pdu_session_establishment_param.epco = 1;
891
+
892
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
893
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
894
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
895
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
896
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
897
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
898
+        ABTS_PTR_NOTNULL(tc, sendbuf);
899
+        rv = testgnb_ngap_send(ngap1, sendbuf);
900
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
901
+
902
+        /* Receive PDUSessionResourceSetupRequest +
903
+         * DL NAS transport +
904
+         * PDU session establishment accept */
905
+        recvbuf = testgnb_ngap_read(ngap1);
906
+        ABTS_PTR_NOTNULL(tc, recvbuf);
907
+        testngap_recv(test_uei, recvbuf);
908
+        ABTS_INT_EQUAL(tc,
909
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
910
+                test_uei->ngap_procedure_code);
911
+
912
+        /* Send PDUSessionResourceSetupResponse */
913
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
914
+        ABTS_PTR_NOTNULL(tc, sendbuf);
915
+        rv = testgnb_ngap_send(ngap1, sendbuf);
916
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
917
+    }
918
+
919
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
920
+        /* Send PDU session release request */
921
+        sess = test_sess_find_by_psi(test_uei, 5);
922
+        ogs_assert(sess);
923
+
924
+        /* Send PDU Session release request */
925
+        sess->ul_nas_transport_param.request_type = 0;
926
+        sess->ul_nas_transport_param.dnn = 0;
927
+        sess->ul_nas_transport_param.s_nssai = 0;
928
+
929
+        sess->pdu_session_establishment_param.ssc_mode = 0;
930
+        sess->pdu_session_establishment_param.epco = 0;
931
+
932
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
933
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
934
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
935
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
936
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
937
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
938
+        ABTS_PTR_NOTNULL(tc, sendbuf);
939
+        rv = testgnb_ngap_send(ngap1, sendbuf);
940
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
941
+
942
+        /* Receive PDUSessionResourceReleaseCommand +
943
+         * DL NAS transport +
944
+         * PDU session release command */
945
+        recvbuf = testgnb_ngap_read(ngap1);
946
+        ABTS_PTR_NOTNULL(tc, recvbuf);
947
+        testngap_recv(test_uei, recvbuf);
948
+        ABTS_INT_EQUAL(tc,
949
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
950
+                test_uei->ngap_procedure_code);
951
+
952
+        /* Send PDUSessionResourceReleaseResponse */
953
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
954
+        ABTS_PTR_NOTNULL(tc, sendbuf);
955
+        rv = testgnb_ngap_send(ngap1, sendbuf);
956
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
957
+
958
+        /* Send UplinkNASTransport +
959
+         * UL NAS trasnport +
960
+         * PDU session resource release complete */
961
+        sess->ul_nas_transport_param.request_type = 0;
962
+        sess->ul_nas_transport_param.dnn = 0;
963
+        sess->ul_nas_transport_param.s_nssai = 0;
964
+
965
+        sess->pdu_session_establishment_param.ssc_mode = 0;
966
+        sess->pdu_session_establishment_param.epco = 0;
967
+
968
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
969
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
970
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
971
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
972
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
973
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
974
+        ABTS_PTR_NOTNULL(tc, sendbuf);
975
+        rv = testgnb_ngap_send(ngap1, sendbuf);
976
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
977
+    }
978
+
979
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
980
+        /* Send De-registration request */
981
+        gmmbuf = testgmm_build_de_registration_request(test_uei, 1, true, true);
982
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
983
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
984
+        ABTS_PTR_NOTNULL(tc, sendbuf);
985
+        rv = testgnb_ngap_send(ngap1, sendbuf);
986
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
987
+
988
+        /* Receive UEContextReleaseCommand */
989
+        recvbuf = testgnb_ngap_read(ngap1);
990
+        ABTS_PTR_NOTNULL(tc, recvbuf);
991
+        testngap_recv(test_uei, recvbuf);
992
+        ABTS_INT_EQUAL(tc,
993
+                NGAP_ProcedureCode_id_UEContextRelease,
994
+                test_uei->ngap_procedure_code);
995
+
996
+        /* Send UEContextReleaseComplete */
997
+        sendbuf = testngap_build_ue_context_release_complete(test_uei);
998
+        ABTS_PTR_NOTNULL(tc, sendbuf);
999
+        rv = testgnb_ngap_send(ngap1, sendbuf);
1000
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1001
+    }
1002
+
1003
+    ogs_msleep(300);
1004
+
1005
+    /* Register to Target AMF */
1006
+
1007
+    /* Make the same UE from scratch and give it the 5G GUTI from Old AMF */
1008
+
1009
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1010
+        const char *scheme_output_target = {
1011
+            "0000000001",
1012
+            "0000000002",
1013
+            "0000000003",
1014
+            "0000000004",
1015
+            "0000000005",
1016
+        };
1017
+
1018
+        /* Setup Test UE & Session Context */
1019
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
1020
+
1021
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
1022
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
1023
+        mobile_identity_suci.routing_indicator1 = 0;
1024
+        mobile_identity_suci.routing_indicator2 = 0xf;
1025
+        mobile_identity_suci.routing_indicator3 = 0xf;
1026
+        mobile_identity_suci.routing_indicator4 = 0xf;
1027
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
1028
+        mobile_identity_suci.home_network_pki_value = 0;
1029
+
1030
+        test_ue_targeti = test_ue_add_by_suci(
1031
+                &mobile_identity_suci, scheme_output_targeti);
1032
+        ogs_assert(test_ue_targeti);
1033
+
1034
+        test_ue_targeti->nr_cgi.cell_id = 0x40000;
1035
+
1036
+        test_ue_targeti->nas.registration.tsc = 0;
1037
+        test_ue_targeti->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
1038
+        test_ue_targeti->nas.registration.follow_on_request = 1;
1039
+        test_ue_targeti->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
1040
+
1041
+        test_ue_targeti->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
1042
+        test_ue_targeti->opc_string = "e8ed289deba952e4283b54e88e6183ca";
1043
+    }
1044
+
1045
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1046
+        if (i > 0)
1047
+            test_ue_targeti->ran_ue_ngap_id = test_ue_targeti-1->ran_ue_ngap_id;
1048
+        else
1049
+            test_ue_targeti->ran_ue_ngap_id = 0;
1050
+
1051
+        /* pdu_id == 6 */
1052
+
1053
+        /* Send PDU session establishment request */
1054
+        sess = test_sess_add_by_dnn_and_psi(test_ue_targeti, "internet", 6);
1055
+        ogs_assert(sess);
1056
+
1057
+        /********** Insert Subscriber in Database */
1058
+        doc = test_db_new_simple(test_ue_targeti);
1059
+        ABTS_PTR_NOTNULL(tc, doc);
1060
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue_targeti, doc));
1061
+
1062
+        /* Set the 5G GUTI to Old AMF's 5G GUTI */
1063
+        test_ue_targeti->nas_5gs_guti = test_uei->nas_5gs_guti;
1064
+
1065
+        /* Send Registration request */
1066
+        test_ue_targeti->registration_request_param.guti = 1;
1067
+        gmmbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
1068
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1069
+
1070
+        test_ue_targeti->registration_request_param.gmm_capability = 1;
1071
+        test_ue_targeti->registration_request_param.s1_ue_network_capability = 1;
1072
+        test_ue_targeti->registration_request_param.requested_nssai = 1;
1073
+        test_ue_targeti->registration_request_param.last_visited_registered_tai = 1;
1074
+        test_ue_targeti->registration_request_param.ue_usage_setting = 1;
1075
+        nasbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
1076
+        ABTS_PTR_NOTNULL(tc, nasbuf);
1077
+
1078
+        sendbuf = testngap_build_initial_ue_message(test_ue_targeti, gmmbuf,
1079
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
1080
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1081
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1082
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1083
+
1084
+#if 0
1085
+        /* Receive Identity request */
1086
+        recvbuf_target = testgnb_ngap_read(ngap2);
1087
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1088
+        testngap_recv(test_ue_targeti, recvbuf_target);
1089
+
1090
+        /* Send Identity response */
1091
+        gmmbuf = testgmm_build_identity_response(test_ue_targeti);
1092
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1093
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1094
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1095
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1096
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1097
+#endif
1098
+
1099
+        /* Receive Authentication request */
1100
+        recvbuf_target = testgnb_ngap_read(ngap2);
1101
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1102
+        testngap_recv(test_ue_targeti, recvbuf_target);
1103
+
1104
+        /* Send Authentication response */
1105
+        gmmbuf = testgmm_build_authentication_response(test_ue_targeti);
1106
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1107
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1108
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1109
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1110
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1111
+
1112
+        /* Receive Security mode command */
1113
+        recvbuf_target = testgnb_ngap_read(ngap2);
1114
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1115
+        testngap_recv(test_ue_targeti, recvbuf_target);
1116
+
1117
+        /* Send Security mode complete */
1118
+        gmmbuf = testgmm_build_security_mode_complete(test_ue_targeti, nasbuf);
1119
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1120
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1121
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1122
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1123
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1124
+
1125
+        /* Receive InitialContextSetupRequest +
1126
+         * Registration accept */
1127
+        recvbuf_target = testgnb_ngap_read(ngap2);
1128
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1129
+        testngap_recv(test_ue_targeti, recvbuf_target);
1130
+        ABTS_INT_EQUAL(tc,
1131
+                NGAP_ProcedureCode_id_InitialContextSetup,
1132
+                test_ue_targeti->ngap_procedure_code);
1133
+
1134
+        /* Send UERadioCapabilityInfoIndication */
1135
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue_targeti);
1136
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1137
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1138
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1139
+
1140
+        /* Send InitialContextSetupResponse */
1141
+        sendbuf = testngap_build_initial_context_setup_response(test_ue_targeti, false);
1142
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1143
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1144
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1145
+
1146
+        /* Send Registration complete */
1147
+        gmmbuf = testgmm_build_registration_complete(test_ue_targeti);
1148
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1149
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1150
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1151
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1152
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1153
+
1154
+        /* Receive Configuration update command */
1155
+        recvbuf_target = testgnb_ngap_read(ngap2);
1156
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1157
+        testngap_recv(test_ue_targeti, recvbuf_target);
1158
+
1159
+        sess->ul_nas_transport_param.request_type =
1160
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
1161
+        sess->ul_nas_transport_param.dnn = 1;
1162
+        sess->ul_nas_transport_param.s_nssai = 0;
1163
+
1164
+        sess->pdu_session_establishment_param.ssc_mode = 1;
1165
+        sess->pdu_session_establishment_param.epco = 1;
1166
+
1167
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
1168
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
1169
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
1170
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1171
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1172
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1173
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1174
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1175
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1176
+
1177
+        /* Receive PDUSessionResourceSetupRequest +
1178
+         * DL NAS transport +
1179
+         * PDU session establishment accept */
1180
+        recvbuf_target = testgnb_ngap_read(ngap2);
1181
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1182
+        testngap_recv(test_ue_targeti, recvbuf_target);
1183
+        ABTS_INT_EQUAL(tc,
1184
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
1185
+                test_ue_targeti->ngap_procedure_code);
1186
+
1187
+        /* Send PDUSessionResourceSetupResponse */
1188
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
1189
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1190
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1191
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1192
+    }
1193
+
1194
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1195
+        /* Send PDU session release request */
1196
+        sess = test_sess_find_by_psi(test_ue_targeti, 6);
1197
+        ogs_assert(sess);
1198
+
1199
+        /* Send PDU Session release request */
1200
+        sess->ul_nas_transport_param.request_type = 0;
1201
+        sess->ul_nas_transport_param.dnn = 0;
1202
+        sess->ul_nas_transport_param.s_nssai = 0;
1203
+
1204
+        sess->pdu_session_establishment_param.ssc_mode = 0;
1205
+        sess->pdu_session_establishment_param.epco = 0;
1206
+
1207
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
1208
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
1209
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
1210
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1211
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1212
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1213
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1214
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1215
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1216
+
1217
+        /* Receive PDUSessionResourceReleaseCommand +
1218
+         * DL NAS transport +
1219
+         * PDU session release command */
1220
+        recvbuf_target = testgnb_ngap_read(ngap2);
1221
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1222
+        testngap_recv(test_ue_targeti, recvbuf_target);
1223
+        ABTS_INT_EQUAL(tc,
1224
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
1225
+                test_ue_targeti->ngap_procedure_code);
1226
+
1227
+        /* Send PDUSessionResourceReleaseResponse */
1228
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
1229
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1230
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1231
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1232
+
1233
+        /* Send UplinkNASTransport +
1234
+         * UL NAS trasnport +
1235
+         * PDU session resource release complete */
1236
+        sess->ul_nas_transport_param.request_type = 0;
1237
+        sess->ul_nas_transport_param.dnn = 0;
1238
+        sess->ul_nas_transport_param.s_nssai = 0;
1239
+
1240
+        sess->pdu_session_establishment_param.ssc_mode = 0;
1241
+        sess->pdu_session_establishment_param.epco = 0;
1242
+
1243
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
1244
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
1245
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
1246
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1247
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1248
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1249
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1250
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1251
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1252
+    }
1253
+
1254
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1255
+        /* Send De-registration request */
1256
+        gmmbuf = testgmm_build_de_registration_request(test_ue_targeti, 1, true, true);
1257
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
1258
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1259
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1260
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1261
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1262
+
1263
+        /* Receive UEContextReleaseCommand */
1264
+        recvbuf_target = testgnb_ngap_read(ngap2);
1265
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
1266
+        testngap_recv(test_ue_targeti, recvbuf_target);
1267
+        ABTS_INT_EQUAL(tc,
1268
+                NGAP_ProcedureCode_id_UEContextRelease,
1269
+                test_ue_targeti->ngap_procedure_code);
1270
+
1271
+        /* Send UEContextReleaseComplete */
1272
+        sendbuf = testngap_build_ue_context_release_complete(test_ue_targeti);
1273
+        ABTS_PTR_NOTNULL(tc, sendbuf);
1274
+        rv = testgnb_ngap_send(ngap2, sendbuf);
1275
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
1276
+    }
1277
+
1278
+    ogs_msleep(300);
1279
+
1280
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1281
+        /********** Remove Subscriber in Database */
1282
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue_targeti));
1283
+    }
1284
+
1285
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
1286
+        /********** Remove Subscriber in Database */
1287
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
1288
+    }
1289
+
1290
+    /* Clear Test UE Context */
1291
+    test_ue_remove_all();
1292
+
1293
+    /* gNB disonncect from UPF */
1294
+    testgnb_gtpu_close(gtpu2);
1295
+    /* gNB disonncect from UPF */
1296
+    testgnb_gtpu_close(gtpu1);
1297
+
1298
+    /* gNB disonncect from Target AMF */
1299
+    testgnb_ngap_close(ngap2);
1300
+    /* gNB disonncect from Old AMF */
1301
+    testgnb_ngap_close(ngap1);
1302
+}
1303
+
1304
+static void test23_func(abts_case *tc, void *data)
1305
+{
1306
+    int rv;
1307
+    ogs_socknode_t *ngap1, *ngap2;
1308
+    ogs_socknode_t *gtpu1, *gtpu2;
1309
+    ogs_pkbuf_t *gmmbuf;
1310
+    ogs_pkbuf_t *gsmbuf;
1311
+    ogs_pkbuf_t *nasbuf;
1312
+    ogs_pkbuf_t *sendbuf;
1313
+    ogs_pkbuf_t *recvbuf;
1314
+    ogs_pkbuf_t *recvbuf_target;
1315
+    ogs_ngap_message_t message;
1316
+    int i,j;
1317
+
1318
+    uint8_t tmpOGS_HUGE_LEN;
1319
+    char *_gtp_payload = "34ff0024"
1320
+        "0000000100000085 010002004500001c 0c0b000040015a7a 0a2d00010a2d0002"
1321
+        "00000964cd7c291f";
1322
+
1323
+    #define NUM_OF_TEST_UE_3 3
1324
+
1325
+    /* Test: same test as the previous one, now 3 UEs are registered, one after another */
1326
+
1327
+    ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
1328
+    test_ue_t *test_ueNUM_OF_TEST_UE_3;
1329
+    test_ue_t *test_ue_targetNUM_OF_TEST_UE_3;
1330
+    test_sess_t *sess = NULL;
1331
+    test_bearer_t *qos_flow = NULL;
1332
+
1333
+    bson_t *doc = NULL;
1334
+
1335
+    /* First gNB connects to Target AMF */
1336
+    ngap2 = testngap_client(2, AF_INET);
1337
+    ABTS_PTR_NOTNULL(tc, ngap2);
1338
+
1339
+    /* Second gNB connects to Old AMF */
1340
+    ngap1 = testngap_client(1, AF_INET);
1341
+    ABTS_PTR_NOTNULL(tc, ngap1);
1342
+
1343
+    /* Two gNB connects to UPF */
1344
+    gtpu1 = test_gtpu_server(1, AF_INET);
1345
+    ABTS_PTR_NOTNULL(tc, gtpu1);
1346
+
1347
+    gtpu2 = test_gtpu_server(2, AF_INET);
1348
+    ABTS_PTR_NOTNULL(tc, gtpu2);
1349
+
1350
+    /* NG-Setup Reqeust/Response for Target gNB - with Target AMF */
1351
+    sendbuf = testngap_build_ng_setup_request(0x4000, 28);
1352
+    ABTS_PTR_NOTNULL(tc, sendbuf);
1353
+    rv = testgnb_ngap_send(ngap2, sendbuf);
1354
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
1355
+
1356
+    recvbuf = testgnb_ngap_read(ngap2);
1357
+    ABTS_PTR_NOTNULL(tc, recvbuf);
1358
+    testngap_recv(test_ue, recvbuf);
1359
+
1360
+    /* NG-Setup Reqeust/Response for Source gNB - with Old AMF */
1361
+    sendbuf = testngap_build_ng_setup_request(0x4001, 28);
1362
+    ABTS_PTR_NOTNULL(tc, sendbuf);
1363
+    rv = testgnb_ngap_send(ngap1, sendbuf);
1364
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
1365
+
1366
+    recvbuf_target = testgnb_ngap_read(ngap1);
1367
+    ABTS_PTR_NOTNULL(tc, recvbuf_target);
1368
+    testngap_recv(test_ue, recvbuf_target);
1369
+
1370
+    for (j = 0; j < 3; j++) {
1371
+
1372
+        /* Register to Old AMF */
1373
+
1374
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1375
+            const char *scheme_output = {
1376
+                "0000000001",
1377
+                "0000000002",
1378
+                "0000000003",
1379
+                "0000000004",
1380
+                "0000000005",
1381
+            };
1382
+
1383
+            /* Setup Test UE & Session Context */
1384
+            memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
1385
+
1386
+            mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
1387
+            mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
1388
+            mobile_identity_suci.routing_indicator1 = 0;
1389
+            mobile_identity_suci.routing_indicator2 = 0xf;
1390
+            mobile_identity_suci.routing_indicator3 = 0xf;
1391
+            mobile_identity_suci.routing_indicator4 = 0xf;
1392
+            mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
1393
+            mobile_identity_suci.home_network_pki_value = 0;
1394
+
1395
+            test_uei = test_ue_add_by_suci(
1396
+                    &mobile_identity_suci, scheme_outputi);
1397
+            ogs_assert(test_uei);
1398
+
1399
+            test_uei->nr_cgi.cell_id = 0x40001;
1400
+
1401
+            test_uei->nas.registration.tsc = 0;
1402
+            test_uei->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
1403
+            test_uei->nas.registration.follow_on_request = 1;
1404
+            test_uei->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
1405
+
1406
+            test_uei->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
1407
+            test_uei->opc_string = "e8ed289deba952e4283b54e88e6183ca";
1408
+        }
1409
+
1410
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1411
+            if (i > 0)
1412
+                test_uei->ran_ue_ngap_id = test_uei-1->ran_ue_ngap_id;
1413
+            else
1414
+                test_uei->ran_ue_ngap_id = 0;
1415
+
1416
+            /* Send PDU session establishment request */
1417
+            sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
1418
+            ogs_assert(sess);
1419
+
1420
+            /********** Insert Subscriber in Database */
1421
+            doc = test_db_new_simple(test_uei);
1422
+            ABTS_PTR_NOTNULL(tc, doc);
1423
+            ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_uei, doc));
1424
+
1425
+            /* Send Registration request - with SUCI */
1426
+            // test_uei->registration_request_param.guti = 1;
1427
+            gmmbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
1428
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1429
+
1430
+            test_uei->registration_request_param.gmm_capability = 1;
1431
+            test_uei->registration_request_param.s1_ue_network_capability = 1;
1432
+            test_uei->registration_request_param.requested_nssai = 1;
1433
+            test_uei->registration_request_param.last_visited_registered_tai = 1;
1434
+            test_uei->registration_request_param.ue_usage_setting = 1;
1435
+            nasbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
1436
+            ABTS_PTR_NOTNULL(tc, nasbuf);
1437
+
1438
+            sendbuf = testngap_build_initial_ue_message(test_uei, gmmbuf,
1439
+                        NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
1440
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1441
+
1442
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1443
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1444
+
1445
+#if 0
1446
+            /* Receive Identity request */
1447
+            recvbuf = testgnb_ngap_read(ngap1);
1448
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1449
+            testngap_recv(test_uei, recvbuf);
1450
+
1451
+            /* Send Identity response */
1452
+            gmmbuf = testgmm_build_identity_response(test_uei);
1453
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1454
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1455
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1456
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1457
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1458
+#endif
1459
+
1460
+            /* Receive Authentication request */
1461
+            recvbuf = testgnb_ngap_read(ngap1);
1462
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1463
+            testngap_recv(test_uei, recvbuf);
1464
+
1465
+            /* Send Authentication response */
1466
+            gmmbuf = testgmm_build_authentication_response(test_uei);
1467
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1468
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1469
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1470
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1471
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1472
+
1473
+            /* Receive Security mode command */
1474
+            recvbuf = testgnb_ngap_read(ngap1);
1475
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1476
+            testngap_recv(test_uei, recvbuf);
1477
+
1478
+            /* Send Security mode complete */
1479
+            gmmbuf = testgmm_build_security_mode_complete(test_uei, nasbuf);
1480
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1481
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1482
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1483
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1484
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1485
+
1486
+            /* Receive InitialContextSetupRequest +
1487
+            * Registration accept */
1488
+            recvbuf = testgnb_ngap_read(ngap1);
1489
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1490
+            testngap_recv(test_uei, recvbuf);
1491
+            ABTS_INT_EQUAL(tc,
1492
+                    NGAP_ProcedureCode_id_InitialContextSetup,
1493
+                    test_uei->ngap_procedure_code);
1494
+
1495
+            /* Send UERadioCapabilityInfoIndication */
1496
+            sendbuf = testngap_build_ue_radio_capability_info_indication(test_uei);
1497
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1498
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1499
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1500
+
1501
+            /* Send InitialContextSetupResponse */
1502
+            sendbuf = testngap_build_initial_context_setup_response(test_uei, false);
1503
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1504
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1505
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1506
+
1507
+            /* Send Registration complete */
1508
+            gmmbuf = testgmm_build_registration_complete(test_uei);
1509
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1510
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1511
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1512
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1513
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1514
+
1515
+            /* Receive Configuration update command */
1516
+            recvbuf = testgnb_ngap_read(ngap1);
1517
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1518
+            testngap_recv(test_uei, recvbuf);
1519
+
1520
+            sess->ul_nas_transport_param.request_type =
1521
+                OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
1522
+            sess->ul_nas_transport_param.dnn = 1;
1523
+            sess->ul_nas_transport_param.s_nssai = 0;
1524
+
1525
+            sess->pdu_session_establishment_param.ssc_mode = 1;
1526
+            sess->pdu_session_establishment_param.epco = 1;
1527
+
1528
+            gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
1529
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1530
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1531
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1532
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1533
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1534
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1535
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1536
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1537
+
1538
+            /* Receive PDUSessionResourceSetupRequest +
1539
+            * DL NAS transport +
1540
+            * PDU session establishment accept */
1541
+            recvbuf = testgnb_ngap_read(ngap1);
1542
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1543
+            testngap_recv(test_uei, recvbuf);
1544
+            ABTS_INT_EQUAL(tc,
1545
+                    NGAP_ProcedureCode_id_PDUSessionResourceSetup,
1546
+                    test_uei->ngap_procedure_code);
1547
+
1548
+            /* Send PDUSessionResourceSetupResponse */
1549
+            sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
1550
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1551
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1552
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1553
+        }
1554
+
1555
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1556
+            /* Send PDU session release request */
1557
+            sess = test_sess_find_by_psi(test_uei, 5);
1558
+            ogs_assert(sess);
1559
+
1560
+            /* Send PDU Session release request */
1561
+            sess->ul_nas_transport_param.request_type = 0;
1562
+            sess->ul_nas_transport_param.dnn = 0;
1563
+            sess->ul_nas_transport_param.s_nssai = 0;
1564
+
1565
+            sess->pdu_session_establishment_param.ssc_mode = 0;
1566
+            sess->pdu_session_establishment_param.epco = 0;
1567
+
1568
+            gsmbuf = testgsm_build_pdu_session_release_request(sess);
1569
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1570
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1571
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1572
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1573
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1574
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1575
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1576
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1577
+
1578
+            /* Receive PDUSessionResourceReleaseCommand +
1579
+            * DL NAS transport +
1580
+            * PDU session release command */
1581
+            recvbuf = testgnb_ngap_read(ngap1);
1582
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1583
+            testngap_recv(test_uei, recvbuf);
1584
+            ABTS_INT_EQUAL(tc,
1585
+                    NGAP_ProcedureCode_id_PDUSessionResourceRelease,
1586
+                    test_uei->ngap_procedure_code);
1587
+
1588
+            /* Send PDUSessionResourceReleaseResponse */
1589
+            sendbuf = testngap_build_pdu_session_resource_release_response(sess);
1590
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1591
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1592
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1593
+
1594
+            /* Send UplinkNASTransport +
1595
+            * UL NAS trasnport +
1596
+            * PDU session resource release complete */
1597
+            sess->ul_nas_transport_param.request_type = 0;
1598
+            sess->ul_nas_transport_param.dnn = 0;
1599
+            sess->ul_nas_transport_param.s_nssai = 0;
1600
+
1601
+            sess->pdu_session_establishment_param.ssc_mode = 0;
1602
+            sess->pdu_session_establishment_param.epco = 0;
1603
+
1604
+            gsmbuf = testgsm_build_pdu_session_release_complete(sess);
1605
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1606
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1607
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1608
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1609
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1610
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1611
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1612
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1613
+        }
1614
+
1615
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1616
+            /* Send De-registration request */
1617
+            gmmbuf = testgmm_build_de_registration_request(test_uei, 1, true, true);
1618
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1619
+            sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
1620
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1621
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1622
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1623
+
1624
+            /* Receive UEContextReleaseCommand */
1625
+            recvbuf = testgnb_ngap_read(ngap1);
1626
+            ABTS_PTR_NOTNULL(tc, recvbuf);
1627
+            testngap_recv(test_uei, recvbuf);
1628
+            ABTS_INT_EQUAL(tc,
1629
+                    NGAP_ProcedureCode_id_UEContextRelease,
1630
+                    test_uei->ngap_procedure_code);
1631
+
1632
+            /* Send UEContextReleaseComplete */
1633
+            sendbuf = testngap_build_ue_context_release_complete(test_uei);
1634
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1635
+            rv = testgnb_ngap_send(ngap1, sendbuf);
1636
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1637
+        }
1638
+
1639
+        ogs_msleep(300);
1640
+
1641
+        /* Register to Target AMF */
1642
+
1643
+        /* Make the same UE from scratch and give it the 5G GUTI from Old AMF */
1644
+
1645
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1646
+            const char *scheme_output_target = {
1647
+                "0000000001",
1648
+                "0000000002",
1649
+                "0000000003",
1650
+                "0000000004",
1651
+                "0000000005",
1652
+            };
1653
+
1654
+            /* Setup Test UE & Session Context */
1655
+            memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
1656
+
1657
+            mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
1658
+            mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
1659
+            mobile_identity_suci.routing_indicator1 = 0;
1660
+            mobile_identity_suci.routing_indicator2 = 0xf;
1661
+            mobile_identity_suci.routing_indicator3 = 0xf;
1662
+            mobile_identity_suci.routing_indicator4 = 0xf;
1663
+            mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
1664
+            mobile_identity_suci.home_network_pki_value = 0;
1665
+
1666
+            test_ue_targeti = test_ue_add_by_suci(
1667
+                    &mobile_identity_suci, scheme_output_targeti);
1668
+            ogs_assert(test_ue_targeti);
1669
+
1670
+            test_ue_targeti->nr_cgi.cell_id = 0x40000;
1671
+
1672
+            test_ue_targeti->nas.registration.tsc = 0;
1673
+            test_ue_targeti->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
1674
+            test_ue_targeti->nas.registration.follow_on_request = 1;
1675
+            test_ue_targeti->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
1676
+
1677
+            test_ue_targeti->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
1678
+            test_ue_targeti->opc_string = "e8ed289deba952e4283b54e88e6183ca";
1679
+        }
1680
+
1681
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1682
+            if (i > 0)
1683
+                test_ue_targeti->ran_ue_ngap_id = test_ue_targeti-1->ran_ue_ngap_id;
1684
+            else
1685
+                test_ue_targeti->ran_ue_ngap_id = 0;
1686
+
1687
+            /* Send PDU session establishment request */
1688
+            sess = test_sess_add_by_dnn_and_psi(test_ue_targeti, "internet", 6);
1689
+            ogs_assert(sess);
1690
+
1691
+            /********** Insert Subscriber in Database */
1692
+            doc = test_db_new_simple(test_ue_targeti);
1693
+            ABTS_PTR_NOTNULL(tc, doc);
1694
+            ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue_targeti, doc));
1695
+
1696
+            /* Set the 5G GUTI to Old AMF's 5G GUTI */
1697
+            test_ue_targeti->nas_5gs_guti = test_uei->nas_5gs_guti;
1698
+
1699
+            /* Send Registration request */
1700
+            test_ue_targeti->registration_request_param.guti = 1;
1701
+            gmmbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
1702
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1703
+
1704
+            test_ue_targeti->registration_request_param.gmm_capability = 1;
1705
+            test_ue_targeti->registration_request_param.s1_ue_network_capability = 1;
1706
+            test_ue_targeti->registration_request_param.requested_nssai = 1;
1707
+            test_ue_targeti->registration_request_param.last_visited_registered_tai = 1;
1708
+            test_ue_targeti->registration_request_param.ue_usage_setting = 1;
1709
+            nasbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
1710
+            ABTS_PTR_NOTNULL(tc, nasbuf);
1711
+
1712
+            sendbuf = testngap_build_initial_ue_message(test_ue_targeti, gmmbuf,
1713
+                        NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
1714
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1715
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1716
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1717
+
1718
+#if 0
1719
+            /* Receive Identity request */
1720
+            recvbuf_target = testgnb_ngap_read(ngap2);
1721
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1722
+            testngap_recv(test_ue_targeti, recvbuf_target);
1723
+
1724
+            /* Send Identity response */
1725
+            gmmbuf = testgmm_build_identity_response(test_ue_targeti);
1726
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1727
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1728
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1729
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1730
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1731
+#endif
1732
+
1733
+            /* Receive Authentication request */
1734
+            recvbuf_target = testgnb_ngap_read(ngap2);
1735
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1736
+            testngap_recv(test_ue_targeti, recvbuf_target);
1737
+
1738
+            /* Send Authentication response */
1739
+            gmmbuf = testgmm_build_authentication_response(test_ue_targeti);
1740
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1741
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1742
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1743
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1744
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1745
+
1746
+            /* Receive Security mode command */
1747
+            recvbuf_target = testgnb_ngap_read(ngap2);
1748
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1749
+            testngap_recv(test_ue_targeti, recvbuf_target);
1750
+
1751
+            /* Send Security mode complete */
1752
+            gmmbuf = testgmm_build_security_mode_complete(test_ue_targeti, nasbuf);
1753
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1754
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1755
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1756
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1757
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1758
+
1759
+            /* Receive InitialContextSetupRequest +
1760
+            * Registration accept */
1761
+            recvbuf_target = testgnb_ngap_read(ngap2);
1762
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1763
+            testngap_recv(test_ue_targeti, recvbuf_target);
1764
+            ABTS_INT_EQUAL(tc,
1765
+                    NGAP_ProcedureCode_id_InitialContextSetup,
1766
+                    test_ue_targeti->ngap_procedure_code);
1767
+
1768
+            /* Send UERadioCapabilityInfoIndication */
1769
+            sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue_targeti);
1770
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1771
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1772
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1773
+
1774
+            /* Send InitialContextSetupResponse */
1775
+            sendbuf = testngap_build_initial_context_setup_response(test_ue_targeti, false);
1776
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1777
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1778
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1779
+
1780
+            /* Send Registration complete */
1781
+            gmmbuf = testgmm_build_registration_complete(test_ue_targeti);
1782
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1783
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1784
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1785
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1786
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1787
+
1788
+            /* Receive Configuration update command */
1789
+            recvbuf_target = testgnb_ngap_read(ngap2);
1790
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1791
+            testngap_recv(test_ue_targeti, recvbuf_target);
1792
+
1793
+            sess->ul_nas_transport_param.request_type =
1794
+                OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
1795
+            sess->ul_nas_transport_param.dnn = 1;
1796
+            sess->ul_nas_transport_param.s_nssai = 0;
1797
+
1798
+            sess->pdu_session_establishment_param.ssc_mode = 1;
1799
+            sess->pdu_session_establishment_param.epco = 1;
1800
+
1801
+            gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
1802
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1803
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1804
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1805
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1806
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1807
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1808
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1809
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1810
+
1811
+            /* Receive PDUSessionResourceSetupRequest +
1812
+            * DL NAS transport +
1813
+            * PDU session establishment accept */
1814
+            recvbuf_target = testgnb_ngap_read(ngap2);
1815
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1816
+            testngap_recv(test_ue_targeti, recvbuf_target);
1817
+            ABTS_INT_EQUAL(tc,
1818
+                    NGAP_ProcedureCode_id_PDUSessionResourceSetup,
1819
+                    test_ue_targeti->ngap_procedure_code);
1820
+
1821
+            /* Send PDUSessionResourceSetupResponse */
1822
+            sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
1823
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1824
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1825
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1826
+        }
1827
+
1828
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1829
+            /* Send PDU session release request */
1830
+            sess = test_sess_find_by_psi(test_ue_targeti, 6);
1831
+            ogs_assert(sess);
1832
+
1833
+            /* Send PDU Session release request */
1834
+            sess->ul_nas_transport_param.request_type = 0;
1835
+            sess->ul_nas_transport_param.dnn = 0;
1836
+            sess->ul_nas_transport_param.s_nssai = 0;
1837
+
1838
+            sess->pdu_session_establishment_param.ssc_mode = 0;
1839
+            sess->pdu_session_establishment_param.epco = 0;
1840
+
1841
+            gsmbuf = testgsm_build_pdu_session_release_request(sess);
1842
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1843
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1844
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1845
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1846
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1847
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1848
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1849
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1850
+
1851
+            /* Receive PDUSessionResourceReleaseCommand +
1852
+            * DL NAS transport +
1853
+            * PDU session release command */
1854
+            recvbuf_target = testgnb_ngap_read(ngap2);
1855
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1856
+            testngap_recv(test_ue_targeti, recvbuf_target);
1857
+            ABTS_INT_EQUAL(tc,
1858
+                    NGAP_ProcedureCode_id_PDUSessionResourceRelease,
1859
+                    test_ue_targeti->ngap_procedure_code);
1860
+
1861
+            /* Send PDUSessionResourceReleaseResponse */
1862
+            sendbuf = testngap_build_pdu_session_resource_release_response(sess);
1863
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1864
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1865
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1866
+
1867
+            /* Send UplinkNASTransport +
1868
+            * UL NAS trasnport +
1869
+            * PDU session resource release complete */
1870
+            sess->ul_nas_transport_param.request_type = 0;
1871
+            sess->ul_nas_transport_param.dnn = 0;
1872
+            sess->ul_nas_transport_param.s_nssai = 0;
1873
+
1874
+            sess->pdu_session_establishment_param.ssc_mode = 0;
1875
+            sess->pdu_session_establishment_param.epco = 0;
1876
+
1877
+            gsmbuf = testgsm_build_pdu_session_release_complete(sess);
1878
+            ABTS_PTR_NOTNULL(tc, gsmbuf);
1879
+            gmmbuf = testgmm_build_ul_nas_transport(sess,
1880
+                    OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
1881
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1882
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1883
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1884
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1885
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1886
+        }
1887
+
1888
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1889
+            /* Send De-registration request */
1890
+            gmmbuf = testgmm_build_de_registration_request(test_ue_targeti, 1, true, true);
1891
+            ABTS_PTR_NOTNULL(tc, gmmbuf);
1892
+            sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
1893
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1894
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1895
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1896
+
1897
+            /* Receive UEContextReleaseCommand */
1898
+            recvbuf_target = testgnb_ngap_read(ngap2);
1899
+            ABTS_PTR_NOTNULL(tc, recvbuf_target);
1900
+            testngap_recv(test_ue_targeti, recvbuf_target);
1901
+            ABTS_INT_EQUAL(tc,
1902
+                    NGAP_ProcedureCode_id_UEContextRelease,
1903
+                    test_ue_targeti->ngap_procedure_code);
1904
+
1905
+            /* Send UEContextReleaseComplete */
1906
+            sendbuf = testngap_build_ue_context_release_complete(test_ue_targeti);
1907
+            ABTS_PTR_NOTNULL(tc, sendbuf);
1908
+            rv = testgnb_ngap_send(ngap2, sendbuf);
1909
+            ABTS_INT_EQUAL(tc, OGS_OK, rv);
1910
+        }
1911
+
1912
+        ogs_msleep(300);
1913
+
1914
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1915
+            /********** Remove Subscriber in Database */
1916
+            ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue_targeti));
1917
+        }
1918
+
1919
+        for (i = 0; i < NUM_OF_TEST_UE_3; i++) {
1920
+            /********** Remove Subscriber in Database */
1921
+            ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
1922
+        }
1923
+    }
1924
+
1925
+    /* Clear Test UE Context */
1926
+    test_ue_remove_all();
1927
+
1928
+    /* gNB disonncect from UPF */
1929
+    testgnb_gtpu_close(gtpu2);
1930
+    /* gNB disonncect from UPF */
1931
+    testgnb_gtpu_close(gtpu1);
1932
+
1933
+    /* gNB disonncect from Target AMF */
1934
+    testgnb_ngap_close(ngap2);
1935
+    /* gNB disonncect from Old AMF */
1936
+    testgnb_ngap_close(ngap1);
1937
+}
1938
+
1939
+static void test3_func(abts_case *tc, void *data)
1940
+{
1941
+    int rv;
1942
+    ogs_socknode_t *ngap1, *ngap2;
1943
+    ogs_socknode_t *gtpu1, *gtpu2;
1944
+    ogs_pkbuf_t *gmmbuf;
1945
+    ogs_pkbuf_t *gsmbuf;
1946
+    ogs_pkbuf_t *nasbuf;
1947
+    ogs_pkbuf_t *sendbuf;
1948
+    ogs_pkbuf_t *recvbuf;
1949
+    ogs_pkbuf_t *recvbuf_target;
1950
+    ogs_ngap_message_t message;
1951
+    int i;
1952
+
1953
+    uint8_t tmpOGS_HUGE_LEN;
1954
+    char *_gtp_payload = "34ff0024"
1955
+        "0000000100000085 010002004500001c 0c0b000040015a7a 0a2d00010a2d0002"
1956
+        "00000964cd7c291f";
1957
+
1958
+    /* Test: 1 UE, Old AMF, Target AMF,
1959
+     *       register to Old AMF, PDU session establishment, session release, (stay registered)
1960
+     *       register to Target AMF with Old AMF's 5G GUTI,
1961
+     *       UE context transfer, Registration status update
1962
+     *       PDU session establishment, session release, deregister */
1963
+
1964
+    #define NUM_OF_TEST_UE_1 1
1965
+
1966
+    ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
1967
+    test_ue_t *test_ueNUM_OF_TEST_UE_1;
1968
+    test_ue_t *test_ue_targetNUM_OF_TEST_UE_1;
1969
+    test_sess_t *sess = NULL;
1970
+    test_bearer_t *qos_flow = NULL;
1971
+
1972
+    bson_t *doc = NULL;
1973
+
1974
+    /* First gNB connects to Target AMF */
1975
+    ngap2 = testngap_client(2, AF_INET);
1976
+    ABTS_PTR_NOTNULL(tc, ngap2);
1977
+
1978
+    /* Second gNB connects to Old AMF */
1979
+    ngap1 = testngap_client(1, AF_INET);
1980
+    ABTS_PTR_NOTNULL(tc, ngap1);
1981
+
1982
+    /* Two gNB connects to UPF */
1983
+    gtpu1 = test_gtpu_server(1, AF_INET);
1984
+    ABTS_PTR_NOTNULL(tc, gtpu1);
1985
+
1986
+    gtpu2 = test_gtpu_server(2, AF_INET);
1987
+    ABTS_PTR_NOTNULL(tc, gtpu2);
1988
+
1989
+    /* NG-Setup Reqeust/Response for Target gNB - with Target AMF */
1990
+    sendbuf = testngap_build_ng_setup_request(0x4000, 28);
1991
+    ABTS_PTR_NOTNULL(tc, sendbuf);
1992
+    rv = testgnb_ngap_send(ngap2, sendbuf);
1993
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
1994
+
1995
+    recvbuf = testgnb_ngap_read(ngap2);
1996
+    ABTS_PTR_NOTNULL(tc, recvbuf);
1997
+    testngap_recv(test_ue, recvbuf);
1998
+
1999
+    /* NG-Setup Reqeust/Response for Source gNB - with Old AMF */
2000
+    sendbuf = testngap_build_ng_setup_request(0x4001, 28);
2001
+    ABTS_PTR_NOTNULL(tc, sendbuf);
2002
+    rv = testgnb_ngap_send(ngap1, sendbuf);
2003
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
2004
+
2005
+    recvbuf_target = testgnb_ngap_read(ngap1);
2006
+    ABTS_PTR_NOTNULL(tc, recvbuf_target);
2007
+    testngap_recv(test_ue, recvbuf_target);
2008
+
2009
+    /* Register to Old AMF */
2010
+
2011
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2012
+        const char *scheme_output = {
2013
+            "0000000001",
2014
+            "0000000002",
2015
+            "0000000003",
2016
+            "0000000004",
2017
+            "0000000005",
2018
+        };
2019
+
2020
+        /* Setup Test UE & Session Context */
2021
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
2022
+
2023
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
2024
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
2025
+        mobile_identity_suci.routing_indicator1 = 0;
2026
+        mobile_identity_suci.routing_indicator2 = 0xf;
2027
+        mobile_identity_suci.routing_indicator3 = 0xf;
2028
+        mobile_identity_suci.routing_indicator4 = 0xf;
2029
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
2030
+        mobile_identity_suci.home_network_pki_value = 0;
2031
+
2032
+        test_uei = test_ue_add_by_suci(
2033
+                &mobile_identity_suci, scheme_outputi);
2034
+        ogs_assert(test_uei);
2035
+
2036
+        test_uei->nr_cgi.cell_id = 0x40001;
2037
+
2038
+        test_uei->nas.registration.tsc = 0;
2039
+        test_uei->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
2040
+        test_uei->nas.registration.follow_on_request = 1;
2041
+        test_uei->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
2042
+
2043
+        test_uei->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
2044
+        test_uei->opc_string = "e8ed289deba952e4283b54e88e6183ca";
2045
+    }
2046
+
2047
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2048
+        if (i > 0)
2049
+            test_uei->ran_ue_ngap_id = test_uei-1->ran_ue_ngap_id;
2050
+        else
2051
+            test_uei->ran_ue_ngap_id = 0;
2052
+
2053
+        /* pdu_id == 5 */
2054
+
2055
+        /* Send PDU session establishment request */
2056
+        sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
2057
+        ogs_assert(sess);
2058
+
2059
+        /********** Insert Subscriber in Database */
2060
+        doc = test_db_new_simple(test_uei);
2061
+        ABTS_PTR_NOTNULL(tc, doc);
2062
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_uei, doc));
2063
+
2064
+        /* Send Registration request - with SUCI */
2065
+        // test_uei->registration_request_param.guti = 1;
2066
+        gmmbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
2067
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2068
+
2069
+        test_uei->registration_request_param.gmm_capability = 1;
2070
+        test_uei->registration_request_param.s1_ue_network_capability = 1;
2071
+        test_uei->registration_request_param.requested_nssai = 1;
2072
+        test_uei->registration_request_param.last_visited_registered_tai = 1;
2073
+        test_uei->registration_request_param.ue_usage_setting = 1;
2074
+        nasbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
2075
+        ABTS_PTR_NOTNULL(tc, nasbuf);
2076
+
2077
+        sendbuf = testngap_build_initial_ue_message(test_uei, gmmbuf,
2078
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
2079
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2080
+
2081
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2082
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2083
+
2084
+#if 0
2085
+        /* Receive Identity request */
2086
+        recvbuf = testgnb_ngap_read(ngap1);
2087
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2088
+        testngap_recv(test_uei, recvbuf);
2089
+
2090
+        /* Send Identity response */
2091
+        gmmbuf = testgmm_build_identity_response(test_uei);
2092
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2093
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2094
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2095
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2096
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2097
+#endif
2098
+
2099
+        /* Receive Authentication request */
2100
+        recvbuf = testgnb_ngap_read(ngap1);
2101
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2102
+        testngap_recv(test_uei, recvbuf);
2103
+
2104
+        /* Send Authentication response */
2105
+        gmmbuf = testgmm_build_authentication_response(test_uei);
2106
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2107
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2108
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2109
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2110
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2111
+
2112
+        /* Receive Security mode command */
2113
+        recvbuf = testgnb_ngap_read(ngap1);
2114
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2115
+        testngap_recv(test_uei, recvbuf);
2116
+
2117
+        /* Send Security mode complete */
2118
+        gmmbuf = testgmm_build_security_mode_complete(test_uei, nasbuf);
2119
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2120
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2121
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2122
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2123
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2124
+
2125
+        /* Receive InitialContextSetupRequest +
2126
+         * Registration accept */
2127
+        recvbuf = testgnb_ngap_read(ngap1);
2128
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2129
+        testngap_recv(test_uei, recvbuf);
2130
+        ABTS_INT_EQUAL(tc,
2131
+                NGAP_ProcedureCode_id_InitialContextSetup,
2132
+                test_uei->ngap_procedure_code);
2133
+
2134
+        /* Send UERadioCapabilityInfoIndication */
2135
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_uei);
2136
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2137
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2138
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2139
+
2140
+        /* Send InitialContextSetupResponse */
2141
+        sendbuf = testngap_build_initial_context_setup_response(test_uei, false);
2142
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2143
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2144
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2145
+
2146
+        /* Send Registration complete */
2147
+        gmmbuf = testgmm_build_registration_complete(test_uei);
2148
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2149
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2150
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2151
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2152
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2153
+
2154
+        /* Receive Configuration update command */
2155
+        recvbuf = testgnb_ngap_read(ngap1);
2156
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2157
+        testngap_recv(test_uei, recvbuf);
2158
+
2159
+        sess->ul_nas_transport_param.request_type =
2160
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
2161
+        sess->ul_nas_transport_param.dnn = 1;
2162
+        sess->ul_nas_transport_param.s_nssai = 0;
2163
+
2164
+        sess->pdu_session_establishment_param.ssc_mode = 1;
2165
+        sess->pdu_session_establishment_param.epco = 1;
2166
+
2167
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
2168
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2169
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2170
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2171
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2172
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2173
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2174
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2175
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2176
+
2177
+        /* Receive PDUSessionResourceSetupRequest +
2178
+         * DL NAS transport +
2179
+         * PDU session establishment accept */
2180
+        recvbuf = testgnb_ngap_read(ngap1);
2181
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2182
+        testngap_recv(test_uei, recvbuf);
2183
+        ABTS_INT_EQUAL(tc,
2184
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
2185
+                test_uei->ngap_procedure_code);
2186
+
2187
+        /* Send PDUSessionResourceSetupResponse */
2188
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
2189
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2190
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2191
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2192
+    }
2193
+
2194
+    /* Stay registered on Old AMF, with active session ?
2195
+     *  - This scenario should be made with "Inter NG-RAN node N2 based handover" beforehand,
2196
+     *  but then the UE context transfer is skipped during the registartion
2197
+     *  TS 23.502, 4.9.1.3.3, step 12
2198
+     */
2199
+
2200
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2201
+        /* Send PDU session release request */
2202
+        sess = test_sess_find_by_psi(test_uei, 5);
2203
+        ogs_assert(sess);
2204
+
2205
+        /* Send PDU Session release request */
2206
+        sess->ul_nas_transport_param.request_type = 0;
2207
+        sess->ul_nas_transport_param.dnn = 0;
2208
+        sess->ul_nas_transport_param.s_nssai = 0;
2209
+
2210
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2211
+        sess->pdu_session_establishment_param.epco = 0;
2212
+
2213
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
2214
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2215
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2216
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2217
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2218
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2219
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2220
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2221
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2222
+
2223
+        /* Receive PDUSessionResourceReleaseCommand +
2224
+         * DL NAS transport +
2225
+         * PDU session release command */
2226
+        recvbuf = testgnb_ngap_read(ngap1);
2227
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2228
+        testngap_recv(test_uei, recvbuf);
2229
+        ABTS_INT_EQUAL(tc,
2230
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
2231
+                test_uei->ngap_procedure_code);
2232
+
2233
+        /* Send PDUSessionResourceReleaseResponse */
2234
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
2235
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2236
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2237
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2238
+
2239
+        /* Send UplinkNASTransport +
2240
+         * UL NAS trasnport +
2241
+         * PDU session resource release complete */
2242
+        sess->ul_nas_transport_param.request_type = 0;
2243
+        sess->ul_nas_transport_param.dnn = 0;
2244
+        sess->ul_nas_transport_param.s_nssai = 0;
2245
+
2246
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2247
+        sess->pdu_session_establishment_param.epco = 0;
2248
+
2249
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
2250
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2251
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2252
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2253
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2254
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2255
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2256
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2257
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2258
+    }
2259
+
2260
+#if 0
2261
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2262
+        /* Send De-registration request */
2263
+        gmmbuf = testgmm_build_de_registration_request(test_uei, 1, true, true);
2264
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2265
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2266
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2267
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2268
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2269
+
2270
+        /* Receive UEContextReleaseCommand */
2271
+        recvbuf = testgnb_ngap_read(ngap1);
2272
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2273
+        testngap_recv(test_uei, recvbuf);
2274
+        ABTS_INT_EQUAL(tc,
2275
+                NGAP_ProcedureCode_id_UEContextRelease,
2276
+                test_uei->ngap_procedure_code);
2277
+
2278
+        /* Send UEContextReleaseComplete */
2279
+        sendbuf = testngap_build_ue_context_release_complete(test_uei);
2280
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2281
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2282
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2283
+    }
2284
+
2285
+    ogs_msleep(300);
2286
+
2287
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2288
+        /********** Remove Subscriber in Database */
2289
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
2290
+    }
2291
+
2292
+    /* Clear Test UE Context */
2293
+    test_ue_remove_all();
2294
+#endif
2295
+
2296
+    ogs_msleep(100);
2297
+
2298
+    /* Register to Target AMF */
2299
+
2300
+    /* Make the same subscriber from scratch and give him the 5G GUTI from Old AMF */
2301
+
2302
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2303
+        const char *scheme_output_target = {
2304
+            "0000000001",
2305
+            "0000000002",
2306
+            "0000000003",
2307
+            "0000000004",
2308
+            "0000000005",
2309
+        };
2310
+
2311
+        /* Setup Test UE & Session Context */
2312
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
2313
+
2314
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
2315
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
2316
+        mobile_identity_suci.routing_indicator1 = 0;
2317
+        mobile_identity_suci.routing_indicator2 = 0xf;
2318
+        mobile_identity_suci.routing_indicator3 = 0xf;
2319
+        mobile_identity_suci.routing_indicator4 = 0xf;
2320
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
2321
+        mobile_identity_suci.home_network_pki_value = 0;
2322
+
2323
+        test_ue_targeti = test_ue_add_by_suci(
2324
+                &mobile_identity_suci, scheme_output_targeti);
2325
+        ogs_assert(test_ue_targeti);
2326
+
2327
+        /* Different cell id */
2328
+        test_ue_targeti->nr_cgi.cell_id = 0x40000;
2329
+
2330
+        test_ue_targeti->nas.registration.tsc = 0;
2331
+        test_ue_targeti->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
2332
+        test_ue_targeti->nas.registration.follow_on_request = 1;
2333
+        /* Mobility registration update */
2334
+        test_ue_targeti->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_MOBILITY_UPDATING;
2335
+
2336
+        test_ue_targeti->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
2337
+        test_ue_targeti->opc_string = "e8ed289deba952e4283b54e88e6183ca";
2338
+    }
2339
+
2340
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2341
+        if (i > 0)
2342
+            test_ue_targeti->ran_ue_ngap_id = test_ue_targeti-1->ran_ue_ngap_id;
2343
+        else
2344
+            test_ue_targeti->ran_ue_ngap_id = 0;
2345
+
2346
+        /* pdu_id == 5 */
2347
+
2348
+        /* Send PDU session establishment request */
2349
+        sess = test_sess_add_by_dnn_and_psi(test_ue_targeti, "internet", 5);
2350
+        ogs_assert(sess);
2351
+
2352
+        /********** Insert Subscriber in Database */
2353
+        doc = test_db_new_simple(test_ue_targeti);
2354
+        ABTS_PTR_NOTNULL(tc, doc);
2355
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue_targeti, doc));
2356
+
2357
+        /* Set the 5G GUTI to Old AMF's 5G GUTI */
2358
+        test_ue_targeti->nas_5gs_guti = test_uei->nas_5gs_guti;
2359
+
2360
+        /* Send Registration request */
2361
+        test_ue_targeti->registration_request_param.guti = 1;
2362
+        gmmbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
2363
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2364
+
2365
+        test_ue_targeti->registration_request_param.gmm_capability = 1;
2366
+        test_ue_targeti->registration_request_param.s1_ue_network_capability = 1;
2367
+        test_ue_targeti->registration_request_param.requested_nssai = 1;
2368
+        test_ue_targeti->registration_request_param.last_visited_registered_tai = 1;
2369
+        test_ue_targeti->registration_request_param.ue_usage_setting = 1;
2370
+        nasbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
2371
+        ABTS_PTR_NOTNULL(tc, nasbuf);
2372
+
2373
+        sendbuf = testngap_build_initial_ue_message(test_ue_targeti, gmmbuf,
2374
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
2375
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2376
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2377
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2378
+
2379
+#if 0
2380
+        /* Receive Identity request */
2381
+        recvbuf_target = testgnb_ngap_read(ngap2);
2382
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2383
+        testngap_recv(test_ue_targeti, recvbuf_target);
2384
+
2385
+        /* Send Identity response */
2386
+        gmmbuf = testgmm_build_identity_response(test_ue_targeti);
2387
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2388
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2389
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2390
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2391
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2392
+#endif
2393
+
2394
+        /* Receive Authentication request */
2395
+        recvbuf_target = testgnb_ngap_read(ngap2);
2396
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2397
+        testngap_recv(test_ue_targeti, recvbuf_target);
2398
+
2399
+        /* Send Authentication response */
2400
+        gmmbuf = testgmm_build_authentication_response(test_ue_targeti);
2401
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2402
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2403
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2404
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2405
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2406
+
2407
+        /* Receive Security mode command */
2408
+        recvbuf_target = testgnb_ngap_read(ngap2);
2409
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2410
+        testngap_recv(test_ue_targeti, recvbuf_target);
2411
+
2412
+        /* Send Security mode complete */
2413
+        gmmbuf = testgmm_build_security_mode_complete(test_ue_targeti, nasbuf);
2414
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2415
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2416
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2417
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2418
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2419
+
2420
+        /* Receive InitialContextSetupRequest +
2421
+         * Registration accept */
2422
+        recvbuf_target = testgnb_ngap_read(ngap2);
2423
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2424
+        testngap_recv(test_ue_targeti, recvbuf_target);
2425
+        ABTS_INT_EQUAL(tc,
2426
+                NGAP_ProcedureCode_id_InitialContextSetup,
2427
+                test_ue_targeti->ngap_procedure_code);
2428
+
2429
+        /* Send UERadioCapabilityInfoIndication */
2430
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue_targeti);
2431
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2432
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2433
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2434
+
2435
+        /* Send InitialContextSetupResponse */
2436
+        sendbuf = testngap_build_initial_context_setup_response(test_ue_targeti, false);
2437
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2438
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2439
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2440
+
2441
+        /* Send Registration complete */
2442
+        gmmbuf = testgmm_build_registration_complete(test_ue_targeti);
2443
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2444
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2445
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2446
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2447
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2448
+
2449
+        /* Receive Configuration update command */
2450
+        recvbuf_target = testgnb_ngap_read(ngap2);
2451
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2452
+        testngap_recv(test_ue_targeti, recvbuf_target);
2453
+
2454
+        sess->ul_nas_transport_param.request_type =
2455
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
2456
+        sess->ul_nas_transport_param.dnn = 1;
2457
+        sess->ul_nas_transport_param.s_nssai = 0;
2458
+
2459
+        sess->pdu_session_establishment_param.ssc_mode = 1;
2460
+        sess->pdu_session_establishment_param.epco = 1;
2461
+
2462
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
2463
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2464
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2465
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2466
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2467
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2468
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2469
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2470
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2471
+
2472
+        /* Receive PDUSessionResourceSetupRequest +
2473
+         * DL NAS transport +
2474
+         * PDU session establishment accept */
2475
+        recvbuf_target = testgnb_ngap_read(ngap2);
2476
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2477
+        testngap_recv(test_ue_targeti, recvbuf_target);
2478
+        ABTS_INT_EQUAL(tc,
2479
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
2480
+                test_ue_targeti->ngap_procedure_code);
2481
+
2482
+        /* Send PDUSessionResourceSetupResponse */
2483
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
2484
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2485
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2486
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2487
+    }
2488
+
2489
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2490
+        /* Send PDU session release request */
2491
+        sess = test_sess_find_by_psi(test_ue_targeti, 5);
2492
+        ogs_assert(sess);
2493
+
2494
+        /* Send PDU Session release request */
2495
+        sess->ul_nas_transport_param.request_type = 0;
2496
+        sess->ul_nas_transport_param.dnn = 0;
2497
+        sess->ul_nas_transport_param.s_nssai = 0;
2498
+
2499
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2500
+        sess->pdu_session_establishment_param.epco = 0;
2501
+
2502
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
2503
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2504
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2505
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2506
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2507
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2508
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2509
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2510
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2511
+
2512
+        /* Receive PDUSessionResourceReleaseCommand +
2513
+         * DL NAS transport +
2514
+         * PDU session release command */
2515
+        recvbuf_target = testgnb_ngap_read(ngap2);
2516
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2517
+        testngap_recv(test_ue_targeti, recvbuf_target);
2518
+        ABTS_INT_EQUAL(tc,
2519
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
2520
+                test_ue_targeti->ngap_procedure_code);
2521
+
2522
+        /* Send PDUSessionResourceReleaseResponse */
2523
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
2524
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2525
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2526
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2527
+
2528
+        /* Send UplinkNASTransport +
2529
+         * UL NAS trasnport +
2530
+         * PDU session resource release complete */
2531
+        sess->ul_nas_transport_param.request_type = 0;
2532
+        sess->ul_nas_transport_param.dnn = 0;
2533
+        sess->ul_nas_transport_param.s_nssai = 0;
2534
+
2535
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2536
+        sess->pdu_session_establishment_param.epco = 0;
2537
+
2538
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
2539
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2540
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2541
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2542
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2543
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2544
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2545
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2546
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2547
+    }
2548
+
2549
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2550
+        /* Send De-registration request */
2551
+        gmmbuf = testgmm_build_de_registration_request(test_ue_targeti, 1, true, true);
2552
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2553
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
2554
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2555
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2556
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2557
+
2558
+        /* Receive UEContextReleaseCommand */
2559
+        recvbuf_target = testgnb_ngap_read(ngap2);
2560
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
2561
+        testngap_recv(test_ue_targeti, recvbuf_target);
2562
+        ABTS_INT_EQUAL(tc,
2563
+                NGAP_ProcedureCode_id_UEContextRelease,
2564
+                test_ue_targeti->ngap_procedure_code);
2565
+
2566
+        /* Send UEContextReleaseComplete */
2567
+        sendbuf = testngap_build_ue_context_release_complete(test_ue_targeti);
2568
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2569
+        rv = testgnb_ngap_send(ngap2, sendbuf);
2570
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2571
+    }
2572
+
2573
+    ogs_msleep(300);
2574
+
2575
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2576
+        /********** Remove Subscriber in Database */
2577
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue_targeti));
2578
+    }
2579
+
2580
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2581
+        /********** Remove Subscriber in Database */
2582
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
2583
+    }
2584
+
2585
+    /* Clear Test UE Context */
2586
+    test_ue_remove_all();
2587
+
2588
+    /* gNB disonncect from UPF */
2589
+    testgnb_gtpu_close(gtpu2);
2590
+    /* gNB disonncect from UPF */
2591
+    testgnb_gtpu_close(gtpu1);
2592
+
2593
+    /* gNB disonncect from Target AMF */
2594
+    testgnb_ngap_close(ngap2);
2595
+    /* gNB disonncect from Old AMF */
2596
+    testgnb_ngap_close(ngap1);
2597
+}
2598
+
2599
+static void test4_func(abts_case *tc, void *data)
2600
+{
2601
+    int rv;
2602
+    ogs_socknode_t *ngap1, *ngap2;
2603
+    ogs_socknode_t *gtpu1, *gtpu2;
2604
+    ogs_pkbuf_t *gmmbuf;
2605
+    ogs_pkbuf_t *gsmbuf;
2606
+    ogs_pkbuf_t *nasbuf;
2607
+    ogs_pkbuf_t *sendbuf;
2608
+    ogs_pkbuf_t *recvbuf;
2609
+    ogs_pkbuf_t *recvbuf_target;
2610
+    ogs_ngap_message_t message;
2611
+    int i;
2612
+
2613
+    uint8_t tmpOGS_HUGE_LEN;
2614
+    char *_gtp_payload = "34ff0024"
2615
+        "0000000100000085 010002004500001c 0c0b000040015a7a 0a2d00010a2d0002"
2616
+        "00000964cd7c291f";
2617
+
2618
+    #define NUM_OF_TEST_UE_1 1
2619
+
2620
+    /* Test: 1 UE, Old AMF, Target AMF, register to Old AMF, register to Target AMF
2621
+     *       with Old AMF's 5G GUTI - AUTH FAIL,
2622
+     *       UE context transfer, Registration status update - NOT TRANSFERRED
2623
+     *       The old AMF continues
2624
+     *       as if the UE context transfer service operation was never received */
2625
+
2626
+    ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
2627
+    test_ue_t *test_ueNUM_OF_TEST_UE_1;
2628
+    test_ue_t *test_ue_targetNUM_OF_TEST_UE_1;
2629
+    test_sess_t *sess = NULL;
2630
+    test_bearer_t *qos_flow = NULL;
2631
+
2632
+    bson_t *doc = NULL;
2633
+
2634
+    /* First gNB connects to Target AMF */
2635
+    ngap2 = testngap_client(2, AF_INET);
2636
+    ABTS_PTR_NOTNULL(tc, ngap2);
2637
+
2638
+    /* Second gNB connects to Old AMF */
2639
+    ngap1 = testngap_client(1, AF_INET);
2640
+    ABTS_PTR_NOTNULL(tc, ngap1);
2641
+
2642
+    /* Two gNB connects to UPF */
2643
+    gtpu1 = test_gtpu_server(1, AF_INET);
2644
+    ABTS_PTR_NOTNULL(tc, gtpu1);
2645
+
2646
+    gtpu2 = test_gtpu_server(2, AF_INET);
2647
+    ABTS_PTR_NOTNULL(tc, gtpu2);
2648
+
2649
+    /* NG-Setup Reqeust/Response for Target gNB - with Target AMF */
2650
+    sendbuf = testngap_build_ng_setup_request(0x4000, 28);
2651
+    ABTS_PTR_NOTNULL(tc, sendbuf);
2652
+    rv = testgnb_ngap_send(ngap2, sendbuf);
2653
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
2654
+
2655
+    recvbuf = testgnb_ngap_read(ngap2);
2656
+    ABTS_PTR_NOTNULL(tc, recvbuf);
2657
+    testngap_recv(test_ue, recvbuf);
2658
+
2659
+    /* NG-Setup Reqeust/Response for Source gNB - with Old AMF */
2660
+    sendbuf = testngap_build_ng_setup_request(0x4001, 28);
2661
+    ABTS_PTR_NOTNULL(tc, sendbuf);
2662
+    rv = testgnb_ngap_send(ngap1, sendbuf);
2663
+    ABTS_INT_EQUAL(tc, OGS_OK, rv);
2664
+
2665
+    recvbuf_target = testgnb_ngap_read(ngap1);
2666
+    ABTS_PTR_NOTNULL(tc, recvbuf_target);
2667
+    testngap_recv(test_ue, recvbuf_target);
2668
+
2669
+
2670
+    /* Register to Old AMF */
2671
+
2672
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2673
+        const char *scheme_output = {
2674
+            "0000000001",
2675
+            "0000000002",
2676
+            "0000000003",
2677
+            "0000000004",
2678
+            "0000000005",
2679
+        };
2680
+
2681
+        /* Setup Test UE & Session Context */
2682
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
2683
+
2684
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
2685
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
2686
+        mobile_identity_suci.routing_indicator1 = 0;
2687
+        mobile_identity_suci.routing_indicator2 = 0xf;
2688
+        mobile_identity_suci.routing_indicator3 = 0xf;
2689
+        mobile_identity_suci.routing_indicator4 = 0xf;
2690
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
2691
+        mobile_identity_suci.home_network_pki_value = 0;
2692
+
2693
+        test_uei = test_ue_add_by_suci(
2694
+                &mobile_identity_suci, scheme_outputi);
2695
+        ogs_assert(test_uei);
2696
+
2697
+        test_uei->nr_cgi.cell_id = 0x40001;
2698
+
2699
+        test_uei->nas.registration.tsc = 0;
2700
+        test_uei->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
2701
+        test_uei->nas.registration.follow_on_request = 1;
2702
+        test_uei->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
2703
+
2704
+        test_uei->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
2705
+        test_uei->opc_string = "e8ed289deba952e4283b54e88e6183ca";
2706
+    }
2707
+
2708
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2709
+        if (i > 0)
2710
+            test_uei->ran_ue_ngap_id = test_uei-1->ran_ue_ngap_id;
2711
+        else
2712
+            test_uei->ran_ue_ngap_id = 0;
2713
+
2714
+        /* Send PDU session establishment request */
2715
+        sess = test_sess_add_by_dnn_and_psi(test_uei, "internet", 5);
2716
+        ogs_assert(sess);
2717
+
2718
+        /********** Insert Subscriber in Database */
2719
+        doc = test_db_new_simple(test_uei);
2720
+        ABTS_PTR_NOTNULL(tc, doc);
2721
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_uei, doc));
2722
+
2723
+        /* Send Registration request - with SUCI */
2724
+        // test_uei->registration_request_param.guti = 1;
2725
+        gmmbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
2726
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2727
+
2728
+        test_uei->registration_request_param.gmm_capability = 1;
2729
+        test_uei->registration_request_param.s1_ue_network_capability = 1;
2730
+        test_uei->registration_request_param.requested_nssai = 1;
2731
+        test_uei->registration_request_param.last_visited_registered_tai = 1;
2732
+        test_uei->registration_request_param.ue_usage_setting = 1;
2733
+        nasbuf = testgmm_build_registration_request(test_uei, NULL, false, false);
2734
+        ABTS_PTR_NOTNULL(tc, nasbuf);
2735
+
2736
+        sendbuf = testngap_build_initial_ue_message(test_uei, gmmbuf,
2737
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
2738
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2739
+
2740
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2741
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2742
+
2743
+#if 0
2744
+        /* Receive Identity request */
2745
+        recvbuf = testgnb_ngap_read(ngap1);
2746
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2747
+        testngap_recv(test_uei, recvbuf);
2748
+
2749
+        /* Send Identity response */
2750
+        gmmbuf = testgmm_build_identity_response(test_uei);
2751
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2752
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2753
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2754
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2755
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2756
+#endif
2757
+
2758
+        /* Receive Authentication request */
2759
+        recvbuf = testgnb_ngap_read(ngap1);
2760
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2761
+        testngap_recv(test_uei, recvbuf);
2762
+
2763
+        /* Send Authentication response */
2764
+        gmmbuf = testgmm_build_authentication_response(test_uei);
2765
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2766
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2767
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2768
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2769
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2770
+
2771
+        /* Receive Security mode command */
2772
+        recvbuf = testgnb_ngap_read(ngap1);
2773
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2774
+        testngap_recv(test_uei, recvbuf);
2775
+
2776
+        /* Send Security mode complete */
2777
+        gmmbuf = testgmm_build_security_mode_complete(test_uei, nasbuf);
2778
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2779
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2780
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2781
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2782
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2783
+
2784
+        /* Receive InitialContextSetupRequest +
2785
+         * Registration accept */
2786
+        recvbuf = testgnb_ngap_read(ngap1);
2787
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2788
+        testngap_recv(test_uei, recvbuf);
2789
+        ABTS_INT_EQUAL(tc,
2790
+                NGAP_ProcedureCode_id_InitialContextSetup,
2791
+                test_uei->ngap_procedure_code);
2792
+
2793
+        /* Send UERadioCapabilityInfoIndication */
2794
+        sendbuf = testngap_build_ue_radio_capability_info_indication(test_uei);
2795
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2796
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2797
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2798
+
2799
+        /* Send InitialContextSetupResponse */
2800
+        sendbuf = testngap_build_initial_context_setup_response(test_uei, false);
2801
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2802
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2803
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2804
+
2805
+        /* Send Registration complete */
2806
+        gmmbuf = testgmm_build_registration_complete(test_uei);
2807
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2808
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2809
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2810
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2811
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2812
+
2813
+        /* Receive Configuration update command */
2814
+        recvbuf = testgnb_ngap_read(ngap1);
2815
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2816
+        testngap_recv(test_uei, recvbuf);
2817
+
2818
+        sess->ul_nas_transport_param.request_type =
2819
+            OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
2820
+        sess->ul_nas_transport_param.dnn = 1;
2821
+        sess->ul_nas_transport_param.s_nssai = 0;
2822
+
2823
+        sess->pdu_session_establishment_param.ssc_mode = 1;
2824
+        sess->pdu_session_establishment_param.epco = 1;
2825
+
2826
+        gsmbuf = testgsm_build_pdu_session_establishment_request(sess);
2827
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2828
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2829
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2830
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2831
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2832
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2833
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2834
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2835
+
2836
+        /* Receive PDUSessionResourceSetupRequest +
2837
+         * DL NAS transport +
2838
+         * PDU session establishment accept */
2839
+        recvbuf = testgnb_ngap_read(ngap1);
2840
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2841
+        testngap_recv(test_uei, recvbuf);
2842
+        ABTS_INT_EQUAL(tc,
2843
+                NGAP_ProcedureCode_id_PDUSessionResourceSetup,
2844
+                test_uei->ngap_procedure_code);
2845
+
2846
+        /* Send PDUSessionResourceSetupResponse */
2847
+        sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
2848
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2849
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2850
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2851
+    }
2852
+
2853
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2854
+        /* Send PDU session release request */
2855
+        sess = test_sess_find_by_psi(test_uei, 5);
2856
+        ogs_assert(sess);
2857
+
2858
+        /* Send PDU Session release request */
2859
+        sess->ul_nas_transport_param.request_type = 0;
2860
+        sess->ul_nas_transport_param.dnn = 0;
2861
+        sess->ul_nas_transport_param.s_nssai = 0;
2862
+
2863
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2864
+        sess->pdu_session_establishment_param.epco = 0;
2865
+
2866
+        gsmbuf = testgsm_build_pdu_session_release_request(sess);
2867
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2868
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2869
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2870
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2871
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2872
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2873
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2874
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2875
+
2876
+        /* Receive PDUSessionResourceReleaseCommand +
2877
+         * DL NAS transport +
2878
+         * PDU session release command */
2879
+        recvbuf = testgnb_ngap_read(ngap1);
2880
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2881
+        testngap_recv(test_uei, recvbuf);
2882
+        ABTS_INT_EQUAL(tc,
2883
+                NGAP_ProcedureCode_id_PDUSessionResourceRelease,
2884
+                test_uei->ngap_procedure_code);
2885
+
2886
+        /* Send PDUSessionResourceReleaseResponse */
2887
+        sendbuf = testngap_build_pdu_session_resource_release_response(sess);
2888
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2889
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2890
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2891
+
2892
+        /* Send UplinkNASTransport +
2893
+         * UL NAS trasnport +
2894
+         * PDU session resource release complete */
2895
+        sess->ul_nas_transport_param.request_type = 0;
2896
+        sess->ul_nas_transport_param.dnn = 0;
2897
+        sess->ul_nas_transport_param.s_nssai = 0;
2898
+
2899
+        sess->pdu_session_establishment_param.ssc_mode = 0;
2900
+        sess->pdu_session_establishment_param.epco = 0;
2901
+
2902
+        gsmbuf = testgsm_build_pdu_session_release_complete(sess);
2903
+        ABTS_PTR_NOTNULL(tc, gsmbuf);
2904
+        gmmbuf = testgmm_build_ul_nas_transport(sess,
2905
+                OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, gsmbuf);
2906
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2907
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2908
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2909
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2910
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2911
+    }
2912
+
2913
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2914
+        /* Send De-registration request */
2915
+        gmmbuf = testgmm_build_de_registration_request(test_uei, 1, true, true);
2916
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
2917
+        sendbuf = testngap_build_uplink_nas_transport(test_uei, gmmbuf);
2918
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2919
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2920
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2921
+
2922
+        /* Receive UEContextReleaseCommand */
2923
+        recvbuf = testgnb_ngap_read(ngap1);
2924
+        ABTS_PTR_NOTNULL(tc, recvbuf);
2925
+        testngap_recv(test_uei, recvbuf);
2926
+        ABTS_INT_EQUAL(tc,
2927
+                NGAP_ProcedureCode_id_UEContextRelease,
2928
+                test_uei->ngap_procedure_code);
2929
+
2930
+        /* Send UEContextReleaseComplete */
2931
+        sendbuf = testngap_build_ue_context_release_complete(test_uei);
2932
+        ABTS_PTR_NOTNULL(tc, sendbuf);
2933
+        rv = testgnb_ngap_send(ngap1, sendbuf);
2934
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
2935
+    }
2936
+
2937
+    ogs_msleep(300);
2938
+
2939
+    /* Register to Target AMF */
2940
+
2941
+    /* Make the same UE from scratch and give it the 5G GUTI from Old AMF */
2942
+
2943
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2944
+        const char *scheme_output_target = {
2945
+            "0000000001",
2946
+            "0000000002",
2947
+            "0000000003",
2948
+            "0000000004",
2949
+            "0000000005",
2950
+        };
2951
+
2952
+        /* Setup Test UE & Session Context */
2953
+        memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci));
2954
+
2955
+        mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI;
2956
+        mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI;
2957
+        mobile_identity_suci.routing_indicator1 = 0;
2958
+        mobile_identity_suci.routing_indicator2 = 0xf;
2959
+        mobile_identity_suci.routing_indicator3 = 0xf;
2960
+        mobile_identity_suci.routing_indicator4 = 0xf;
2961
+        mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL;
2962
+        mobile_identity_suci.home_network_pki_value = 0;
2963
+
2964
+        test_ue_targeti = test_ue_add_by_suci(
2965
+                &mobile_identity_suci, scheme_output_targeti);
2966
+        ogs_assert(test_ue_targeti);
2967
+
2968
+        test_ue_targeti->nr_cgi.cell_id = 0x40000;
2969
+
2970
+        test_ue_targeti->nas.registration.tsc = 0;
2971
+        test_ue_targeti->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
2972
+        test_ue_targeti->nas.registration.follow_on_request = 1;
2973
+        test_ue_targeti->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL;
2974
+
2975
+        test_ue_targeti->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
2976
+        test_ue_targeti->opc_string = "e8ed289deba952e4283b54e88e6183ca";
2977
+    }
2978
+
2979
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
2980
+        if (i > 0)
2981
+            test_ue_targeti->ran_ue_ngap_id = test_ue_targeti-1->ran_ue_ngap_id;
2982
+        else
2983
+            test_ue_targeti->ran_ue_ngap_id = 0;
2984
+
2985
+        /* pdu_id == 6 */
2986
+
2987
+        /* Send PDU session establishment request */
2988
+        sess = test_sess_add_by_dnn_and_psi(test_ue_targeti, "internet", 6);
2989
+        ogs_assert(sess);
2990
+
2991
+        /********** Insert Subscriber in Database */
2992
+        doc = test_db_new_simple(test_ue_targeti);
2993
+        ABTS_PTR_NOTNULL(tc, doc);
2994
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue_targeti, doc));
2995
+
2996
+        /* Set the 5G GUTI to Old AMF's 5G GUTI */
2997
+        test_ue_targeti->nas_5gs_guti = test_uei->nas_5gs_guti;
2998
+
2999
+        /* Send Registration request */
3000
+        test_ue_targeti->registration_request_param.guti = 1;
3001
+        gmmbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
3002
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
3003
+
3004
+        test_ue_targeti->registration_request_param.gmm_capability = 1;
3005
+        test_ue_targeti->registration_request_param.s1_ue_network_capability = 1;
3006
+        test_ue_targeti->registration_request_param.requested_nssai = 1;
3007
+        test_ue_targeti->registration_request_param.last_visited_registered_tai = 1;
3008
+        test_ue_targeti->registration_request_param.ue_usage_setting = 1;
3009
+        nasbuf = testgmm_build_registration_request(test_ue_targeti, NULL, false, false);
3010
+        ABTS_PTR_NOTNULL(tc, nasbuf);
3011
+
3012
+        sendbuf = testngap_build_initial_ue_message(test_ue_targeti, gmmbuf,
3013
+                    NGAP_RRCEstablishmentCause_mo_Signalling, false, true);
3014
+        ABTS_PTR_NOTNULL(tc, sendbuf);
3015
+        rv = testgnb_ngap_send(ngap2, sendbuf);
3016
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
3017
+
3018
+#if 0
3019
+        /* Receive Identity request */
3020
+        recvbuf_target = testgnb_ngap_read(ngap2);
3021
+        ABTS_PTR_NOTNULL(tc, recvbuf_target);
3022
+        testngap_recv(test_ue_targeti, recvbuf_target);
3023
+
3024
+        /* Send Identity response */
3025
+        gmmbuf = testgmm_build_identity_response(test_ue_targeti);
3026
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
3027
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
3028
+        ABTS_PTR_NOTNULL(tc, sendbuf);
3029
+        rv = testgnb_ngap_send(ngap2, sendbuf);
3030
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
3031
+#endif
3032
+
3033
+        /* Receive Authentication request */
3034
+        recvbuf = testgnb_ngap_read(ngap2);
3035
+        ABTS_PTR_NOTNULL(tc, recvbuf);
3036
+        testngap_recv(test_ue_targeti, recvbuf);
3037
+
3038
+        /* Send Authentication failure - SYNCH failure */
3039
+        gmmbuf = testgmm_build_authentication_failure(
3040
+                test_ue_targeti, OGS_5GMM_CAUSE_SYNCH_FAILURE, 0x11223344);
3041
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
3042
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
3043
+        ABTS_PTR_NOTNULL(tc, sendbuf);
3044
+        rv = testgnb_ngap_send(ngap2, sendbuf);
3045
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
3046
+
3047
+        /* Receive Authentication request */
3048
+        recvbuf = testgnb_ngap_read(ngap2);
3049
+        ABTS_PTR_NOTNULL(tc, recvbuf);
3050
+        testngap_recv(test_ue_targeti, recvbuf);
3051
+
3052
+        /* Send Authentication failure - MAC failure */
3053
+        gmmbuf = testgmm_build_authentication_failure(
3054
+                test_ue_targeti, OGS_5GMM_CAUSE_MAC_FAILURE, 0);
3055
+        ABTS_PTR_NOTNULL(tc, gmmbuf);
3056
+        sendbuf = testngap_build_uplink_nas_transport(test_ue_targeti, gmmbuf);
3057
+        ABTS_PTR_NOTNULL(tc, sendbuf);
3058
+        rv = testgnb_ngap_send(ngap2, sendbuf);
3059
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
3060
+
3061
+        /* Receive Authentication reject */
3062
+        recvbuf = testgnb_ngap_read(ngap2);
3063
+        ABTS_PTR_NOTNULL(tc, recvbuf);
3064
+        testngap_recv(test_ue_targeti, recvbuf);
3065
+
3066
+        /* Receive UEContextReleaseCommand */
3067
+        recvbuf = testgnb_ngap_read(ngap2);
3068
+        ABTS_PTR_NOTNULL(tc, recvbuf);
3069
+        testngap_recv(test_ue_targeti, recvbuf);
3070
+        ABTS_INT_EQUAL(tc,
3071
+                NGAP_ProcedureCode_id_UEContextRelease,
3072
+                test_ue_targeti->ngap_procedure_code);
3073
+
3074
+        /* Send UEContextReleaseComplete */
3075
+        sendbuf = testngap_build_ue_context_release_complete(test_ue_targeti);
3076
+        ABTS_PTR_NOTNULL(tc, sendbuf);
3077
+        rv = testgnb_ngap_send(ngap2, sendbuf);
3078
+        ABTS_INT_EQUAL(tc, OGS_OK, rv);
3079
+    }
3080
+
3081
+    ogs_msleep(300);
3082
+
3083
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
3084
+        /********** Remove Subscriber in Database */
3085
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue_targeti));
3086
+    }
3087
+
3088
+    for (i = 0; i < NUM_OF_TEST_UE_1; i++) {
3089
+        /********** Remove Subscriber in Database */
3090
+        ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_uei));
3091
+    }
3092
+
3093
+    /* Clear Test UE Context */
3094
+    test_ue_remove_all();
3095
+
3096
+    /* gNB disonncect from UPF */
3097
+    testgnb_gtpu_close(gtpu2);
3098
+    /* gNB disonncect from UPF */
3099
+    testgnb_gtpu_close(gtpu1);
3100
+
3101
+    /* gNB disonncect from Target AMF */
3102
+    testgnb_ngap_close(ngap2);
3103
+    /* gNB disonncect from Old AMF */
3104
+    testgnb_ngap_close(ngap1);
3105
+}
3106
+
3107
+abts_suite *test_ue_context_transfer(abts_suite *suite)
3108
+{
3109
+    suite = ADD_SUITE(suite)
3110
+
3111
+    abts_run_test(suite, test1_func, NULL);
3112
+    abts_run_test(suite, test2_func, NULL);
3113
+    abts_run_test(suite, test23_func, NULL);
3114
+    abts_run_test(suite, test3_func, NULL);
3115
+    abts_run_test(suite, test4_func, NULL);
3116
+
3117
+    return suite;
3118
+}
3119
open5gs_2.7.2.4491.deef.tar.xz/tests/volte/diameter-cx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/volte/diameter-cx-path.c Changed
237
 
1
@@ -210,9 +210,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 }
12
 
13
 /* Callback for incoming User-Authorization-Answer messages */
14
@@ -300,30 +300,30 @@
15
     ogs_assert(!err && exp_err);
16
 
17
     /* Free the message */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
20
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
21
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
22
-    if (ogs_diam_logger_self()->stats.nb_recv) {
23
+    if (ogs_diam_stats_self()->stats.nb_recv) {
24
         /* Ponderate in the avg */
25
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
26
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
27
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
28
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
29
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
30
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
31
         /* Min, max */
32
-        if (dur < ogs_diam_logger_self()->stats.shortest)
33
-            ogs_diam_logger_self()->stats.shortest = dur;
34
-        if (dur > ogs_diam_logger_self()->stats.longest)
35
-            ogs_diam_logger_self()->stats.longest = dur;
36
+        if (dur < ogs_diam_stats_self()->stats.shortest)
37
+            ogs_diam_stats_self()->stats.shortest = dur;
38
+        if (dur > ogs_diam_stats_self()->stats.longest)
39
+            ogs_diam_stats_self()->stats.longest = dur;
40
     } else {
41
-        ogs_diam_logger_self()->stats.shortest = dur;
42
-        ogs_diam_logger_self()->stats.longest = dur;
43
-        ogs_diam_logger_self()->stats.avg = dur;
44
+        ogs_diam_stats_self()->stats.shortest = dur;
45
+        ogs_diam_stats_self()->stats.longest = dur;
46
+        ogs_diam_stats_self()->stats.avg = dur;
47
     }
48
     if (error)
49
-        ogs_diam_logger_self()->stats.nb_errs++;
50
+        ogs_diam_stats_self()->stats.nb_errs++;
51
     else
52
-        ogs_diam_logger_self()->stats.nb_recv++;
53
+        ogs_diam_stats_self()->stats.nb_recv++;
54
 
55
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
56
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
57
 
58
     /* Display how long it took */
59
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
60
@@ -531,9 +531,9 @@
61
     ogs_assert(ret == 0);
62
 
63
     /* Increment the counter */
64
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
65
-    ogs_diam_logger_self()->stats.nb_sent++;
66
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
67
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
68
+    ogs_diam_stats_self()->stats.nb_sent++;
69
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
70
 }
71
 
72
 /* Callback for incoming Multimedia-Auth-Answer messages */
73
@@ -621,30 +621,30 @@
74
     ogs_assert(err && !exp_err && result_code == ER_DIAMETER_SUCCESS);
75
 
76
     /* Free the message */
77
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
78
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
79
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
80
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
81
-    if (ogs_diam_logger_self()->stats.nb_recv) {
82
+    if (ogs_diam_stats_self()->stats.nb_recv) {
83
         /* Ponderate in the avg */
84
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
85
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
86
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
87
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
88
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
89
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
90
         /* Min, max */
91
-        if (dur < ogs_diam_logger_self()->stats.shortest)
92
-            ogs_diam_logger_self()->stats.shortest = dur;
93
-        if (dur > ogs_diam_logger_self()->stats.longest)
94
-            ogs_diam_logger_self()->stats.longest = dur;
95
+        if (dur < ogs_diam_stats_self()->stats.shortest)
96
+            ogs_diam_stats_self()->stats.shortest = dur;
97
+        if (dur > ogs_diam_stats_self()->stats.longest)
98
+            ogs_diam_stats_self()->stats.longest = dur;
99
     } else {
100
-        ogs_diam_logger_self()->stats.shortest = dur;
101
-        ogs_diam_logger_self()->stats.longest = dur;
102
-        ogs_diam_logger_self()->stats.avg = dur;
103
+        ogs_diam_stats_self()->stats.shortest = dur;
104
+        ogs_diam_stats_self()->stats.longest = dur;
105
+        ogs_diam_stats_self()->stats.avg = dur;
106
     }
107
     if (error)
108
-        ogs_diam_logger_self()->stats.nb_errs++;
109
+        ogs_diam_stats_self()->stats.nb_errs++;
110
     else
111
-        ogs_diam_logger_self()->stats.nb_recv++;
112
+        ogs_diam_stats_self()->stats.nb_recv++;
113
 
114
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
115
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
116
 
117
     /* Display how long it took */
118
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
119
@@ -814,9 +814,9 @@
120
     ogs_assert(ret == 0);
121
 
122
     /* Increment the counter */
123
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
124
-    ogs_diam_logger_self()->stats.nb_sent++;
125
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
126
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
127
+    ogs_diam_stats_self()->stats.nb_sent++;
128
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
129
 }
130
 
131
 /* Callback for incoming Server-Assignment-Answer messages */
132
@@ -904,30 +904,30 @@
133
     ogs_assert(err && !exp_err && result_code == ER_DIAMETER_SUCCESS);
134
 
135
     /* Free the message */
136
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
137
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
138
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
139
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
140
-    if (ogs_diam_logger_self()->stats.nb_recv) {
141
+    if (ogs_diam_stats_self()->stats.nb_recv) {
142
         /* Ponderate in the avg */
143
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
144
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
145
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
146
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
147
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
148
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
149
         /* Min, max */
150
-        if (dur < ogs_diam_logger_self()->stats.shortest)
151
-            ogs_diam_logger_self()->stats.shortest = dur;
152
-        if (dur > ogs_diam_logger_self()->stats.longest)
153
-            ogs_diam_logger_self()->stats.longest = dur;
154
+        if (dur < ogs_diam_stats_self()->stats.shortest)
155
+            ogs_diam_stats_self()->stats.shortest = dur;
156
+        if (dur > ogs_diam_stats_self()->stats.longest)
157
+            ogs_diam_stats_self()->stats.longest = dur;
158
     } else {
159
-        ogs_diam_logger_self()->stats.shortest = dur;
160
-        ogs_diam_logger_self()->stats.longest = dur;
161
-        ogs_diam_logger_self()->stats.avg = dur;
162
+        ogs_diam_stats_self()->stats.shortest = dur;
163
+        ogs_diam_stats_self()->stats.longest = dur;
164
+        ogs_diam_stats_self()->stats.avg = dur;
165
     }
166
     if (error)
167
-        ogs_diam_logger_self()->stats.nb_errs++;
168
+        ogs_diam_stats_self()->stats.nb_errs++;
169
     else
170
-        ogs_diam_logger_self()->stats.nb_recv++;
171
+        ogs_diam_stats_self()->stats.nb_recv++;
172
 
173
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
174
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
175
 
176
     /* Display how long it took */
177
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
178
@@ -1056,9 +1056,9 @@
179
     ogs_assert(ret == 0);
180
 
181
     /* Increment the counter */
182
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
183
-    ogs_diam_logger_self()->stats.nb_sent++;
184
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
185
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
186
+    ogs_diam_stats_self()->stats.nb_sent++;
187
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
188
 
189
     ogs_free(public_identity);
190
 }
191
@@ -1148,30 +1148,30 @@
192
     ogs_assert(err && !exp_err && result_code == ER_DIAMETER_SUCCESS);
193
 
194
     /* Free the message */
195
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
196
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
197
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
198
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
199
-    if (ogs_diam_logger_self()->stats.nb_recv) {
200
+    if (ogs_diam_stats_self()->stats.nb_recv) {
201
         /* Ponderate in the avg */
202
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
203
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
204
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
205
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg *
206
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
207
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
208
         /* Min, max */
209
-        if (dur < ogs_diam_logger_self()->stats.shortest)
210
-            ogs_diam_logger_self()->stats.shortest = dur;
211
-        if (dur > ogs_diam_logger_self()->stats.longest)
212
-            ogs_diam_logger_self()->stats.longest = dur;
213
+        if (dur < ogs_diam_stats_self()->stats.shortest)
214
+            ogs_diam_stats_self()->stats.shortest = dur;
215
+        if (dur > ogs_diam_stats_self()->stats.longest)
216
+            ogs_diam_stats_self()->stats.longest = dur;
217
     } else {
218
-        ogs_diam_logger_self()->stats.shortest = dur;
219
-        ogs_diam_logger_self()->stats.longest = dur;
220
-        ogs_diam_logger_self()->stats.avg = dur;
221
+        ogs_diam_stats_self()->stats.shortest = dur;
222
+        ogs_diam_stats_self()->stats.longest = dur;
223
+        ogs_diam_stats_self()->stats.avg = dur;
224
     }
225
     if (error)
226
-        ogs_diam_logger_self()->stats.nb_errs++;
227
+        ogs_diam_stats_self()->stats.nb_errs++;
228
     else
229
-        ogs_diam_logger_self()->stats.nb_recv++;
230
+        ogs_diam_stats_self()->stats.nb_recv++;
231
 
232
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
233
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
234
 
235
     /* Display how long it took */
236
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
237
open5gs_2.7.2.4491.deef.tar.xz/tests/volte/diameter-rx-path.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/volte/diameter-rx-path.c Changed
158
 
1
@@ -561,9 +561,9 @@
2
     ogs_assert(ret == 0);
3
 
4
     /* Increment the counter */
5
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
6
-    ogs_diam_logger_self()->stats.nb_sent++;
7
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
8
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
9
+    ogs_diam_stats_self()->stats.nb_sent++;
10
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
11
 
12
     /* Free string memory */
13
     ogs_free(sip_uri);
14
@@ -1239,9 +1239,9 @@
15
     ogs_assert(ret == 0);
16
 
17
     /* Increment the counter */
18
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
19
-    ogs_diam_logger_self()->stats.nb_sent++;
20
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
21
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
22
+    ogs_diam_stats_self()->stats.nb_sent++;
23
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
24
 
25
     /* Free string memory */
26
     ogs_free(sip_uri);
27
@@ -1646,9 +1646,9 @@
28
     ogs_assert(ret == 0);
29
 
30
     /* Increment the counter */
31
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
32
-    ogs_diam_logger_self()->stats.nb_sent++;
33
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
34
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
35
+    ogs_diam_stats_self()->stats.nb_sent++;
36
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
37
 
38
     /* Free string memory */
39
     ogs_free(sip_uri);
40
@@ -1745,30 +1745,30 @@
41
 
42
 out:
43
     /* Free the message */
44
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
45
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
46
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) + 
47
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
48
-    if (ogs_diam_logger_self()->stats.nb_recv) {
49
+    if (ogs_diam_stats_self()->stats.nb_recv) {
50
         /* Ponderate in the avg */
51
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg * 
52
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
53
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
54
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg * 
55
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
56
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
57
         /* Min, max */
58
-        if (dur < ogs_diam_logger_self()->stats.shortest)
59
-            ogs_diam_logger_self()->stats.shortest = dur;
60
-        if (dur > ogs_diam_logger_self()->stats.longest)
61
-            ogs_diam_logger_self()->stats.longest = dur;
62
+        if (dur < ogs_diam_stats_self()->stats.shortest)
63
+            ogs_diam_stats_self()->stats.shortest = dur;
64
+        if (dur > ogs_diam_stats_self()->stats.longest)
65
+            ogs_diam_stats_self()->stats.longest = dur;
66
     } else {
67
-        ogs_diam_logger_self()->stats.shortest = dur;
68
-        ogs_diam_logger_self()->stats.longest = dur;
69
-        ogs_diam_logger_self()->stats.avg = dur;
70
+        ogs_diam_stats_self()->stats.shortest = dur;
71
+        ogs_diam_stats_self()->stats.longest = dur;
72
+        ogs_diam_stats_self()->stats.avg = dur;
73
     }
74
     if (error)
75
-        ogs_diam_logger_self()->stats.nb_errs++;
76
+        ogs_diam_stats_self()->stats.nb_errs++;
77
     else 
78
-        ogs_diam_logger_self()->stats.nb_recv++;
79
+        ogs_diam_stats_self()->stats.nb_recv++;
80
 
81
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
82
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
83
     
84
     /* Display how long it took */
85
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
86
@@ -1866,9 +1866,9 @@
87
     ogs_assert(ret == 0);
88
 
89
     /* Add this value to the stats */
90
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
91
-    ogs_diam_logger_self()->stats.nb_echoed++;
92
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
93
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
94
+    ogs_diam_stats_self()->stats.nb_echoed++;
95
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
96
 
97
     test_rx_send_str(sid);
98
 
99
@@ -1977,9 +1977,9 @@
100
     ogs_assert(ret == 0);
101
 
102
     /* Increment the counter */
103
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
104
-    ogs_diam_logger_self()->stats.nb_sent++;
105
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
106
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
107
+    ogs_diam_stats_self()->stats.nb_sent++;
108
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
109
 }
110
 
111
 static void pcscf_rx_sta_cb(void *data, struct msg **msg)
112
@@ -2073,30 +2073,30 @@
113
 
114
 out:
115
     /* Free the message */
116
-    ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
117
+    ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0);
118
     dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) + 
119
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
120
-    if (ogs_diam_logger_self()->stats.nb_recv) {
121
+    if (ogs_diam_stats_self()->stats.nb_recv) {
122
         /* Ponderate in the avg */
123
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg * 
124
-            ogs_diam_logger_self()->stats.nb_recv + dur) /
125
-            (ogs_diam_logger_self()->stats.nb_recv + 1);
126
+        ogs_diam_stats_self()->stats.avg = (ogs_diam_stats_self()->stats.avg * 
127
+            ogs_diam_stats_self()->stats.nb_recv + dur) /
128
+            (ogs_diam_stats_self()->stats.nb_recv + 1);
129
         /* Min, max */
130
-        if (dur < ogs_diam_logger_self()->stats.shortest)
131
-            ogs_diam_logger_self()->stats.shortest = dur;
132
-        if (dur > ogs_diam_logger_self()->stats.longest)
133
-            ogs_diam_logger_self()->stats.longest = dur;
134
+        if (dur < ogs_diam_stats_self()->stats.shortest)
135
+            ogs_diam_stats_self()->stats.shortest = dur;
136
+        if (dur > ogs_diam_stats_self()->stats.longest)
137
+            ogs_diam_stats_self()->stats.longest = dur;
138
     } else {
139
-        ogs_diam_logger_self()->stats.shortest = dur;
140
-        ogs_diam_logger_self()->stats.longest = dur;
141
-        ogs_diam_logger_self()->stats.avg = dur;
142
+        ogs_diam_stats_self()->stats.shortest = dur;
143
+        ogs_diam_stats_self()->stats.longest = dur;
144
+        ogs_diam_stats_self()->stats.avg = dur;
145
     }
146
     if (error)
147
-        ogs_diam_logger_self()->stats.nb_errs++;
148
+        ogs_diam_stats_self()->stats.nb_errs++;
149
     else 
150
-        ogs_diam_logger_self()->stats.nb_recv++;
151
+        ogs_diam_stats_self()->stats.nb_recv++;
152
 
153
-    ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
154
+    ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
155
     
156
     /* Display how long it took */
157
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
158
open5gs_2.7.2.4491.deef.tar.xz/tests/vonr/af-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/vonr/af-test.c Changed
73
 
1
@@ -74,7 +74,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -754,7 +754,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -1229,7 +1229,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -1684,7 +1684,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -2310,7 +2310,7 @@
38
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
@@ -3027,7 +3027,7 @@
47
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
48
 
49
     /* gNB connects to AMF */
50
-    ngap = testngap_client(AF_INET);
51
+    ngap = testngap_client(1, AF_INET);
52
     ABTS_PTR_NOTNULL(tc, ngap);
53
 
54
     /* gNB connects to UPF */
55
@@ -3564,7 +3564,7 @@
56
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
57
 
58
     /* gNB connects to AMF */
59
-    ngap = testngap_client(AF_INET);
60
+    ngap = testngap_client(1, AF_INET);
61
     ABTS_PTR_NOTNULL(tc, ngap);
62
 
63
     /* gNB connects to UPF */
64
@@ -4017,7 +4017,7 @@
65
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
66
 
67
     /* gNB connects to AMF */
68
-    ngap = testngap_client(AF_INET);
69
+    ngap = testngap_client(1, AF_INET);
70
     ABTS_PTR_NOTNULL(tc, ngap);
71
 
72
     /* gNB connects to UPF */
73
open5gs_2.7.2.4491.deef.tar.xz/tests/vonr/qos-flow-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/vonr/qos-flow-test.c Changed
19
 
1
@@ -70,7 +70,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -462,7 +462,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
open5gs_2.7.2.4491.deef.tar.xz/tests/vonr/session-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/vonr/session-test.c Changed
64
 
1
@@ -70,7 +70,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
@@ -549,7 +549,7 @@
11
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
12
 
13
     /* gNB connects to AMF */
14
-    ngap = testngap_client(AF_INET);
15
+    ngap = testngap_client(1, AF_INET);
16
     ABTS_PTR_NOTNULL(tc, ngap);
17
 
18
     /* gNB connects to UPF */
19
@@ -978,7 +978,7 @@
20
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
21
 
22
     /* gNB connects to AMF */
23
-    ngap = testngap_client(AF_INET);
24
+    ngap = testngap_client(1, AF_INET);
25
     ABTS_PTR_NOTNULL(tc, ngap);
26
 
27
     /* gNB connects to UPF */
28
@@ -1393,7 +1393,7 @@
29
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
30
 
31
     /* gNB connects to AMF */
32
-    ngap = testngap_client(AF_INET);
33
+    ngap = testngap_client(1, AF_INET);
34
     ABTS_PTR_NOTNULL(tc, ngap);
35
 
36
     /* gNB connects to UPF */
37
@@ -1736,7 +1736,7 @@
38
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
39
 
40
     /* gNB connects to AMF */
41
-    ngap = testngap_client(AF_INET);
42
+    ngap = testngap_client(1, AF_INET);
43
     ABTS_PTR_NOTNULL(tc, ngap);
44
 
45
     /* gNB connects to UPF */
46
@@ -2014,7 +2014,7 @@
47
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
48
 
49
     /* gNB connects to AMF */
50
-    ngap = testngap_client(AF_INET);
51
+    ngap = testngap_client(1, AF_INET);
52
     ABTS_PTR_NOTNULL(tc, ngap);
53
 
54
     /* gNB connects to UPF */
55
@@ -2352,7 +2352,7 @@
56
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
57
 
58
     /* gNB connects to AMF */
59
-    ngap = testngap_client(AF_INET);
60
+    ngap = testngap_client(1, AF_INET);
61
     ABTS_PTR_NOTNULL(tc, ngap);
62
 
63
     /* gNB connects to UPF */
64
open5gs_2.7.2.4491.deef.tar.xz/tests/vonr/simple-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/vonr/simple-test.c Changed
10
 
1
@@ -74,7 +74,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10
open5gs_2.7.2.4491.deef.tar.xz/tests/vonr/video-test.c -> open5gs_2.7.2.4504.9167.tar.xz/tests/vonr/video-test.c Changed
10
 
1
@@ -74,7 +74,7 @@
2
     test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
3
 
4
     /* gNB connects to AMF */
5
-    ngap = testngap_client(AF_INET);
6
+    ngap = testngap_client(1, AF_INET);
7
     ABTS_PTR_NOTNULL(tc, ngap);
8
 
9
     /* gNB connects to UPF */
10