-
Notifications
You must be signed in to change notification settings - Fork 2
/
voice-inside-open5gs.html
866 lines (791 loc) · 38.9 KB
/
voice-inside-open5gs.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Open5GS – Introduction</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="dist/reset.css">
<link rel="stylesheet" href="dist/reveal.css">
<link rel="stylesheet" href="dist/theme/black.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css">
<style>
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5 {
text-transform: none;
}
</style>
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h2>
VoLTE & VoNR with Kamailio inside <a href="https://open5gs.org" target="_blank">Open5GS</a>
</h2>
<p><small>Presentation link : <a href="https://open5gs.org/slides/voice-inside-open5gs" target="_blank">https://open5gs.org/slides/voice-inside-open5gs</a></small></p>
<aside class="notes">
Hello. I'm Sukchan Lee, developing Open5GS. Today I will introduce Open5GS and explain how to set up Voice with Kamailio.
This presentation can be viewed again at the link you are viewing now.
</aside>
</section>
<section>
<h2>Build your own 5G and LTE Networks with Open5GS</h2>
<p>
Open5GS is a C-language Open Source implementation for 5G Core and EPC, i.e. the core network of NR/LTE network. (Release-16)
</p>
<p>
<small>Created by <a href="https://github.com/acetcom" target="_blank">Sukchan Lee</a> and <a href="https://github.com/open5gs/open5gs/graphs/contributors" target="_blank">contributors</a></small>
</p>
<aside class="notes">
Open5GS is mainly used to configure LTE or 5G private networks. It is implemented in C language and can run on most Linux distributions, MacOS, FreeBSD, etc., but does not support Windows.
</aside>
</section>
<section>
<h2>EPC History</h2>
<table>
<thead>
<tr>
<th>Date</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>Feb 1, 2017</td>
<td>EPC Programming started</td>
</tr>
<tr>
<td>Oct 9, 2017</td>
<td>v0.1.0 - First release of NextEPC</td>
</tr>
<tr>
<td>Jul 11, 2018</td>
<td>v0.5.0 - CS Fallback Supported</td>
</tr>
<tr>
<td>Jul 30, 2018</td>
<td>v0.5.1 - SMS over SG Supported</td>
</tr>
<tr>
<td>Jan 12, 2020</td>
<td>v1.2.0 - VoLTE Now Works</td>
</tr>
<tr>
<td>Apr 09, 2021</td>
<td>v2.2.6 - HSS Cx Added</td>
</tr>
</tbody>
</table>
<aside class="notes">
On February 1, 2017, I started developing the program from scratch.
The project is now entering its sixth year.
The first version was released and distributed on October 9, 2017, eight months after starting development of the program.
The project name was NextEPC.
As you can see from History, EPC supports voice features like CS Fallback, SMSsG, VoLTE and HSS Cx.
</aside>
</section>
<section>
<h2>5G Core History</h2>
<table>
<thead>
<tr>
<th>Date</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>Oct 27, 2019</td>
<td>Rename Project to <a href="https://open5gs.org" target="_blank">Open5GS</a></td>
</tr>
<tr>
<td>Apr 28, 2020</td>
<td>5G Core Programming started</td>
</tr>
<tr>
<td>Aug 21, 2020</td>
<td>v2.0.0 - First release for 5G Core/EPC</td>
</tr>
<tr>
<td>Dec 11, 2021</td>
<td>v2.4.0 - VoNR implemented</td>
</tr>
</tbody>
</table>
<aside class="notes">
The project name was changed to Open5GS prior to start developing 5G core. After 4 months of development, we were able to release the 5G core. And at the end of last year, the VoNR feature was also added.
</aside>
</section>
<section style="text-align: left;">
<h2>Network Elements in 4G EPC</h2>
<ul>
<li>MME - Mobility Management Entity</li>
<li>HSS - Home Subscriber Server</li>
<li>PCRF - Policy and Charging Rules Function</li>
<li>SGW-C - Serving Gateway Control Plane</li>
<li>SGW-U - Serving Gateway User Plane</li>
<li>PGW-C/SMF - Packet Gateway Control Plane / (component contained in Open5GS SMF)</li>
<li>PGW-U/UPF - Packet Gateway User Plane / (component contained in Open5GS UPF)</li>
</ul>
<aside class="notes">
Initially, the EPC consisted of MME, HSS, PCRF, SGW and PGW. After that, SGW and PGW used PFCP protocol to separate Control Plane and Data Plane. Then, the names of PGW-C and PGW-U have been changed to SMF and UPF, and EPC and 5G Core share and use together.
</aside>
</section>
<section style="text-align: left;">
<h2>Network Functions in 5G Core</h2>
<ul>
<li>AMF - Access and Mobility Management Function</li>
<li>SMF - Session Management Function</li>
<li>UPF - User Plane Function</li>
<li>AUSF - Authentication Server Function</li>
<li>NRF - NF Repository Function</li>
<li>UDM - Unified Data Management</li>
<li>UDR - Unified Data Repository</li>
<li>PCF - Policy and Charging Function</li>
<li>NSSF - Network Slice Selection Function</li>
<li>BSF - Binding Support Function</li>
<li>SCP - Service Communications Proxy</li>
</ul>
<aside class="notes">
As mentioned earlier, SMF and UPF are used together in EPC as well as 5G Core. For your reference, in 5G Core, Network Element is called NF or Network Function. We currently support 11 NFs and plan to add more in the future.
</aside>
</section>
<section style="text-align: left;">
<h2>VoLTE Setup with Kamailio IMS</h2>
<ul>
<li>Install Kamailio with IMS/MySQL modules</li>
<li>Install RTPEngine/RTPProxy</li>
<li>Setup DNS Name</li>
<li>Setup P-CSCF, S-CSCF and I-CSCF</li>
<li>Setup FoHSS</li>
<li>Running IMS components and FoHSS</li>
</ul>
<p>You can find more details at this link : <a href="https://open5gs.org/open5gs/docs/tutorial/02-VoLTE-setup/" target="_blank">https://open5gs.org/open5gs/docs/tutorial/02-VoLTE-setup/</a> provided by <a href="https://github.com/herlesupreeth/">@herlesupreeth</a></p>
<aside class="notes">
Now let's see how to build a VoLTE test environment. First you need to install the IMS module, MySQL and RTPEngine/RTPProxy. And you need to set up DNS to communicate with EPC. You can find more details in the document written by @herlesupreeth.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Open5GS with Package Manager</h2>
<ul>
<li>Ubuntu makes it easy to install Open5GS.</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="1-3|4-5" data-noescape>
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:open5gs/latest
sudo apt update
sudo apt install open5gs
</code></pre>
<li>
Nightly package are provided by <a href="https://osmocom.org" target="_blank">Osmocom</a> on <a href="https://build.opensuse.org/package/show/network:osmocom:nightly/open5gs" target="_blank">OBS</a>.
</li>
<li>
<a href="https://build.opensuse.org/user/show/mnhauke" target="_blank">Martin Hauke</a> packaged for openSUSE on <a href="https://build.opensuse.org/package/show/home:mnhauke:open5gs/open5gs" target="_blank">OBS</a>.
</li>
</ul>
<aside class="notes">
Open5GS can be easily installed in Ubuntu/Debian environment. FYI, Osmocom provides nightly packages and Martin supports to provide OpenSUSE packages.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup 4G EPC MME</h2>
<ul>
<li>Modify 4G MME Config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/open5gs/mme.yaml.in" target="_blank">/etc/open5gs/mme.yaml</a>) to set S1AP IP address, PLMN ID and TAC</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="4-5|10-13|18-23">
mme:
freeDiameter: /etc/freeDiameter/mme.conf
s1ap:
- addr: 127.0.0.2
+ addr: 10.10.0.2 # for external eNB
gtpc:
addr: 127.0.0.2
gummei:
plmn_id:
- mcc: 999
- mnc: 70
+ mcc: 001 # set your PLMN-MCC
+ mnc: 01 # set your PLMN-MNC
mme_gid: 2
mme_code: 1
tai:
plmn_id:
- mcc: 999
- mnc: 70
- tac: 1
+ mcc: 001 # set your PLMN-MCC
+ mnc: 01 # set your PLMN-MNC
+ tac: 2 # should match the TAC used by your eNB
security:
</code></pre>
</ul>
<aside class="notes">
For the MME and eNB to connect, you need to set the S1AP IP address. The MME creates an SCTP server with this address, and the eNB as an SCTP client connects to the MME.
Additionally, the PLMN ID and TAC of the MME and the eNB should be set to match.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup 4G EPC SGW-U</h2>
<ul>
<li>Modify 4G SGW-U Config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/open5gs/sgwu.yaml.in" target="_blank">/etc/open5gs/sgwu.yaml</a>) to set GTP-U IP address</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="3|4">
sgwu:
gtpu:
- addr: 127.0.0.6
+ addr: 10.11.0.6 # for external eNB
pfcp:
addr: 127.0.0.6
</code></pre>
<li>After changing config, restart Open5GS daemons</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="|1|2">
$ sudo systemctl restart open5gs-mmed
$ sudo systemctl restart open5gs-sgwud
</code></pre>
</ul>
<aside class="notes">
The S1AP described in the previous slide is used in the control plane. Now we need to set the GTP-U IP address to connect the data path betwen SGW-U and eNB.
Like MME's S1AP, SGW-U needs to create a GTP-U server with an IP address that the eNB can connect to. After setup, you need to restart MME and SGW-U.
Then the eNB and EPC can connect.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup 4G EPC SMF</h2>
<ul>
<li>Modify 4G SMF Config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/open5gs/smf.yaml.in" target="_blank">/etc/open5gs/smf.yaml</a>) to set UE Pool, APN, ifName and P-CSCF IP address</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="3|4|5-6|7-9|13-14">
smf:
subnet:
- addr: 10.45.0.1/16
- - addr: 2001:db8:cafe::1/48
+ apn: internet
+ dev: ogstun
+ - addr: 10.46.0.1/16
+ apn: ims
+ dev: ogstun2
dns:
- 8.8.8.8
- 8.8.4.4
+ p-cscf:
+ - 10.4.128.21
</code></pre>
</ul>
<aside class="notes">
Now we need to change the SMF and UPF settings for the data connection of the UE. First, since IPv6 is not used in this environment, we will delete it. Then change the subnet information in SMF settings to use two APNs.
The internet APN is assigned a UE IP address from the 10.45.0.1/16 subnet and uses the ogstun interface in Linux machine.
And, ims APN allocates UE IP address in 10.46.0.1/16 subnet and uses ogstun2 interface.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup 4G EPC UPF</h2>
<ul>
<li>Modify 4G UPF Config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/open5gs/upf.yaml.in" target="_blank">/etc/open5gs/upf.yaml</a>) to set UE Pool, APN and ifName</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="3|4|5-6|7-9">
upf:
subnet:
- addr: 10.45.0.1/16
- - addr: 2001:db8:cafe::1/48
+ apn: internet
+ dev: ogstun
+ - addr: 10.46.0.1/16
+ apn: ims
+ dev: ogstun2
</code></pre>
<li>After changing config, restart Open5GS daemons</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="|1|2">
$ sudo systemctl restart open5gs-smfd
$ sudo systemctl restart open5gs-updf
</code></pre>
</ul>
<aside class="notes">
You need to set the subnet of UPF to be the same as that of SMF. SMF and UPF should then be restarted for the settings changes to take effect.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup Linux TUN device</h2>
<ul>
<li>Create TUN config(/etc/systemd/network/99-open5gs-ims.[network|netdev]) for IMS network</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="1-11|13-17">
$ sudo sh -c "cat << EOF > /etc/systemd/network/99-open5gs-ims.network
[Match]
Name=ogstun2
[Network]
Address=10.46.0.1/16
[Link]
MTUBytes=1400
RequiredForOnline=false
EOF"
$ sudo sh -c "cat << EOF > /etc/systemd/network/99-open5gs-ims.netdev
[NetDev]
Name=ogstun2
Kind=tun
EOF"
</code></pre>
</ul>
<aside class="notes">
When installing Open5GS with a package manager, the TUN device is configured using systemd-networkd.
Execute the command as shown to create a TUN device for the IMS network.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup Linux TUN device (Cont.)</h2>
<ul>
<li>Modify TUN config(/etc/systemd/network/99-open5gs.network) for INTERNET network</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="3|6">
[Network]
Address=10.45.0.1/16
-Address=2001:db8:cafe::1/48
[Link]
+MTUBytes=1400
RequiredForOnline=false
</code></pre>
<li>After changing config, restart systemd-networkd</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers>
$ sudo systemctl restart systemd-networkd
</code></pre>
</ul>
<aside class="notes">
For internet APN, you need to change the configuration of ogstun device. Remove IPv6 and set MTU to 1400.
Restart systemd-networkd and you can check the ogstun and ogstun2 interfaces on your Linux machine.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Adding a route for the UE to have WAN connectivity</h2>
<ul>
<li>To enable IPv4 forwarding</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers>
sudo sysctl -w net.ipv4.ip_forward=1
</code></pre>
<li>To add the NAT rule</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers>
sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 10.46.0.0/16 ! -o ogstun2 -j MASQUERADE
</code></pre>
</ul>
<aside class="notes">
Additional work is required for UE's traffic to go out of the Linux machine with Open5GS installed.
Enable IPv4 forwarding and also add a MASQUERADE NAT rule.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup freeDiameter</h2>
<ul>
<li>Modify MME diameter config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/freeDiameter/mme.conf.in" target="_blank">/etc/freeDiameter/mme.conf</a>) to set Identity, Realm and ConnectPeer(HSS)</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="4-5|10-11|16-17">
# This must be a valid FQDN that resolves to the local host.
# Default: hostname's FQDN
#Identity = "aaa.koganei.freediameter.net";
-Identity = "mme.localdomain";
+Identity = "mme.epc.mnc001.mcc001.3gppnetwork.org";
# The Diameter Realm of this daemon.
# Default: the domain part of Identity (after the first dot).
#Realm = "koganei.freediameter.net";
-Realm = "localdomain";
+Realm = "epc.mnc001.mcc001.3gppnetwork.org";
# Format:
#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
# Parameters that can be specified in the peer's parameter list:
-ConnectPeer = "hss.localdomain" { ConnectTo = "127.0.0.8"; No_TLS; };
+ConnectPeer = "hss.epc.mnc001.mcc001.3gppnetwork.org"
</code></pre>
</ul>
<aside class="notes">
Now we need to set the diameter. In Open5GS, MME, HSS, SMF and PCRF support Diameter protocol.
To connect Kamailio with domain name, change the MME's Identity, Realm, and Peer information using domain name as shown.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup freeDiameter (Cont.)</h2>
<ul>
<li>Modify HSS diameter config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/freeDiameter/hss.conf.in" target="_blank">/etc/freeDiameter/hss.conf</a>) to set Identity, Realm and ConnectPeer(MME/P-CSCF)</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="4-5|10-11|16-18">
# This must be a valid FQDN that resolves to the local host.
# Default: hostname's FQDN
#Identity = "aaa.koganei.freediameter.net";
-Identity = "hss.localdomain";
+Identity = "hss.epc.mnc001.mcc001.3gppnetwork.org";
# The Diameter Realm of this daemon.
# Default: the domain part of Identity (after the first dot).
#Realm = "koganei.freediameter.net";
-Realm = "localdomain";
+Realm = "epc.mnc001.mcc001.3gppnetwork.org";
# Format:
#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
# Parameters that can be specified in the peer's parameter list:
-ConnectPeer = "mme.localdomain" { ConnectTo = "127.0.0.2"; No_TLS; };
+ConnectPeer = "mme.epc.mnc001.mcc001.3gppnetwork.org"
+ConnectPeer = "pcscf.ims.mnc001.mcc001.3gppnetwork.org"
</code></pre>
</ul>
<aside class="notes">
Open5GS HSS supports Cx. To use this, additionally set P-CSCF in Connection Peer information.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup freeDiameter (Cont.)</h2>
<ul>
<li>Modify SMF diameter config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/freeDiameter/smf.conf.in" target="_blank">/etc/freeDiameter/smf.conf</a>) to set Identity, Realm and ConnectPeer(PCRF)</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="4-5|10-11|16-17">
# This must be a valid FQDN that resolves to the local host.
# Default: hostname's FQDN
#Identity = "aaa.koganei.freediameter.net";
-Identity = "smf.localdomain";
+Identity = "smf.epc.mnc001.mcc001.3gppnetwork.org";
# The Diameter Realm of this daemon.
# Default: the domain part of Identity (after the first dot).
#Realm = "koganei.freediameter.net";
-Realm = "localdomain";
+Realm = "epc.mnc001.mcc001.3gppnetwork.org";
# Format:
#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
# Parameters that can be specified in the peer's parameter list:
-ConnectPeer = "pcrf.localdomain" { ConnectTo = "127.0.0.9"; No_TLS; };
+ConnectPeer = "pcrf.epc.mnc001.mcc001.3gppnetwork.org"
</code></pre>
</ul>
<aside class="notes">
Change the Diameter setting of SMF to the domain name method in the same way as MME.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup freeDiameter (Cont.)</h2>
<ul>
<li>Modify PCRF diameter config(<a href="https://github.com/open5gs/open5gs/blob/main/configs/freeDiameter/pcrf.conf.in" target="_blank">/etc/freeDiameter/pcrf.conf</a>) to set Identity, Realm and ConnectPeer(SMF/P-CSCF)</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="4-5|10-11|16-18">
# This must be a valid FQDN that resolves to the local host.
# Default: hostname's FQDN
#Identity = "aaa.koganei.freediameter.net";
-Identity = "pcrf.localdomain";
+Identity = "pcrf.epc.mnc001.mcc001.3gppnetwork.org";
# The Diameter Realm of this daemon.
# Default: the domain part of Identity (after the first dot).
#Realm = "koganei.freediameter.net";
-Realm = "localdomain";
+Realm = "epc.mnc001.mcc001.3gppnetwork.org";
# Format:
#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
# Parameters that can be specified in the peer's parameter list:
-ConnectPeer = "smf.localdomain" { ConnectTo = "127.0.0.4"; No_TLS; };
+ConnectPeer = "smf.epc.mnc001.mcc001.3gppnetwork.org"
+ConnectPeer = "pcscf.ims.mnc001.mcc001.3gppnetwork.org"
</code></pre>
</ul>
<aside class="notes">
PCRF establishes P-CSCF domain name in ConnectPeer for connection with IMS.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Setup freeDiameter (Cont.)</h2>
<ul>
<li>After changing config, restart Open5GS daemons</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="1|2|3|4">
$ sudo systemctl restart open5gs-mmed
$ sudo systemctl restart open5gs-hssd
$ sudo systemctl restart open5gs-smfd
$ sudo systemctl restart open5gs-pcrfd
</code></pre>
</ul>
<aside class="notes">
Restart all 4 daemons for the Diameter setting change to take effect as well.
</aside>
</section>
<section style="text-align: left;">
<h2 data-id="code-title">Install the WebUI of Open5GS</h2>
<ul>
<li>Debian/Ubuntu can install <a href="https://nodejs.org/" target="_blank">Node.js</a> as follows:</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers="1-3|4">
sudo apt update
sudo apt install curl
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install nodejs
</code></pre>
<li>You can now install WebUI of Open5GS</li>
<pre data-id="code-animation"><code class="hljs" data-trim data-line-numbers>
curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash -
</code></pre>
</ul>
<aside class="notes">
In order for HSS to authenticate a subscriber, the subscriber information must be added to the database.
Open5GS uses MongoDB and provides WebUI.
You can easily add subscriber information through WebUI.
Since WebUI is implemented based on node.js/React, you need to install node.js first. Then install the WebUI application.
</aside>
</section>
<section>
<h2>WebUI - Login</h2>
<p>Connect to <a href="http://localhost:3000" target="_blank">http://localhost:3000</a> using Web Browser</p>
<blockquote>
Username : admin Password : 1423
</blockquote>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-login.png" alt="Subscriber">
<aside class="notes">
You can connect to the WebUI using a web browser.
The initial ID of WebUI is admin and the initial password is 1423. After logging in, you can change your password in the Account menu.
</aside>
</section>
<section>
<h2>WebUI - Main View</h2>
<p>To add the subscribers, go to [Subscriber] panel and hit [ADD A SUBSCRIBER].</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-mainview.png" alt="Subscriber">
<aside class="notes">
There is a menu on the left panel. You can click Subscriber panel and add subscriber information as shown.
</aside>
</section>
<section>
<h2>WebUI - Add Subscriber</h2>
<p>You need to fill out USIM information</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-create-input.png" alt="Subscriber">
<aside class="notes">
You will now need to fill out your USIM information. Modify the IMSI, AMF, K and OP/OPc referring to the USIM information you purchased.
</aside>
</section>
<section>
<h2>WebUI - Add Subscriber</h2>
<p>To add IMS profile, scroll down and hit the [+] button</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-ims-add-subscriber-1.png" alt="Subscriber">
<aside class="notes">
For now, only internet APN information is set as default. In order to add an ims APN, scroll down and click the + button.
</aside>
</section>
<section>
<h2>WebUI - Add Subscriber</h2>
<p>Fill out IMS profile as shown</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-ims-add-subscriber-2.png" alt="Subscriber">
<aside class="notes">
Enter the APN name as IMS and modify the Session AMBR if bandwidth limit is required.
</aside>
</section>
<section>
<h2>WebUI - Add Subscriber</h2>
<p>To add PCC profile, scroll down and hit the [+] button</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-ims-add-subscriber-3.png" alt="Subscriber">
<aside class="notes">
Since we need to add PCC Profile, scroll down and click the + button as shown.
</aside>
</section>
<section>
<h2>WebUI - Add Subscriber</h2>
<p>Then hit [SAVE] button when everything is configured</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-ims-add-subscriber-4.png" alt="Subscriber">
<aside class="notes">
By default, QCI 1 and ARP 2 are set for Voice. You only need to modify MBR/GBR for bandwidth limit.
And if you press the SAVE button, the subscriber information is saved in MongoDB.
</aside>
</section>
<section>
<h2>WebUI - Main View</h2>
<p>You would get a subscriber registered as follows</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-create-done.png" alt="Subscriber">
<aside class="notes">
You get a subscriber registered as shown.
And, if you click the IMSI Box, you can check the subscriber information as shown in the following slide.
</aside>
</section>
<section>
<h2>WebUI - Main View</h2>
<p>Hit the [IMSI] Box to view the subscriber information</p>
<img height="400px" data-src="https://open5gs.org/assets/img/webui-create-show.png" alt="Subscriber">
<aside class="notes">
Internet and ims APN are set. And, in ims APN, PCC Rule for voice is set to add Flow using Diameter-Rx interface.
</aside>
</section>
<section style="text-align: left;">
<h2>Turn on your eNB and UE</h2>
<ul>
<li>First, connect your eNB to the Open5GS core</li>
<li>Next, try to attach a UE to the basestation</li>
<li>Finally, test the voice call</li>
</ul>
<aside class="notes">
Now everything is ready. Just turn on the eNB and UE and test the voice call.
</aside>
</section>
<section style="text-align: left;">
<h2>5G Core with VoNR</h2>
<ul>
<li>Open5GS VoNR was implemented using HTTP2 and does not support Diameter Protocol.</li>
<li>According to the standard, 5G PCF must support HTTP2 as well as Diameter intefaces like Rx.</li>
</ul>
<aside class="notes">
Open5GS only supports half of VoNR. Both HTTP2 method and Diameter Rx method should be supported, but only HTTP2 was implemented first.
If PCF, one of the 5G Cores, supports Diameter Rx method, it can be used VoNR test using Kamailio.
</aside>
</section>
<section data-background-iframe="https://open5gs.org/open5gs/docs/hardware/01-genodebs/" data-background-interactive>
<div style="position: absolute; width: 70%; right: 0; box-shadow: 0 1px 4px rgba(0,0,0,0.5), 0 5px 25px rgba(0,0,0,0.2); background-color: rgba(0, 0, 0, 0.9); color: #fff; padding: 20px; font-size: 20px; text-align: left;">
<h2>Many companies are supporting Open5GS.</h2>
<ul>
<li>If you have a commercial eNB/gNB, you can build your own private network.</li>
<li>An open source like srsRAN could be a much more viable approach for you.</li>
</ul>
</div>
<aside class="notes">
So far, we have looked at the Voice feature using Open5GS. Now, we would just like to share information about Open5GS that may be of additional help.
Open5GS's website has a list of tested eNBs/gNBs. We hope this helps you set up your lab environment.
</aside>
</section>
<section>
<h2>Record of Collaboration</h2>
<table>
<thead>
<tr>
<th>Date</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>Jul 19, 2021</td>
<td><a href="https://openairinterface.org/" target="_blank">OAI</a> gNB on Open5GS - <a href="https://github.com/open5gs/open5gs/issues/1098" target="_blank">Issues #1098</a></td>
</tr>
<tr>
<td>Mar 27, 2022</td>
<td>GTP-1C(GGSN) provided <a href="https://www.sysmocom.de/" target="_blank">sysmocom</a></td>
</tr>
<tr>
<td style="border:none;">May 4, 2022</td>
<td style="border:none;"><a href="https://srs.io/" target="_blank">SRS</a> released 5G-SA using <a href="https://open5gs.org" target="_blank">Open5GS</a></td>
</tr>
<tr>
<td align="right" style="border:none;"></td>
<td style="border:none;"><a href="https://srs.io/" target="_blank">SRS</a> App Notes - <a href="https://docs.srsran.com/en/latest/app_notes/source/5g_sa_COTS/source/index.html" target="_blank">5G SA COTS UE</a></td>
</tr>
<tr>
<td align="right"></td>
<td>Open5GS - <a href="https://github.com/open5gs/open5gs/issues/1522" target="_blank">Issues #1522</a></td>
</tr>
<tr>
<td>May 17, 2022</td>
<td>Gy interface provided <a href="https://www.sysmocom.de/" target="_blank">sysmocom</a></td>
</tr>
</tbody>
</table>
<aside class="notes">
Here is records of our collaborations with other communities.
On July 19, 2021, the integration with the OAI gNB was discussed in the Issue 1098. Click the link to view the contents.
And, on May 4, 2022, SRS released 5G-SA and provided an application notes using Open5GS.
Recently, Sysmocom has contributed a lot to Open5GS related to 2G/3G.
</aside>
</section>
<section>
<h2>What you can do with Open5GS</h2>
<table>
<thead>
<tr>
<th>Kind</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:none;">Laboratory</td>
<td style="border:none;">Voice(VoLTE/VoNR) works</td>
</tr>
<tr>
<td style="border:none;"></td>
<td style="border:none;">CSFB/SMSoS</td>
</tr>
<tr>
<td align="right"></td>
<td>ePDG(SWx, S6b, S2b)</td>
</tr>
<tr>
<td style="border:none;">Field</td>
<td style="border:none;">Internet service recommended</td>
</tr>
<tr>
<td align="right"></td>
<td>Voice test not reported</td>
</tr>
<tr>
<td style="border:none;">Known Limitation</td>
<td style="border:none;">Roaming</td>
</tr>
<tr>
<td align="right"></td>
<td>NMS/CLI</td>
</tr>
</tbody>
</table>
<aside class="notes">
Open5GS does not yet have voice-related features in commercial grade. It still seems to be mostly used in laboratories.
Internet services seem to be sometimes used in the field. However, I have never heard of voice calls being used in the field.
And Open5GS has not implemented the Roaming feature yet.
Another old problem. Simple WebUI for adding subscriber information is supported, but NMS/CLI for monitoring or changing settings has not been implemented yet.
</aside>
</section>
<section>
<h2>Roadmap</h2>
<table>
<thead>
<tr>
<th>Goal</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:none;">2022/3Q</td>
<td style="border:none;"><a href="https://open5gs.org/open5gs/docs/tutorial/04-metrics-prometheus/">Metrics with Prometheus</a>(<a href="https://github.com/pespin">@pespin</a>)</td>
</tr>
<tr>
<td align="right"></td>
<td>Counter of UE, Session, ...</td>
</tr>
<tr>
<td style="border:none;">2022/4Q</td>
<td style="border:none;"><a href="https://www.gsma.com/newsroom/wp-content/uploads//NG.113-v5.0-2.pdf">5G Core Roaming</a></td>
</tr>
<tr>
<td style="border:none;"></td>
<td style="border:none;">Indirect Communication with SCP</td>
</tr>
<tr>
<td style="border:none;"></td>
<td style="border:none;">HTTP2-TLS</td>
</tr>
<tr>
<td align="right"></td>
<td>SEPP with N32 Interface</td>
</tr>
</tbody>
</table>
<aside class="notes">
Monitoring functionality is being implemented using Prometheus now. It was first implemented by Sysmocom's <a href="https://github.com/pespin">@pespin</a> and is being improved by contributors.
These days, I am mainly working on adding 5G roaming feature.
</aside>
</section>
<section style="text-align: left;">
<h1>THE END</h1>
<p>
If you don't understand something about Open5GS, the <a href="https://open5gs.org/open5gs/docs/" target="_blank">https://open5gs.org/open5gs/docs/</a> is a great place to look for answers.
</p>
<aside class="notes">
So far, I have introduced Open5GS and learned how to build a voice call test environment in the laboratory. If you have any suggestions, please let me know. Thank you!
</aside>
</section>
</div>
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/zoom/zoom.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/search/search.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<script>
// Also available as an ES module, see:
// https://revealjs.com/initialization/
Reveal.initialize({
controls: true,
progress: true,
center: true,
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
});
</script>
</body>
</html>