mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-03 05:23:38 +00:00
Compare commits
209 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff5023e95b | ||
|
|
9b762158a6 | ||
|
|
4e8492e878 | ||
|
|
a5010a61ef | ||
|
|
eb03704015 | ||
|
|
68140efce4 | ||
|
|
d2ef555ce4 | ||
|
|
7e6568d800 | ||
|
|
9a958d7af8 | ||
|
|
83b28b5649 | ||
|
|
eb50d64271 | ||
|
|
9aa5559c5f | ||
|
|
f35afa2ff7 | ||
|
|
776103698d | ||
|
|
2b41a215d7 | ||
|
|
da1905b36c | ||
|
|
fb95f1ff71 | ||
|
|
668cc59f94 | ||
|
|
3885cb20d9 | ||
|
|
5e18b2bd13 | ||
|
|
1518a4f334 | ||
|
|
80ee4c8aa8 | ||
|
|
aa3cded11a | ||
|
|
0633774972 | ||
|
|
d1a2971990 | ||
|
|
babc30940a | ||
|
|
fce0eb4800 | ||
|
|
fe11ee161c | ||
|
|
eabe8dfec5 | ||
|
|
29525b21a4 | ||
|
|
af4021bff4 | ||
|
|
318fc25535 | ||
|
|
6adf541346 | ||
|
|
ab11220dcc | ||
|
|
114f783d06 | ||
|
|
50be661cf9 | ||
|
|
ad159d1755 | ||
|
|
b1d982a1ee | ||
|
|
0be5e765c8 | ||
|
|
6332f10593 | ||
|
|
051c19b7c8 | ||
|
|
b5956e5596 | ||
|
|
52d5c61794 | ||
|
|
c5a545039f | ||
|
|
2dd577f88c | ||
|
|
0d61f7a7f9 | ||
|
|
9700563023 | ||
|
|
5eaf66262a | ||
|
|
a3593c6890 | ||
|
|
8fe2e506c0 | ||
|
|
df68b231b8 | ||
|
|
f4eddf91b5 | ||
|
|
99fd6c449a | ||
|
|
7762da6992 | ||
|
|
bfe214aafa | ||
|
|
96d689a402 | ||
|
|
3501cb0a5b | ||
|
|
b58ebda556 | ||
|
|
20d3dc0167 | ||
|
|
c9598fb9c6 | ||
|
|
13421119c3 | ||
|
|
50cfb5f3ac | ||
|
|
d2cbcf7118 | ||
|
|
0f93ec23ab | ||
|
|
c528e0d5bc | ||
|
|
0313910ac6 | ||
|
|
361c3b7387 | ||
|
|
59a457fa40 | ||
|
|
038d383584 | ||
|
|
7be7029ac4 | ||
|
|
720b4d3c4c | ||
|
|
4d9112870c | ||
|
|
58a9d31fd8 | ||
|
|
0a3746c24d | ||
|
|
1daac541cf | ||
|
|
9087a480a8 | ||
|
|
9d43646816 | ||
|
|
240c10888d | ||
|
|
9c3b7dfe4b | ||
|
|
2aa40ca8c8 | ||
|
|
12353178fb | ||
|
|
b98c2c13f6 | ||
|
|
9d94b33c7b | ||
|
|
6c5a8a135a | ||
|
|
b116630fe8 | ||
|
|
28089e2b59 | ||
|
|
b1e7477904 | ||
|
|
5238771295 | ||
|
|
cfe21c61da | ||
|
|
0b97954208 | ||
|
|
5084f6a71d | ||
|
|
109949d335 | ||
|
|
9e25482d99 | ||
|
|
816575dc8d | ||
|
|
28e40a0f1b | ||
|
|
a9badd5520 | ||
|
|
18cca7f5e4 | ||
|
|
828fa23d16 | ||
|
|
a6abe1fffb | ||
|
|
7dd5d27a71 | ||
|
|
e32139009b | ||
|
|
502a886e43 | ||
|
|
d99382d5bc | ||
|
|
8b3fa5ff9f | ||
|
|
e1e8018919 | ||
|
|
c2bda0b576 | ||
|
|
b6f2146594 | ||
|
|
78b1dc77ff | ||
|
|
de0ba3f9dc | ||
|
|
c18e9f32cb | ||
|
|
2c2ce143a3 | ||
|
|
933f0b04c7 | ||
|
|
7d496e182b | ||
|
|
dd845a2bb2 | ||
|
|
1679f57ac7 | ||
|
|
b6fe640641 | ||
|
|
a6927e18e6 | ||
|
|
8efa364f89 | ||
|
|
43a7259781 | ||
|
|
aba1867902 | ||
|
|
12d189af07 | ||
|
|
d6c8d49ef4 | ||
|
|
1983d9d7a7 | ||
|
|
6710c13a44 | ||
|
|
67fd2efd76 | ||
|
|
c6c8dc1256 | ||
|
|
46621538af | ||
|
|
b2f2016a67 | ||
|
|
e0a487f479 | ||
|
|
a7e2a071e0 | ||
|
|
f97f5f794d | ||
|
|
afc562f7d5 | ||
|
|
478723203f | ||
|
|
c391ac1334 | ||
|
|
fe7f9d85bb | ||
|
|
c5715d6695 | ||
|
|
bb4a8f34d4 | ||
|
|
71572ae563 | ||
|
|
e2159b1240 | ||
|
|
99f59be5d7 | ||
|
|
4d2f7726b9 | ||
|
|
11d4be1779 | ||
|
|
5d478e2488 | ||
|
|
333e53d0dd | ||
|
|
53a96022d9 | ||
|
|
908d5884dc | ||
|
|
e8d6b0be20 | ||
|
|
7a9d06097e | ||
|
|
3a28ddce37 | ||
|
|
6ffdce598a | ||
|
|
6e81564972 | ||
|
|
76fecdb54e | ||
|
|
aa6f3ef8d6 | ||
|
|
3508e09a41 | ||
|
|
b558da30c6 | ||
|
|
de2ecd6400 | ||
|
|
41f743af62 | ||
|
|
d50a5a44f9 | ||
|
|
2de12e32f4 | ||
|
|
23ef30553e | ||
|
|
79de674fd8 | ||
|
|
5f979d0cc3 | ||
|
|
433d5f6bf3 | ||
|
|
80cd9d725f | ||
|
|
28746c1cd8 | ||
|
|
bb5d497298 | ||
|
|
079bb5c40e | ||
|
|
e61b469489 | ||
|
|
e3da7c9934 | ||
|
|
8c22d8a20c | ||
|
|
e5ff03b249 | ||
|
|
49c34605db | ||
|
|
ff242cd6ea | ||
|
|
2be12903cb | ||
|
|
7455424d29 | ||
|
|
832ab156e9 | ||
|
|
0b3df3e3db | ||
|
|
b5ad0feffc | ||
|
|
b732d7bcc5 | ||
|
|
05551f120f | ||
|
|
106f2729c3 | ||
|
|
aa6368132e | ||
|
|
fb8ebcdbea | ||
|
|
52672cff65 | ||
|
|
0df2e9f0ba | ||
|
|
77f7bb7af7 | ||
|
|
8286b1c417 | ||
|
|
5be48be634 | ||
|
|
110a63fdfa | ||
|
|
e213f65406 | ||
|
|
1c9a48bfb1 | ||
|
|
77f66e1f0e | ||
|
|
3121d183f0 | ||
|
|
8f603e2049 | ||
|
|
35201f6ed1 | ||
|
|
24d20bb20b | ||
|
|
f2aa15d99f | ||
|
|
c76c7d597d | ||
|
|
9c4287f467 | ||
|
|
2def8bb31b | ||
|
|
f557fc8eaa | ||
|
|
82241f5b84 | ||
|
|
fbfb72c1b7 | ||
|
|
038fb680f4 | ||
|
|
da8c934326 | ||
|
|
88016a769f | ||
|
|
acd6610508 | ||
|
|
4b8d3a845a | ||
|
|
825b06b6e0 |
69
.clang-tidy
Normal file
69
.clang-tidy
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
Checks: '*,
|
||||
-altera-id-dependent-backward-branch,
|
||||
-altera-struct-pack-align,
|
||||
-altera-unroll-loops,
|
||||
-android-cloexec-*,
|
||||
-bugprone-branch-clone,
|
||||
-bugprone-easily-swappable-parameters,
|
||||
-bugprone-macro-parentheses,
|
||||
-bugprone-reserved-identifier,
|
||||
-bugprone-sizeof-expression,
|
||||
-cert-dcl37-c,
|
||||
-cert-dcl51-cpp,
|
||||
-cert-err33-c,
|
||||
-cert-err34-c,
|
||||
-clang-analyzer-optin.performance.Padding,
|
||||
-clang-analyzer-security.insecureAPI.bcmp,
|
||||
-clang-analyzer-security.insecureAPI.bcopy,
|
||||
-clang-analyzer-security.insecureAPI.bzero,
|
||||
-clang-diagnostic-error,
|
||||
-clang-diagnostic-typedef-redefinition,
|
||||
-clang-diagnostic-unknown-warning-option,
|
||||
-concurrency-mt-unsafe,
|
||||
-cppcoreguidelines-avoid-magic-numbers,
|
||||
-cppcoreguidelines-avoid-non-const-global-variables,
|
||||
-cppcoreguidelines-init-variables,
|
||||
-google-readability-braces-around-statements,
|
||||
-google-readability-casting,
|
||||
-google-readability-function-size,
|
||||
-google-readability-todo,
|
||||
-hicpp-braces-around-statements,
|
||||
-hicpp-function-size,
|
||||
-hicpp-multiway-paths-covered,
|
||||
-llvm-else-after-return,
|
||||
-llvm-header-guard,
|
||||
-llvm-include-order,
|
||||
-llvmlibc-restrict-system-libc-headers,
|
||||
-misc-no-recursion,
|
||||
-misc-unused-parameters,
|
||||
-performance-no-int-to-ptr,
|
||||
-readability-avoid-const-params-in-decls,
|
||||
-readability-braces-around-statements,
|
||||
-readability-duplicate-include,
|
||||
-readability-else-after-return,
|
||||
-readability-function-cognitive-complexity,
|
||||
-readability-function-size,
|
||||
-readability-identifier-length,
|
||||
-readability-isolate-declaration,
|
||||
-readability-magic-numbers,
|
||||
-readability-non-const-parameter,
|
||||
-readability-redundant-control-flow,
|
||||
-readability-redundant-declaration,
|
||||
-readability-suspicious-call-argument,
|
||||
|
||||
|
||||
-bugprone-implicit-widening-of-multiplication-result,
|
||||
-bugprone-narrowing-conversions,
|
||||
-cert-exp42-c,
|
||||
-cert-flp37-c,
|
||||
-clang-analyzer-core.NullDereference,
|
||||
-clang-analyzer-deadcode.DeadStores,
|
||||
-clang-analyzer-security.insecureAPI.strcpy,
|
||||
-cppcoreguidelines-interfaces-global-init,
|
||||
-cppcoreguidelines-narrowing-conversions,
|
||||
-hicpp-signed-bitwise,
|
||||
'
|
||||
|
||||
WarningsAsErrors: false
|
||||
HeaderFilterRegex: '(.*\.h)'
|
||||
10
.dockerignore
Normal file
10
.dockerignore
Normal file
@@ -0,0 +1,10 @@
|
||||
**/*.md
|
||||
**/docker-compose*.yml
|
||||
**/docker-compose*.yaml
|
||||
**/Dockerfile*
|
||||
.git
|
||||
.dockerignore
|
||||
.cache
|
||||
.gitignore
|
||||
.github
|
||||
build
|
||||
77
.github/workflows/meson-ci.yml
vendored
Normal file
77
.github/workflows/meson-ci.yml
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
name: Meson Continuous Integration
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
macos-latest:
|
||||
name: Build and Test on MacOS Latest
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Install MongoDB with Package Manager
|
||||
run: |
|
||||
brew tap mongodb/brew
|
||||
brew install mongodb-community
|
||||
brew services start mongodb-community
|
||||
- name: Create the TUN device with the interface name `ogstun`.
|
||||
run: |
|
||||
sudo ifconfig lo0 alias 127.0.0.2 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.3 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.4 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.5 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.5 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.6 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.7 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.8 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.9 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.10 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.11 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.12 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.13 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.14 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.15 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.16 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.17 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.18 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.19 netmask 255.255.255.255
|
||||
sudo ifconfig lo0 alias 127.0.0.20 netmask 255.255.255.255
|
||||
- name: Install the dependencies for building the source code.
|
||||
run: brew install mongo-c-driver libidn libmicrohttpd nghttp2 bison libusrsctp libtins talloc meson
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@main
|
||||
- name: Setup Meson Build
|
||||
run: PATH="/usr/local/opt/bison/bin:$PATH" meson setup build
|
||||
env:
|
||||
CC: gcc
|
||||
- name : Build Open5GS
|
||||
run: ninja -C build
|
||||
- name: Test Open5GS
|
||||
run: sudo meson test -C build -v crypt unit
|
||||
|
||||
ubuntu-latest:
|
||||
name: Build and Test on Ubuntu Latest
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
mongodb:
|
||||
image: mongo
|
||||
ports:
|
||||
- 27017:27017
|
||||
steps:
|
||||
- name: Create the TUN device with the interface name `ogstun`.
|
||||
run: |
|
||||
sudo ip tuntap add name ogstun mode tun
|
||||
sudo ip addr add 10.45.0.1/16 dev ogstun
|
||||
sudo ip addr add 2001:db8:cafe::1/48 dev ogstun
|
||||
sudo ip link set ogstun up
|
||||
- name: Install the dependencies for building the source code.
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install python3-pip python3-setuptools python3-wheel ninja-build build-essential flex bison git libsctp-dev libgnutls28-dev libgcrypt-dev libssl-dev libidn11-dev libmongoc-dev libbson-dev libyaml-dev libnghttp2-dev libmicrohttpd-dev libcurl4-gnutls-dev libnghttp2-dev libtins-dev libtalloc-dev meson
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@main
|
||||
- name: Setup Meson Build
|
||||
run: meson setup build
|
||||
env:
|
||||
CC: gcc
|
||||
- name : Build Open5GS
|
||||
run: ninja -C build
|
||||
- name: Test Open5GS
|
||||
run: meson test -C build -v
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
# This directory is fetched during first build and is present in this directory
|
||||
subprojects/freeDiameter
|
||||
subprojects/libtins
|
||||
subprojects/prometheus-client-c
|
||||
subprojects/usrsctp
|
||||
|
||||
webui/.next
|
||||
|
||||
24
README.md
24
README.md
@@ -2,13 +2,26 @@
|
||||
|
||||
If you find Open5GS useful for work, please consider supporting this Open Source project by [Becoming a sponsor](https://github.com/sponsors/acetcom). To manage the funding transactions transparently, you can donate through [OpenCollective](https://opencollective.com/open5gs).
|
||||
|
||||
<h3 align="center">Platinum Sponsors</h3>
|
||||
<table align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="middle">
|
||||
<a href="https://teletresearch.com/" target="_blank">
|
||||
<img width="400px" src="https://open5gs.org/assets/img/Telet-logo-v2.png">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 align="center">Gold Sponsors</h3>
|
||||
<table>
|
||||
<table align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="middle">
|
||||
<a href="http://wavemobile.com/" target="_blank">
|
||||
<img width="260px" src="https://open5gs.org/assets/img/Wavemobile-Logo-Mark-RGB.png">
|
||||
<img width="222px" src="https://open5gs.org/assets/img/Wavemobile-Logo-Mark-RGB.png">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -16,7 +29,7 @@ If you find Open5GS useful for work, please consider supporting this Open Source
|
||||
</table>
|
||||
|
||||
<h3 align="center">Silver Sponsors</h3>
|
||||
<table>
|
||||
<table align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="middle" width="222px">
|
||||
@@ -58,6 +71,11 @@ If you find Open5GS useful for work, please consider supporting this Open Source
|
||||
<img src="https://open5gs.org/assets/img/ng-voice-logo_color.png">
|
||||
</a>
|
||||
</td>
|
||||
<td align="center" valign="middle" width="222px">
|
||||
<a href="http://www.bristol.ac.uk/engineering/research/smart/" target="_blank">
|
||||
<img src="https://open5gs.org/assets/img/smart-internet-lab.png">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -194,6 +195,11 @@ nrf:
|
||||
- ::1
|
||||
port: 7777
|
||||
|
||||
scp:
|
||||
sbi:
|
||||
- addr: 127.0.1.10
|
||||
port: 7777
|
||||
|
||||
ausf:
|
||||
sbi:
|
||||
- addr: 127.0.0.11
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -47,12 +48,12 @@ mme:
|
||||
map:
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 7
|
||||
lai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
lac: 2342
|
||||
map:
|
||||
@@ -68,7 +69,7 @@ mme:
|
||||
lac: 51544
|
||||
gummei:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
@@ -79,7 +80,7 @@ mme:
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 7
|
||||
tai:
|
||||
@@ -146,19 +147,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -114,19 +115,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -150,7 +150,7 @@ logger:
|
||||
# o Multiple GUAMI
|
||||
# guami:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# amf_id:
|
||||
# region: 2
|
||||
@@ -199,13 +199,13 @@ logger:
|
||||
# o Multiple PLMN Support
|
||||
# plmn_support:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# s_nssai:
|
||||
# - sst: 1
|
||||
# sd: 010000
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# s_nssai:
|
||||
# - sst: 1
|
||||
@@ -218,7 +218,7 @@ logger:
|
||||
#
|
||||
# <AMF Name>
|
||||
#
|
||||
# amf_name: amf1.open5gs.amf.5gc.mnc70.mcc901.3gppnetwork.org
|
||||
# amf_name: amf1.open5gs.amf.5gc.mnc70.mcc999.3gppnetwork.org
|
||||
#
|
||||
# <Relative Capacity> - Default(255)
|
||||
#
|
||||
@@ -232,19 +232,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
@@ -358,3 +358,17 @@ usrsctp:
|
||||
# handover:
|
||||
# duration: 500
|
||||
time:
|
||||
|
||||
#
|
||||
# metrics:
|
||||
#
|
||||
# <Metrics Server>
|
||||
#
|
||||
# o Metrics Server(http://<any address>:9090)
|
||||
# metrics:
|
||||
# addr: 0.0.0.0
|
||||
# port: 9090
|
||||
#
|
||||
metrics:
|
||||
addr: 127.0.0.5
|
||||
port: 9090
|
||||
|
||||
@@ -138,9 +138,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -140,9 +140,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -26,12 +26,11 @@ logger:
|
||||
hss:
|
||||
freeDiameter: @sysconfdir@/freeDiameter/hss.conf
|
||||
|
||||
# sms_over_ims: "sip:smsc.mnc001.mcc001.3gppnetwork.org:7060;transport=tcp"
|
||||
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -29,6 +29,7 @@ open5gs_conf = '''
|
||||
hss.yaml
|
||||
pcrf.yaml
|
||||
nrf.yaml
|
||||
scp.yaml
|
||||
ausf.yaml
|
||||
udm.yaml
|
||||
udr.yaml
|
||||
|
||||
@@ -248,15 +248,15 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gtpc:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -421,3 +421,17 @@ usrsctp:
|
||||
# handover:
|
||||
# duration: 500
|
||||
time:
|
||||
|
||||
#
|
||||
# metrics:
|
||||
#
|
||||
# <Metrics Server>
|
||||
#
|
||||
# o Metrics Server(http://<any address>:9090)
|
||||
# metrics:
|
||||
# addr: 0.0.0.0
|
||||
# port: 9090
|
||||
#
|
||||
metrics:
|
||||
addr: 127.0.0.2
|
||||
port: 9090
|
||||
|
||||
@@ -87,9 +87,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -180,9 +180,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -140,9 +140,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -28,9 +28,6 @@ pcrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
213
configs/open5gs/scp.yaml.in
Normal file
213
configs/open5gs/scp.yaml.in
Normal file
@@ -0,0 +1,213 @@
|
||||
db_uri: mongodb://localhost/open5gs
|
||||
|
||||
#
|
||||
# logger:
|
||||
#
|
||||
# o Set OGS_LOG_INFO to all domain level
|
||||
# - If `level` is omitted, the default level is OGS_LOG_INFO)
|
||||
# - If `domain` is omitted, the all domain level is set from 'level'
|
||||
# (Nothing is needed)
|
||||
#
|
||||
# o Set OGS_LOG_ERROR to all domain level
|
||||
# - `level` can be set with none, fatal, error, warn, info, debug, trace
|
||||
# level: error
|
||||
#
|
||||
# o Set OGS_LOG_DEBUG to mme/emm domain level
|
||||
# level: debug
|
||||
# domain: mme,emm
|
||||
#
|
||||
# o Set OGS_LOG_TRACE to all domain level
|
||||
# level: trace
|
||||
# domain: core,sbi,scp,event,tlv,mem,sock
|
||||
#
|
||||
logger:
|
||||
file: @localstatedir@/log/open5gs/scp.log
|
||||
|
||||
#
|
||||
# scp:
|
||||
#
|
||||
# <SBI Server>
|
||||
#
|
||||
# o SBI Server(http://<all address available>:80)
|
||||
# sbi:
|
||||
#
|
||||
# o SBI Server(http://<any address>:80)
|
||||
# sbi:
|
||||
# - addr:
|
||||
# - 0.0.0.0
|
||||
# - ::0
|
||||
# port: 7777
|
||||
#
|
||||
# o SBI Server(https://<all address avaiable>:443)
|
||||
# sbi:
|
||||
# - tls:
|
||||
# key: scp.key
|
||||
# pem: scp.pem
|
||||
#
|
||||
# o SBI Server(https://127.0.1.10:443, http://[::1]:80)
|
||||
# sbi:
|
||||
# - addr: 127.0.1.10
|
||||
# tls:
|
||||
# key: scp.key
|
||||
# pem: scp.pem
|
||||
# - addr: ::1
|
||||
#
|
||||
# o SBI Server(http://scp.open5gs.org:80)
|
||||
# sbi:
|
||||
# - name: scp.open5gs.org
|
||||
#
|
||||
# o SBI Server(http://127.0.1.10:7777)
|
||||
# sbi:
|
||||
# - addr: 127.0.1.10
|
||||
# port: 7777
|
||||
#
|
||||
# o SBI Server(http://<eth0 IP address>:80)
|
||||
# sbi:
|
||||
# - dev: eth0
|
||||
#
|
||||
# o Provide custom SBI address to be advertised to NRF
|
||||
# sbi:
|
||||
# - dev: eth0
|
||||
# advertise: open5gs-scp.svc.local
|
||||
#
|
||||
# sbi:
|
||||
# - addr: localhost
|
||||
# advertise:
|
||||
# - 127.0.0.99
|
||||
# - ::1
|
||||
#
|
||||
# o SBI Option (Default)
|
||||
# - tcp_nodelay : true
|
||||
# - so_linger.l_onoff : false
|
||||
#
|
||||
# sbi:
|
||||
# addr: 127.0.1.10
|
||||
# option:
|
||||
# tcp_nodelay: false
|
||||
# so_linger:
|
||||
# l_onoff: true
|
||||
# l_linger: 10
|
||||
#
|
||||
# <Next hop SCP>
|
||||
#
|
||||
# o Next hop SCP Server(https://127.0.1.11:7777)
|
||||
# next_scp:
|
||||
# sbi:
|
||||
# - addr: 127.0.1.11
|
||||
# port: 7777
|
||||
#
|
||||
# <Discovery>
|
||||
#
|
||||
# o NF Discovery and Selection
|
||||
# for indirect communication with Delegated Discovery;
|
||||
#
|
||||
# o delegated:
|
||||
# o auto: (Default)
|
||||
# Use next-hop SCP if next-hop SCP avaiable. Otherwise NRF is used.
|
||||
# => App fails if both next-hop SCP and NRF are unavailable.
|
||||
# o yes: Use next-hop SCP always.
|
||||
# => App fails if no next-hop SCP available.
|
||||
# o no: Don't use next-hop SCP server.
|
||||
# => App fails if no NRF available.
|
||||
#
|
||||
# next_scp:
|
||||
# sbi:
|
||||
# - addr: 127.0.1.11
|
||||
# port: 7777
|
||||
# discovery:
|
||||
# delegated: auto|yes|no
|
||||
#
|
||||
scp:
|
||||
sbi:
|
||||
- addr: 127.0.1.10
|
||||
port: 7777
|
||||
|
||||
#
|
||||
# nrf:
|
||||
#
|
||||
# <SBI Client>>
|
||||
#
|
||||
# o SBI Client(http://127.0.0.10:7777)
|
||||
# sbi:
|
||||
# addr: 127.0.0.10
|
||||
# port: 7777
|
||||
#
|
||||
# o SBI Client(https://127.0.0.10:443, http://nrf.open5gs.org:80)
|
||||
# sbi:
|
||||
# - addr: 127.0.0.10
|
||||
# tls:
|
||||
# key: nrf.key
|
||||
# pem: nrf.pem
|
||||
# - name: nrf.open5gs.org
|
||||
#
|
||||
# o SBI Client(http://[fd69:f21d:873c:fa::1]:80)
|
||||
# If prefer_ipv4 is true, http://127.0.0.10:80 is selected.
|
||||
#
|
||||
# sbi:
|
||||
# addr:
|
||||
# - 127.0.0.10
|
||||
# - fd69:f21d:873c:fa::1
|
||||
#
|
||||
# o SBI Option (Default)
|
||||
# - tcp_nodelay : true
|
||||
# - so_linger.l_onoff : false
|
||||
#
|
||||
# sbi:
|
||||
# addr: 127.0.0.10
|
||||
# option:
|
||||
# tcp_nodelay: false
|
||||
# so_linger:
|
||||
# l_onoff: true
|
||||
# l_linger: 10
|
||||
#
|
||||
nrf:
|
||||
sbi:
|
||||
- addr:
|
||||
- 127.0.0.10
|
||||
- ::1
|
||||
port: 7777
|
||||
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
# o Disable use of IPv6 addresses (only IPv4)
|
||||
# no_ipv6: true
|
||||
#
|
||||
# o Prefer IPv4 instead of IPv6 for estabishing new GTP connections.
|
||||
# prefer_ipv4: true
|
||||
#
|
||||
parameter:
|
||||
|
||||
#
|
||||
# max:
|
||||
#
|
||||
# o Maximum Number of UE per AMF/MME
|
||||
# ue: 1024
|
||||
# o Maximum Number of gNB/eNB per AMF/MME
|
||||
# gnb: 64
|
||||
#
|
||||
max:
|
||||
|
||||
#
|
||||
# time:
|
||||
#
|
||||
# o NF Instance Heartbeat (Default : 0)
|
||||
# NFs will not send heart-beat timer in NFProfile
|
||||
# NRF will send heart-beat timer in NFProfile
|
||||
#
|
||||
# o NF Instance Heartbeat (20 seconds)
|
||||
# NFs will send heart-beat timer (20 seconds) in NFProfile
|
||||
# NRF can change heart-beat timer in NFProfile
|
||||
#
|
||||
# nf_instance:
|
||||
# heartbeat: 20
|
||||
#
|
||||
# o Message Wait Duration (Default : 10,000 ms = 10 seconds)
|
||||
#
|
||||
# o Message Wait Duration (3000 ms)
|
||||
# message:
|
||||
# duration: 3000
|
||||
time:
|
||||
@@ -125,9 +125,6 @@ sgwu:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
@@ -149,6 +146,8 @@ parameter:
|
||||
# ue: 1024
|
||||
# o Maximum Number of gNB/eNB per AMF/MME
|
||||
# gnb: 64
|
||||
# o Maximum Number of GTP peer nodes per SGWC/SMF
|
||||
# gtp_peer: 64
|
||||
#
|
||||
max:
|
||||
|
||||
|
||||
@@ -117,9 +117,6 @@ sgwc:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -233,6 +233,19 @@ logger:
|
||||
# - 127.0.0.1
|
||||
# - ::1
|
||||
#
|
||||
# <CTF>
|
||||
#
|
||||
# o Gy interface parameters towards OCS.
|
||||
# o enabled:
|
||||
# o auto: Default. Use Gy only if OCS available among Diameter peers
|
||||
# o yes: Use Gy always;
|
||||
# reject subscribers if no OCS available among Diameter peers
|
||||
# o no: Don't use Gy interface if there is an OCS available
|
||||
#
|
||||
# ctf:
|
||||
# enabled: auto|yes|no
|
||||
#
|
||||
#
|
||||
# <SMF Selection - 5G Core only>
|
||||
# 1. SMF sends SmfInfo(S-NSSAI, DNN, TAI) to the NRF
|
||||
# 2. NRF responds to AMF with SmfInfo during NF-Discovery.
|
||||
@@ -256,7 +269,7 @@ logger:
|
||||
# - internet
|
||||
# - ims
|
||||
#
|
||||
# o S-NSSAI[SST:1] and DNN[internet] and TAI[PLMN-ID:90170 TAC:1]
|
||||
# o S-NSSAI[SST:1] and DNN[internet] and TAI[PLMN-ID:99970 TAC:1]
|
||||
# info:
|
||||
# - s_nssai:
|
||||
# - sst: 1
|
||||
@@ -264,14 +277,14 @@ logger:
|
||||
# - internet
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# tac: 1
|
||||
#
|
||||
# o If any of conditions below are met:
|
||||
# - S-NSSAI[SST:1] and DNN[internet] and TAI[PLMN-ID:90170 TAC:1-9]
|
||||
# - S-NSSAI[SST:1] and DNN[internet] and TAI[PLMN-ID:99970 TAC:1-9]
|
||||
# - S-NSSAI[SST:2 SD:000080] and DNN[internet or ims]
|
||||
# - S-NSSAI[SST:4] and DNN[internet] and TAI[PLMN-ID:90170 TAC:10-20,30-40]
|
||||
# - S-NSSAI[SST:4] and DNN[internet] and TAI[PLMN-ID:99970 TAC:10-20,30-40]
|
||||
#
|
||||
# info:
|
||||
# - s_nssai:
|
||||
@@ -280,7 +293,7 @@ logger:
|
||||
# - internet
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# range:
|
||||
# - 1-9
|
||||
@@ -296,7 +309,7 @@ logger:
|
||||
# - internet
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# range:
|
||||
# - 10-20
|
||||
@@ -326,27 +339,27 @@ logger:
|
||||
# - internet
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# tac: [1, 2, 3]
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# tac: 4
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# tac:
|
||||
# - 5
|
||||
# - 6
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# range:
|
||||
# - 100-200
|
||||
# - 300-400
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# range:
|
||||
# - 500-600
|
||||
@@ -358,10 +371,10 @@ logger:
|
||||
# - internet
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 901
|
||||
# mcc: 999
|
||||
# mnc: 70
|
||||
# tac: 99
|
||||
#
|
||||
#
|
||||
|
||||
smf:
|
||||
sbi:
|
||||
@@ -385,6 +398,8 @@ smf:
|
||||
- 2001:4860:4860::8888
|
||||
- 2001:4860:4860::8844
|
||||
mtu: 1400
|
||||
ctf:
|
||||
enabled: auto
|
||||
freeDiameter: @sysconfdir@/freeDiameter/smf.conf
|
||||
|
||||
#
|
||||
@@ -438,7 +453,7 @@ nrf:
|
||||
# <PFCP Client>>
|
||||
#
|
||||
# o PFCP Client(127.0.0.7:8805)
|
||||
#
|
||||
#
|
||||
# pfcp:
|
||||
# addr: 127.0.0.7
|
||||
#
|
||||
@@ -491,9 +506,6 @@ upf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
@@ -519,6 +531,8 @@ parameter:
|
||||
# ue: 1024
|
||||
# o Maximum Number of gNB/eNB per AMF/MME
|
||||
# gnb: 64
|
||||
# o Maximum Number of GTP peer nodes per SGWC/SMF
|
||||
# gtp_peer: 64
|
||||
#
|
||||
max:
|
||||
|
||||
@@ -551,3 +565,17 @@ max:
|
||||
# handover:
|
||||
# duration: 500
|
||||
time:
|
||||
|
||||
#
|
||||
# metrics:
|
||||
#
|
||||
# <Metrics Server>
|
||||
#
|
||||
# o Metrics Server(http://<any address>:9090)
|
||||
# metrics:
|
||||
# addr: 0.0.0.0
|
||||
# port: 9090
|
||||
#
|
||||
metrics:
|
||||
addr: 127.0.0.4
|
||||
port: 9090
|
||||
|
||||
@@ -138,9 +138,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -140,9 +140,6 @@ nrf:
|
||||
#
|
||||
# parameter:
|
||||
#
|
||||
# o Number of output streams per SCTP associations.
|
||||
# sctp_streams: 30
|
||||
#
|
||||
# o Disable use of IPv4 addresses (only IPv6)
|
||||
# no_ipv4: true
|
||||
#
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -112,19 +113,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
@@ -194,6 +195,70 @@ nrf:
|
||||
- ::1
|
||||
port: 7777
|
||||
|
||||
#
|
||||
# scp:
|
||||
#
|
||||
# <SBI Client>>
|
||||
#
|
||||
# o SBI Client(http://127.0.1.10:7777)
|
||||
# sbi:
|
||||
# addr: 127.0.1.10
|
||||
# port: 7777
|
||||
#
|
||||
# o SBI Client(https://127.0.1.10:443, http://scp.open5gs.org:80)
|
||||
# sbi:
|
||||
# - addr: 127.0.1.10
|
||||
# tls:
|
||||
# key: scp.key
|
||||
# pem: scp.pem
|
||||
# - name: scp.open5gs.org
|
||||
#
|
||||
# o SBI Client(http://[fd69:f21d:873c:fb::1]:80)
|
||||
# If prefer_ipv4 is true, http://127.0.1.10:80 is selected.
|
||||
#
|
||||
# sbi:
|
||||
# addr:
|
||||
# - 127.0.1.10
|
||||
# - fd69:f21d:873c:fb::1
|
||||
#
|
||||
# o SBI Option (Default)
|
||||
# - tcp_nodelay : true
|
||||
# - so_linger.l_onoff : false
|
||||
#
|
||||
# sbi:
|
||||
# addr: 127.0.1.10
|
||||
# option:
|
||||
# tcp_nodelay: false
|
||||
# so_linger:
|
||||
# l_onoff: true
|
||||
# l_linger: 10
|
||||
#
|
||||
# <Discovery>
|
||||
#
|
||||
# o NF Discovery and Selection
|
||||
# for indirect communication with Delegated Discovery;
|
||||
#
|
||||
# o delegated:
|
||||
# o auto: (Default)
|
||||
# Use SCP if SCP avaiable. Otherwise NRF is used.
|
||||
# => App fails if both NRF and SCP are unavailable.
|
||||
# o yes: Use SCP always.
|
||||
# => App fails if no SCP available.
|
||||
# o no: Don't use SCP server.
|
||||
# => App fails if no NRF available.
|
||||
#
|
||||
# scp:
|
||||
# sbi:
|
||||
# - addr: 127.0.1.10
|
||||
# port: 7777
|
||||
# discovery:
|
||||
# delegated: auto|yes|no
|
||||
#
|
||||
scp:
|
||||
sbi:
|
||||
- addr: 127.0.1.10
|
||||
port: 7777
|
||||
|
||||
ausf:
|
||||
sbi:
|
||||
- addr: 127.0.0.11
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -112,19 +113,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 202
|
||||
set: 1016
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 7
|
||||
security:
|
||||
@@ -112,19 +113,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -115,19 +116,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -4,6 +4,7 @@ logger:
|
||||
|
||||
parameter:
|
||||
# no_nrf: true
|
||||
# no_scp: true
|
||||
# no_amf: true
|
||||
# no_smf: true
|
||||
# no_upf: true
|
||||
@@ -44,13 +45,13 @@ mme:
|
||||
- addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
security:
|
||||
@@ -115,19 +116,19 @@ amf:
|
||||
- addr: 127.0.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
mcc: 901
|
||||
mcc: 999
|
||||
mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
@@ -199,6 +200,11 @@ nrf:
|
||||
- ::1
|
||||
port: 7777
|
||||
|
||||
scp:
|
||||
sbi:
|
||||
- addr: 127.0.1.10
|
||||
port: 7777
|
||||
|
||||
ausf:
|
||||
sbi:
|
||||
- addr: 127.0.0.11
|
||||
|
||||
138
debian/changelog
vendored
138
debian/changelog
vendored
@@ -1,3 +1,141 @@
|
||||
open5gs (2.4.9) unstable; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Mon, 25 Jul 2022 20:49:38 +0900
|
||||
|
||||
open5gs (2.4.9~jammy) jammy; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Mon, 25 Jul 2022 20:48:36 +0900
|
||||
|
||||
open5gs (2.4.9~focal) focal; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Mon, 25 Jul 2022 20:47:16 +0900
|
||||
|
||||
open5gs (2.4.9~bionic) bionic; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Mon, 25 Jul 2022 20:45:33 +0900
|
||||
|
||||
open5gs (2.4.8) unstable; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 12 Jun 2022 16:28:51 +0900
|
||||
|
||||
open5gs (2.4.8~jammy) jammy; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 12 Jun 2022 16:27:13 +0900
|
||||
|
||||
open5gs (2.4.8~focal) focal; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 12 Jun 2022 16:23:05 +0900
|
||||
|
||||
open5gs (2.4.8~bionic) bionic; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 12 Jun 2022 16:22:04 +0900
|
||||
|
||||
open5gs (2.4.8~impish) impish; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 12 Jun 2022 16:19:27 +0900
|
||||
|
||||
open5gs (2.4.7) unstable; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 21 May 2022 19:20:07 +0900
|
||||
|
||||
open5gs (2.4.7~jammy) jammy; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 21 May 2022 19:19:10 +0900
|
||||
|
||||
open5gs (2.4.7~focal) focal; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 21 May 2022 19:18:11 +0900
|
||||
|
||||
open5gs (2.4.7~bionic) bionic; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 21 May 2022 19:17:08 +0900
|
||||
|
||||
open5gs (2.4.7~impish) impish; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 21 May 2022 19:14:58 +0900
|
||||
|
||||
open5gs (2.4.6) unstable; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Tue, 17 May 2022 22:41:32 +0900
|
||||
|
||||
open5gs (2.4.6~jammy) jammy; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Tue, 17 May 2022 22:40:16 +0900
|
||||
|
||||
open5gs (2.4.6~focal) focal; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Tue, 17 May 2022 22:38:38 +0900
|
||||
|
||||
open5gs (2.4.6~bionic) bionic; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Tue, 17 May 2022 22:37:22 +0900
|
||||
|
||||
open5gs (2.4.6~impish) impish; urgency=medium
|
||||
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Tue, 17 May 2022 22:34:40 +0900
|
||||
|
||||
open5gs (2.4.5) unstable; urgency=medium
|
||||
|
||||
* GTP-1C(GGSN) provided by sysmocom
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 27 Mar 2022 18:41:04 +0900
|
||||
|
||||
open5gs (2.4.5~focal) focal; urgency=medium
|
||||
|
||||
* GTP-1C(GGSN) provided by sysmocom
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 27 Mar 2022 18:40:06 +0900
|
||||
|
||||
open5gs (2.4.5~bionic) bionic; urgency=medium
|
||||
|
||||
* GTP-1C(GGSN) provided by sysmocom
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 27 Mar 2022 18:38:55 +0900
|
||||
|
||||
open5gs (2.4.5~impish) impish; urgency=medium
|
||||
|
||||
* GTP-1C(GGSN) provided by sysmocom
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sun, 27 Mar 2022 18:37:40 +0900
|
||||
|
||||
open5gs (2.4.4) unstable; urgency=medium
|
||||
|
||||
* Fixed Memory leak
|
||||
|
||||
4
debian/open5gs-upf.postinst
vendored
4
debian/open5gs-upf.postinst
vendored
@@ -27,7 +27,9 @@ case "$1" in
|
||||
if test "x`systemctl is-enabled systemd-networkd`" = xdisabled; then
|
||||
systemctl enable systemd-networkd
|
||||
fi
|
||||
deb-systemd-invoke restart systemd-networkd
|
||||
if test -d "/run/systemd"; then
|
||||
deb-systemd-invoke restart systemd-networkd
|
||||
fi
|
||||
if test -f /etc/sysctl.d/30-open5gs.conf && grep "ogstun" /proc/net/dev > /dev/null; then
|
||||
echo "net.ipv6.conf.ogstun.disable_ipv6=0" > /etc/sysctl.d/30-open5gs.conf
|
||||
sysctl -p /etc/sysctl.d/30-open5gs.conf
|
||||
|
||||
@@ -5,15 +5,8 @@ FROM ${username}/${dist}-${tag}-open5gs-base
|
||||
|
||||
MAINTAINER Sukchan Lee <acetcom@gmail.com>
|
||||
|
||||
WORKDIR /root
|
||||
COPY setup.sh /root
|
||||
WORKDIR /open5gs
|
||||
COPY docker/build/setup.sh /root
|
||||
COPY ./ /open5gs
|
||||
|
||||
ARG USER=open5gs
|
||||
ARG REPO=open5gs
|
||||
ARG BRANCH=main
|
||||
RUN git clone https://github.com/$USER/$REPO
|
||||
ADD https://api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH /root/open5gs-ver.json
|
||||
|
||||
RUN cd $REPO && \
|
||||
git fetch && git checkout -f -B $BRANCH origin/$BRANCH && \
|
||||
meson build && ninja -C build install
|
||||
RUN meson build && ninja -C build install
|
||||
|
||||
@@ -15,4 +15,4 @@ services:
|
||||
sysctls:
|
||||
- net.ipv6.conf.all.disable_ipv6=0
|
||||
hostname: open5gs-test
|
||||
command: /bin/bash -c "/root/setup.sh; cd open5gs/build && meson test -v"
|
||||
command: /bin/bash -c "/root/setup.sh; cd /open5gs/build && meson test -v"
|
||||
|
||||
@@ -33,7 +33,8 @@ services:
|
||||
|
||||
build:
|
||||
build:
|
||||
context: ./build
|
||||
context: ../
|
||||
dockerfile: docker/build/Dockerfile
|
||||
args:
|
||||
dist: ${DIST-ubuntu}
|
||||
tag: ${TAG-latest}
|
||||
@@ -67,7 +68,7 @@ services:
|
||||
volumes:
|
||||
- home:/home/${USER}
|
||||
- ${HOME}:/mnt
|
||||
- /tmp/.X11-unix:/tmp/.X11-unix
|
||||
# - /tmp/.X11-unix:/tmp/.X11-unix
|
||||
# - /etc/localtime:/etc/localtime:ro
|
||||
# - /usr/share/zoneinfo/Europe/Helsinki:/etc/localtime:ro
|
||||
hostname: open5gs-dev
|
||||
|
||||
@@ -112,6 +112,7 @@ https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbunt
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_20.10/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_21.04/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_21.10/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_22.04/
|
||||
```
|
||||
|
||||
#### openSUSE
|
||||
@@ -149,6 +150,7 @@ https://download.opensuse.org/repositories/network:/osmocom:/nightly/xUbuntu_20.
|
||||
https://download.opensuse.org/repositories/network:/osmocom:/nightly/xUbuntu_20.10/
|
||||
https://download.opensuse.org/repositories/network:/osmocom:/nightly/xUbuntu_21.04/
|
||||
https://download.opensuse.org/repositories/network:/osmocom:/nightly/xUbuntu_21.10/
|
||||
https://download.opensuse.org/repositories/network:/osmocom:/nightly/xUbuntu_22.04/
|
||||
```
|
||||
|
||||
|
||||
@@ -247,7 +249,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001 # set your PLMN-MCC
|
||||
+ mnc: 01 # set your PLMN-MNC
|
||||
@@ -255,7 +257,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
- tac: 1
|
||||
+ mcc: 001 # set your PLMN-MCC
|
||||
@@ -306,7 +308,7 @@ amf:
|
||||
+ - addr: 10.10.0.5 # for external gNB - a local address that can be reached by the gNB
|
||||
guami:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001 # set your PLMN-MCC
|
||||
+ mnc: 01 # set your PLMN-MNC
|
||||
@@ -315,7 +317,7 @@ amf:
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
- tac: 1
|
||||
+ mcc: 001 # set your PLMN-MCC
|
||||
@@ -323,7 +325,7 @@ amf:
|
||||
+ tac: 2 # should match the TAC used by your gNB
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001 # set your PLMN-MCC
|
||||
+ mnc: 01 # set your PLMN-MNC
|
||||
|
||||
@@ -107,7 +107,7 @@ $ diff -u /etc/open5gs/amf.yaml.old /etc/open5gs/amf.yaml
|
||||
+ - addr: 10.10.0.5
|
||||
guami:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001
|
||||
+ mnc: 01
|
||||
@@ -116,7 +116,7 @@ $ diff -u /etc/open5gs/amf.yaml.old /etc/open5gs/amf.yaml
|
||||
set: 1
|
||||
tai:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
- tac: 1
|
||||
+ mcc: 001
|
||||
@@ -124,7 +124,7 @@ $ diff -u /etc/open5gs/amf.yaml.old /etc/open5gs/amf.yaml
|
||||
+ tac: 2
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001
|
||||
+ mnc: 01
|
||||
@@ -168,7 +168,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 001
|
||||
+ mnc: 01
|
||||
@@ -176,7 +176,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
- tac: 1
|
||||
+ mcc: 001
|
||||
|
||||
@@ -70,7 +70,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
plmn_id:
|
||||
- mcc: 001
|
||||
- mnc: 01
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
mme_gid: 2
|
||||
mme_code: 1
|
||||
@@ -79,7 +79,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
- mcc: 001
|
||||
- mnc: 01
|
||||
- tac: 7
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
+ tac: 1
|
||||
security:
|
||||
@@ -153,7 +153,7 @@ diff -u /etc/open5gs/amf.yaml.old /etc/open5gs/amf.yaml
|
||||
- plmn_id:
|
||||
- mcc: 001
|
||||
- mnc: 01
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
amf_id:
|
||||
region: 2
|
||||
@@ -163,14 +163,14 @@ diff -u /etc/open5gs/amf.yaml.old /etc/open5gs/amf.yaml
|
||||
- mcc: 001
|
||||
- mnc: 01
|
||||
- tac: 7
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
+ tac: 1
|
||||
plmn_support:
|
||||
- plmn_id:
|
||||
- mcc: 001
|
||||
- mnc: 01
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
|
||||
@@ -42,6 +42,8 @@ If you have tested radio hardware from a vendor not listed with Open5GS, please
|
||||
* Nokia FW2PC BC28 Flexi Zone G2 Outdoor Micro FDD LTE 700 MHz High Power
|
||||
* Nokia FWH1 B38 Flexi Zone Outdoor Micro TD LTE 2600 MHz
|
||||
* Nokia FRGY Flexi BTS BBU with Nokia FRCG RRU Band 5 850Mhz FDD 40W. Version 16.1A to 19.0
|
||||
* Nokia FW2FA Flexi Zone Mini-Macro Outdoor BTS, 2x20w Band 39
|
||||
* Nokia FWGR Flexi Zone Mini-Macro Outdoor BTS, 2x20w Band 1
|
||||
* Ruckus Q710 and Q910
|
||||
|
||||
### 4G/5G Software Stacks + SDRs
|
||||
|
||||
@@ -3,10 +3,10 @@ title: CentOS
|
||||
head_inline: "<style> .blue { color: blue; } </style>"
|
||||
---
|
||||
|
||||
This guide is based on **CentOS 8** Distribution.
|
||||
This guide is based on **CentOS Stream 8** Distribution.
|
||||
{: .blue}
|
||||
|
||||
## Install **CentOS 8** from Vagrant box (optional)
|
||||
## Install **CentOS Stream 8** from Vagrant box (optional)
|
||||
---
|
||||
Vagrant provides a simple way to create and deploy Virtual Machines from
|
||||
pre-built images using VirtualBox, libvirt, or VMWare as a hypervisor engine.
|
||||
@@ -20,13 +20,13 @@ The instructions to install Vagrant are provided at
|
||||
[vagrantup.com](https://www.vagrantup.com/).
|
||||
|
||||
|
||||
### Create a CentOS 8 Virtual Machine using Vagrant
|
||||
### Create a CentOS Stream 8 Virtual Machine using Vagrant
|
||||
---
|
||||
|
||||
Use the supplied `Vagrantfile` in the `vagrant` directory to create the
|
||||
virtual machine.
|
||||
|
||||
Note that this Vagrantfile is identical to the base CentOS 8 box, with
|
||||
Note that this Vagrantfile is identical to the base CentOS Stream 8 box, with
|
||||
the exception that the amount of virtual memory has been increased to 1GB:
|
||||
|
||||
```bash
|
||||
@@ -37,7 +37,7 @@ vagrant up --provider virtualbox
|
||||
### Log into the newly created CentOS VM
|
||||
---
|
||||
|
||||
Use SSH to log into the CentOS 8 VM:
|
||||
Use SSH to log into the CentOS Stream 8 VM:
|
||||
|
||||
```bash
|
||||
vagrant ssh
|
||||
@@ -45,20 +45,20 @@ vagrant ssh
|
||||
|
||||
Note that the Open5GS source is *not* copied into the VM. The instructions
|
||||
below provide the step by step instructions for setting up Open5GS for
|
||||
either a bare metal or virtual CentOS 8 system.
|
||||
either a bare metal or virtual CentOS Stream 8 system.
|
||||
|
||||
The rest of the commands below are performed inside the CentOS VM as the
|
||||
user 'vagrant', or on your bare metal CentOS 8 system as any normal user.
|
||||
user 'vagrant', or on your bare metal CentOS Stream 8 system as any normal user.
|
||||
|
||||
## Install prerequisite packages to build and run Open5GS
|
||||
---
|
||||
|
||||
### Enable CentOS 8 PowerTools repository
|
||||
### Enable CentOS Stream 8 PowerTools repository
|
||||
---
|
||||
|
||||
```bash
|
||||
$ sudo dnf install 'dnf-command(config-manager)'
|
||||
$ sudo dnf config-manager --set-enabled PowerTools
|
||||
$ sudo dnf config-manager --set-enabled powertools
|
||||
```
|
||||
|
||||
### Enable the Extra Packages for Enterprise Linux
|
||||
@@ -86,13 +86,13 @@ $ sudo dnf config-manager --set-enabled elrepo-testing
|
||||
Create a repository file to install the MongoDB packages:
|
||||
|
||||
```bash
|
||||
$ sudo sh -c 'cat << EOF > /etc/yum.repos.d/mongodb-org-3.4.repo
|
||||
[mongodb-org-3.4]
|
||||
$ sudo sh -c 'cat << EOF > /etc/yum.repos.d/mongodb-org-3.6.repo
|
||||
[mongodb-org-3.6]
|
||||
name=MongoDB Repository
|
||||
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.4/x86_64/
|
||||
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.6/x86_64/
|
||||
gpgcheck=1
|
||||
enabled=1
|
||||
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
|
||||
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
|
||||
EOF'
|
||||
```
|
||||
|
||||
@@ -105,20 +105,13 @@ $ sudo dnf -y install mongodb-org
|
||||
### Install the dependencies for building the source code.
|
||||
---
|
||||
Open5GS requires several packages which are not installed by default in
|
||||
a base CentOS 8 installation.
|
||||
a base CentOS Stream 8 installation.
|
||||
|
||||
|
||||
```bash
|
||||
$ sudo dnf install python3 meson ninja-build gcc gcc-c++ flex bison git lksctp-tools-devel libidn-devel gnutls-devel libgcrypt-devel openssl-devel cyrus-sasl-devel libyaml-devel mongo-c-driver-devel libmicrohttpd-devel libcurl-devel libnghttp2-devel libtalloc-devel
|
||||
```
|
||||
|
||||
### Install the SCTP kernel module in kernel-modules-extra.
|
||||
---
|
||||
|
||||
```bash
|
||||
$ sudo dnf install kernel-modules-extra
|
||||
```
|
||||
|
||||
### Install iproute IP interface tools.
|
||||
---
|
||||
|
||||
@@ -126,6 +119,15 @@ $ sudo dnf install kernel-modules-extra
|
||||
$ sudo dnf install iproute
|
||||
```
|
||||
|
||||
### Install the SCTP kernel module in kernel-modules-extra.
|
||||
---
|
||||
|
||||
```bash
|
||||
$ sudo dnf install kernel-modules-extra
|
||||
$ sudo rm /etc/modprobe.d/sctp-blacklist.conf
|
||||
$ sudo rm /etc/modprobe.d/sctp_diag-blacklist.conf
|
||||
```
|
||||
|
||||
### Update all installed packages to the latest versions.
|
||||
---
|
||||
|
||||
@@ -141,11 +143,27 @@ after this step to ensure that you are running this new kernel version.
|
||||
This is important when you try to load the SCTP kernel module later.
|
||||
|
||||
```bash
|
||||
[vm] $ sudo reboot
|
||||
[host] $ vagrant halt
|
||||
[host] $ vagrant up --provider virtualbox
|
||||
[host] $ # ssh back into the VM after it reboots...
|
||||
[host] $ vagrant ssh
|
||||
```
|
||||
|
||||
### Check the SCTP kernel module
|
||||
---
|
||||
Open5GS requires the Linux SCTP kernel module to be loaded in the kernel.
|
||||
In the CentOS Stream 8 Vagrant box SCTP is not loaded into the kernel automatically
|
||||
so must be installed as follows:
|
||||
|
||||
```bash
|
||||
$ checksctp
|
||||
SCTP supported
|
||||
$ sudo modprobe sctp
|
||||
$ # Check that SCTP was loaded successfully:
|
||||
$ sudo dmesg | grep sctp
|
||||
[ 639.971360] sctp: Hash tables configured (bind 256/256)
|
||||
```
|
||||
|
||||
## Build Open5GS from Source
|
||||
---
|
||||
|
||||
@@ -252,19 +270,6 @@ to configure the TUN device as follows:
|
||||
`$ sudo ./misc/netconf.sh`
|
||||
{: .notice--info}
|
||||
|
||||
### Install the SCTP kernel module
|
||||
---
|
||||
Open5GS requires the Linux SCTP kernel module to be loaded in the kernel.
|
||||
In the CentOS 8 Vagrant box SCTP is not loaded into the kernel automatically
|
||||
so must be installed as follows:
|
||||
|
||||
```bash
|
||||
$ sudo modprobe sctp
|
||||
$ # Check that SCTP was loaded successfully:
|
||||
$ sudo dmesg | grep sctp
|
||||
[ 639.971360] sctp: Hash tables configured (bind 256/256)
|
||||
```
|
||||
|
||||
## Testing Open5GS
|
||||
---
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ $ mongo
|
||||
> db.subscribers.find().pretty()
|
||||
{
|
||||
"_id" : ObjectId("60969fe79459f8b40d8d3f68"),
|
||||
"imsi" : "901700000000001",
|
||||
"imsi" : "999700000000001",
|
||||
"__v" : 0,
|
||||
"access_restriction_data" : 32,
|
||||
"ambr" : {
|
||||
@@ -164,7 +164,7 @@ $ mongo
|
||||
> db.subscribers.find().pretty()
|
||||
{
|
||||
"_id" : ObjectId("609715fda08851a0744e6ae7"),
|
||||
"imsi" : "901700000021309",
|
||||
"imsi" : "999700000021309",
|
||||
"__v" : 0,
|
||||
"access_restriction_data" : 32,
|
||||
"ambr" : {
|
||||
@@ -317,7 +317,7 @@ index 7e939e81..dfe4456d 100644
|
||||
s_nssai:
|
||||
- sst: 1
|
||||
+ - plmn_id:
|
||||
+ mcc: 901
|
||||
+ mcc: 999
|
||||
+ mnc: 70
|
||||
+ s_nssai:
|
||||
+ - sst: 1
|
||||
@@ -1089,12 +1089,12 @@ Currently, the number of UE is limited to `128*128`.
|
||||
|
||||
```
|
||||
* AMF_ID
|
||||
PLMN ID - MNC: 901, MCC: 70
|
||||
PLMN ID - MNC: 999, MCC: 70
|
||||
Region : 2
|
||||
Set : 1
|
||||
|
||||
* TAI
|
||||
PLMN ID - MNC: 901, MCC: 70
|
||||
PLMN ID - MNC: 999, MCC: 70
|
||||
TAC : 1
|
||||
|
||||
* S_NSSASI
|
||||
@@ -1105,12 +1105,12 @@ Currently, the number of UE is limited to `128*128`.
|
||||
|
||||
```
|
||||
* GUMMEI
|
||||
PLMN ID - MNC: 901, MCC: 70
|
||||
PLMN ID - MNC: 999, MCC: 70
|
||||
MME Group : 2
|
||||
MME Code : 1
|
||||
|
||||
* TAI
|
||||
PLMN ID - MNC: 901, MCC: 70
|
||||
PLMN ID - MNC: 999, MCC: 70
|
||||
TAC : 1
|
||||
```
|
||||
|
||||
|
||||
@@ -190,14 +190,14 @@ Title : sysmocom SIM Card Details / AM93\PICK\00859
|
||||
|
||||
IMSI ICCID ACC PIN1 PUK1 PIN2 PUK2 Ki OPC ADM1 KIC1 KID1 KIK1
|
||||
...
|
||||
901700000017408 8988211000000174089 0100 3623 84724035 8774 57473966 B1233463AB9BC2AD2DB1830EB6417E7B 625150E2A943E3353DD23554101CAFD4 47190711 C865CAA0A54542333929B29B116F4375 7D7F65DCD99003C0A0D5D31CA3E5253E 5B27983AF628FC3FCB36B89300012944
|
||||
999700000017408 8988211000000174089 0100 3623 84724035 8774 57473966 B1233463AB9BC2AD2DB1830EB6417E7B 625150E2A943E3353DD23554101CAFD4 47190711 C865CAA0A54542333929B29B116F4375 7D7F65DCD99003C0A0D5D31CA3E5253E 5B27983AF628FC3FCB36B89300012944
|
||||
```
|
||||
|
||||
Here's my subscriber information from above.
|
||||
|
||||
```
|
||||
MCC/MNC : 901/70
|
||||
IMSI : 901700000017408
|
||||
MCC/MNC : 999/70
|
||||
IMSI : 999700000017408
|
||||
K : B1233463AB9BC2AD2DB1830EB6417E7B
|
||||
OPc : 625150E2A943E3353DD23554101CAFD4
|
||||
```
|
||||
@@ -238,7 +238,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
addr: 127.0.0.2
|
||||
gummei:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
+ mcc: 310
|
||||
+ mnc: 789
|
||||
@@ -246,7 +246,7 @@ $ diff -u /etc/open5gs/mme.yaml.old /etc/open5gs/mme.yaml
|
||||
mme_code: 1
|
||||
tai:
|
||||
plmn_id:
|
||||
- mcc: 901
|
||||
- mcc: 999
|
||||
- mnc: 70
|
||||
- tac: 1
|
||||
+ mcc: 310
|
||||
|
||||
134
docs/_docs/tutorial/04-metrics-prometheus.md
Normal file
134
docs/_docs/tutorial/04-metrics-prometheus.md
Normal file
@@ -0,0 +1,134 @@
|
||||
---
|
||||
title: Metrics with Prometheus
|
||||
---
|
||||
|
||||
#### 0. Introduction
|
||||
|
||||
This tutorial explains how to export open5gs metrics to Prometheus, which can in
|
||||
turn be used to visualize or export them to other systems such as Grafana or
|
||||
StatsD.
|
||||
|
||||
When this method is used, any open5gs program exporting metrics becomes a
|
||||
Prometheus server, which is basically an HTTP server serving Prometheus data to
|
||||
the Prometheus scrapper.
|
||||
|
||||
Note: Only open5gs-smfd supports exporting metrics so far, though other may
|
||||
hopefully follow soon.
|
||||
|
||||
#### 1. Enable Prometheus support during build
|
||||
|
||||
Open5GS programs use a generic internal API available in libogsmetrics. This
|
||||
library implements the API based on configuration passed during open5gs build
|
||||
time. By default, the library will be built using the `void` implementation,
|
||||
which is basically a NO-OP implementation.
|
||||
|
||||
In order to use the Prometheus, the `prometheus` metrics implementation needs to
|
||||
be selected at build time:
|
||||
|
||||
```
|
||||
meson configure -Dmetrics_impl=prometheus build
|
||||
```
|
||||
|
||||
This will enable building the implementation under lib/metrics/prometheus/,
|
||||
which uses:
|
||||
|
||||
* prometheus-client-c project (libprom): To generate the Prometheus expected
|
||||
output format of the metrics
|
||||
* libmicrohttpd: To server the content generated by libprom as an HTTP server
|
||||
|
||||
The `prometheus-client-c` project is not currently well maintained, and uses a
|
||||
weird mixture of build systems, which makes it difficult to make it available in
|
||||
most Linux distributions. As a result, a fork of the project is available under
|
||||
Open5GS GitHub namespace, with an extra patch applied making it possible to
|
||||
include it as a subproject, which will be fetched and built automatically when
|
||||
building the prometheus libmetrics implementation.
|
||||
|
||||
#### 2. Configuring for runtime
|
||||
|
||||
By default the created Prometheus HTTP server will be listening on `0.0.0.0`
|
||||
port `9090`.
|
||||
This can be configured under the following config file options:
|
||||
|
||||
```
|
||||
#
|
||||
# metrics:
|
||||
#
|
||||
# <Metrics Server>
|
||||
#
|
||||
# o Metrics Server(http://<any address>:9090)
|
||||
# metrics:
|
||||
# addr: 0.0.0.0
|
||||
# port: 9090
|
||||
#
|
||||
metrics:
|
||||
addr: 0.0.0.0
|
||||
port: 9090
|
||||
```
|
||||
|
||||
Note: You may want to change the default IP address or port if you are running
|
||||
the Prometheus scrapper in the same host, since it will also spawn its own
|
||||
Prometheus server also in port 9090, which will collide.
|
||||
|
||||
#### 3. Manual visualization
|
||||
|
||||
Simply open the web browser at the following URL (changing IP address and port
|
||||
as configured in previous section):
|
||||
```
|
||||
http://127.0.0.1:9090/metrics
|
||||
```
|
||||
|
||||
Note: URL `metrics/` (with a slash at the end) will not work.
|
||||
|
||||
You should see some output similar to this one below:
|
||||
```
|
||||
# HELP ues_active Active User Equipments
|
||||
# TYPE ues_active gauge
|
||||
ues_active 2
|
||||
|
||||
# HELP process_max_fds Maximum number of open file descriptors.
|
||||
# TYPE process_max_fds gauge
|
||||
process_max_fds 1024
|
||||
|
||||
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
|
||||
# TYPE process_virtual_memory_max_bytes gauge
|
||||
process_virtual_memory_max_bytes -1
|
||||
|
||||
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
|
||||
# TYPE process_cpu_seconds_total gauge
|
||||
process_cpu_seconds_total 0
|
||||
|
||||
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
|
||||
# TYPE process_virtual_memory_bytes gauge
|
||||
process_virtual_memory_bytes 3156643840
|
||||
|
||||
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
|
||||
# TYPE process_start_time_seconds gauge
|
||||
process_start_time_seconds 402433
|
||||
|
||||
# HELP process_open_fds Number of open file descriptors.
|
||||
# TYPE process_open_fds gauge
|
||||
process_open_fds 23
|
||||
```
|
||||
|
||||
#### 3. Integration with Prometheus scrapper
|
||||
|
||||
Sample Prometheus scrapper configuration (`~/prometheus.yml`):
|
||||
```
|
||||
global:
|
||||
scrape_interval: 10s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: open5gs-smfd
|
||||
static_configs:
|
||||
- targets: ["192.168.1.140:9091"]
|
||||
```
|
||||
|
||||
Where `192.168.1.140:9091` is the IP address and port where `open5gs-smfd` is
|
||||
serving its metrics, as configured in above sections.
|
||||
|
||||
The Prometheus scrapper can be easily started from a docker container:
|
||||
```
|
||||
docker run -p 9090:9090 -v /prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
|
||||
```
|
||||
|
||||
Then open your browser to be able to visualize the data: `http://localhost:9090/graph`
|
||||
@@ -13,6 +13,7 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
- [Your First LTE](tutorial/01-your-first-lte)
|
||||
- [VoLTE Setup with Kamailio IMS and Open5GS](tutorial/02-VoLTE-setup)
|
||||
- [Dockerized VoLTE Setup](tutorial/03-VoLTE-dockerized)
|
||||
- [Metrics with Prometheus](tutorial/04-metrics-prometheus)
|
||||
|
||||
- Troubleshooting
|
||||
- [Simple Issues](troubleshoot/01-simple-issues)
|
||||
@@ -26,10 +27,10 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
- [MacOSX(Intel)](platform/06-macosx-intel)
|
||||
- [FreeBSD](platform/07-freebsd)
|
||||
- [Alpine](platform/08-alpine)
|
||||
|
||||
|
||||
- Hardware Specific Notes
|
||||
- [eNodeBs/gNodeBs tested on Open5GS](hardware/01-genodebs)
|
||||
|
||||
|
||||
- @infinitydon
|
||||
- [Open5GS on Amazon Elastic Kubernetes Service](https://aws.amazon.com/blogs/opensource/open-source-mobile-core-network-implementation-on-amazon-elastic-kubernetes-service/)
|
||||
- [Kubernetes Open5GS Deployment](https://dev.to/infinitydon/virtual-4g-simulation-using-kubernetes-and-gns3-3b7k?fbclid=IwAR1p99h13a-mCfejanbBQe0H0-jp5grXkn5mWf1WrTHf47UtegB2-UHGGZQ)
|
||||
|
||||
42
docs/_posts/2022-03-27-release-v2.4.5.md
Normal file
42
docs/_posts/2022-03-27-release-v2.4.5.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: "v2.4.5 - GTP-1C(GGSN) provided by sysmocom"
|
||||
date: 2022-03-27 19:32:00 +0900
|
||||
categories:
|
||||
- Release
|
||||
tags:
|
||||
- News
|
||||
- Release
|
||||
head_inline: "<style> ul { padding-bottom: 1em; } .blue { color: blue; }</style>"
|
||||
---
|
||||
|
||||
#### New Features
|
||||
- [SMF] Introduced Gn interface(GTPv1C) Support to SMF provided [sysmocom](https://sysmocom.de) -- [pespin](https://github.com/pespin)
|
||||
|
||||
#### Enhancements
|
||||
- [SMF] Remove T_RELEASE_HOLDING timer -- [72ecd1c](https://github.com/open5gs/open5gs/commit/72ecd1c0052a55d8aefb645eb2c3e7c64057caae)
|
||||
- [MME] Refactor to check a piggybacked ESM -- [bf77318](https://github.com/open5gs/open5gs/commit/bf773186026c9847a2aff0035d91949a1b098d14)
|
||||
- [CORE] Added APIs to manage NTP 32-bit timestamps ([#1439](https://github.com/open5gs/open5gs/pull/1439)) -- [pespin](https://github.com/pespin)
|
||||
- [GTP] Supprt binding socket to device/Improve socket configuration ([#1404](https://github.com/open5gs/open5gs/pull/1404)) -- [pespin](https://github.com/pespin)
|
||||
- [ASN] Applied the NGAP modification of both [mouse07410/asn1c#89](https://github.com/mouse07410/asn1c/pull/89) and [mouse07410/asn1c#90](https://github.com/mouse07410/asn1c/pull/90) -- [nkout](https://github.com/nkout)
|
||||
- [SMF] Support PCO protocol ID PAP(0xc023) ([#1357](https://github.com/open5gs/open5gs/issues/1357)) -- [pespin](https://github.com/pespin)
|
||||
- [ALL] Refined systemd sequencing ([#1366](https://github.com/open5gs/open5gs/pull/1366), [#1368](https://github.com/open5gs/open5gs/pull/1368)) -- [matt9j](https://github.com/matt9j)
|
||||
|
||||
#### Security Updates
|
||||
- [UPF] Check if Source IP address is spoofing ([#1354](https://github.com/open5gs/open5gs/issues/1354), [#1355](https://github.com/open5gs/open5gs/issues/1355)) -- [pespin](https://github.com/pespin)
|
||||
|
||||
#### Bug Fixes
|
||||
- [AMF] Fixed the Slice/DNN selection method ([#1438](https://github.com/open5gs/open5gs/issues/1438), [#1440](https://github.com/open5gs/open5gs/issues/1440)) -- [dcandal-gti](https://github.com/dcandal-gti)
|
||||
- [ALL] Use talloc memory pool in PKBUF ([#1353](https://github.com/open5gs/open5gs/issues/1353), [#1431](https://github.com/open5gs/open5gs/issues/1431)) -- [raphaelsander](https://github.com/raphaelsander)
|
||||
- [SMF] Exception handling for APN duplicate check ([#1431](https://github.com/open5gs/open5gs/issues/1431)) -- [raphaelsander](https://github.com/raphaelsander)
|
||||
- [SBI] Need to increase NF reference count -- [ed34444e](https://github.com/open5gs/open5gs/commit/ed3444eef5e9e57705645b500dbd6c5af453703f)
|
||||
- [CORE] Initialize struct epoll_event ([#1399](https://github.com/open5gs/open5gs/issues/1399)) -- [pespin](https://github.com/pespin)
|
||||
- [SMF/PCRF] Fixed prefix length in Gx CCR Framed-IPv6-Prefix AVP ([#1396](https://github.com/open5gs/open5gs/pull/1396), [#1398](https://github.com/open5gs/open5gs/pull/1398)) -- [herlesupreeth](https://github.com/herlesupreeth)
|
||||
- [SMF/PCRF] Fixed packet fileter for pre rel11 LTE devices ([#1393](https://github.com/open5gs/open5gs/pull/1393)) -- [herlesupreeth](https://github.com/herlesupreeth)
|
||||
- [SMF] Fixed an incorrect GTP cause with a changed APN type(IPv4v6->IPv4/IPv6) ([#1360](https://github.com/open5gs/open5gs/issues/1360)) -- [pespin](https://github.com/pespin)
|
||||
- [ALL] Fixed the timezone string converter ([#1376](https://github.com/open5gs/open5gs/issues/1376)) -- [modyngs](https://github.com/modyngs)
|
||||
- [SMF] Added DNS servers to PCO IPCP only if UE requested ([#1358](https://github.com/open5gs/open5gs/issues/1358)) -- [pespin](https://github.com/pespin)
|
||||
- [SBI] Remove Accept-Encoding(gzip) in HTTP2-Client -- [ffcd92c](https://github.com/open5gs/open5gs/commit/ffcd92c2f3b6547ae8d159b195ffc0592ad0f3e9)
|
||||
- [SBI] Fixed NFs crash if no mandotory item such like a version in NFService ([#1350](https://github.com/open5gs/open5gs/issues/1350)) -- [ajimenezsa](https://github.com/ajimenezsa)
|
||||
|
||||
Download -- [v2.4.5.tar.gz](https://github.com/open5gs/open5gs/archive/v2.4.5.tar.gz)
|
||||
{: .notice--info}
|
||||
45
docs/_posts/2022-05-21-release-v2.4.7.md
Normal file
45
docs/_posts/2022-05-21-release-v2.4.7.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: "v2.4.7 - Gy interface provided by sysmocom"
|
||||
date: 2022-05-21 19:42:00 +0900
|
||||
categories:
|
||||
- Release
|
||||
tags:
|
||||
- News
|
||||
- Release
|
||||
head_inline: "<style> ul { padding-bottom: 1em; } .blue { color: blue; }</style>"
|
||||
---
|
||||
|
||||
#### New Features
|
||||
- [SMF] Introduced Gy interface Support provided by [sysmocom](https://sysmocom.de) -- [pespin](https://github.com/pespin)
|
||||
- [GTP] X2 Handover with SGW relocation ([#1367](https://github.com/open5gs/open5gs/issues/1367), [#1459](https://github.com/open5gs/open5gs/issues/1459)) -- [pespin](https://github.com/pespin), [cbrasho](https://github.com/cbrasho)
|
||||
|
||||
#### Enhancements
|
||||
- [GY] Clarify use of Reporting-Request and set it to FINAL in TERMINATION_REQ ([#1552](https://github.com/open5gs/open5gs/pull/1552)) -- [pespin](https://github.com/pespin)
|
||||
- [SBI] Change handling of SessionManagementSubscriptionData as an array ([#1551](https://github.com/open5gs/open5gs/pull/1551)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [PFCP] Support Multi-CP with One-UP ([c6c8dc1](https://github.com/open5gs/open5gs/commit/c6c8dc1256c304aea1fc44cd70fbaeb290f31ad3))
|
||||
- [SMF] Use Only One PFCP Session Modification Message in the ViNR([e0a487f](https://github.com/open5gs/open5gs/commit/e0a487f479b7d916044d6595228de6211d548656))
|
||||
- [SMF] Parallelize Gx+Gy CCR Initial ([#1491](https://github.com/open5gs/open5gs/pull/1491)) -- [pespin](https://github.com/pespin)
|
||||
- [SMF] Integrate Session Setup Cycle into GSM State Machine ([#1489](https://github.com/open5gs/open5gs/pull/1489)) -- [pespin](https://github.com/pespin)
|
||||
- [CX] Functionality for send SMS with using IMS service ([#1477](https://github.com/open5gs/open5gs/pull/1477)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
- [MEM] Improve data-path performance using talloc_pool() -- ([e213f65](https://github.com/open5gs/open5gs/commit/e213f654060b7b9f2bae11420c5175e876cf006e))
|
||||
- [TEST] Automatic CI for github PRs ([#1454](https://github.com/open5gs/open5gs/issues/1454)) -- [pespin](https://github.com/pespin)
|
||||
- [DB] Add/update current IMEISV of UE in subscriber profile ([#1464](https://github.com/open5gs/open5gs/pull/1464)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
|
||||
|
||||
#### Bug Fixes
|
||||
- [CORE] Fixed the linked-list BUG ([#1187](https://github.com/open5gs/open5gs/issues/1187)) -- [Vomvas](https://github.com/Vomvas)
|
||||
- [SMF] Prevent concurrent access to ogs_pool allocating smf_event ([#1546](https://github.com/open5gs/open5gs/issues/1546)) -- [pespin](https://github.com/pespin)
|
||||
- [DIAMETER] Fix AN-Trusted AVP sent in CCR ([#1542](https://github.com/open5gs/open5gs/pull/1542)) -- [herlesupreeth](https://github.com/herlesupreeth)
|
||||
- [PFCP] Fixed incorrect memcpy usage ([#1531](https://github.com/open5gs/open5gs/issues/1531)) -- [pespin](https://github.com/pespin)
|
||||
- [AMF] Fixed the bug Not Sending NG RESET Acknowledge ([#1525](https://github.com/open5gs/open5gs/issues/1525)) -- [mcatalancid](https://github.com/mcatalancid)
|
||||
- [IPv6] IPv6 RS/RA with QFI Extended Header ([#1506](https://github.com/open5gs/open5gs/issues/1506)) -- [irazairspan](https://github.com/irazairspan)
|
||||
- [SBI] cJSON v1.7.7 to v1.7.15 to solve HTTP2 request with incorrect payload ([#1503](https://github.com/open5gs/open5gs/issues/1503)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [GTP] Handling multiple bearer message ([#1498](https://github.com/open5gs/open5gs/issues/1498)) -- [cbrasho](https://github.com/cbrasho)
|
||||
- [MME] SCTP Crash when eNB, SGW-U and UPF are going down ([#1497](https://github.com/open5gs/open5gs/pull/1497)) -- [spencersevilla](https://github.com/spencersevilla)
|
||||
- [SBI] fixed HTTP2 header values is 0 ([#1488](https://github.com/open5gs/open5gs/issues/1488)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [MME] Send EMM Cause when Attach Request type is not same as HSS Network-Access-Mode ([#1484](https://github.com/open5gs/open5gs/pull/1484)) -- [herlesupreeth](https://github.com/herlesupreeth)
|
||||
- [GX] Prevent sending Gx messages to non-PCRF Diameter peers ([#1468](https://github.com/open5gs/open5gs/pull/1468)) -- [pespin](https://github.com/pespin)
|
||||
- [AMF] AMF crashes when requesting a PDU session for a S-NSSAI with an SST when the network is configured with multiple S-NSSAIs with the same SST ([#1440](https://github.com/open5gs/open5gs/issues/1440)) -- [dcandal-gti](https://github.com/dcandal-gti)
|
||||
|
||||
Download -- [v2.4.7.tar.gz](https://github.com/open5gs/open5gs/archive/v2.4.7.tar.gz)
|
||||
{: .notice--info}
|
||||
30
docs/_posts/2022-06-12-release-v2.4.8.md
Normal file
30
docs/_posts/2022-06-12-release-v2.4.8.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: "v2.4.8 - Upgrade PFCP to v16.9.1"
|
||||
date: 2022-06-12 16:35:00 +0900
|
||||
categories:
|
||||
- Release
|
||||
tags:
|
||||
- News
|
||||
- Release
|
||||
head_inline: "<style> ul { padding-bottom: 1em; } .blue { color: blue; }</style>"
|
||||
---
|
||||
|
||||
#### New Features
|
||||
- [Metrics] Initial metrics support based on Prometheus ([#1571](https://github.com/open5gs/open5gs/pull/1571)) -- [pespin](https://github.com/pespin)
|
||||
|
||||
#### Enhancements
|
||||
- [PFCP] Upgrade PFCP to v16.9.1 -- [1235317](https://github.com/open5gs/open5gs/commit/12353178fb7c15a5c78035e19501412af9c76ad0)
|
||||
- [NRF] Don't abort if there are too many registered NF instances ([#1579](https://github.com/open5gs/open5gs/pull/1579)) -- [mitmitmitm](https://github.com/mitmitmitm)
|
||||
- [SGW-C] Consider if SMF/PGW GTPv2-C address changed ([#1560](https://github.com/open5gs/open5gs/issues/1560)) -- [pespin](https://github.com/pespin)
|
||||
- [CLI] Added four addtional commands in dbctl ([#1562](https://github.com/open5gs/open5gs/pull/1562)) -- [mcatalancid](https://github.com/mcatalancid)
|
||||
- [GY] Gy+PFCP improvements ([#1555](https://github.com/open5gs/open5gs/pull/1555)) -- [pespin](https://github.com/pespin)
|
||||
|
||||
|
||||
#### Bug Fixes
|
||||
- [AMF] Added to handle an invalid RI(Routing Indicator) ([#1570](https://github.com/open5gs/open5gs/issues/1570)) -- [ray28850101](https://github.com/ray28850101)
|
||||
- [SBI] Re-enabling HTTP/1.1 ([#1254](https://github.com/open5gs/open5gs/issues/1254)) -- [hidingturtle](https://github.com/hidingturtle), [22username2022](https://github.com/22username2022)
|
||||
- [GTP] GTP-U address does not change when gNB with IPv6-only changes
|
||||
([#1515](https://github.com/open5gs/open5gs/issues/1515), [#1586](https://github.com/open5gs/open5gs/issues/1586)) -- [irazairspan](https://github.com/irazairspan), [dmartyushev](https://github.com/dmartyushev)
|
||||
|
||||
Download -- [v2.4.8.tar.gz](https://github.com/open5gs/open5gs/archive/v2.4.8.tar.gz)
|
||||
{: .notice--info}
|
||||
52
docs/_posts/2022-07-25-release-v2.4.9.md
Normal file
52
docs/_posts/2022-07-25-release-v2.4.9.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: "v2.4.9 - Default MCC/MNC from 901/70 to 999/70"
|
||||
date: 2022-07-25 20:52:00 +0900
|
||||
categories:
|
||||
- Release
|
||||
tags:
|
||||
- News
|
||||
- Release
|
||||
head_inline: "<style> ul { padding-bottom: 1em; } .blue { color: blue; }</style>"
|
||||
---
|
||||
|
||||
#### New Features
|
||||
- [CONF] Changed default MCC/MNC from 901/70 to 999/70 -- [b58ebda](https://github.com/open5gs/open5gs/commit/b58ebda556cf0278fd361bcd6ca044502398e6dc)
|
||||
- [MISC] Added static analysis & Fixed the results ([#1638](https://github.com/open5gs/open5gs/pull/1638)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
|
||||
#### Enhancements
|
||||
- [SBI] Support Discovery Optional Parameter -- [a5010a6](https://github.com/open5gs/open5gs/commit/a5010a61effce92fe9dfb2cbf8df1f04ddc1de64), [9b76215](https://github.com/open5gs/open5gs/commit/9b762158a6ef3f8c4f3967d04e01d1a13cc9908a)
|
||||
- [SMF] Send PDU Session Establish Accept to serving AMF ([#1671](https://github.com/open5gs/open5gs/pull/1671)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [MME] Introduce support for handling Charging Characteristics from HSS ([#1673](https://github.com/open5gs/open5gs/pull/1673)) -- [jmasterfunk84](https://github.com/jmasterfunk84)
|
||||
- [MME] Set default Network-Access-Mode to 0 ([#1672](https://github.com/open5gs/open5gs/pull/1672)) -- [jmasterfunk84](https://github.com/jmasterfunk84)
|
||||
- [AMF] Handle namf-callback DeregNotify message from UDM ([#1654](https://github.com/open5gs/open5gs/pull/1654)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [Systemd] upf.postinst: Don't restart service in chroot ([#1644](https://github.com/open5gs/open5gs/pull/1644)) -- [osmith42](https://github.com/osmith42)
|
||||
- [PFCP] Added UE IP address in Uplink PDR rules ([#1642](https://github.com/open5gs/open5gs/pull/1642)) -- [Networkmama](https://github.com/Networkmama)
|
||||
- [TLV] Changed MAX TLV More to 16 -- [051c19b](https://github.com/open5gs/open5gs/commit/051c19b7c8277ecf0465eb895249e9e520ba5e63)
|
||||
- [PFCP] Error code paths replaced with asserts() ([#1635](https://github.com/open5gs/open5gs/pull/1635)) -- [pespin](https://github.com/pespin)
|
||||
- [PFCP/GTP] context when TEID=0, SEID=0 ([#1594](https://github.com/open5gs/open5gs/pull/1594), [#1606](https://github.com/open5gs/open5gs/pull/1606), [#1620](https://github.com/open5gs/open5gs/pull/1620)) -- [pespin](https://github.com/pespin)
|
||||
- [SMF] Gn: QoS Profile and PCO IE improvements ([#1631](https://github.com/open5gs/open5gs/pull/1631)) -- [pespin](https://github.com/pespin)
|
||||
- [PFCP] Added Network Instance to CP-UP FAR ([#1630](https://github.com/open5gs/open5gs/pull/1630)) -- [Networkmama](https://github.com/Networkmama)
|
||||
- [PFCP] Added DNN/APN in FAR ([#1629](https://github.com/open5gs/open5gs/pull/1629)) -- [Networkmama](https://github.com/Networkmama)
|
||||
- [PFCP] Set v4/6 flag in F-TEID IE request type ([#1625](https://github.com/open5gs/open5gs/pull/1625)) -- [Networkmama](https://github.com/Networkmama)
|
||||
- [SMF] pfcp-sm: Fix ogs_fsm_dispatch() on NULL sess ([#1628](https://github.com/open5gs/open5gs/pull/1628)) -- [pespin](https://github.com/pespin)
|
||||
- [UPF] Avoid crash if no default subnet configured ([#1624](https://github.com/open5gs/open5gs/pull/1624)) -- [pespin](https://github.com/pespin)
|
||||
- [SMF] Gy: Send Multiple-Services-Indicator AVP only during Initial CCR ([#1616](https://github.com/open5gs/open5gs/pull/1616)) -- [pespin](https://github.com/pespin)
|
||||
- [Docker] Use local sources to build applications ([#1583](https://github.com/open5gs/open5gs/pull/1583)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [SBI] Change nf-instance-id to Optional in nf-instance context -- [c528e0d](https://github.com/open5gs/open5gs/commit/c528e0d5bc258336ab302efe08df7ca5472d0134)
|
||||
- [CLI] Added show commands in the dbctl ([#1613](https://github.com/open5gs/open5gs/pull/1613)) -- [JagannathS](https://github.com/JagannathS)
|
||||
|
||||
#### Bug Fixes
|
||||
- [AMF] Fixed 5GMM cause in 5GMM reject message ([#1660](https://github.com/open5gs/open5gs/issues/1660)) -- [takgr](https://github.com/takgr)
|
||||
- [ASN1C] Rework APER from [mouse07410/asn1c#94](https://github.com/mouse07410/asn1c/issues/94)
|
||||
- [TEST] Fixed a crash for UERANSIM 500 Test ([#1652](https://github.com/open5gs/open5gs/pull/1652)) -- [lemon1009](https://github.com/lemon1009)
|
||||
- [SBI] from NRF with wrong requester-nf-type ([#1650](https://github.com/open5gs/open5gs/issues/1650)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [PFCP] Fixed a endianness of OGS_PFCP_APPLY_ACTION ([#1640](https://github.com/open5gs/open5gs/issues/1640)) -- [mitmitmitm](https://github.com/mitmitmitm)
|
||||
- [DBI] Fixed a crash when slice/session overflow ([#1637](https://github.com/open5gs/open5gs/issues/1637)) -- [jmasterfunk84](https://github.com/jmasterfunk84)
|
||||
- [AMF/MME] Added a protection code for SCTP jumbo frame ([#1632](https://github.com/open5gs/open5gs/issues/1632)) -- [kbaccar](https://github.com/kbaccar)
|
||||
- [SBI] Fix memory leak for nghttp2 session ([#1618](https://github.com/open5gs/open5gs/pull/1618)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [MME/AMF] Fixed network name encoding ([#1614](https://github.com/open5gs/open5gs/issues/1614)) -- [Mozartor2](https://github.com/Mozartor2)
|
||||
- [SBI] Fixed invalid read beyond allocated memory ([#1610](https://github.com/open5gs/open5gs/pull/1610)) -- [bmeglicit](https://github.com/bmeglicit)
|
||||
- [CORE] Compare port in ogs_sockaddr_is_equal() ([#1608](https://github.com/open5gs/open5gs/pull/1608)) -- [pespin](https://github.com/pespin)
|
||||
|
||||
Download -- [v2.4.9.tar.gz](https://github.com/open5gs/open5gs/archive/v2.4.9.tar.gz)
|
||||
{: .notice--info}
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
|
||||
PACKAGE="open5gs"
|
||||
VERSION="2.4.3"
|
||||
VERSION="2.4.7"
|
||||
|
||||
print_status() {
|
||||
echo
|
||||
|
||||
@@ -94,6 +94,9 @@ void smf_terminate(void);
|
||||
int amf_initialize(void);
|
||||
void amf_terminate(void);
|
||||
|
||||
int scp_initialize(void);
|
||||
void scp_terminate(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -29,7 +29,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
int ogs_app_config_parse_sockopt(
|
||||
ogs_yaml_iter_t *parent, ogs_sockopt_t *sockopt);
|
||||
ogs_yaml_iter_t *parent, ogs_sockopt_t *option);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -64,36 +64,27 @@ ogs_app_context_t *ogs_app()
|
||||
|
||||
static void recalculate_pool_size(void)
|
||||
{
|
||||
self.pool.packet = self.max.ue * OGS_MAX_NUM_OF_PACKET_BUFFER;
|
||||
|
||||
#define MAX_NUM_OF_TUNNEL 3 /* Num of Tunnel per Bearer */
|
||||
self.pool.sess = self.max.ue * OGS_MAX_NUM_OF_SESS;
|
||||
self.pool.bearer = self.pool.sess * OGS_MAX_NUM_OF_BEARER;
|
||||
self.pool.tunnel = self.pool.bearer * MAX_NUM_OF_TUNNEL;
|
||||
|
||||
#define MAX_NUM_OF_TIMER 16
|
||||
self.pool.timer = self.max.ue * MAX_NUM_OF_TIMER;
|
||||
self.pool.message = self.max.ue;
|
||||
self.pool.event = self.max.ue;
|
||||
#define OGS_MAX_NUM_OF_NF_SUBSCRIPTION 4 /* Num of Subscription per NF */
|
||||
self.pool.nf_service = self.max.gnb * OGS_MAX_NUM_OF_NF_SERVICE;
|
||||
|
||||
self.pool.packet = self.max.ue * OGS_MAX_NUM_OF_PACKET_BUFFER;
|
||||
#define POOL_NUM_PER_UE 16
|
||||
#define POOL_NUM_PER_GNB 8
|
||||
self.pool.timer = self.max.ue * POOL_NUM_PER_UE;
|
||||
self.pool.message = self.max.ue * POOL_NUM_PER_UE;
|
||||
self.pool.event = self.max.ue * POOL_NUM_PER_UE;
|
||||
self.pool.socket = self.max.ue * POOL_NUM_PER_UE;
|
||||
self.pool.subscription = self.max.ue * POOL_NUM_PER_UE;
|
||||
self.pool.xact = self.max.ue * POOL_NUM_PER_UE;
|
||||
|
||||
self.pool.nf = self.max.gnb;
|
||||
|
||||
#define MAX_NUM_OF_SOCKET 4 /* Num of socket per NF */
|
||||
self.pool.socket = self.pool.nf * MAX_NUM_OF_SOCKET;
|
||||
|
||||
#define MAX_NUM_OF_XACT 8
|
||||
self.pool.gtp_xact = self.max.ue * MAX_NUM_OF_XACT;
|
||||
self.pool.gtp_node = self.pool.nf;
|
||||
|
||||
self.pool.pfcp_xact = self.max.ue * MAX_NUM_OF_XACT;
|
||||
self.pool.pfcp_node = self.pool.nf;
|
||||
|
||||
#define MAX_NUM_OF_NF_SERVICE 16 /* Num of NF Service per NF Instance */
|
||||
#define MAX_NUM_OF_SBI_MESSAGE 4 /* Num of HTTP(s) Request/Response per NF */
|
||||
#define MAX_NUM_OF_NF_SUBSCRIPTION 4 /* Num of Subscription per NF */
|
||||
self.pool.nf_service = self.pool.nf * MAX_NUM_OF_NF_SERVICE;
|
||||
self.pool.nf_subscription = self.pool.nf * MAX_NUM_OF_NF_SUBSCRIPTION;
|
||||
|
||||
#define MAX_CSMAP_POOL 128
|
||||
self.pool.csmap = MAX_CSMAP_POOL; /* Num of TAI-LAI Mapping Table */
|
||||
|
||||
@@ -113,7 +104,7 @@ static void regenerate_all_timer_duration(void)
|
||||
ogs_max(ogs_time_from_sec(3),
|
||||
self.time.message.sbi.client_wait_duration + ogs_time_from_sec(1));
|
||||
self.time.message.sbi.nf_register_interval_in_exception =
|
||||
ogs_time_from_msec(300);
|
||||
ogs_time_from_sec(2);
|
||||
|
||||
#define PFCP_N1_RESPONSE_RETRY_COUNT 3
|
||||
self.time.message.pfcp.n1_response_rcount = PFCP_N1_RESPONSE_RETRY_COUNT;
|
||||
@@ -226,9 +217,12 @@ static void app_context_prepare(void)
|
||||
*/
|
||||
self.time.handover.duration = ogs_time_from_msec(300);
|
||||
|
||||
/* Size of internal metrics pool (amount of ogs_metrics_spec_t) */
|
||||
self.metrics.max_specs = 512;
|
||||
|
||||
regenerate_all_timer_duration();
|
||||
}
|
||||
|
||||
|
||||
static int app_context_validation(void)
|
||||
{
|
||||
if (self.parameter.no_ipv4 == 1 &&
|
||||
@@ -311,6 +305,9 @@ int ogs_app_context_parse_config(void)
|
||||
} else if (!strcmp(parameter_key, "no_nrf")) {
|
||||
self.parameter.no_nrf =
|
||||
ogs_yaml_iter_bool(¶meter_iter);
|
||||
} else if (!strcmp(parameter_key, "no_scp")) {
|
||||
self.parameter.no_scp =
|
||||
ogs_yaml_iter_bool(¶meter_iter);
|
||||
} else if (!strcmp(parameter_key, "no_amf")) {
|
||||
self.parameter.no_amf =
|
||||
ogs_yaml_iter_bool(¶meter_iter);
|
||||
@@ -439,6 +436,43 @@ int ogs_app_context_parse_config(void)
|
||||
}
|
||||
|
||||
recalculate_pool_size();
|
||||
} else if (!strcmp(root_key, "pool")) {
|
||||
ogs_yaml_iter_t pool_iter;
|
||||
ogs_yaml_iter_recurse(&root_iter, &pool_iter);
|
||||
while (ogs_yaml_iter_next(&pool_iter)) {
|
||||
const char *pool_key = ogs_yaml_iter_key(&pool_iter);
|
||||
ogs_assert(pool_key);
|
||||
if (!strcmp(pool_key, "128")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_128_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "256")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_256_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "512")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_512_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "1024")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_1024_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "2048")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_2048_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "8192")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_8192_pool = atoi(v);
|
||||
} else if (!strcmp(pool_key, "big")) {
|
||||
const char *v = ogs_yaml_iter_value(&pool_iter);
|
||||
if (v)
|
||||
self.pool.defconfig.cluster_big_pool = atoi(v);
|
||||
} else
|
||||
ogs_warn("unknown key `%s`", pool_key);
|
||||
}
|
||||
} else if (!strcmp(root_key, "time")) {
|
||||
ogs_yaml_iter_t time_iter;
|
||||
ogs_yaml_iter_recurse(&root_iter, &time_iter);
|
||||
|
||||
@@ -64,6 +64,7 @@ typedef struct ogs_app_context_s {
|
||||
int no_nssf;
|
||||
int no_bsf;
|
||||
int no_udr;
|
||||
int no_scp;
|
||||
int no_nrf;
|
||||
|
||||
/* Network */
|
||||
@@ -103,31 +104,30 @@ typedef struct ogs_app_context_s {
|
||||
struct {
|
||||
uint64_t ue;
|
||||
uint64_t gnb;
|
||||
uint64_t gtp_peer;
|
||||
} max;
|
||||
|
||||
struct {
|
||||
ogs_pkbuf_config_t defconfig;
|
||||
uint64_t packet;
|
||||
|
||||
uint64_t nf;
|
||||
uint64_t packet;
|
||||
|
||||
uint64_t sess;
|
||||
uint64_t bearer;
|
||||
uint64_t tunnel;
|
||||
|
||||
uint64_t nf_service;
|
||||
uint64_t nf_subscription;
|
||||
|
||||
uint64_t csmap;
|
||||
|
||||
uint64_t timer;
|
||||
uint64_t message;
|
||||
uint64_t event;
|
||||
uint64_t timer;
|
||||
|
||||
uint64_t socket;
|
||||
uint64_t gtp_xact;
|
||||
uint64_t gtp_node;
|
||||
uint64_t pfcp_xact;
|
||||
uint64_t pfcp_node;
|
||||
uint64_t subscription;
|
||||
uint64_t xact;
|
||||
|
||||
uint64_t nf;
|
||||
|
||||
uint64_t csmap;
|
||||
|
||||
uint64_t impi;
|
||||
uint64_t impu;
|
||||
@@ -175,6 +175,10 @@ typedef struct ogs_app_context_s {
|
||||
} handover;
|
||||
|
||||
} time;
|
||||
|
||||
struct metrics {
|
||||
uint64_t max_specs;
|
||||
} metrics;
|
||||
} ogs_app_context_t;
|
||||
|
||||
int ogs_app_context_init(void);
|
||||
|
||||
@@ -32,9 +32,6 @@ int ogs_app_initialize(
|
||||
char *log_file;
|
||||
char *log_level;
|
||||
char *domain_mask;
|
||||
|
||||
bool enable_debug;
|
||||
bool enable_trace;
|
||||
} optarg;
|
||||
|
||||
ogs_core_initialize();
|
||||
|
||||
@@ -32,6 +32,11 @@ asn_TYPE_operation_t asn_OP_ANY = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
ANY_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
0,
|
||||
0,
|
||||
|
||||
@@ -42,6 +42,10 @@ extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
|
||||
xer_type_encoder_f ANY_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f ANY_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
per_type_decoder_f ANY_decode_uper;
|
||||
per_type_encoder_f ANY_encode_uper;
|
||||
|
||||
@@ -132,7 +132,7 @@ ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
|
||||
int ret;
|
||||
|
||||
/* Get the PER length */
|
||||
raw_len = aper_get_length(pd, -1, 0, &repeat);
|
||||
raw_len = aper_get_length(pd, -1, -1, 0, &repeat);
|
||||
if(raw_len < 0) RETURN(RC_WMORE);
|
||||
if(raw_len == 0 && st->buf) break;
|
||||
|
||||
@@ -173,7 +173,7 @@ ANY_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
size = st->size;
|
||||
do {
|
||||
int need_eom = 0;
|
||||
ssize_t may_save = aper_put_length(po, -1, size, &need_eom);
|
||||
ssize_t may_save = aper_put_length(po, -1, -1, size, &need_eom);
|
||||
if(may_save < 0) ASN__ENCODE_FAILED;
|
||||
|
||||
ret = per_put_many_bits(po, buf, may_save * 8);
|
||||
@@ -182,7 +182,7 @@ ANY_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
buf += may_save;
|
||||
size -= may_save;
|
||||
assert(!(may_save & 0x07) || !size);
|
||||
if(need_eom && aper_put_length(po, -1, 0, 0))
|
||||
if(need_eom && aper_put_length(po, -1, -1, 0, NULL))
|
||||
ASN__ENCODE_FAILED; /* End of Message length */
|
||||
} while(size);
|
||||
|
||||
|
||||
17
lib/asn1c/common/ANY_jer.c
Normal file
17
lib/asn1c/common/ANY_jer.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <ANY.h>
|
||||
|
||||
asn_enc_rval_t
|
||||
ANY_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
|
||||
enum jer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
|
||||
void *app_key) {
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
/* Dump as binary */
|
||||
return OCTET_STRING_encode_jer(td, sptr, ilevel, flags, cb, app_key);
|
||||
}
|
||||
@@ -38,6 +38,11 @@ asn_TYPE_operation_t asn_OP_BIT_STRING = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
BIT_STRING_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
BIT_STRING_decode_oer,
|
||||
BIT_STRING_encode_oer,
|
||||
|
||||
@@ -44,6 +44,10 @@ asn_constr_check_f BIT_STRING_constraint;
|
||||
xer_type_encoder_f BIT_STRING_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f BIT_STRING_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f BIT_STRING_decode_oer;
|
||||
oer_type_encoder_f BIT_STRING_encode_oer;
|
||||
|
||||
70
lib/asn1c/common/BIT_STRING_jer.c
Normal file
70
lib/asn1c/common/BIT_STRING_jer.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <BIT_STRING.h>
|
||||
|
||||
static const char *_bit_pattern[16] = {
|
||||
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
|
||||
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
|
||||
};
|
||||
|
||||
asn_enc_rval_t
|
||||
BIT_STRING_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
asn_enc_rval_t er = {0, 0, 0};
|
||||
char scratch[128];
|
||||
char *p = scratch;
|
||||
char *scend = scratch + (sizeof(scratch) - 10);
|
||||
const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
|
||||
int xcan = 0;
|
||||
uint8_t *buf;
|
||||
uint8_t *end;
|
||||
|
||||
if(!st || !st->buf)
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
er.encoded = 0;
|
||||
|
||||
buf = st->buf;
|
||||
end = buf + st->size - 1; /* Last byte is special */
|
||||
|
||||
/*
|
||||
* Binary dump
|
||||
*/
|
||||
for(; buf < end; buf++) {
|
||||
int v = *buf;
|
||||
int nline = xcan?0:(((buf - st->buf) % 8) == 0);
|
||||
if(p >= scend || nline) {
|
||||
ASN__CALLBACK(scratch, p - scratch);
|
||||
p = scratch;
|
||||
if(nline) ASN__TEXT_INDENT(1, ilevel);
|
||||
}
|
||||
memcpy(p + 0, _bit_pattern[v >> 4], 4);
|
||||
memcpy(p + 4, _bit_pattern[v & 0x0f], 4);
|
||||
p += 8;
|
||||
}
|
||||
|
||||
if(!xcan && ((buf - st->buf) % 8) == 0)
|
||||
ASN__TEXT_INDENT(1, ilevel);
|
||||
ASN__CALLBACK(scratch, p - scratch);
|
||||
p = scratch;
|
||||
|
||||
if(buf == end) {
|
||||
int v = *buf;
|
||||
int ubits = st->bits_unused;
|
||||
int i;
|
||||
for(i = 7; i >= ubits; i--)
|
||||
*p++ = (v & (1 << i)) ? 0x31 : 0x30;
|
||||
ASN__CALLBACK(scratch, p - scratch);
|
||||
}
|
||||
|
||||
if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
cb_failed:
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
@@ -34,6 +34,11 @@ asn_TYPE_operation_t asn_OP_GraphicString = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer, /* Can't expect it to be ASCII/UTF8 */
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OCTET_STRING_decode_oer,
|
||||
OCTET_STRING_encode_oer,
|
||||
|
||||
@@ -36,6 +36,10 @@ extern asn_TYPE_operation_t asn_OP_GraphicString;
|
||||
#define GraphicString_encode_xer OCTET_STRING_encode_xer
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define GraphicString_encode_jer OCTET_STRING_encode_jer
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
#define GraphicString_decode_uper OCTET_STRING_decode_uper
|
||||
#define GraphicString_encode_uper OCTET_STRING_encode_uper
|
||||
|
||||
@@ -36,6 +36,11 @@ asn_TYPE_operation_t asn_OP_INTEGER = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
INTEGER_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
INTEGER_decode_oer, /* OER decoder */
|
||||
INTEGER_encode_oer, /* Canonical OER encoder */
|
||||
|
||||
@@ -60,6 +60,10 @@ xer_type_decoder_f INTEGER_decode_xer;
|
||||
xer_type_encoder_f INTEGER_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f INTEGER_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f INTEGER_decode_oer;
|
||||
oer_type_encoder_f INTEGER_encode_oer;
|
||||
|
||||
@@ -129,7 +129,7 @@ INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
|
||||
int ret;
|
||||
|
||||
/* Get the PER length */
|
||||
len = aper_get_length(pd, -1, -1, &repeat);
|
||||
len = aper_get_length(pd, -1, -1, -1, &repeat);
|
||||
if(len < 0) ASN__DECODE_STARVED;
|
||||
|
||||
p = REALLOC(st->buf, st->size + len + 1);
|
||||
@@ -291,13 +291,14 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
|
||||
for(buf = st->buf, end = st->buf + st->size; buf < end;) {
|
||||
int need_eom = 0;
|
||||
ssize_t mayEncode = aper_put_length(po, -1, end - buf, &need_eom);
|
||||
ssize_t mayEncode = aper_put_length(po, -1, -1, end - buf, &need_eom);
|
||||
if(mayEncode < 0)
|
||||
ASN__ENCODE_FAILED;
|
||||
if(per_put_many_bits(po, buf, 8 * mayEncode))
|
||||
ASN__ENCODE_FAILED;
|
||||
buf += mayEncode;
|
||||
if(need_eom && aper_put_length(po, -1, 0, 0)) ASN__ENCODE_FAILED;
|
||||
if(need_eom && (aper_put_length(po, -1, -1, 0, NULL) < 0))
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
|
||||
26
lib/asn1c/common/INTEGER_jer.c
Normal file
26
lib/asn1c/common/INTEGER_jer.c
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <INTEGER.h>
|
||||
|
||||
asn_enc_rval_t
|
||||
INTEGER_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const INTEGER_t *st = (const INTEGER_t *)sptr;
|
||||
asn_enc_rval_t er = {0,0,0};
|
||||
|
||||
(void)ilevel;
|
||||
(void)flags;
|
||||
|
||||
if(!st || !st->buf)
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
er.encoded = INTEGER__dump(td, st, cb, app_key, 1);
|
||||
if(er.encoded < 0) ASN__ENCODE_FAILED;
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
@@ -33,6 +33,11 @@ asn_TYPE_operation_t asn_OP_NULL = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
NULL_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
NULL_decode_oer,
|
||||
NULL_encode_oer,
|
||||
|
||||
@@ -40,6 +40,10 @@ xer_type_decoder_f NULL_decode_xer;
|
||||
xer_type_encoder_f NULL_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f NULL_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f NULL_decode_oer;
|
||||
oer_type_encoder_f NULL_encode_oer;
|
||||
|
||||
26
lib/asn1c/common/NULL_jer.c
Normal file
26
lib/asn1c/common/NULL_jer.c
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <asn_codecs_prim.h>
|
||||
#include <NULL.h>
|
||||
|
||||
asn_enc_rval_t
|
||||
NULL_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
|
||||
enum jer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
|
||||
void *app_key) {
|
||||
asn_enc_rval_t er = {0,0,0};
|
||||
|
||||
(void)td;
|
||||
(void)sptr;
|
||||
(void)ilevel;
|
||||
(void)flags;
|
||||
(void)cb;
|
||||
(void)app_key;
|
||||
|
||||
/* XMLNullValue is empty */
|
||||
er.encoded = 0;
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
@@ -40,6 +40,11 @@ asn_TYPE_operation_t asn_OP_NativeEnumerated = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
NativeEnumerated_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
NativeEnumerated_decode_oer,
|
||||
NativeEnumerated_encode_oer,
|
||||
|
||||
@@ -41,6 +41,10 @@ extern asn_TYPE_operation_t asn_OP_NativeEnumerated;
|
||||
xer_type_encoder_f NativeEnumerated_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f NativeEnumerated_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f NativeEnumerated_decode_oer;
|
||||
oer_type_encoder_f NativeEnumerated_encode_oer;
|
||||
|
||||
36
lib/asn1c/common/NativeEnumerated_jer.c
Normal file
36
lib/asn1c/common/NativeEnumerated_jer.c
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <NativeEnumerated.h>
|
||||
|
||||
asn_enc_rval_t
|
||||
NativeEnumerated_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const asn_INTEGER_specifics_t *specs =
|
||||
(const asn_INTEGER_specifics_t *)td->specifics;
|
||||
asn_enc_rval_t er = {0,0,0};
|
||||
const long *native = (const long *)sptr;
|
||||
const asn_INTEGER_enum_map_t *el;
|
||||
|
||||
(void)ilevel;
|
||||
(void)flags;
|
||||
|
||||
if(!native) ASN__ENCODE_FAILED;
|
||||
|
||||
el = INTEGER_map_value2enum(specs, *native);
|
||||
if(el) {
|
||||
er.encoded =
|
||||
asn__format_to_callback(cb, app_key, "\"%s\"", el->enum_name);
|
||||
if(er.encoded < 0) ASN__ENCODE_FAILED;
|
||||
ASN__ENCODED_OK(er);
|
||||
} else {
|
||||
ASN_DEBUG(
|
||||
"ASN.1 forbids dealing with "
|
||||
"unknown value of ENUMERATED type");
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,11 @@ asn_TYPE_operation_t asn_OP_NativeInteger = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
NativeInteger_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
NativeInteger_decode_oer, /* OER decoder */
|
||||
NativeInteger_encode_oer, /* Canonical OER encoder */
|
||||
|
||||
@@ -42,6 +42,10 @@ xer_type_decoder_f NativeInteger_decode_xer;
|
||||
xer_type_encoder_f NativeInteger_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f NativeInteger_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f NativeInteger_decode_oer;
|
||||
oer_type_encoder_f NativeInteger_encode_oer;
|
||||
|
||||
32
lib/asn1c/common/NativeInteger_jer.c
Normal file
32
lib/asn1c/common/NativeInteger_jer.c
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <NativeInteger.h>
|
||||
|
||||
asn_enc_rval_t
|
||||
NativeInteger_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const asn_INTEGER_specifics_t *specs =
|
||||
(const asn_INTEGER_specifics_t *)td->specifics;
|
||||
char scratch[32]; /* Enough for 64-bit int */
|
||||
asn_enc_rval_t er = {0,0,0};
|
||||
const long *native = (const long *)sptr;
|
||||
|
||||
(void)ilevel;
|
||||
(void)flags;
|
||||
|
||||
if(!native) ASN__ENCODE_FAILED;
|
||||
|
||||
er.encoded = snprintf(scratch, sizeof(scratch),
|
||||
(specs && specs->field_unsigned)
|
||||
? "%lu" : "%ld", *native);
|
||||
if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch)
|
||||
|| cb(scratch, er.encoded, app_key) < 0)
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
@@ -38,6 +38,11 @@ asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OBJECT_IDENTIFIER_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OBJECT_IDENTIFIER_decode_oer,
|
||||
OBJECT_IDENTIFIER_encode_oer,
|
||||
|
||||
@@ -45,6 +45,10 @@ xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
|
||||
xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f OBJECT_IDENTIFIER_encode_jer;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive
|
||||
#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive
|
||||
|
||||
28
lib/asn1c/common/OBJECT_IDENTIFIER_jer.c
Normal file
28
lib/asn1c/common/OBJECT_IDENTIFIER_jer.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <OBJECT_IDENTIFIER.h>
|
||||
|
||||
|
||||
asn_enc_rval_t
|
||||
OBJECT_IDENTIFIER_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
|
||||
asn_enc_rval_t er = {0,0,0};
|
||||
|
||||
(void)ilevel;
|
||||
(void)flags;
|
||||
|
||||
if(!st || !st->buf) {
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
|
||||
er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key);
|
||||
if(er.encoded < 0) ASN__ENCODE_FAILED;
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
@@ -40,6 +40,11 @@ asn_TYPE_operation_t asn_OP_OCTET_STRING = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OCTET_STRING_decode_oer,
|
||||
OCTET_STRING_encode_oer,
|
||||
|
||||
@@ -45,6 +45,11 @@ xer_type_encoder_f OCTET_STRING_encode_xer;
|
||||
xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
jer_type_encoder_f OCTET_STRING_encode_jer;
|
||||
jer_type_encoder_f OCTET_STRING_encode_jer_utf8;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
oer_type_decoder_f OCTET_STRING_decode_oer;
|
||||
oer_type_encoder_f OCTET_STRING_encode_oer;
|
||||
|
||||
@@ -173,9 +173,10 @@ OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
|
||||
/* Get the PER length */
|
||||
if (csiz->upper_bound - csiz->lower_bound == 0)
|
||||
/* Indefinite length case */
|
||||
raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat);
|
||||
raw_len = aper_get_length(pd, -1, -1, csiz->effective_bits, &repeat);
|
||||
else
|
||||
raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat);
|
||||
raw_len = aper_get_length(pd, csiz->lower_bound, csiz->upper_bound,
|
||||
csiz->effective_bits, &repeat);
|
||||
if(raw_len < 0) RETURN(RC_WMORE);
|
||||
raw_len += csiz->lower_bound;
|
||||
|
||||
@@ -342,10 +343,9 @@ OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
st->size, sizeinunits - csiz->lower_bound,
|
||||
csiz->effective_bits);
|
||||
if (csiz->effective_bits > 0) {
|
||||
ret = aper_put_length(po,
|
||||
csiz->upper_bound - csiz->lower_bound + 1,
|
||||
sizeinunits - csiz->lower_bound, 0);
|
||||
if(ret) ASN__ENCODE_FAILED;
|
||||
ret = aper_put_length(po, csiz->lower_bound, csiz->upper_bound,
|
||||
sizeinunits - csiz->lower_bound, NULL);
|
||||
if(ret < 0) ASN__ENCODE_FAILED;
|
||||
}
|
||||
if (csiz->effective_bits > 0 || (st->size > 2)
|
||||
|| (csiz->upper_bound > (2 * 8 / unit_bits))
|
||||
@@ -372,7 +372,7 @@ OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
ASN_DEBUG("Encoding %lu bytes", st->size);
|
||||
|
||||
if(sizeinunits == 0) {
|
||||
if(aper_put_length(po, -1, 0, 0))
|
||||
if(aper_put_length(po, -1, -1, 0, NULL) < 0)
|
||||
ASN__ENCODE_FAILED;
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
@@ -380,7 +380,7 @@ OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
buf = st->buf;
|
||||
while(sizeinunits) {
|
||||
int need_eom = 0;
|
||||
ssize_t maySave = aper_put_length(po, -1, sizeinunits, &need_eom);
|
||||
ssize_t maySave = aper_put_length(po, -1, -1, sizeinunits, &need_eom);
|
||||
|
||||
if(maySave < 0) ASN__ENCODE_FAILED;
|
||||
|
||||
@@ -404,7 +404,7 @@ OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
|
||||
buf += maySave >> 3;
|
||||
sizeinunits -= maySave;
|
||||
assert(!(maySave & 0x07) || !sizeinunits);
|
||||
if(need_eom && aper_put_length(po, -1, 0, 0))
|
||||
if(need_eom && (aper_put_length(po, -1, -1, 0, NULL) < 0))
|
||||
ASN__ENCODE_FAILED; /* End of Message length */
|
||||
}
|
||||
|
||||
|
||||
151
lib/asn1c/common/OCTET_STRING_jer.c
Normal file
151
lib/asn1c/common/OCTET_STRING_jer.c
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
|
||||
* All rights reserved.
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <OCTET_STRING.h>
|
||||
#include <BIT_STRING.h> /* for .bits_unused member */
|
||||
|
||||
asn_enc_rval_t
|
||||
OCTET_STRING_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const char * const h2c = "0123456789ABCDEF";
|
||||
const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
|
||||
asn_enc_rval_t er = { 0, 0, 0 };
|
||||
char scratch[16 * 3 + 4];
|
||||
char *p = scratch;
|
||||
uint8_t *buf;
|
||||
uint8_t *end;
|
||||
size_t i;
|
||||
|
||||
if(!st || (!st->buf && st->size))
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
er.encoded = 0;
|
||||
|
||||
/*
|
||||
* Dump the contents of the buffer in hexadecimal.
|
||||
*/
|
||||
buf = st->buf;
|
||||
end = buf + st->size;
|
||||
for(i = 0; buf < end; buf++, i++) {
|
||||
if(!(i % 16) && (i || st->size > 16)) {
|
||||
ASN__CALLBACK(scratch, p-scratch);
|
||||
p = scratch;
|
||||
ASN__TEXT_INDENT(1, ilevel);
|
||||
}
|
||||
*p++ = h2c[(*buf >> 4) & 0x0F];
|
||||
*p++ = h2c[*buf & 0x0F];
|
||||
*p++ = 0x20;
|
||||
}
|
||||
if(p - scratch) {
|
||||
p--; /* Remove the tail space */
|
||||
ASN__CALLBACK3("\"", 1, scratch, p-scratch, "\"", 1); /* Dump the rest */
|
||||
if(st->size > 16)
|
||||
ASN__TEXT_INDENT(1, ilevel-1);
|
||||
}
|
||||
|
||||
ASN__ENCODED_OK(er);
|
||||
cb_failed:
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
|
||||
static const struct OCTET_STRING__jer_escape_table_s {
|
||||
const char *string;
|
||||
int size;
|
||||
} OCTET_STRING__jer_escape_table[] = {
|
||||
#define OSXET(s) { s, sizeof(s) - 1 }
|
||||
OSXET("\074\156\165\154\057\076"), /* <nul/> */
|
||||
OSXET("\074\163\157\150\057\076"), /* <soh/> */
|
||||
OSXET("\074\163\164\170\057\076"), /* <stx/> */
|
||||
OSXET("\074\145\164\170\057\076"), /* <etx/> */
|
||||
OSXET("\074\145\157\164\057\076"), /* <eot/> */
|
||||
OSXET("\074\145\156\161\057\076"), /* <enq/> */
|
||||
OSXET("\074\141\143\153\057\076"), /* <ack/> */
|
||||
OSXET("\074\142\145\154\057\076"), /* <bel/> */
|
||||
OSXET("\074\142\163\057\076"), /* <bs/> */
|
||||
OSXET("\011"), /* \t */
|
||||
OSXET("\012"), /* \n */
|
||||
OSXET("\074\166\164\057\076"), /* <vt/> */
|
||||
OSXET("\074\146\146\057\076"), /* <ff/> */
|
||||
OSXET("\015"), /* \r */
|
||||
OSXET("\074\163\157\057\076"), /* <so/> */
|
||||
OSXET("\074\163\151\057\076"), /* <si/> */
|
||||
OSXET("\074\144\154\145\057\076"), /* <dle/> */
|
||||
OSXET("\074\144\143\061\057\076"), /* <de1/> */
|
||||
OSXET("\074\144\143\062\057\076"), /* <de2/> */
|
||||
OSXET("\074\144\143\063\057\076"), /* <de3/> */
|
||||
OSXET("\074\144\143\064\057\076"), /* <de4/> */
|
||||
OSXET("\074\156\141\153\057\076"), /* <nak/> */
|
||||
OSXET("\074\163\171\156\057\076"), /* <syn/> */
|
||||
OSXET("\074\145\164\142\057\076"), /* <etb/> */
|
||||
OSXET("\074\143\141\156\057\076"), /* <can/> */
|
||||
OSXET("\074\145\155\057\076"), /* <em/> */
|
||||
OSXET("\074\163\165\142\057\076"), /* <sub/> */
|
||||
OSXET("\074\145\163\143\057\076"), /* <esc/> */
|
||||
OSXET("\074\151\163\064\057\076"), /* <is4/> */
|
||||
OSXET("\074\151\163\063\057\076"), /* <is3/> */
|
||||
OSXET("\074\151\163\062\057\076"), /* <is2/> */
|
||||
OSXET("\074\151\163\061\057\076"), /* <is1/> */
|
||||
{ 0, 0 }, /* " " */
|
||||
{ 0, 0 }, /* ! */
|
||||
{ 0, 0 }, /* \" */
|
||||
{ 0, 0 }, /* # */
|
||||
{ 0, 0 }, /* $ */
|
||||
{ 0, 0 }, /* % */
|
||||
OSXET("\046\141\155\160\073"), /* & */
|
||||
{ 0, 0 }, /* ' */
|
||||
{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */
|
||||
{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */
|
||||
{0,0},{0,0},{0,0},{0,0}, /* 89:; */
|
||||
OSXET("\046\154\164\073"), /* < */
|
||||
{ 0, 0 }, /* = */
|
||||
OSXET("\046\147\164\073"), /* > */
|
||||
};
|
||||
|
||||
asn_enc_rval_t
|
||||
OCTET_STRING_encode_jer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
int ilevel, enum jer_encoder_flags_e flags,
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
|
||||
asn_enc_rval_t er = { 0, 0, 0 };
|
||||
uint8_t *buf, *end;
|
||||
uint8_t *ss; /* Sequence start */
|
||||
ssize_t encoded_len = 0;
|
||||
|
||||
(void)ilevel; /* Unused argument */
|
||||
(void)flags; /* Unused argument */
|
||||
|
||||
if(!st || (!st->buf && st->size))
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
buf = st->buf;
|
||||
end = buf + st->size;
|
||||
for(ss = buf; buf < end; buf++) {
|
||||
unsigned int ch = *buf;
|
||||
int s_len; /* Special encoding sequence length */
|
||||
|
||||
/*
|
||||
* Escape certain characters: X.680/11.15
|
||||
*/
|
||||
if(ch < sizeof(OCTET_STRING__jer_escape_table)
|
||||
/ sizeof(OCTET_STRING__jer_escape_table[0])
|
||||
&& (s_len = OCTET_STRING__jer_escape_table[ch].size)) {
|
||||
if(((buf - ss) && cb(ss, buf - ss, app_key) < 0)
|
||||
|| cb(OCTET_STRING__jer_escape_table[ch].string, s_len, app_key) < 0)
|
||||
ASN__ENCODE_FAILED;
|
||||
encoded_len += (buf - ss) + s_len;
|
||||
ss = buf + 1;
|
||||
}
|
||||
}
|
||||
|
||||
encoded_len += (buf - ss);
|
||||
if((buf - ss) && cb(ss, buf - ss, app_key) < 0)
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
er.encoded = encoded_len;
|
||||
ASN__ENCODED_OK(er);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,11 @@ asn_TYPE_operation_t asn_OP_OPEN_TYPE = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OPEN_TYPE_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OPEN_TYPE_decode_oer,
|
||||
OPEN_TYPE_encode_oer,
|
||||
|
||||
@@ -58,6 +58,10 @@ asn_dec_rval_t OPEN_TYPE_xer_get(
|
||||
#define OPEN_TYPE_encode_xer CHOICE_encode_xer
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define OPEN_TYPE_encode_jer CHOICE_encode_jer
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
asn_dec_rval_t OPEN_TYPE_oer_get(
|
||||
const asn_codec_ctx_t *opt_codec_ctx,
|
||||
|
||||
@@ -146,7 +146,7 @@ OPEN_TYPE_aper_unknown_type_discard_bytes (asn_per_data_t *pd) {
|
||||
rv.code = RC_FAIL;
|
||||
|
||||
do {
|
||||
bytes = aper_get_length(pd, -1, -1, &repeat);
|
||||
bytes = aper_get_length(pd, -1, -1, -1, &repeat);
|
||||
if (bytes > 10 * ASN_DUMMY_BYTES)
|
||||
{
|
||||
return rv;
|
||||
@@ -171,4 +171,3 @@ OPEN_TYPE_aper_unknown_type_discard_bytes (asn_per_data_t *pd) {
|
||||
return rv;
|
||||
#undef ASN_DUMMY_BYTES
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,11 @@ asn_TYPE_operation_t asn_OP_ObjectDescriptor = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer_utf8,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
0,
|
||||
0,
|
||||
|
||||
@@ -34,6 +34,10 @@ extern asn_TYPE_operation_t asn_OP_ObjectDescriptor;
|
||||
#define ObjectDescriptor_encode_xer OCTET_STRING_encode_xer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define ObjectDescriptor_encode_jer OCTET_STRING_encode_jer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
#define ObjectDescriptor_decode_uper OCTET_STRING_decode_uper
|
||||
#define ObjectDescriptor_encode_uper OCTET_STRING_encode_uper
|
||||
|
||||
@@ -71,6 +71,11 @@ asn_TYPE_operation_t asn_OP_PrintableString = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer_utf8,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OCTET_STRING_decode_oer,
|
||||
OCTET_STRING_encode_oer,
|
||||
|
||||
@@ -36,6 +36,10 @@ asn_constr_check_f PrintableString_constraint;
|
||||
#define PrintableString_encode_xer OCTET_STRING_encode_xer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define PrintableString_encode_jer OCTET_STRING_encode_jer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
#define PrintableString_decode_uper OCTET_STRING_decode_uper
|
||||
#define PrintableString_encode_uper OCTET_STRING_encode_uper
|
||||
|
||||
@@ -35,6 +35,11 @@ asn_TYPE_operation_t asn_OP_UTF8String = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer_utf8,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OCTET_STRING_decode_oer,
|
||||
OCTET_STRING_encode_oer,
|
||||
|
||||
@@ -36,6 +36,10 @@ asn_constr_check_f UTF8String_constraint;
|
||||
#define UTF8String_encode_xer OCTET_STRING_encode_xer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define UTF8String_encode_jer OCTET_STRING_encode_jer_utf8
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
#define UTF8String_decode_uper OCTET_STRING_decode_uper
|
||||
#define UTF8String_encode_uper OCTET_STRING_encode_uper
|
||||
|
||||
@@ -41,6 +41,11 @@ asn_TYPE_operation_t asn_OP_VisibleString = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
OCTET_STRING_encode_jer_utf8,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
OCTET_STRING_decode_oer,
|
||||
OCTET_STRING_encode_oer,
|
||||
|
||||
@@ -36,6 +36,10 @@ asn_constr_check_f VisibleString_constraint;
|
||||
#define VisibleString_encode_xer OCTET_STRING_encode_xer
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
#define VisibleString_encode_jer OCTET_STRING_encode_jer
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_UPER_SUPPORT)
|
||||
#define VisibleString_decode_uper OCTET_STRING_decode_uper
|
||||
#define VisibleString_encode_uper OCTET_STRING_encode_uper
|
||||
|
||||
@@ -75,7 +75,7 @@ aper_decode(const asn_codec_ctx_t *opt_codec_ctx,
|
||||
*/
|
||||
if(!td->op->aper_decoder)
|
||||
ASN__DECODE_FAILED; /* PER is not compiled in */
|
||||
rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
|
||||
rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
|
||||
if(rval.code == RC_OK) {
|
||||
/* Return the number of consumed bits */
|
||||
rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)
|
||||
|
||||
@@ -25,7 +25,7 @@ aper_open_type_get_simple(const asn_codec_ctx_t *ctx,
|
||||
ASN_DEBUG("Getting open type %s...", td->name);
|
||||
|
||||
do {
|
||||
chunk_bytes = aper_get_length(pd, -1, -1, &repeat);
|
||||
chunk_bytes = aper_get_length(pd, -1, -1, -1, &repeat);
|
||||
if(chunk_bytes < 0) {
|
||||
FREEMEM(buf);
|
||||
ASN__DECODE_STARVED;
|
||||
@@ -101,12 +101,12 @@ aper_open_type_put(const asn_TYPE_descriptor_t *td,
|
||||
|
||||
for(bptr = buf, toGo = size; toGo;) {
|
||||
int need_eom = 0;
|
||||
ssize_t maySave = aper_put_length(po, -1, toGo, &need_eom);
|
||||
ssize_t maySave = aper_put_length(po, -1, -1, toGo, &need_eom);
|
||||
if(maySave < 0) break;
|
||||
if(per_put_many_bits(po, bptr, maySave * 8)) break;
|
||||
bptr = (char *)bptr + maySave;
|
||||
toGo -= maySave;
|
||||
if(need_eom && aper_put_length(po, -1, 0, 0)) {
|
||||
if(need_eom && (aper_put_length(po, -1, -1, 0, NULL) < 0)) {
|
||||
FREEMEM(buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -17,26 +17,17 @@ aper_get_align(asn_per_data_t *pd) {
|
||||
}
|
||||
|
||||
ssize_t
|
||||
aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) {
|
||||
aper_get_length(asn_per_data_t *pd, ssize_t lb, ssize_t ub,
|
||||
int ebits, int *repeat) {
|
||||
int constrained = (lb >= 0) && (ub >= 0);
|
||||
ssize_t value;
|
||||
|
||||
*repeat = 0;
|
||||
|
||||
/*
|
||||
* ITU-T X.691(08/2015)
|
||||
* #11.9.4.2
|
||||
*
|
||||
* If the length determinant "n" to be encoded is a normally small length,
|
||||
* or a constrained whole number with "ub" greater than or equal to 64K,
|
||||
* or is a semi-constrained whole number, then "n" shall be encoded
|
||||
* as specified in 11.9.3.4 to 11.9.3.8.4.
|
||||
*
|
||||
* NOTE – Thus, if "ub" is greater than or equal to 64K,
|
||||
* the encoding of the length determinant is the same as it would be
|
||||
* if the length were unconstrained.
|
||||
*/
|
||||
if (range <= 65535 && range >= 0)
|
||||
if (constrained && ub < 65536) {
|
||||
int range = ub - lb + 1;
|
||||
return aper_get_nsnnwn(pd, range);
|
||||
}
|
||||
|
||||
if (aper_get_align(pd) < 0)
|
||||
return -1;
|
||||
@@ -72,13 +63,12 @@ aper_get_nslength(asn_per_data_t *pd) {
|
||||
return length;
|
||||
} else {
|
||||
int repeat;
|
||||
length = aper_get_length(pd, -1, -1, &repeat);
|
||||
length = aper_get_length(pd, -1, -1, -1, &repeat);
|
||||
if(length >= 0 && !repeat) return length;
|
||||
return -1; /* Error, or do not support >16K extensions */
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(USE_OLDER_APER_NSNNWN)
|
||||
ssize_t
|
||||
aper_get_nsnnwn(asn_per_data_t *pd, int range) {
|
||||
ssize_t value;
|
||||
@@ -108,53 +98,28 @@ aper_get_nsnnwn(asn_per_data_t *pd, int range) {
|
||||
//return -1;
|
||||
int length;
|
||||
|
||||
/* handle indefinite range */
|
||||
length = per_get_few_bits(pd, 1);
|
||||
if (length == 0)
|
||||
return per_get_few_bits(pd, 6);
|
||||
/* handle indefinite range */
|
||||
length = per_get_few_bits(pd, 1);
|
||||
if (length == 0)
|
||||
return per_get_few_bits(pd, 6);
|
||||
|
||||
if (aper_get_align(pd) < 0)
|
||||
return -1;
|
||||
if (aper_get_align(pd) < 0)
|
||||
return -1;
|
||||
|
||||
length = per_get_few_bits(pd, 8);
|
||||
/* the length is not likely to be that big */
|
||||
if (length > 4)
|
||||
return -1;
|
||||
value = 0;
|
||||
if (per_get_many_bits(pd, (uint8_t *)&value, 0, length * 8) < 0)
|
||||
return -1;
|
||||
return value;
|
||||
length = per_get_few_bits(pd, 8);
|
||||
/* the length is not likely to be that big */
|
||||
if (length > 4)
|
||||
return -1;
|
||||
value = 0;
|
||||
if (per_get_many_bits(pd, (uint8_t *)&value, 0, length * 8) < 0)
|
||||
return -1;
|
||||
return value;
|
||||
}
|
||||
if (aper_get_align(pd) < 0)
|
||||
return -1;
|
||||
value = per_get_few_bits(pd, 8 * bytes);
|
||||
return value;
|
||||
}
|
||||
#else /* old APER codec */
|
||||
ssize_t
|
||||
aper_get_nsnnwn(asn_per_data_t *pd, int dummy_range) {
|
||||
ssize_t value;
|
||||
|
||||
ASN_DEBUG("Get the normally small non-negative whole number APER");
|
||||
|
||||
value = per_get_few_bits(pd, 7);
|
||||
if(value & 64) { /* implicit (value < 0) */
|
||||
value &= 63;
|
||||
value <<= 2;
|
||||
value |= per_get_few_bits(pd, 2);
|
||||
if(value & 128) /* implicit (value < 0) */
|
||||
return -1;
|
||||
if(value == 0)
|
||||
return 0;
|
||||
if(value >= 3)
|
||||
return -1;
|
||||
value = per_get_few_bits(pd, 8 * value);
|
||||
return value;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
#endif /* don't use old APER */
|
||||
|
||||
int aper_put_align(asn_per_outp_t *po) {
|
||||
|
||||
@@ -167,38 +132,42 @@ int aper_put_align(asn_per_outp_t *po) {
|
||||
}
|
||||
|
||||
ssize_t
|
||||
aper_put_length(asn_per_outp_t *po, int range, size_t length, int *need_eom) {
|
||||
int dummy = 0;
|
||||
if(!need_eom) need_eom = &dummy;
|
||||
aper_put_length(asn_per_outp_t *po, ssize_t lb, ssize_t ub, size_t n, int *need_eom) {
|
||||
int constrained = (lb >= 0) && (ub >= 0);
|
||||
int dummy = 0;
|
||||
if(!need_eom) need_eom = &dummy;
|
||||
|
||||
*need_eom = 0;
|
||||
*need_eom = 0;
|
||||
|
||||
ASN_DEBUG("APER put length %zu with range %d", length, range);
|
||||
|
||||
ASN_DEBUG("APER put length %zu with range (%zd..%zd)", n, lb, ub);
|
||||
|
||||
/* 11.9 X.691 Note 2 */
|
||||
if (range <= 65536 && range >= 0)
|
||||
return aper_put_nsnnwn(po, range, length);
|
||||
if (constrained && ub < 65536) {
|
||||
int range = ub - lb + 1;
|
||||
return aper_put_nsnnwn(po, range, n) ? -1 : (ssize_t)n;
|
||||
}
|
||||
|
||||
if (aper_put_align(po) < 0)
|
||||
return -1;
|
||||
|
||||
if(length <= 127) /* #11.9.3.6 */{
|
||||
return per_put_few_bits(po, length, 8)
|
||||
? -1 : (ssize_t)length;
|
||||
if(n <= 127) { /* #11.9.3.6 */
|
||||
return per_put_few_bits(po, n, 8)
|
||||
? -1 : (ssize_t)n;
|
||||
}
|
||||
else if(length < 16384) /* #11.9.3.7 */
|
||||
return per_put_few_bits(po, length|0x8000, 16)
|
||||
? -1 : (ssize_t)length;
|
||||
else if(n < 16384) /* #11.9.3.7 */
|
||||
return per_put_few_bits(po, n|0x8000, 16)
|
||||
? -1 : (ssize_t)n;
|
||||
|
||||
*need_eom = 0 == (length & 16383);
|
||||
length >>= 14;
|
||||
if(length > 4) {
|
||||
*need_eom = 0;
|
||||
length = 4;
|
||||
}
|
||||
*need_eom = 0 == (n & 16383);
|
||||
n >>= 14;
|
||||
if(n > 4) {
|
||||
*need_eom = 0;
|
||||
n = 4;
|
||||
}
|
||||
|
||||
return per_put_few_bits(po, 0xC0 | length, 8)
|
||||
? -1 : (ssize_t)(length << 14);
|
||||
return per_put_few_bits(po, 0xC0 | n, 8)
|
||||
? -1 : (ssize_t)(n << 14);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +179,7 @@ aper_put_nslength(asn_per_outp_t *po, size_t length) {
|
||||
if(length == 0) return -1;
|
||||
return per_put_few_bits(po, length-1, 7) ? -1 : 0;
|
||||
} else {
|
||||
if(aper_put_length(po, -1, length, 0) != (ssize_t)length) {
|
||||
if(aper_put_length(po, -1, -1, length, NULL) != (ssize_t)length) {
|
||||
/* This might happen in case of >16K extensions */
|
||||
return -1;
|
||||
}
|
||||
@@ -219,12 +188,11 @@ aper_put_nslength(asn_per_outp_t *po, size_t length) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if !defined(USE_OLDER_APER_NSNNWN)
|
||||
int
|
||||
aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
|
||||
int bytes;
|
||||
|
||||
ASN_DEBUG("aper put nsnnwn %d with range %d", number, range);
|
||||
ASN_DEBUG("aper put nsnnwn %d with range %d", number, range);
|
||||
/* 10.5.7.1 X.691 */
|
||||
if(range < 0) {
|
||||
int i;
|
||||
@@ -245,8 +213,12 @@ aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
|
||||
}
|
||||
return per_put_few_bits(po, number, i);
|
||||
} else if(range == 256) {
|
||||
if (number >= range)
|
||||
return -1;
|
||||
bytes = 1;
|
||||
} else if(range <= 65536) {
|
||||
if (number >= range)
|
||||
return -1;
|
||||
bytes = 2;
|
||||
} else { /* Ranges > 64K */
|
||||
int i;
|
||||
@@ -263,30 +235,5 @@ aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
|
||||
/* if(per_put_few_bits(po, bytes, 8))
|
||||
return -1;
|
||||
*/
|
||||
return per_put_few_bits(po, number, 8 * bytes);
|
||||
return per_put_few_bits(po, number, 8 * bytes);
|
||||
}
|
||||
#else /* preserve old code base in case */
|
||||
int
|
||||
aper_put_nsnnwn(asn_per_outp_t *po, int dummy_range, int n) {
|
||||
int bytes;
|
||||
|
||||
ASN_DEBUG("aper_put_nsnnwn");
|
||||
|
||||
if(n <= 63) {
|
||||
if(n < 0) return -1;
|
||||
return per_put_few_bits(po, n, 7);
|
||||
}
|
||||
if(n < 256)
|
||||
bytes = 1;
|
||||
else if(n < 65536)
|
||||
bytes = 2;
|
||||
else if(n < 256 * 65536)
|
||||
bytes = 3;
|
||||
else
|
||||
return -1; /* This is not a "normally small" value */
|
||||
if(per_put_few_bits(po, bytes, 8))
|
||||
return -1;
|
||||
|
||||
return per_put_few_bits(po, n, 8 * bytes);
|
||||
}
|
||||
#endif /* which aper_put_nsnnwn() */
|
||||
|
||||
@@ -16,7 +16,7 @@ extern "C" {
|
||||
* X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
|
||||
* Get the length "n" from the Aligned PER stream.
|
||||
*/
|
||||
ssize_t aper_get_length(asn_per_data_t *pd, int range,
|
||||
ssize_t aper_get_length(asn_per_data_t *pd, ssize_t lb, ssize_t ub,
|
||||
int effective_bound_bits, int *repeat);
|
||||
|
||||
/*
|
||||
@@ -31,13 +31,14 @@ ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range);
|
||||
|
||||
/*
|
||||
* X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
|
||||
* Put the length "whole_length" to the Aligned PER stream.
|
||||
* If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed.
|
||||
* In that case, invoke uper_put_length(po, 0, 0) after encoding the last block.
|
||||
* Put the length "n" to the Aligned PER stream.
|
||||
* If (opt_need_eom) is given, it will be set to 1 if final 0-n is needed.
|
||||
* In that case, invoke aper_put_length(po, -1, -1, 0, NULL) after encoding the
|
||||
* last block.
|
||||
* This function returns the number of units which may be flushed
|
||||
* in the next units saving iteration.
|
||||
*/
|
||||
ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length,
|
||||
ssize_t aper_put_length(asn_per_outp_t *po, ssize_t lb, ssize_t ub, size_t n,
|
||||
int *opt_need_eom);
|
||||
|
||||
/* Align the current bit position to octet bundary */
|
||||
|
||||
@@ -431,6 +431,23 @@ asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
|
||||
break;
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
case ATS_BASIC_JER:
|
||||
if(td->op->jer_encoder) {
|
||||
er = jer_encode(td, sptr, callback, callback_key);
|
||||
if(er.encoded == -1) {
|
||||
if(er.failed_type && er.failed_type->op->jer_encoder) {
|
||||
errno = EBADF; /* Structure has incorrect form. */
|
||||
} else {
|
||||
errno = ENOENT; /* JER is not defined for this type. */
|
||||
}
|
||||
}
|
||||
} else {
|
||||
errno = ENOENT; /* Transfer syntax is not defined for this type. */
|
||||
ASN__ENCODE_FAILED;
|
||||
}
|
||||
break;
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
default:
|
||||
errno = ENOENT;
|
||||
ASN__ENCODE_FAILED;
|
||||
|
||||
@@ -60,7 +60,8 @@ enum asn_transfer_syntax {
|
||||
* CANONICAL-XER is a more strict variant of BASIC-XER.
|
||||
*/
|
||||
ATS_BASIC_XER,
|
||||
ATS_CANONICAL_XER
|
||||
ATS_CANONICAL_XER,
|
||||
ATS_BASIC_JER,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -27,6 +27,11 @@ asn_TYPE_operation_t asn_OP_CHOICE = {
|
||||
0,
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_JER_SUPPORT)
|
||||
CHOICE_encode_jer,
|
||||
#else
|
||||
0,
|
||||
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
|
||||
#if !defined(ASN_DISABLE_OER_SUPPORT)
|
||||
CHOICE_decode_oer,
|
||||
CHOICE_encode_oer,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user