Projects
osmocom:latest
open5gs
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 2
View file
open5gs_2.4.8.dsc -> open5gs_2.4.9.dsc
Changed
@@ -2,7 +2,7 @@ Source: open5gs Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg Architecture: any -Version: 2.4.8 +Version: 2.4.9 Maintainer: Harald Welte <laforge@gnumonks.org> Uploaders: Sukchan Lee <acetcom@gmail.com> Homepage: https://open5gs.org @@ -30,8 +30,8 @@ open5gs-udr deb net optional arch=any open5gs-upf deb net optional arch=any Checksums-Sha1: - c3613c55ca67a59e61b2a1cc7f0cfbdaf59b15d6 11441376 open5gs_2.4.8.tar.xz + c585dad5c293f2a68383e2180bab44dd3dac99fb 11458408 open5gs_2.4.9.tar.xz Checksums-Sha256: - 03a16abfb602ea571c55cbcfa284489ebdb9a17dd86d789d7ebd8bd86c9e73d3 11441376 open5gs_2.4.8.tar.xz + 0cf94d60ada195ed7a06c05c1c14a60446a20eddca0922840475a771bcee8b37 11458408 open5gs_2.4.9.tar.xz Files: - 9bb0203b239047728755db004eebf37f 11441376 open5gs_2.4.8.tar.xz + 2461f19cdf7e4ac1bc2d2f5969faaa88 11458408 open5gs_2.4.9.tar.xz
View file
open5gs_2.4.9.tar.xz/.clang-tidy
Added
@@ -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)'
View file
open5gs_2.4.9.tar.xz/.dockerignore
Added
@@ -0,0 +1,10 @@ +**/*.md +**/docker-compose*.yml +**/docker-compose*.yaml +**/Dockerfile* +.git +.dockerignore +.cache +.gitignore +.github +build
View file
open5gs_2.4.8.tar.xz/configs/310014.yaml.in -> open5gs_2.4.9.tar.xz/configs/310014.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -194,6 +195,11 @@ - ::1 port: 7777 +scp: + sbi: + - addr: 127.0.1.10 + port: 7777 + ausf: sbi: - addr: 127.0.0.11
View file
open5gs_2.4.8.tar.xz/configs/csfb.yaml.in -> open5gs_2.4.9.tar.xz/configs/csfb.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -47,12 +48,12 @@ 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 @@ lac: 51544 gummei: - plmn_id: - mcc: 901 + mcc: 999 mnc: 70 mme_gid: 2 mme_code: 1 @@ -79,7 +80,7 @@ mme_code: 1 tai: plmn_id: - mcc: 901 + mcc: 999 mnc: 70 tac: 7 tai: @@ -146,19 +147,19 @@ - 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
View file
open5gs_2.4.8.tar.xz/configs/non3gpp.yaml.in -> open5gs_2.4.9.tar.xz/configs/non3gpp.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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
View file
open5gs_2.4.8.tar.xz/configs/open5gs/amf.yaml.in -> open5gs_2.4.9.tar.xz/configs/open5gs/amf.yaml.in
Changed
@@ -150,7 +150,7 @@ # o Multiple GUAMI # guami: # - plmn_id: -# mcc: 901 +# mcc: 999 # mnc: 70 # amf_id: # region: 2 @@ -199,13 +199,13 @@ # 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 @@ # # <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 @@ - 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 @@ -370,5 +370,5 @@ # port: 9090 # metrics: - addr: 0.0.0.0 + addr: 127.0.0.5 port: 9090
View file
open5gs_2.4.8.tar.xz/configs/open5gs/meson.build -> open5gs_2.4.9.tar.xz/configs/open5gs/meson.build
Changed
@@ -29,6 +29,7 @@ hss.yaml pcrf.yaml nrf.yaml + scp.yaml ausf.yaml udm.yaml udr.yaml
View file
open5gs_2.4.8.tar.xz/configs/open5gs/mme.yaml.in -> open5gs_2.4.9.tar.xz/configs/open5gs/mme.yaml.in
Changed
@@ -248,15 +248,15 @@ - 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: @@ -433,5 +433,5 @@ # port: 9090 # metrics: - addr: 0.0.0.0 - port: 9090 \ No newline at end of file + addr: 127.0.0.2 + port: 9090
View file
open5gs_2.4.9.tar.xz/configs/open5gs/scp.yaml.in
Added
@@ -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:
View file
open5gs_2.4.8.tar.xz/configs/open5gs/sgwc.yaml.in -> open5gs_2.4.9.tar.xz/configs/open5gs/sgwc.yaml.in
Changed
@@ -146,6 +146,8 @@ # 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:
View file
open5gs_2.4.8.tar.xz/configs/open5gs/smf.yaml.in -> open5gs_2.4.9.tar.xz/configs/open5gs/smf.yaml.in
Changed
@@ -269,7 +269,7 @@ # - internet # - ims # -# o S-NSSAISST:1 and DNNinternet and TAIPLMN-ID:90170 TAC:1 +# o S-NSSAISST:1 and DNNinternet and TAIPLMN-ID:99970 TAC:1 # info: # - s_nssai: # - sst: 1 @@ -277,14 +277,14 @@ # - internet # tai: # - plmn_id: -# mcc: 901 +# mcc: 999 # mnc: 70 # tac: 1 # # o If any of conditions below are met: -# - S-NSSAISST:1 and DNNinternet and TAIPLMN-ID:90170 TAC:1-9 +# - S-NSSAISST:1 and DNNinternet and TAIPLMN-ID:99970 TAC:1-9 # - S-NSSAISST:2 SD:000080 and DNNinternet or ims -# - S-NSSAISST:4 and DNNinternet and TAIPLMN-ID:90170 TAC:10-20,30-40 +# - S-NSSAISST:4 and DNNinternet and TAIPLMN-ID:99970 TAC:10-20,30-40 # # info: # - s_nssai: @@ -293,7 +293,7 @@ # - internet # tai: # - plmn_id: -# mcc: 901 +# mcc: 999 # mnc: 70 # range: # - 1-9 @@ -309,7 +309,7 @@ # - internet # tai: # - plmn_id: -# mcc: 901 +# mcc: 999 # mnc: 70 # range: # - 10-20 @@ -339,27 +339,27 @@ # - 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 @@ -371,7 +371,7 @@ # - internet # tai: # - plmn_id: -# mcc: 901 +# mcc: 999 # mnc: 70 # tac: 99 # @@ -531,6 +531,8 @@ # 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: @@ -575,5 +577,5 @@ # port: 9090 # metrics: - addr: 0.0.0.0 + addr: 127.0.0.4 port: 9090
View file
open5gs_2.4.8.tar.xz/configs/sample.yaml.in -> open5gs_2.4.9.tar.xz/configs/sample.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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 @@ - ::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
View file
open5gs_2.4.8.tar.xz/configs/slice.yaml.in -> open5gs_2.4.9.tar.xz/configs/slice.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true + no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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
View file
open5gs_2.4.8.tar.xz/configs/srslte.yaml.in -> open5gs_2.4.9.tar.xz/configs/srslte.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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
View file
open5gs_2.4.8.tar.xz/configs/volte.yaml.in -> open5gs_2.4.9.tar.xz/configs/volte.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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
View file
open5gs_2.4.8.tar.xz/configs/vonr.yaml.in -> open5gs_2.4.9.tar.xz/configs/vonr.yaml.in
Changed
@@ -4,6 +4,7 @@ parameter: # no_nrf: true +# no_scp: true # no_amf: true # no_smf: true # no_upf: true @@ -44,13 +45,13 @@ - 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 @@ - 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 @@ - ::1 port: 7777 +scp: + sbi: + - addr: 127.0.1.10 + port: 7777 + ausf: sbi: - addr: 127.0.0.11
View file
open5gs_2.4.8.tar.xz/debian/changelog -> open5gs_2.4.9.tar.xz/debian/changelog
Changed
@@ -1,3 +1,27 @@ +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
View file
open5gs_2.4.8.tar.xz/debian/open5gs-upf.postinst -> open5gs_2.4.9.tar.xz/debian/open5gs-upf.postinst
Changed
@@ -27,7 +27,9 @@ 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
View file
open5gs_2.4.8.tar.xz/docker/build/Dockerfile -> open5gs_2.4.9.tar.xz/docker/build/Dockerfile
Changed
@@ -5,15 +5,8 @@ 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
View file
open5gs_2.4.8.tar.xz/docker/docker-compose.test.yml -> open5gs_2.4.9.tar.xz/docker/docker-compose.test.yml
Changed
@@ -15,4 +15,4 @@ 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"
View file
open5gs_2.4.8.tar.xz/docker/docker-compose.yml -> open5gs_2.4.9.tar.xz/docker/docker-compose.yml
Changed
@@ -33,7 +33,8 @@ build: build: - context: ./build + context: ../ + dockerfile: docker/build/Dockerfile args: dist: ${DIST-ubuntu} tag: ${TAG-latest}
View file
open5gs_2.4.8.tar.xz/docs/_docs/guide/01-quickstart.md -> open5gs_2.4.9.tar.xz/docs/_docs/guide/01-quickstart.md
Changed
@@ -249,7 +249,7 @@ 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 @@ -257,7 +257,7 @@ mme_code: 1 tai: plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 - tac: 1 + mcc: 001 # set your PLMN-MCC @@ -308,7 +308,7 @@ + - 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 @@ -317,7 +317,7 @@ set: 1 tai: - plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 - tac: 1 + mcc: 001 # set your PLMN-MCC @@ -325,7 +325,7 @@ + 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
View file
open5gs_2.4.8.tar.xz/docs/_docs/guide/02-building-open5gs-from-sources.md -> open5gs_2.4.9.tar.xz/docs/_docs/guide/02-building-open5gs-from-sources.md
Changed
@@ -107,7 +107,7 @@ + - addr: 10.10.0.5 guami: - plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 + mcc: 001 + mnc: 01 @@ -116,7 +116,7 @@ set: 1 tai: - plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 - tac: 1 + mcc: 001 @@ -124,7 +124,7 @@ + tac: 2 plmn_support: - plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 + mcc: 001 + mnc: 01 @@ -168,7 +168,7 @@ addr: 127.0.0.2 gummei: plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 + mcc: 001 + mnc: 01 @@ -176,7 +176,7 @@ mme_code: 1 tai: plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 - tac: 1 + mcc: 001
View file
open5gs_2.4.8.tar.xz/docs/_docs/guide/03-splitting-network-functions.md -> open5gs_2.4.9.tar.xz/docs/_docs/guide/03-splitting-network-functions.md
Changed
@@ -70,7 +70,7 @@ plmn_id: - mcc: 001 - mnc: 01 -+ mcc: 901 ++ mcc: 999 + mnc: 70 mme_gid: 2 mme_code: 1 @@ -79,7 +79,7 @@ - mcc: 001 - mnc: 01 - tac: 7 -+ mcc: 901 ++ mcc: 999 + mnc: 70 + tac: 1 security: @@ -153,7 +153,7 @@ - plmn_id: - mcc: 001 - mnc: 01 -+ mcc: 901 ++ mcc: 999 + mnc: 70 amf_id: region: 2 @@ -163,14 +163,14 @@ - 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
View file
open5gs_2.4.8.tar.xz/docs/_docs/troubleshoot/02-now-in-github-issues.md -> open5gs_2.4.9.tar.xz/docs/_docs/troubleshoot/02-now-in-github-issues.md
Changed
@@ -97,7 +97,7 @@ > db.subscribers.find().pretty() { "_id" : ObjectId("60969fe79459f8b40d8d3f68"), - "imsi" : "901700000000001", + "imsi" : "999700000000001", "__v" : 0, "access_restriction_data" : 32, "ambr" : { @@ -164,7 +164,7 @@ > db.subscribers.find().pretty() { "_id" : ObjectId("609715fda08851a0744e6ae7"), - "imsi" : "901700000021309", + "imsi" : "999700000021309", "__v" : 0, "access_restriction_data" : 32, "ambr" : { @@ -317,7 +317,7 @@ s_nssai: - sst: 1 + - plmn_id: -+ mcc: 901 ++ mcc: 999 + mnc: 70 + s_nssai: + - sst: 1 @@ -1089,12 +1089,12 @@ ``` * 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 @@ ``` * 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 ```
View file
open5gs_2.4.8.tar.xz/docs/_docs/tutorial/01-your-first-lte.md -> open5gs_2.4.9.tar.xz/docs/_docs/tutorial/01-your-first-lte.md
Changed
@@ -190,14 +190,14 @@ 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 @@ addr: 127.0.0.2 gummei: plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 + mcc: 310 + mnc: 789 @@ -246,7 +246,7 @@ mme_code: 1 tai: plmn_id: -- mcc: 901 +- mcc: 999 - mnc: 70 - tac: 1 + mcc: 310
View file
open5gs_2.4.8.tar.xz/docs/_posts/2022-06-12-release-v2.4.8.md -> open5gs_2.4.9.tar.xz/docs/_posts/2022-06-12-release-v2.4.8.md
Changed
@@ -13,8 +13,7 @@ - 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) -- AMF Added support for SUCI prtection schemes A and B( (#1589(https://github.com/open5gs/open5gs/pull/1589)) -- bmeglicit(https://github.com/bmeglicit) +- 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)
View file
open5gs_2.4.9.tar.xz/docs/_posts/2022-07-25-release-v2.4.9.md
Added
@@ -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}
View file
open5gs_2.4.8.tar.xz/lib/app/ogs-app.h -> open5gs_2.4.9.tar.xz/lib/app/ogs-app.h
Changed
@@ -94,6 +94,9 @@ int amf_initialize(void); void amf_terminate(void); +int scp_initialize(void); +void scp_terminate(void); + #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/lib/app/ogs-config.h -> open5gs_2.4.9.tar.xz/lib/app/ogs-config.h
Changed
@@ -29,7 +29,7 @@ #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 }
View file
open5gs_2.4.8.tar.xz/lib/app/ogs-context.c -> open5gs_2.4.9.tar.xz/lib/app/ogs-context.c
Changed
@@ -64,36 +64,27 @@ 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 @@ 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; @@ -314,6 +305,9 @@ } 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);
View file
open5gs_2.4.8.tar.xz/lib/app/ogs-context.h -> open5gs_2.4.9.tar.xz/lib/app/ogs-context.h
Changed
@@ -64,6 +64,7 @@ int no_nssf; int no_bsf; int no_udr; + int no_scp; int no_nrf; /* Network */ @@ -103,31 +104,30 @@ 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 nf_service; + 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;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/ANY.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/ANY.c
Changed
@@ -32,6 +32,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/ANY.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/ANY.h
Changed
@@ -42,6 +42,10 @@ 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;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/ANY_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/ANY_aper.c
Changed
@@ -132,7 +132,7 @@ 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 @@ 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 @@ 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);
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/ANY_jer.c
Added
@@ -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); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/BIT_STRING.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/BIT_STRING.c
Changed
@@ -38,6 +38,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/BIT_STRING.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/BIT_STRING.h
Changed
@@ -44,6 +44,10 @@ 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;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/BIT_STRING_jer.c
Added
@@ -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_pattern16 = { + "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 scratch128; + 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_patternv >> 4, 4); + memcpy(p + 4, _bit_patternv & 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; +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/GraphicString.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/GraphicString.c
Changed
@@ -34,6 +34,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/GraphicString.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/GraphicString.h
Changed
@@ -36,6 +36,10 @@ #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
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/INTEGER.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/INTEGER.c
Changed
@@ -36,6 +36,11 @@ 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 */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/INTEGER.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/INTEGER.h
Changed
@@ -60,6 +60,10 @@ 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;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/INTEGER_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/INTEGER_aper.c
Changed
@@ -129,7 +129,7 @@ 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 @@ 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);
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/INTEGER_jer.c
Added
@@ -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); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NULL.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NULL.c
Changed
@@ -33,6 +33,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NULL.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NULL.h
Changed
@@ -40,6 +40,10 @@ 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;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/NULL_jer.c
Added
@@ -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); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NativeEnumerated.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeEnumerated.c
Changed
@@ -40,6 +40,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NativeEnumerated.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeEnumerated.h
Changed
@@ -41,6 +41,10 @@ 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;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeEnumerated_jer.c
Added
@@ -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; + } +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NativeInteger.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeInteger.c
Changed
@@ -41,6 +41,11 @@ 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 */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/NativeInteger.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeInteger.h
Changed
@@ -42,6 +42,10 @@ 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;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/NativeInteger_jer.c
Added
@@ -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 scratch32; /* 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); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OBJECT_IDENTIFIER.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OBJECT_IDENTIFIER.c
Changed
@@ -38,6 +38,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OBJECT_IDENTIFIER.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OBJECT_IDENTIFIER.h
Changed
@@ -45,6 +45,10 @@ 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
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/OBJECT_IDENTIFIER_jer.c
Added
@@ -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); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OCTET_STRING.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OCTET_STRING.c
Changed
@@ -40,6 +40,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OCTET_STRING.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OCTET_STRING.h
Changed
@@ -45,6 +45,11 @@ 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;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OCTET_STRING_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OCTET_STRING_aper.c
Changed
@@ -173,9 +173,10 @@ /* 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 @@ 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 @@ 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 @@ 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 @@ 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 */ }
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/OCTET_STRING_jer.c
Added
@@ -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 scratch16 * 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_table0) + && (s_len = OCTET_STRING__jer_escape_tablech.size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__jer_escape_tablech.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); +} +
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OPEN_TYPE.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OPEN_TYPE.c
Changed
@@ -28,6 +28,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OPEN_TYPE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OPEN_TYPE.h
Changed
@@ -58,6 +58,10 @@ #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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/OPEN_TYPE_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/OPEN_TYPE_aper.c
Changed
@@ -146,7 +146,7 @@ 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 @@ return rv; #undef ASN_DUMMY_BYTES } -
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/ObjectDescriptor.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/ObjectDescriptor.c
Changed
@@ -34,6 +34,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/ObjectDescriptor.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/ObjectDescriptor.h
Changed
@@ -34,6 +34,10 @@ #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
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/PrintableString.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/PrintableString.c
Changed
@@ -71,6 +71,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/PrintableString.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/PrintableString.h
Changed
@@ -36,6 +36,10 @@ #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
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/UTF8String.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/UTF8String.c
Changed
@@ -35,6 +35,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/UTF8String.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/UTF8String.h
Changed
@@ -36,6 +36,10 @@ #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
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/VisibleString.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/VisibleString.c
Changed
@@ -41,6 +41,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/VisibleString.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/VisibleString.h
Changed
@@ -36,6 +36,10 @@ #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
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/aper_decoder.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/aper_decoder.c
Changed
@@ -75,7 +75,7 @@ */ 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)
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/aper_opentype.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/aper_opentype.c
Changed
@@ -25,7 +25,7 @@ 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 @@ 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; }
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/aper_support.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/aper_support.c
Changed
@@ -17,26 +17,17 @@ } 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 @@ 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 @@ //return -1; int length; - /* 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; - - 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; + /* 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; + + 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 @@ } 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; - } - else if(length < 16384) /* #11.9.3.7 */ - return per_put_few_bits(po, length|0x8000, 16) - ? -1 : (ssize_t)length; - - *need_eom = 0 == (length & 16383); - length >>= 14; - if(length > 4) { - *need_eom = 0; - length = 4; - } + if(n <= 127) { /* #11.9.3.6 */ + return per_put_few_bits(po, n, 8) + ? -1 : (ssize_t)n; + } + else if(n < 16384) /* #11.9.3.7 */ + return per_put_few_bits(po, n|0x8000, 16) + ? -1 : (ssize_t)n; + + *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 @@ 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 @@ 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 @@ } 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 @@ /* if(per_put_few_bits(po, bytes, 8)) return -1; */ - 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); + return per_put_few_bits(po, number, 8 * bytes); } -#endif /* which aper_put_nsnnwn() */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/aper_support.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/aper_support.h
Changed
@@ -16,7 +16,7 @@ * 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 @@ /* * 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 */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/asn_application.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/asn_application.c
Changed
@@ -431,6 +431,23 @@ 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;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/asn_application.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/asn_application.h
Changed
@@ -60,7 +60,8 @@ * CANONICAL-XER is a more strict variant of BASIC-XER. */ ATS_BASIC_XER, - ATS_CANONICAL_XER + ATS_CANONICAL_XER, + ATS_BASIC_JER, }; /*
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_CHOICE.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_CHOICE.c
Changed
@@ -27,6 +27,11 @@ 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,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_CHOICE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_CHOICE.h
Changed
@@ -59,6 +59,10 @@ xer_type_encoder_f CHOICE_encode_xer; #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) +jer_type_encoder_f CHOICE_encode_jer; +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ + #if !defined(ASN_DISABLE_OER_SUPPORT) oer_type_decoder_f CHOICE_decode_oer; oer_type_encoder_f CHOICE_encode_oer;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_CHOICE_jer.c
Added
@@ -0,0 +1,79 @@ +/* + * 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 <constr_CHOICE.h> + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) \ + do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + return rval; \ + } while(0) + +#undef JER_ADVANCE +#define JER_ADVANCE(num_bytes) \ + do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +asn_enc_rval_t +CHOICE_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_CHOICE_specifics_t *specs = + (const asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er = {0,0,0}; + unsigned present = 0; + + if(!sptr) + ASN__ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present == 0 || present > td->elements_count) { + ASN__ENCODE_FAILED; + } else { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elementspresent-1; + const void *memb_ptr = NULL; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) ASN__ENCODE_FAILED; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + ASN__CALLBACK3("{\n\"", 3, mname, mlen, "\": ", 2); + + tmper = elm->type->op->jer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK("}", 1); + // ASN__CALLBACK3("</", 2, mname, mlen, ">", 1); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SEQUENCE.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE.c
Changed
@@ -28,6 +28,11 @@ 0, 0, #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) + SEQUENCE_encode_jer, +#else + 0, +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ #if !defined(ASN_DISABLE_OER_SUPPORT) SEQUENCE_decode_oer, SEQUENCE_encode_oer,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SEQUENCE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE.h
Changed
@@ -64,6 +64,10 @@ xer_type_encoder_f SEQUENCE_encode_xer; #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) +jer_type_encoder_f SEQUENCE_encode_jer; +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ + #if !defined(ASN_DISABLE_OER_SUPPORT) oer_type_decoder_f SEQUENCE_decode_oer; oer_type_encoder_f SEQUENCE_encode_oer;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF.c
Changed
@@ -29,6 +29,11 @@ 0, 0, #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) + SEQUENCE_OF_encode_jer, +#else + 0, +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ #if !defined(ASN_DISABLE_OER_SUPPORT) SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */ SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF.h
Changed
@@ -36,6 +36,10 @@ xer_type_encoder_f SEQUENCE_OF_encode_xer; #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) +jer_type_encoder_f SEQUENCE_OF_encode_jer; +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ + #if !defined(ASN_DISABLE_OER_SUPPORT) #define SEQUENCE_OF_decode_oer SET_OF_decode_oer #define SEQUENCE_OF_encode_oer SET_OF_encode_oer
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF_aper.c
Changed
@@ -54,7 +54,7 @@ */ if (ct->lower_bound == ct->upper_bound && ct->upper_bound < 65536) { /* No length determinant */ - } else if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound, 0) < 0) + } else if (aper_put_length(po, ct->lower_bound, ct->upper_bound, list->count - ct->lower_bound, 0) < 0) ASN__ENCODE_FAILED; } @@ -65,7 +65,7 @@ if(ct && ct->effective_bits >= 0) { mayEncode = list->count; } else { - mayEncode = aper_put_length(po, -1, list->count - seq, &need_eom); + mayEncode = aper_put_length(po, -1, -1, list->count - seq, &need_eom); if(mayEncode < 0) ASN__ENCODE_FAILED; } @@ -79,7 +79,7 @@ ASN__ENCODE_FAILED; } - 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 */ }
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE_OF_jer.c
Added
@@ -0,0 +1,65 @@ +/* + * 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 <constr_SEQUENCE_OF.h> +#include <asn_SEQUENCE_OF.h> + +asn_enc_rval_t +SEQUENCE_OF_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}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 + : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = 0; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + ASN__CALLBACK("", 1); + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + void *memb_ptr = list->arrayi; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("{\"", 2, mname, mlen, "\":", 2); + } + + tmper = elm->type->op->jer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); + ASN__CALLBACK3("\"", 1, name, len, "\"", 1); + } + + if(mname) { + ASN__CALLBACK("}", 1); + } + if (i != list->count - 1) { + ASN__CALLBACK(",", 1); + } + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + ASN__CALLBACK("", 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +}
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SEQUENCE_jer.c
Added
@@ -0,0 +1,84 @@ +/* + * 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 <constr_SEQUENCE.h> +#include <OPEN_TYPE.h> + +asn_enc_rval_t SEQUENCE_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}; + int xcan = 0; + asn_TYPE_descriptor_t *tmp_def_val_td = 0; + void *tmp_def_val = 0; + size_t edx; + + if(!sptr) ASN__ENCODE_FAILED; + + er.encoded = 0; + + int bAddComma = 0; + ASN__CALLBACK("{\n", 2); + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper = {0,0,0}; + asn_TYPE_member_t *elm = &td->elementsedx; + const void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + assert(tmp_def_val == 0); + if(elm->default_value_set) { + if(elm->default_value_set(&tmp_def_val)) { + ASN__ENCODE_FAILED; + } else { + memb_ptr = tmp_def_val; + tmp_def_val_td = elm->type; + } + } else if(elm->optional) { + continue; + } else { + /* Mandatory element is missing */ + ASN__ENCODE_FAILED; + } + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if (bAddComma == 1) { + ASN__CALLBACK(",", 1); + bAddComma = 0; + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("\"", 1, mname, mlen, "\": ", 3); + + /* Print the member itself */ + tmper = elm->type->op->jer_encoder(elm->type, memb_ptr, ilevel + 1, + flags, cb, app_key); + if(tmp_def_val) { + ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + tmp_def_val = 0; + } + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if (edx != td->elements_count - 1) { + bAddComma = 1; + } + } + ASN__CALLBACK("}", 1); + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val); + ASN__ENCODE_FAILED; +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SET_OF.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SET_OF.c
Changed
@@ -28,6 +28,11 @@ 0, 0, #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) + SET_OF_encode_jer, +#else + 0, +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ #if !defined(ASN_DISABLE_OER_SUPPORT) SET_OF_decode_oer, SET_OF_encode_oer,
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SET_OF.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SET_OF.h
Changed
@@ -46,6 +46,10 @@ xer_type_encoder_f SET_OF_encode_xer; #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) +jer_type_encoder_f SET_OF_encode_jer; +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ + #if !defined(ASN_DISABLE_OER_SUPPORT) oer_type_decoder_f SET_OF_decode_oer; oer_type_encoder_f SET_OF_encode_oer;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_SET_OF_aper.c -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SET_OF_aper.c
Changed
@@ -52,7 +52,7 @@ ct->effective_bits)) ASN__ENCODE_FAILED;*/ - if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound, 0) < 0) { + if (aper_put_length(po, ct->lower_bound, ct->upper_bound, list->count - ct->lower_bound, 0) < 0) { ASN__ENCODE_FAILED; } } @@ -70,7 +70,7 @@ may_encode = list->count; } else { may_encode = - aper_put_length(po, -1, list->count - seq, &need_eom); + aper_put_length(po, -1, -1, list->count - seq, &need_eom); if(may_encode < 0) ASN__ENCODE_FAILED; } @@ -81,7 +81,7 @@ break; } } - 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 */ } @@ -141,8 +141,11 @@ do { int i; if(nelems < 0) { - nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, - ct ? ct->effective_bits : -1, &repeat); + if (ct) + nelems = aper_get_length(pd, ct->lower_bound, ct->upper_bound, + ct->effective_bits, &repeat); + else + nelems = aper_get_length(pd, -1, -1, -1, &repeat); ASN_DEBUG("Got to decode %d elements (eff %d)", (int)nelems, (int)(ct ? ct->effective_bits : -1)); if(nelems < 0) ASN__DECODE_STARVED;
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_SET_OF_jer.c
Added
@@ -0,0 +1,144 @@ +/* + * 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 <constr_SET_OF.h> + +typedef struct jer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} jer_tmp_enc_t; + +static int +SET_OF_encode_jer_callback(const void *buffer, size_t size, void *key) { + jer_tmp_enc_t *t = (jer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} + +static int +SET_OF_jer_order(const void *aptr, const void *bptr) { + const jer_tmp_enc_t *a = (const jer_tmp_enc_t *)aptr; + const jer_tmp_enc_t *b = (const jer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + +asn_enc_rval_t +SET_OF_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}; + const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics; + const asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = 0; + jer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) ASN__ENCODE_FAILED; + + if(xcan) { + encs = (jer_tmp_enc_t *)MALLOC(list->count * sizeof(encs0)); + if(!encs) ASN__ENCODE_FAILED; + cb = SET_OF_encode_jer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper = {0,0,0}; + + void *memb_ptr = list->arrayi; + if(!memb_ptr) continue; + + if(encs) { + memset(&encsencs_count, 0, sizeof(encs0)); + app_key = &encsencs_count; + encs_count++; + } + + if(mname) { + if(!xcan) ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("\"", 1, mname, mlen, "\"", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + ASN__TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->op->jer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + ASN__CALLBACK3("<", 1, name, len, "/>", 2); + } + + /* if(mname) { */ + /* ASN__CALLBACK3("</", 2, mname, mlen, ">", 1); */ + /* } */ + + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + if(encs) { + jer_tmp_enc_t *enc = encs; + jer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + er.encoded = 0; + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs0), SET_OF_jer_order); + + for(; enc < end; enc++) { + ASN__CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + ASN__ENCODE_FAILED; +cleanup: + if(encs) { + size_t n; + for(n = 0; n < encs_count; n++) { + FREEMEM(encsn.buffer); + } + FREEMEM(encs); + } + ASN__ENCODED_OK(er); +}
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/constr_TYPE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/common/constr_TYPE.h
Changed
@@ -50,6 +50,12 @@ typedef void (xer_type_encoder_f)(void); #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */ +#if !defined(ASN_DISABLE_JER_SUPPORT) +#include <jer_encoder.h> /* Encoder into JER (JSON, text) */ +#else +typedef void (jer_type_encoder_f)(void); +#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */ + #if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) #include <per_decoder.h> /* Packet Encoding Rules decoder */ #include <per_encoder.h> /* Packet Encoding Rules encoder */ @@ -171,6 +177,7 @@ der_type_encoder_f *der_encoder; /* Canonical DER encoder */ xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ xer_type_encoder_f *xer_encoder; /* Canonical XER encoder */ + jer_type_encoder_f *jer_encoder; /* Generic JER encoder */ oer_type_decoder_f *oer_decoder; /* Generic OER decoder */ oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */ per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/jer_encoder.c
Added
@@ -0,0 +1,69 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include <asn_internal.h> +#include <stdio.h> +#include <errno.h> + +/* + * The JER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +jer_encode(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + asn_enc_rval_t tmper; + const char *mname; + size_t mlen; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + ASN__CALLBACK3("{\n\"", 3, mname, mlen, "\":", 2); + + int xFlag = 0; + tmper = td->op->jer_encoder(td, sptr, 1, xFlag, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK("}", 1); + // ASN__CALLBACK3("</", 2, mname, mlen, ">\n", xcan); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +/* + * This is a helper function for jer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +jer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +jer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) { + asn_enc_rval_t er = {0,0,0}; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = jer_encode(td, sptr, jer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} +
View file
open5gs_2.4.9.tar.xz/lib/asn1c/common/jer_encoder.h
Added
@@ -0,0 +1,81 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _JER_ENCODER_H_ +#define _JER_ENCODER_H_ + +#include <asn_application.h> + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the jer_encode() and (*jer_type_encoder_f), defined below */ +enum jer_encoder_flags_e { + /* Mode of encoding */ + JER_F_BASIC = 0x01, /* BASIC-JER (pretty-printing) */ +}; + +/* + * The JER encoder of any type. May be invoked by the application. + * Produces CANONICAL-JER and BASIC-JER depending on the (jer_flags). + */ +asn_enc_rval_t jer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ +); + +/* + * The variant of the above function which dumps the BASIC-JER (JER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int jer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, + const void *struct_ptr); + +/* + * A helper function that uses JER encoding/decoding to verify that: + * - Both structures encode into the same BASIC JER. + * - Both resulting JER byte streams can be decoded back. + * - Both decoded structures encode into the same BASIC JER (round-trip). + * All of this verifies equivalence between structures and a round-trip. + * ARGUMENTS: + * (opt_debug_stream) - If specified, prints ongoing details. + */ +enum jer_equivalence_e { + JEQ_SUCCESS, /* The only completely positive return value */ + JEQ_FAILURE, /* General failure */ + JEQ_ENCODE1_FAILED, /* First structure JER encoding failed */ + JEQ_ENCODE2_FAILED, /* Second structure JER encoding failed */ + JEQ_DIFFERENT, /* Structures encoded into different JER */ + JEQ_DECODE_FAILED, /* Decode of the JER data failed */ + JEQ_ROUND_TRIP_FAILED /* Bad round-trip */ +}; +enum jer_equivalence_e jer_equivalent( + const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, + const void *struct2, FILE *opt_debug_stream); + +/* + * Type of the generic JER encoder. + */ +typedef asn_enc_rval_t(jer_type_encoder_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum jer_encoder_flags_e jer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _JER_ENCODER_H_ */
View file
open5gs_2.4.8.tar.xz/lib/asn1c/common/meson.build -> open5gs_2.4.9.tar.xz/lib/asn1c/common/meson.build
Changed
@@ -124,6 +124,20 @@ constr_CHOICE_rfill.c constr_SEQUENCE_rfill.c constr_SET_OF_rfill.c + ANY_jer.c + BIT_STRING_jer.c + INTEGER_jer.c + NULL_jer.c + NativeEnumerated_jer.c + NativeInteger_jer.c + OBJECT_IDENTIFIER_jer.c + OCTET_STRING_jer.c + jer_encoder.c + jer_encoder.h + constr_CHOICE_jer.c + constr_SEQUENCE_OF_jer.c + constr_SEQUENCE_jer.c + constr_SET_OF_jer.c '''.split()) libasn1c_common_cc_flags = '-DASN_DISABLE_BER_SUPPORT',
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMF-UE-NGAP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMF-UE-NGAP-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMF_UE_NGAP_ID_free; asn_struct_print_f NGAP_AMF_UE_NGAP_ID_print; asn_constr_check_f NGAP_AMF_UE_NGAP_ID_constraint; +jer_type_encoder_f NGAP_AMF_UE_NGAP_ID_encode_jer; per_type_decoder_f NGAP_AMF_UE_NGAP_ID_decode_aper; per_type_encoder_f NGAP_AMF_UE_NGAP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFName.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFName_free; asn_struct_print_f NGAP_AMFName_print; asn_constr_check_f NGAP_AMFName_constraint; +jer_type_encoder_f NGAP_AMFName_encode_jer; per_type_decoder_f NGAP_AMFName_decode_aper; per_type_encoder_f NGAP_AMFName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFNameUTF8String.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFNameUTF8String.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFNameUTF8String_free; asn_struct_print_f NGAP_AMFNameUTF8String_print; asn_constr_check_f NGAP_AMFNameUTF8String_constraint; +jer_type_encoder_f NGAP_AMFNameUTF8String_encode_jer; per_type_decoder_f NGAP_AMFNameUTF8String_decode_aper; per_type_encoder_f NGAP_AMFNameUTF8String_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFNameVisibleString.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFNameVisibleString.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFNameVisibleString_free; asn_struct_print_f NGAP_AMFNameVisibleString_print; asn_constr_check_f NGAP_AMFNameVisibleString_constraint; +jer_type_encoder_f NGAP_AMFNameVisibleString_encode_jer; per_type_decoder_f NGAP_AMFNameVisibleString_decode_aper; per_type_encoder_f NGAP_AMFNameVisibleString_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFPointer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFPointer.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFPointer_free; asn_struct_print_f NGAP_AMFPointer_print; asn_constr_check_f NGAP_AMFPointer_constraint; +jer_type_encoder_f NGAP_AMFPointer_encode_jer; per_type_decoder_f NGAP_AMFPointer_decode_aper; per_type_encoder_f NGAP_AMFPointer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFRegionID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFRegionID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFRegionID_free; asn_struct_print_f NGAP_AMFRegionID_print; asn_constr_check_f NGAP_AMFRegionID_constraint; +jer_type_encoder_f NGAP_AMFRegionID_encode_jer; per_type_decoder_f NGAP_AMFRegionID_decode_aper; per_type_encoder_f NGAP_AMFRegionID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AMFSetID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AMFSetID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AMFSetID_free; asn_struct_print_f NGAP_AMFSetID_print; asn_constr_check_f NGAP_AMFSetID_constraint; +jer_type_encoder_f NGAP_AMFSetID_encode_jer; per_type_decoder_f NGAP_AMFSetID_decode_aper; per_type_encoder_f NGAP_AMFSetID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AdditionalQosFlowInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AdditionalQosFlowInformation.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f AdditionalQosFlowInformation_free; asn_struct_print_f AdditionalQosFlowInformation_print; asn_constr_check_f AdditionalQosFlowInformation_constraint; +jer_type_encoder_f AdditionalQosFlowInformation_encode_jer; per_type_decoder_f AdditionalQosFlowInformation_decode_aper; per_type_encoder_f AdditionalQosFlowInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AlternativeQoSParaSetIndex.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AlternativeQoSParaSetIndex.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AlternativeQoSParaSetIndex_free; asn_struct_print_f NGAP_AlternativeQoSParaSetIndex_print; asn_constr_check_f NGAP_AlternativeQoSParaSetIndex_constraint; +jer_type_encoder_f NGAP_AlternativeQoSParaSetIndex_encode_jer; per_type_decoder_f NGAP_AlternativeQoSParaSetIndex_decode_aper; per_type_encoder_f NGAP_AlternativeQoSParaSetIndex_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AlternativeQoSParaSetNotifyIndex.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AlternativeQoSParaSetNotifyIndex.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_AlternativeQoSParaSetNotifyIndex_free; asn_struct_print_f NGAP_AlternativeQoSParaSetNotifyIndex_print; asn_constr_check_f NGAP_AlternativeQoSParaSetNotifyIndex_constraint; +jer_type_encoder_f NGAP_AlternativeQoSParaSetNotifyIndex_encode_jer; per_type_decoder_f NGAP_AlternativeQoSParaSetNotifyIndex_decode_aper; per_type_encoder_f NGAP_AlternativeQoSParaSetNotifyIndex_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AuthenticatedIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AuthenticatedIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_AuthenticatedIndication_free; asn_struct_print_f NGAP_AuthenticatedIndication_print; asn_constr_check_f NGAP_AuthenticatedIndication_constraint; +jer_type_encoder_f NGAP_AuthenticatedIndication_encode_jer; per_type_decoder_f NGAP_AuthenticatedIndication_decode_aper; per_type_encoder_f NGAP_AuthenticatedIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_AveragingWindow.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_AveragingWindow.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_AveragingWindow_free; asn_struct_print_f NGAP_AveragingWindow_print; asn_constr_check_f NGAP_AveragingWindow_constraint; +jer_type_encoder_f NGAP_AveragingWindow_encode_jer; per_type_decoder_f NGAP_AveragingWindow_decode_aper; per_type_encoder_f NGAP_AveragingWindow_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_BitRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_BitRate.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_BitRate_free; asn_struct_print_f NGAP_BitRate_print; asn_constr_check_f NGAP_BitRate_constraint; +jer_type_encoder_f NGAP_BitRate_encode_jer; per_type_decoder_f NGAP_BitRate_decode_aper; per_type_encoder_f NGAP_BitRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_BluetoothMeasConfig.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_BluetoothMeasConfig.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f BluetoothMeasConfig_free; asn_struct_print_f BluetoothMeasConfig_print; asn_constr_check_f BluetoothMeasConfig_constraint; +jer_type_encoder_f BluetoothMeasConfig_encode_jer; per_type_decoder_f BluetoothMeasConfig_decode_aper; per_type_encoder_f BluetoothMeasConfig_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_BluetoothName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_BluetoothName.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_BluetoothName_free; asn_struct_print_f NGAP_BluetoothName_print; asn_constr_check_f NGAP_BluetoothName_constraint; +jer_type_encoder_f NGAP_BluetoothName_encode_jer; per_type_decoder_f NGAP_BluetoothName_decode_aper; per_type_encoder_f NGAP_BluetoothName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_BurstArrivalTime.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_BurstArrivalTime.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_BurstArrivalTime_free; asn_struct_print_f NGAP_BurstArrivalTime_print; asn_constr_check_f NGAP_BurstArrivalTime_constraint; +jer_type_encoder_f NGAP_BurstArrivalTime_encode_jer; per_type_decoder_f NGAP_BurstArrivalTime_decode_aper; per_type_encoder_f NGAP_BurstArrivalTime_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CAG-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CAG-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_CAG_ID_free; asn_struct_print_f NGAP_CAG_ID_print; asn_constr_check_f NGAP_CAG_ID_constraint; +jer_type_encoder_f NGAP_CAG_ID_encode_jer; per_type_decoder_f NGAP_CAG_ID_decode_aper; per_type_encoder_f NGAP_CAG_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CEmodeBSupport-Indicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CEmodeBSupport-Indicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_CEmodeBSupport_Indicator_free; asn_struct_print_f NGAP_CEmodeBSupport_Indicator_print; asn_constr_check_f NGAP_CEmodeBSupport_Indicator_constraint; +jer_type_encoder_f NGAP_CEmodeBSupport_Indicator_encode_jer; per_type_decoder_f NGAP_CEmodeBSupport_Indicator_decode_aper; per_type_encoder_f NGAP_CEmodeBSupport_Indicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CEmodeBrestricted.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CEmodeBrestricted.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_CEmodeBrestricted_free; asn_struct_print_f NGAP_CEmodeBrestricted_print; asn_constr_check_f NGAP_CEmodeBrestricted_constraint; +jer_type_encoder_f NGAP_CEmodeBrestricted_encode_jer; per_type_decoder_f NGAP_CEmodeBrestricted_decode_aper; per_type_encoder_f NGAP_CEmodeBrestricted_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CNTypeRestrictionsForServing.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CNTypeRestrictionsForServing.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_CNTypeRestrictionsForServing_free; asn_struct_print_f NGAP_CNTypeRestrictionsForServing_print; asn_constr_check_f NGAP_CNTypeRestrictionsForServing_constraint; +jer_type_encoder_f NGAP_CNTypeRestrictionsForServing_encode_jer; per_type_decoder_f NGAP_CNTypeRestrictionsForServing_decode_aper; per_type_encoder_f NGAP_CNTypeRestrictionsForServing_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CancelAllWarningMessages.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CancelAllWarningMessages.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_CancelAllWarningMessages_free; asn_struct_print_f NGAP_CancelAllWarningMessages_print; asn_constr_check_f NGAP_CancelAllWarningMessages_constraint; +jer_type_encoder_f NGAP_CancelAllWarningMessages_encode_jer; per_type_decoder_f NGAP_CancelAllWarningMessages_decode_aper; per_type_encoder_f NGAP_CancelAllWarningMessages_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CauseMisc.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CauseMisc.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f CauseMisc_free; asn_struct_print_f CauseMisc_print; asn_constr_check_f CauseMisc_constraint; +jer_type_encoder_f CauseMisc_encode_jer; per_type_decoder_f CauseMisc_decode_aper; per_type_encoder_f CauseMisc_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CauseNas.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CauseNas.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f CauseNas_free; asn_struct_print_f CauseNas_print; asn_constr_check_f CauseNas_constraint; +jer_type_encoder_f CauseNas_encode_jer; per_type_decoder_f CauseNas_decode_aper; per_type_encoder_f CauseNas_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CauseProtocol.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CauseProtocol.h
Changed
@@ -42,6 +42,7 @@ asn_struct_free_f CauseProtocol_free; asn_struct_print_f CauseProtocol_print; asn_constr_check_f CauseProtocol_constraint; +jer_type_encoder_f CauseProtocol_encode_jer; per_type_decoder_f CauseProtocol_decode_aper; per_type_encoder_f CauseProtocol_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CauseRadioNetwork.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CauseRadioNetwork.h
Changed
@@ -87,6 +87,7 @@ asn_struct_free_f CauseRadioNetwork_free; asn_struct_print_f CauseRadioNetwork_print; asn_constr_check_f CauseRadioNetwork_constraint; +jer_type_encoder_f CauseRadioNetwork_encode_jer; per_type_decoder_f CauseRadioNetwork_decode_aper; per_type_encoder_f CauseRadioNetwork_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CauseTransport.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CauseTransport.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f CauseTransport_free; asn_struct_print_f CauseTransport_print; asn_constr_check_f CauseTransport_constraint; +jer_type_encoder_f CauseTransport_encode_jer; per_type_decoder_f CauseTransport_decode_aper; per_type_encoder_f CauseTransport_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CellSize.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CellSize.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f CellSize_free; asn_struct_print_f CellSize_print; asn_constr_check_f CellSize_constraint; +jer_type_encoder_f CellSize_encode_jer; per_type_decoder_f CellSize_decode_aper; per_type_encoder_f CellSize_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CommonNetworkInstance.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CommonNetworkInstance.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_CommonNetworkInstance_free; asn_struct_print_f NGAP_CommonNetworkInstance_print; asn_constr_check_f NGAP_CommonNetworkInstance_constraint; +jer_type_encoder_f NGAP_CommonNetworkInstance_encode_jer; per_type_decoder_f NGAP_CommonNetworkInstance_decode_aper; per_type_encoder_f NGAP_CommonNetworkInstance_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ConcurrentWarningMessageInd.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ConcurrentWarningMessageInd.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_ConcurrentWarningMessageInd_free; asn_struct_print_f NGAP_ConcurrentWarningMessageInd_print; asn_constr_check_f NGAP_ConcurrentWarningMessageInd_constraint; +jer_type_encoder_f NGAP_ConcurrentWarningMessageInd_encode_jer; per_type_decoder_f NGAP_ConcurrentWarningMessageInd_decode_aper; per_type_encoder_f NGAP_ConcurrentWarningMessageInd_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ConfidentialityProtectionIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ConfidentialityProtectionIndication.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f ConfidentialityProtectionIndication_free; asn_struct_print_f ConfidentialityProtectionIndication_print; asn_constr_check_f ConfidentialityProtectionIndication_constraint; +jer_type_encoder_f ConfidentialityProtectionIndication_encode_jer; per_type_decoder_f ConfidentialityProtectionIndication_decode_aper; per_type_encoder_f ConfidentialityProtectionIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ConfidentialityProtectionResult.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ConfidentialityProtectionResult.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f ConfidentialityProtectionResult_free; asn_struct_print_f ConfidentialityProtectionResult_print; asn_constr_check_f ConfidentialityProtectionResult_constraint; +jer_type_encoder_f ConfidentialityProtectionResult_encode_jer; per_type_decoder_f ConfidentialityProtectionResult_decode_aper; per_type_encoder_f ConfidentialityProtectionResult_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ConfiguredNSSAI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ConfiguredNSSAI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ConfiguredNSSAI_free; asn_struct_print_f NGAP_ConfiguredNSSAI_print; asn_constr_check_f NGAP_ConfiguredNSSAI_constraint; +jer_type_encoder_f NGAP_ConfiguredNSSAI_encode_jer; per_type_decoder_f NGAP_ConfiguredNSSAI_decode_aper; per_type_encoder_f NGAP_ConfiguredNSSAI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ConfiguredTACIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ConfiguredTACIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_ConfiguredTACIndication_free; asn_struct_print_f NGAP_ConfiguredTACIndication_print; asn_constr_check_f NGAP_ConfiguredTACIndication_constraint; +jer_type_encoder_f NGAP_ConfiguredTACIndication_encode_jer; per_type_decoder_f NGAP_ConfiguredTACIndication_decode_aper; per_type_encoder_f NGAP_ConfiguredTACIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_CoverageEnhancementLevel.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_CoverageEnhancementLevel.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_CoverageEnhancementLevel_free; asn_struct_print_f NGAP_CoverageEnhancementLevel_print; asn_constr_check_f NGAP_CoverageEnhancementLevel_constraint; +jer_type_encoder_f NGAP_CoverageEnhancementLevel_encode_jer; per_type_decoder_f NGAP_CoverageEnhancementLevel_decode_aper; per_type_encoder_f NGAP_CoverageEnhancementLevel_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Criticality.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Criticality.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f Criticality_free; asn_struct_print_f Criticality_print; asn_constr_check_f Criticality_constraint; +jer_type_encoder_f Criticality_encode_jer; per_type_decoder_f Criticality_decode_aper; per_type_encoder_f Criticality_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DL-NAS-MAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DL-NAS-MAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_DL_NAS_MAC_free; asn_struct_print_f NGAP_DL_NAS_MAC_print; asn_constr_check_f NGAP_DL_NAS_MAC_constraint; +jer_type_encoder_f NGAP_DL_NAS_MAC_encode_jer; per_type_decoder_f NGAP_DL_NAS_MAC_decode_aper; per_type_encoder_f NGAP_DL_NAS_MAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DL-NGU-TNLInformationReused.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DL-NGU-TNLInformationReused.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f DL_NGU_TNLInformationReused_free; asn_struct_print_f DL_NGU_TNLInformationReused_print; asn_constr_check_f DL_NGU_TNLInformationReused_constraint; +jer_type_encoder_f DL_NGU_TNLInformationReused_encode_jer; per_type_decoder_f DL_NGU_TNLInformationReused_decode_aper; per_type_encoder_f DL_NGU_TNLInformationReused_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DLForwarding.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DLForwarding.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f DLForwarding_free; asn_struct_print_f DLForwarding_print; asn_constr_check_f DLForwarding_constraint; +jer_type_encoder_f DLForwarding_encode_jer; per_type_decoder_f DLForwarding_decode_aper; per_type_encoder_f DLForwarding_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DRB-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DRB-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_DRB_ID_free; asn_struct_print_f NGAP_DRB_ID_print; asn_constr_check_f NGAP_DRB_ID_constraint; +jer_type_encoder_f NGAP_DRB_ID_encode_jer; per_type_decoder_f NGAP_DRB_ID_decode_aper; per_type_encoder_f NGAP_DRB_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DataCodingScheme.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DataCodingScheme.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_DataCodingScheme_free; asn_struct_print_f NGAP_DataCodingScheme_print; asn_constr_check_f NGAP_DataCodingScheme_constraint; +jer_type_encoder_f NGAP_DataCodingScheme_encode_jer; per_type_decoder_f NGAP_DataCodingScheme_decode_aper; per_type_encoder_f NGAP_DataCodingScheme_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DataForwardingAccepted.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DataForwardingAccepted.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f DataForwardingAccepted_free; asn_struct_print_f DataForwardingAccepted_print; asn_constr_check_f DataForwardingAccepted_constraint; +jer_type_encoder_f DataForwardingAccepted_encode_jer; per_type_decoder_f DataForwardingAccepted_decode_aper; per_type_encoder_f DataForwardingAccepted_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DataForwardingNotPossible.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DataForwardingNotPossible.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_DataForwardingNotPossible_free; asn_struct_print_f NGAP_DataForwardingNotPossible_print; asn_constr_check_f NGAP_DataForwardingNotPossible_constraint; +jer_type_encoder_f NGAP_DataForwardingNotPossible_encode_jer; per_type_decoder_f NGAP_DataForwardingNotPossible_decode_aper; per_type_encoder_f NGAP_DataForwardingNotPossible_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DelayCritical.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DelayCritical.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f DelayCritical_free; asn_struct_print_f DelayCritical_print; asn_constr_check_f DelayCritical_constraint; +jer_type_encoder_f DelayCritical_encode_jer; per_type_decoder_f DelayCritical_decode_aper; per_type_encoder_f DelayCritical_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_DirectForwardingPathAvailability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_DirectForwardingPathAvailability.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f DirectForwardingPathAvailability_free; asn_struct_print_f DirectForwardingPathAvailability_print; asn_constr_check_f DirectForwardingPathAvailability_constraint; +jer_type_encoder_f DirectForwardingPathAvailability_encode_jer; per_type_decoder_f DirectForwardingPathAvailability_decode_aper; per_type_encoder_f DirectForwardingPathAvailability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_E-RAB-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_E-RAB-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_E_RAB_ID_free; asn_struct_print_f NGAP_E_RAB_ID_print; asn_constr_check_f NGAP_E_RAB_ID_constraint; +jer_type_encoder_f NGAP_E_RAB_ID_encode_jer; per_type_decoder_f NGAP_E_RAB_ID_decode_aper; per_type_encoder_f NGAP_E_RAB_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EDT-Session.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EDT-Session.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_EDT_Session_free; asn_struct_print_f NGAP_EDT_Session_print; asn_constr_check_f NGAP_EDT_Session_constraint; +jer_type_encoder_f NGAP_EDT_Session_encode_jer; per_type_decoder_f NGAP_EDT_Session_decode_aper; per_type_encoder_f NGAP_EDT_Session_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EN-DCSONConfigurationTransfer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EN-DCSONConfigurationTransfer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_EN_DCSONConfigurationTransfer_free; asn_struct_print_f NGAP_EN_DCSONConfigurationTransfer_print; asn_constr_check_f NGAP_EN_DCSONConfigurationTransfer_constraint; +jer_type_encoder_f NGAP_EN_DCSONConfigurationTransfer_encode_jer; per_type_decoder_f NGAP_EN_DCSONConfigurationTransfer_decode_aper; per_type_encoder_f NGAP_EN_DCSONConfigurationTransfer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EPS-TAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EPS-TAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_EPS_TAC_free; asn_struct_print_f NGAP_EPS_TAC_print; asn_constr_check_f NGAP_EPS_TAC_constraint; +jer_type_encoder_f NGAP_EPS_TAC_encode_jer; per_type_decoder_f NGAP_EPS_TAC_decode_aper; per_type_encoder_f NGAP_EPS_TAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EUTRACellIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EUTRACellIdentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_EUTRACellIdentity_free; asn_struct_print_f NGAP_EUTRACellIdentity_print; asn_constr_check_f NGAP_EUTRACellIdentity_constraint; +jer_type_encoder_f NGAP_EUTRACellIdentity_encode_jer; per_type_decoder_f NGAP_EUTRACellIdentity_decode_aper; per_type_encoder_f NGAP_EUTRACellIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EUTRAencryptionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EUTRAencryptionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_EUTRAencryptionAlgorithms_free; asn_struct_print_f NGAP_EUTRAencryptionAlgorithms_print; asn_constr_check_f NGAP_EUTRAencryptionAlgorithms_constraint; +jer_type_encoder_f NGAP_EUTRAencryptionAlgorithms_encode_jer; per_type_decoder_f NGAP_EUTRAencryptionAlgorithms_decode_aper; per_type_encoder_f NGAP_EUTRAencryptionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EUTRAintegrityProtectionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EUTRAintegrityProtectionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_EUTRAintegrityProtectionAlgorithms_free; asn_struct_print_f NGAP_EUTRAintegrityProtectionAlgorithms_print; asn_constr_check_f NGAP_EUTRAintegrityProtectionAlgorithms_constraint; +jer_type_encoder_f NGAP_EUTRAintegrityProtectionAlgorithms_encode_jer; per_type_decoder_f NGAP_EUTRAintegrityProtectionAlgorithms_decode_aper; per_type_encoder_f NGAP_EUTRAintegrityProtectionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EmergencyAreaID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EmergencyAreaID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_EmergencyAreaID_free; asn_struct_print_f NGAP_EmergencyAreaID_print; asn_constr_check_f NGAP_EmergencyAreaID_constraint; +jer_type_encoder_f NGAP_EmergencyAreaID_encode_jer; per_type_decoder_f NGAP_EmergencyAreaID_decode_aper; per_type_encoder_f NGAP_EmergencyAreaID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EmergencyFallbackRequestIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EmergencyFallbackRequestIndicator.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f EmergencyFallbackRequestIndicator_free; asn_struct_print_f EmergencyFallbackRequestIndicator_print; asn_constr_check_f EmergencyFallbackRequestIndicator_constraint; +jer_type_encoder_f EmergencyFallbackRequestIndicator_encode_jer; per_type_decoder_f EmergencyFallbackRequestIndicator_decode_aper; per_type_encoder_f EmergencyFallbackRequestIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EmergencyServiceTargetCN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EmergencyServiceTargetCN.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f EmergencyServiceTargetCN_free; asn_struct_print_f EmergencyServiceTargetCN_print; asn_constr_check_f EmergencyServiceTargetCN_constraint; +jer_type_encoder_f EmergencyServiceTargetCN_encode_jer; per_type_decoder_f EmergencyServiceTargetCN_decode_aper; per_type_encoder_f EmergencyServiceTargetCN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EndIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EndIndication.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_EndIndication_free; asn_struct_print_f NGAP_EndIndication_print; asn_constr_check_f NGAP_EndIndication_constraint; +jer_type_encoder_f NGAP_EndIndication_encode_jer; per_type_decoder_f NGAP_EndIndication_decode_aper; per_type_encoder_f NGAP_EndIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Enhanced-CoverageRestriction.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Enhanced-CoverageRestriction.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_Enhanced_CoverageRestriction_free; asn_struct_print_f NGAP_Enhanced_CoverageRestriction_print; asn_constr_check_f NGAP_Enhanced_CoverageRestriction_constraint; +jer_type_encoder_f NGAP_Enhanced_CoverageRestriction_encode_jer; per_type_decoder_f NGAP_Enhanced_CoverageRestriction_decode_aper; per_type_encoder_f NGAP_Enhanced_CoverageRestriction_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_EventType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_EventType.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f EventType_free; asn_struct_print_f EventType_print; asn_constr_check_f EventType_constraint; +jer_type_encoder_f EventType_encode_jer; per_type_decoder_f EventType_decode_aper; per_type_encoder_f EventType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExpectedActivityPeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExpectedActivityPeriod.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ExpectedActivityPeriod_free; asn_struct_print_f NGAP_ExpectedActivityPeriod_print; asn_constr_check_f NGAP_ExpectedActivityPeriod_constraint; +jer_type_encoder_f NGAP_ExpectedActivityPeriod_encode_jer; per_type_decoder_f NGAP_ExpectedActivityPeriod_decode_aper; per_type_encoder_f NGAP_ExpectedActivityPeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExpectedHOInterval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExpectedHOInterval.h
Changed
@@ -42,6 +42,7 @@ asn_struct_free_f ExpectedHOInterval_free; asn_struct_print_f ExpectedHOInterval_print; asn_constr_check_f ExpectedHOInterval_constraint; +jer_type_encoder_f ExpectedHOInterval_encode_jer; per_type_decoder_f ExpectedHOInterval_decode_aper; per_type_encoder_f ExpectedHOInterval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExpectedIdlePeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExpectedIdlePeriod.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ExpectedIdlePeriod_free; asn_struct_print_f NGAP_ExpectedIdlePeriod_print; asn_constr_check_f NGAP_ExpectedIdlePeriod_constraint; +jer_type_encoder_f NGAP_ExpectedIdlePeriod_encode_jer; per_type_decoder_f NGAP_ExpectedIdlePeriod_decode_aper; per_type_encoder_f NGAP_ExpectedIdlePeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExpectedUEMobility.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExpectedUEMobility.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f ExpectedUEMobility_free; asn_struct_print_f ExpectedUEMobility_print; asn_constr_check_f ExpectedUEMobility_constraint; +jer_type_encoder_f ExpectedUEMobility_encode_jer; per_type_decoder_f ExpectedUEMobility_decode_aper; per_type_encoder_f ExpectedUEMobility_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Extended-ConnectedTime.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Extended-ConnectedTime.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_Extended_ConnectedTime_free; asn_struct_print_f NGAP_Extended_ConnectedTime_print; asn_constr_check_f NGAP_Extended_ConnectedTime_constraint; +jer_type_encoder_f NGAP_Extended_ConnectedTime_encode_jer; per_type_decoder_f NGAP_Extended_ConnectedTime_decode_aper; per_type_encoder_f NGAP_Extended_ConnectedTime_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExtendedPacketDelayBudget.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExtendedPacketDelayBudget.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ExtendedPacketDelayBudget_free; asn_struct_print_f NGAP_ExtendedPacketDelayBudget_print; asn_constr_check_f NGAP_ExtendedPacketDelayBudget_constraint; +jer_type_encoder_f NGAP_ExtendedPacketDelayBudget_encode_jer; per_type_decoder_f NGAP_ExtendedPacketDelayBudget_decode_aper; per_type_encoder_f NGAP_ExtendedPacketDelayBudget_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExtendedRNC-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExtendedRNC-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ExtendedRNC_ID_free; asn_struct_print_f NGAP_ExtendedRNC_ID_print; asn_constr_check_f NGAP_ExtendedRNC_ID_constraint; +jer_type_encoder_f NGAP_ExtendedRNC_ID_encode_jer; per_type_decoder_f NGAP_ExtendedRNC_ID_decode_aper; per_type_encoder_f NGAP_ExtendedRNC_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ExtendedUEIdentityIndexValue.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ExtendedUEIdentityIndexValue.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_ExtendedUEIdentityIndexValue_free; asn_struct_print_f NGAP_ExtendedUEIdentityIndexValue_print; asn_constr_check_f NGAP_ExtendedUEIdentityIndexValue_constraint; +jer_type_encoder_f NGAP_ExtendedUEIdentityIndexValue_encode_jer; per_type_decoder_f NGAP_ExtendedUEIdentityIndexValue_decode_aper; per_type_encoder_f NGAP_ExtendedUEIdentityIndexValue_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_FiveG-TMSI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_FiveG-TMSI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_FiveG_TMSI_free; asn_struct_print_f NGAP_FiveG_TMSI_print; asn_constr_check_f NGAP_FiveG_TMSI_constraint; +jer_type_encoder_f NGAP_FiveG_TMSI_encode_jer; per_type_decoder_f NGAP_FiveG_TMSI_decode_aper; per_type_encoder_f NGAP_FiveG_TMSI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_FiveQI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_FiveQI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_FiveQI_free; asn_struct_print_f NGAP_FiveQI_print; asn_constr_check_f NGAP_FiveQI_constraint; +jer_type_encoder_f NGAP_FiveQI_encode_jer; per_type_decoder_f NGAP_FiveQI_decode_aper; per_type_encoder_f NGAP_FiveQI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_GNBSetID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_GNBSetID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_GNBSetID_free; asn_struct_print_f NGAP_GNBSetID_print; asn_constr_check_f NGAP_GNBSetID_constraint; +jer_type_encoder_f NGAP_GNBSetID_encode_jer; per_type_decoder_f NGAP_GNBSetID_decode_aper; per_type_encoder_f NGAP_GNBSetID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_GTP-TEID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_GTP-TEID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_GTP_TEID_free; asn_struct_print_f NGAP_GTP_TEID_print; asn_constr_check_f NGAP_GTP_TEID_constraint; +jer_type_encoder_f NGAP_GTP_TEID_encode_jer; per_type_decoder_f NGAP_GTP_TEID_decode_aper; per_type_encoder_f NGAP_GTP_TEID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_GUAMIType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_GUAMIType.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_GUAMIType_free; asn_struct_print_f NGAP_GUAMIType_print; asn_constr_check_f NGAP_GUAMIType_constraint; +jer_type_encoder_f NGAP_GUAMIType_encode_jer; per_type_decoder_f NGAP_GUAMIType_decode_aper; per_type_encoder_f NGAP_GUAMIType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_GlobalCable-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_GlobalCable-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_GlobalCable_ID_free; asn_struct_print_f NGAP_GlobalCable_ID_print; asn_constr_check_f NGAP_GlobalCable_ID_constraint; +jer_type_encoder_f NGAP_GlobalCable_ID_encode_jer; per_type_decoder_f NGAP_GlobalCable_ID_decode_aper; per_type_encoder_f NGAP_GlobalCable_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_GlobalLineIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_GlobalLineIdentity.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_GlobalLineIdentity_free; asn_struct_print_f NGAP_GlobalLineIdentity_print; asn_constr_check_f NGAP_GlobalLineIdentity_constraint; +jer_type_encoder_f NGAP_GlobalLineIdentity_encode_jer; per_type_decoder_f NGAP_GlobalLineIdentity_decode_aper; per_type_encoder_f NGAP_GlobalLineIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_HFCNode-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_HFCNode-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_HFCNode_ID_free; asn_struct_print_f NGAP_HFCNode_ID_print; asn_constr_check_f NGAP_HFCNode_ID_constraint; +jer_type_encoder_f NGAP_HFCNode_ID_encode_jer; per_type_decoder_f NGAP_HFCNode_ID_decode_aper; per_type_encoder_f NGAP_HFCNode_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_HandoverFlag.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_HandoverFlag.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_HandoverFlag_free; asn_struct_print_f NGAP_HandoverFlag_print; asn_constr_check_f NGAP_HandoverFlag_constraint; +jer_type_encoder_f NGAP_HandoverFlag_encode_jer; per_type_decoder_f NGAP_HandoverFlag_decode_aper; per_type_encoder_f NGAP_HandoverFlag_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_HandoverType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_HandoverType.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NGAP_HandoverType_free; asn_struct_print_f NGAP_HandoverType_print; asn_constr_check_f NGAP_HandoverType_constraint; +jer_type_encoder_f NGAP_HandoverType_encode_jer; per_type_decoder_f NGAP_HandoverType_decode_aper; per_type_encoder_f NGAP_HandoverType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Hysteresis.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Hysteresis.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_Hysteresis_free; asn_struct_print_f NGAP_Hysteresis_print; asn_constr_check_f NGAP_Hysteresis_constraint; +jer_type_encoder_f NGAP_Hysteresis_encode_jer; per_type_decoder_f NGAP_Hysteresis_decode_aper; per_type_encoder_f NGAP_Hysteresis_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IAB-Authorized.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IAB-Authorized.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_IAB_Authorized_free; asn_struct_print_f NGAP_IAB_Authorized_print; asn_constr_check_f NGAP_IAB_Authorized_constraint; +jer_type_encoder_f NGAP_IAB_Authorized_encode_jer; per_type_decoder_f NGAP_IAB_Authorized_decode_aper; per_type_encoder_f NGAP_IAB_Authorized_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IAB-Supported.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IAB-Supported.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_IAB_Supported_free; asn_struct_print_f NGAP_IAB_Supported_print; asn_constr_check_f NGAP_IAB_Supported_constraint; +jer_type_encoder_f NGAP_IAB_Supported_encode_jer; per_type_decoder_f NGAP_IAB_Supported_decode_aper; per_type_encoder_f NGAP_IAB_Supported_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IABNodeIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IABNodeIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_IABNodeIndication_free; asn_struct_print_f NGAP_IABNodeIndication_print; asn_constr_check_f NGAP_IABNodeIndication_constraint; +jer_type_encoder_f NGAP_IABNodeIndication_encode_jer; per_type_decoder_f NGAP_IABNodeIndication_decode_aper; per_type_encoder_f NGAP_IABNodeIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IMSVoiceSupportIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IMSVoiceSupportIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_IMSVoiceSupportIndicator_free; asn_struct_print_f NGAP_IMSVoiceSupportIndicator_print; asn_constr_check_f NGAP_IMSVoiceSupportIndicator_constraint; +jer_type_encoder_f NGAP_IMSVoiceSupportIndicator_encode_jer; per_type_decoder_f NGAP_IMSVoiceSupportIndicator_decode_aper; per_type_encoder_f NGAP_IMSVoiceSupportIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IndexToRFSP.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IndexToRFSP.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_IndexToRFSP_free; asn_struct_print_f NGAP_IndexToRFSP_print; asn_constr_check_f NGAP_IndexToRFSP_constraint; +jer_type_encoder_f NGAP_IndexToRFSP_encode_jer; per_type_decoder_f NGAP_IndexToRFSP_decode_aper; per_type_encoder_f NGAP_IndexToRFSP_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IntegrityProtectionIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IntegrityProtectionIndication.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f IntegrityProtectionIndication_free; asn_struct_print_f IntegrityProtectionIndication_print; asn_constr_check_f IntegrityProtectionIndication_constraint; +jer_type_encoder_f IntegrityProtectionIndication_encode_jer; per_type_decoder_f IntegrityProtectionIndication_decode_aper; per_type_encoder_f IntegrityProtectionIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IntegrityProtectionResult.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IntegrityProtectionResult.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f IntegrityProtectionResult_free; asn_struct_print_f IntegrityProtectionResult_print; asn_constr_check_f IntegrityProtectionResult_constraint; +jer_type_encoder_f IntegrityProtectionResult_encode_jer; per_type_decoder_f IntegrityProtectionResult_decode_aper; per_type_encoder_f IntegrityProtectionResult_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_IntendedNumberOfPagingAttempts.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_IntendedNumberOfPagingAttempts.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_IntendedNumberOfPagingAttempts_free; asn_struct_print_f NGAP_IntendedNumberOfPagingAttempts_print; asn_constr_check_f NGAP_IntendedNumberOfPagingAttempts_constraint; +jer_type_encoder_f NGAP_IntendedNumberOfPagingAttempts_encode_jer; per_type_decoder_f NGAP_IntendedNumberOfPagingAttempts_decode_aper; per_type_encoder_f NGAP_IntendedNumberOfPagingAttempts_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_InterfacesToTrace.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_InterfacesToTrace.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_InterfacesToTrace_free; asn_struct_print_f NGAP_InterfacesToTrace_print; asn_constr_check_f NGAP_InterfacesToTrace_constraint; +jer_type_encoder_f NGAP_InterfacesToTrace_encode_jer; per_type_decoder_f NGAP_InterfacesToTrace_decode_aper; per_type_encoder_f NGAP_InterfacesToTrace_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_LAC_free; asn_struct_print_f NGAP_LAC_print; asn_constr_check_f NGAP_LAC_constraint; +jer_type_encoder_f NGAP_LAC_encode_jer; per_type_decoder_f NGAP_LAC_decode_aper; per_type_encoder_f NGAP_LAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LTEM-Indication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LTEM-Indication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_LTEM_Indication_free; asn_struct_print_f NGAP_LTEM_Indication_print; asn_constr_check_f NGAP_LTEM_Indication_constraint; +jer_type_encoder_f NGAP_LTEM_Indication_encode_jer; per_type_decoder_f NGAP_LTEM_Indication_decode_aper; per_type_encoder_f NGAP_LTEM_Indication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LTEUERLFReportContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LTEUERLFReportContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_LTEUERLFReportContainer_free; asn_struct_print_f NGAP_LTEUERLFReportContainer_print; asn_constr_check_f NGAP_LTEUERLFReportContainer_constraint; +jer_type_encoder_f NGAP_LTEUERLFReportContainer_encode_jer; per_type_decoder_f NGAP_LTEUERLFReportContainer_decode_aper; per_type_encoder_f NGAP_LTEUERLFReportContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedEUTRANCellInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedEUTRANCellInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_LastVisitedEUTRANCellInformation_free; asn_struct_print_f NGAP_LastVisitedEUTRANCellInformation_print; asn_constr_check_f NGAP_LastVisitedEUTRANCellInformation_constraint; +jer_type_encoder_f NGAP_LastVisitedEUTRANCellInformation_encode_jer; per_type_decoder_f NGAP_LastVisitedEUTRANCellInformation_decode_aper; per_type_encoder_f NGAP_LastVisitedEUTRANCellInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedGERANCellInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedGERANCellInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_LastVisitedGERANCellInformation_free; asn_struct_print_f NGAP_LastVisitedGERANCellInformation_print; asn_constr_check_f NGAP_LastVisitedGERANCellInformation_constraint; +jer_type_encoder_f NGAP_LastVisitedGERANCellInformation_encode_jer; per_type_decoder_f NGAP_LastVisitedGERANCellInformation_decode_aper; per_type_encoder_f NGAP_LastVisitedGERANCellInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedUTRANCellInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LastVisitedUTRANCellInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_LastVisitedUTRANCellInformation_free; asn_struct_print_f NGAP_LastVisitedUTRANCellInformation_print; asn_constr_check_f NGAP_LastVisitedUTRANCellInformation_constraint; +jer_type_encoder_f NGAP_LastVisitedUTRANCellInformation_encode_jer; per_type_decoder_f NGAP_LastVisitedUTRANCellInformation_decode_aper; per_type_encoder_f NGAP_LastVisitedUTRANCellInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LineType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LineType.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f LineType_free; asn_struct_print_f LineType_print; asn_constr_check_f LineType_constraint; +jer_type_encoder_f LineType_encode_jer; per_type_decoder_f LineType_decode_aper; per_type_encoder_f LineType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Links-to-log.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Links-to-log.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f Links_to_log_free; asn_struct_print_f Links_to_log_print; asn_constr_check_f Links_to_log_constraint; +jer_type_encoder_f Links_to_log_encode_jer; per_type_decoder_f Links_to_log_decode_aper; per_type_encoder_f Links_to_log_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LocationReportingAdditionalInfo.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LocationReportingAdditionalInfo.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_LocationReportingAdditionalInfo_free; asn_struct_print_f NGAP_LocationReportingAdditionalInfo_print; asn_constr_check_f NGAP_LocationReportingAdditionalInfo_constraint; +jer_type_encoder_f NGAP_LocationReportingAdditionalInfo_encode_jer; per_type_decoder_f NGAP_LocationReportingAdditionalInfo_decode_aper; per_type_encoder_f NGAP_LocationReportingAdditionalInfo_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LocationReportingReferenceID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LocationReportingReferenceID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_LocationReportingReferenceID_free; asn_struct_print_f NGAP_LocationReportingReferenceID_print; asn_constr_check_f NGAP_LocationReportingReferenceID_constraint; +jer_type_encoder_f NGAP_LocationReportingReferenceID_encode_jer; per_type_decoder_f NGAP_LocationReportingReferenceID_decode_aper; per_type_encoder_f NGAP_LocationReportingReferenceID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LoggingDuration.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LoggingDuration.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f LoggingDuration_free; asn_struct_print_f LoggingDuration_print; asn_constr_check_f LoggingDuration_constraint; +jer_type_encoder_f LoggingDuration_encode_jer; per_type_decoder_f LoggingDuration_decode_aper; per_type_encoder_f LoggingDuration_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_LoggingInterval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_LoggingInterval.h
Changed
@@ -46,6 +46,7 @@ asn_struct_free_f LoggingInterval_free; asn_struct_print_f LoggingInterval_print; asn_constr_check_f LoggingInterval_constraint; +jer_type_encoder_f LoggingInterval_encode_jer; per_type_decoder_f LoggingInterval_decode_aper; per_type_encoder_f LoggingInterval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_M1ReportingTrigger.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_M1ReportingTrigger.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f M1ReportingTrigger_free; asn_struct_print_f M1ReportingTrigger_print; asn_constr_check_f M1ReportingTrigger_constraint; +jer_type_encoder_f M1ReportingTrigger_encode_jer; per_type_decoder_f M1ReportingTrigger_decode_aper; per_type_encoder_f M1ReportingTrigger_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_M4period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_M4period.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f M4period_free; asn_struct_print_f M4period_print; asn_constr_check_f M4period_constraint; +jer_type_encoder_f M4period_encode_jer; per_type_decoder_f M4period_decode_aper; per_type_encoder_f M4period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_M5period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_M5period.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f M5period_free; asn_struct_print_f M5period_print; asn_constr_check_f M5period_constraint; +jer_type_encoder_f M5period_encode_jer; per_type_decoder_f M5period_decode_aper; per_type_encoder_f M5period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_M6report-Interval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_M6report-Interval.h
Changed
@@ -49,6 +49,7 @@ asn_struct_free_f M6report_Interval_free; asn_struct_print_f M6report_Interval_print; asn_constr_check_f M6report_Interval_constraint; +jer_type_encoder_f M6report_Interval_encode_jer; per_type_decoder_f M6report_Interval_decode_aper; per_type_encoder_f M6report_Interval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_M7period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_M7period.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_M7period_free; asn_struct_print_f NGAP_M7period_print; asn_constr_check_f NGAP_M7period_constraint; +jer_type_encoder_f NGAP_M7period_encode_jer; per_type_decoder_f NGAP_M7period_decode_aper; per_type_encoder_f NGAP_M7period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MDT-Activation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MDT-Activation.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f MDT_Activation_free; asn_struct_print_f MDT_Activation_print; asn_constr_check_f MDT_Activation_constraint; +jer_type_encoder_f MDT_Activation_encode_jer; per_type_decoder_f MDT_Activation_decode_aper; per_type_encoder_f MDT_Activation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MDT-Location-Information.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MDT-Location-Information.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_MDT_Location_Information_free; asn_struct_print_f NGAP_MDT_Location_Information_print; asn_constr_check_f NGAP_MDT_Location_Information_constraint; +jer_type_encoder_f NGAP_MDT_Location_Information_encode_jer; per_type_decoder_f NGAP_MDT_Location_Information_decode_aper; per_type_encoder_f NGAP_MDT_Location_Information_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MDTModeEutra.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MDTModeEutra.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_MDTModeEutra_free; asn_struct_print_f NGAP_MDTModeEutra_print; asn_constr_check_f NGAP_MDTModeEutra_constraint; +jer_type_encoder_f NGAP_MDTModeEutra_encode_jer; per_type_decoder_f NGAP_MDTModeEutra_decode_aper; per_type_encoder_f NGAP_MDTModeEutra_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MICOModeIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MICOModeIndication.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f MICOModeIndication_free; asn_struct_print_f MICOModeIndication_print; asn_constr_check_f MICOModeIndication_constraint; +jer_type_encoder_f MICOModeIndication_encode_jer; per_type_decoder_f MICOModeIndication_decode_aper; per_type_encoder_f MICOModeIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MaskedIMEISV.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MaskedIMEISV.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_MaskedIMEISV_free; asn_struct_print_f NGAP_MaskedIMEISV_print; asn_constr_check_f NGAP_MaskedIMEISV_constraint; +jer_type_encoder_f NGAP_MaskedIMEISV_encode_jer; per_type_decoder_f NGAP_MaskedIMEISV_decode_aper; per_type_encoder_f NGAP_MaskedIMEISV_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MaximumDataBurstVolume.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MaximumDataBurstVolume.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_MaximumDataBurstVolume_free; asn_struct_print_f NGAP_MaximumDataBurstVolume_print; asn_constr_check_f NGAP_MaximumDataBurstVolume_constraint; +jer_type_encoder_f NGAP_MaximumDataBurstVolume_encode_jer; per_type_decoder_f NGAP_MaximumDataBurstVolume_decode_aper; per_type_encoder_f NGAP_MaximumDataBurstVolume_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MaximumIntegrityProtectedDataRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MaximumIntegrityProtectedDataRate.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f MaximumIntegrityProtectedDataRate_free; asn_struct_print_f MaximumIntegrityProtectedDataRate_print; asn_constr_check_f MaximumIntegrityProtectedDataRate_constraint; +jer_type_encoder_f MaximumIntegrityProtectedDataRate_encode_jer; per_type_decoder_f MaximumIntegrityProtectedDataRate_decode_aper; per_type_encoder_f MaximumIntegrityProtectedDataRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MeasurementsToActivate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MeasurementsToActivate.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_MeasurementsToActivate_free; asn_struct_print_f NGAP_MeasurementsToActivate_print; asn_constr_check_f NGAP_MeasurementsToActivate_constraint; +jer_type_encoder_f NGAP_MeasurementsToActivate_encode_jer; per_type_decoder_f NGAP_MeasurementsToActivate_decode_aper; per_type_encoder_f NGAP_MeasurementsToActivate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MessageIdentifier.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MessageIdentifier.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_MessageIdentifier_free; asn_struct_print_f NGAP_MessageIdentifier_print; asn_constr_check_f NGAP_MessageIdentifier_constraint; +jer_type_encoder_f NGAP_MessageIdentifier_encode_jer; per_type_decoder_f NGAP_MessageIdentifier_decode_aper; per_type_encoder_f NGAP_MessageIdentifier_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MicoAllPLMN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MicoAllPLMN.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_MicoAllPLMN_free; asn_struct_print_f NGAP_MicoAllPLMN_print; asn_constr_check_f NGAP_MicoAllPLMN_constraint; +jer_type_encoder_f NGAP_MicoAllPLMN_encode_jer; per_type_decoder_f NGAP_MicoAllPLMN_decode_aper; per_type_encoder_f NGAP_MicoAllPLMN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_MobilityInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_MobilityInformation.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_MobilityInformation_free; asn_struct_print_f NGAP_MobilityInformation_print; asn_constr_check_f NGAP_MobilityInformation_constraint; +jer_type_encoder_f NGAP_MobilityInformation_encode_jer; per_type_decoder_f NGAP_MobilityInformation_decode_aper; per_type_encoder_f NGAP_MobilityInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NAS-PDU.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NAS-PDU.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NAS_PDU_free; asn_struct_print_f NGAP_NAS_PDU_print; asn_constr_check_f NGAP_NAS_PDU_constraint; +jer_type_encoder_f NGAP_NAS_PDU_encode_jer; per_type_decoder_f NGAP_NAS_PDU_decode_aper; per_type_encoder_f NGAP_NAS_PDU_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NASSecurityParametersFromNGRAN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NASSecurityParametersFromNGRAN.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NASSecurityParametersFromNGRAN_free; asn_struct_print_f NGAP_NASSecurityParametersFromNGRAN_print; asn_constr_check_f NGAP_NASSecurityParametersFromNGRAN_constraint; +jer_type_encoder_f NGAP_NASSecurityParametersFromNGRAN_encode_jer; per_type_decoder_f NGAP_NASSecurityParametersFromNGRAN_decode_aper; per_type_encoder_f NGAP_NASSecurityParametersFromNGRAN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-DefaultPagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-DefaultPagingDRX.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NGAP_NB_IoT_DefaultPagingDRX_free; asn_struct_print_f NGAP_NB_IoT_DefaultPagingDRX_print; asn_constr_check_f NGAP_NB_IoT_DefaultPagingDRX_constraint; +jer_type_encoder_f NGAP_NB_IoT_DefaultPagingDRX_encode_jer; per_type_decoder_f NGAP_NB_IoT_DefaultPagingDRX_decode_aper; per_type_encoder_f NGAP_NB_IoT_DefaultPagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-Paging-TimeWindow.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-Paging-TimeWindow.h
Changed
@@ -51,6 +51,7 @@ asn_struct_free_f NB_IoT_Paging_TimeWindow_free; asn_struct_print_f NB_IoT_Paging_TimeWindow_print; asn_constr_check_f NB_IoT_Paging_TimeWindow_constraint; +jer_type_encoder_f NB_IoT_Paging_TimeWindow_encode_jer; per_type_decoder_f NB_IoT_Paging_TimeWindow_decode_aper; per_type_encoder_f NB_IoT_Paging_TimeWindow_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-Paging-eDRXCycle.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-Paging-eDRXCycle.h
Changed
@@ -49,6 +49,7 @@ asn_struct_free_f NB_IoT_Paging_eDRXCycle_free; asn_struct_print_f NB_IoT_Paging_eDRXCycle_print; asn_constr_check_f NB_IoT_Paging_eDRXCycle_constraint; +jer_type_encoder_f NB_IoT_Paging_eDRXCycle_encode_jer; per_type_decoder_f NB_IoT_Paging_eDRXCycle_decode_aper; per_type_encoder_f NB_IoT_Paging_eDRXCycle_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-PagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-PagingDRX.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f NGAP_NB_IoT_PagingDRX_free; asn_struct_print_f NGAP_NB_IoT_PagingDRX_print; asn_constr_check_f NGAP_NB_IoT_PagingDRX_constraint; +jer_type_encoder_f NGAP_NB_IoT_PagingDRX_encode_jer; per_type_decoder_f NGAP_NB_IoT_PagingDRX_decode_aper; per_type_encoder_f NGAP_NB_IoT_PagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-UEPriority.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NB-IoT-UEPriority.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NB_IoT_UEPriority_free; asn_struct_print_f NGAP_NB_IoT_UEPriority_print; asn_constr_check_f NGAP_NB_IoT_UEPriority_constraint; +jer_type_encoder_f NGAP_NB_IoT_UEPriority_encode_jer; per_type_decoder_f NGAP_NB_IoT_UEPriority_decode_aper; per_type_encoder_f NGAP_NB_IoT_UEPriority_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NGRANTraceID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NGRANTraceID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NGRANTraceID_free; asn_struct_print_f NGAP_NGRANTraceID_print; asn_constr_check_f NGAP_NGRANTraceID_constraint; +jer_type_encoder_f NGAP_NGRANTraceID_encode_jer; per_type_decoder_f NGAP_NGRANTraceID_decode_aper; per_type_encoder_f NGAP_NGRANTraceID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NID_free; asn_struct_print_f NGAP_NID_print; asn_constr_check_f NGAP_NID_constraint; +jer_type_encoder_f NGAP_NID_encode_jer; per_type_decoder_f NGAP_NID_decode_aper; per_type_encoder_f NGAP_NID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NR-PCI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NR-PCI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NR_PCI_free; asn_struct_print_f NGAP_NR_PCI_print; asn_constr_check_f NGAP_NR_PCI_constraint; +jer_type_encoder_f NGAP_NR_PCI_encode_jer; per_type_decoder_f NGAP_NR_PCI_decode_aper; per_type_encoder_f NGAP_NR_PCI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRARFCN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRARFCN.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NRARFCN_free; asn_struct_print_f NGAP_NRARFCN_print; asn_constr_check_f NGAP_NRARFCN_constraint; +jer_type_encoder_f NGAP_NRARFCN_encode_jer; per_type_decoder_f NGAP_NRARFCN_decode_aper; per_type_encoder_f NGAP_NRARFCN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRCellIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRCellIdentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NRCellIdentity_free; asn_struct_print_f NGAP_NRCellIdentity_print; asn_constr_check_f NGAP_NRCellIdentity_constraint; +jer_type_encoder_f NGAP_NRCellIdentity_encode_jer; per_type_decoder_f NGAP_NRCellIdentity_decode_aper; per_type_encoder_f NGAP_NRCellIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRFrequencyBand.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRFrequencyBand.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NRFrequencyBand_free; asn_struct_print_f NGAP_NRFrequencyBand_print; asn_constr_check_f NGAP_NRFrequencyBand_constraint; +jer_type_encoder_f NGAP_NRFrequencyBand_encode_jer; per_type_decoder_f NGAP_NRFrequencyBand_decode_aper; per_type_encoder_f NGAP_NRFrequencyBand_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRMobilityHistoryReport.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRMobilityHistoryReport.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NRMobilityHistoryReport_free; asn_struct_print_f NGAP_NRMobilityHistoryReport_print; asn_constr_check_f NGAP_NRMobilityHistoryReport_constraint; +jer_type_encoder_f NGAP_NRMobilityHistoryReport_encode_jer; per_type_decoder_f NGAP_NRMobilityHistoryReport_decode_aper; per_type_encoder_f NGAP_NRMobilityHistoryReport_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRPPa-PDU.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRPPa-PDU.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NRPPa_PDU_free; asn_struct_print_f NGAP_NRPPa_PDU_print; asn_constr_check_f NGAP_NRPPa_PDU_constraint; +jer_type_encoder_f NGAP_NRPPa_PDU_encode_jer; per_type_decoder_f NGAP_NRPPa_PDU_decode_aper; per_type_encoder_f NGAP_NRPPa_PDU_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRUERLFReportContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRUERLFReportContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NRUERLFReportContainer_free; asn_struct_print_f NGAP_NRUERLFReportContainer_print; asn_constr_check_f NGAP_NRUERLFReportContainer_constraint; +jer_type_encoder_f NGAP_NRUERLFReportContainer_encode_jer; per_type_decoder_f NGAP_NRUERLFReportContainer_decode_aper; per_type_encoder_f NGAP_NRUERLFReportContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRencryptionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRencryptionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NRencryptionAlgorithms_free; asn_struct_print_f NGAP_NRencryptionAlgorithms_print; asn_constr_check_f NGAP_NRencryptionAlgorithms_constraint; +jer_type_encoder_f NGAP_NRencryptionAlgorithms_encode_jer; per_type_decoder_f NGAP_NRencryptionAlgorithms_decode_aper; per_type_encoder_f NGAP_NRencryptionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NRintegrityProtectionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NRintegrityProtectionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NRintegrityProtectionAlgorithms_free; asn_struct_print_f NGAP_NRintegrityProtectionAlgorithms_print; asn_constr_check_f NGAP_NRintegrityProtectionAlgorithms_constraint; +jer_type_encoder_f NGAP_NRintegrityProtectionAlgorithms_encode_jer; per_type_decoder_f NGAP_NRintegrityProtectionAlgorithms_decode_aper; per_type_encoder_f NGAP_NRintegrityProtectionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NetworkInstance.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NetworkInstance.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NetworkInstance_free; asn_struct_print_f NGAP_NetworkInstance_print; asn_constr_check_f NGAP_NetworkInstance_constraint; +jer_type_encoder_f NGAP_NetworkInstance_encode_jer; per_type_decoder_f NGAP_NetworkInstance_decode_aper; per_type_encoder_f NGAP_NetworkInstance_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NewSecurityContextInd.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NewSecurityContextInd.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_NewSecurityContextInd_free; asn_struct_print_f NGAP_NewSecurityContextInd_print; asn_constr_check_f NGAP_NewSecurityContextInd_constraint; +jer_type_encoder_f NGAP_NewSecurityContextInd_encode_jer; per_type_decoder_f NGAP_NewSecurityContextInd_decode_aper; per_type_encoder_f NGAP_NewSecurityContextInd_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NextHopChainingCount.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NextHopChainingCount.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NextHopChainingCount_free; asn_struct_print_f NGAP_NextHopChainingCount_print; asn_constr_check_f NGAP_NextHopChainingCount_constraint; +jer_type_encoder_f NGAP_NextHopChainingCount_encode_jer; per_type_decoder_f NGAP_NextHopChainingCount_decode_aper; per_type_encoder_f NGAP_NextHopChainingCount_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NextPagingAreaScope.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NextPagingAreaScope.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NextPagingAreaScope_free; asn_struct_print_f NextPagingAreaScope_print; asn_constr_check_f NextPagingAreaScope_constraint; +jer_type_encoder_f NextPagingAreaScope_encode_jer; per_type_decoder_f NextPagingAreaScope_decode_aper; per_type_encoder_f NextPagingAreaScope_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NotificationCause.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NotificationCause.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NotificationCause_free; asn_struct_print_f NotificationCause_print; asn_constr_check_f NotificationCause_constraint; +jer_type_encoder_f NotificationCause_encode_jer; per_type_decoder_f NotificationCause_decode_aper; per_type_encoder_f NotificationCause_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NotificationControl.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NotificationControl.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f NotificationControl_free; asn_struct_print_f NotificationControl_print; asn_constr_check_f NotificationControl_constraint; +jer_type_encoder_f NotificationControl_encode_jer; per_type_decoder_f NotificationControl_decode_aper; per_type_encoder_f NotificationControl_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NotifySourceNGRANNode.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NotifySourceNGRANNode.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_NotifySourceNGRANNode_free; asn_struct_print_f NGAP_NotifySourceNGRANNode_print; asn_constr_check_f NGAP_NotifySourceNGRANNode_constraint; +jer_type_encoder_f NGAP_NotifySourceNGRANNode_encode_jer; per_type_decoder_f NGAP_NotifySourceNGRANNode_decode_aper; per_type_encoder_f NGAP_NotifySourceNGRANNode_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NumberOfBroadcasts.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NumberOfBroadcasts.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_NumberOfBroadcasts_free; asn_struct_print_f NGAP_NumberOfBroadcasts_print; asn_constr_check_f NGAP_NumberOfBroadcasts_constraint; +jer_type_encoder_f NGAP_NumberOfBroadcasts_encode_jer; per_type_decoder_f NGAP_NumberOfBroadcasts_decode_aper; per_type_encoder_f NGAP_NumberOfBroadcasts_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_NumberOfBroadcastsRequested.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_NumberOfBroadcastsRequested.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_NumberOfBroadcastsRequested_free; asn_struct_print_f NGAP_NumberOfBroadcastsRequested_print; asn_constr_check_f NGAP_NumberOfBroadcastsRequested_constraint; +jer_type_encoder_f NGAP_NumberOfBroadcastsRequested_encode_jer; per_type_decoder_f NGAP_NumberOfBroadcastsRequested_decode_aper; per_type_encoder_f NGAP_NumberOfBroadcastsRequested_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_OverloadAction.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_OverloadAction.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f OverloadAction_free; asn_struct_print_f OverloadAction_print; asn_constr_check_f OverloadAction_constraint; +jer_type_encoder_f OverloadAction_encode_jer; per_type_decoder_f OverloadAction_decode_aper; per_type_encoder_f OverloadAction_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PDUSessionID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PDUSessionID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PDUSessionID_free; asn_struct_print_f NGAP_PDUSessionID_print; asn_constr_check_f NGAP_PDUSessionID_constraint; +jer_type_encoder_f NGAP_PDUSessionID_encode_jer; per_type_decoder_f NGAP_PDUSessionID_decode_aper; per_type_encoder_f NGAP_PDUSessionID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PDUSessionType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PDUSessionType.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f NGAP_PDUSessionType_free; asn_struct_print_f NGAP_PDUSessionType_print; asn_constr_check_f NGAP_PDUSessionType_constraint; +jer_type_encoder_f NGAP_PDUSessionType_encode_jer; per_type_decoder_f NGAP_PDUSessionType_decode_aper; per_type_encoder_f NGAP_PDUSessionType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PLMNIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PLMNIdentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PLMNIdentity_free; asn_struct_print_f NGAP_PLMNIdentity_print; asn_constr_check_f NGAP_PLMNIdentity_constraint; +jer_type_encoder_f NGAP_PLMNIdentity_encode_jer; per_type_decoder_f NGAP_PLMNIdentity_decode_aper; per_type_encoder_f NGAP_PLMNIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PacketDelayBudget.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PacketDelayBudget.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PacketDelayBudget_free; asn_struct_print_f NGAP_PacketDelayBudget_print; asn_constr_check_f NGAP_PacketDelayBudget_constraint; +jer_type_encoder_f NGAP_PacketDelayBudget_encode_jer; per_type_decoder_f NGAP_PacketDelayBudget_decode_aper; per_type_encoder_f NGAP_PacketDelayBudget_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PacketLossRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PacketLossRate.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PacketLossRate_free; asn_struct_print_f NGAP_PacketLossRate_print; asn_constr_check_f NGAP_PacketLossRate_constraint; +jer_type_encoder_f NGAP_PacketLossRate_encode_jer; per_type_decoder_f NGAP_PacketLossRate_decode_aper; per_type_encoder_f NGAP_PacketLossRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Paging-Time-Window.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Paging-Time-Window.h
Changed
@@ -51,6 +51,7 @@ asn_struct_free_f Paging_Time_Window_free; asn_struct_print_f Paging_Time_Window_print; asn_constr_check_f Paging_Time_Window_constraint; +jer_type_encoder_f Paging_Time_Window_encode_jer; per_type_decoder_f Paging_Time_Window_decode_aper; per_type_encoder_f Paging_Time_Window_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Paging-eDRX-Cycle.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Paging-eDRX-Cycle.h
Changed
@@ -49,6 +49,7 @@ asn_struct_free_f Paging_eDRX_Cycle_free; asn_struct_print_f Paging_eDRX_Cycle_print; asn_constr_check_f Paging_eDRX_Cycle_constraint; +jer_type_encoder_f Paging_eDRX_Cycle_encode_jer; per_type_decoder_f Paging_eDRX_Cycle_decode_aper; per_type_encoder_f Paging_eDRX_Cycle_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PagingAttemptCount.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PagingAttemptCount.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PagingAttemptCount_free; asn_struct_print_f NGAP_PagingAttemptCount_print; asn_constr_check_f NGAP_PagingAttemptCount_constraint; +jer_type_encoder_f NGAP_PagingAttemptCount_encode_jer; per_type_decoder_f NGAP_PagingAttemptCount_decode_aper; per_type_encoder_f NGAP_PagingAttemptCount_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PagingDRX.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f PagingDRX_free; asn_struct_print_f PagingDRX_print; asn_constr_check_f PagingDRX_constraint; +jer_type_encoder_f PagingDRX_encode_jer; per_type_decoder_f PagingDRX_decode_aper; per_type_encoder_f PagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PagingOrigin.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PagingOrigin.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_PagingOrigin_free; asn_struct_print_f NGAP_PagingOrigin_print; asn_constr_check_f NGAP_PagingOrigin_constraint; +jer_type_encoder_f NGAP_PagingOrigin_encode_jer; per_type_decoder_f NGAP_PagingOrigin_decode_aper; per_type_encoder_f NGAP_PagingOrigin_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PagingPriority.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PagingPriority.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f NGAP_PagingPriority_free; asn_struct_print_f NGAP_PagingPriority_print; asn_constr_check_f NGAP_PagingPriority_constraint; +jer_type_encoder_f NGAP_PagingPriority_encode_jer; per_type_decoder_f NGAP_PagingPriority_decode_aper; per_type_encoder_f NGAP_PagingPriority_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PagingProbabilityInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PagingProbabilityInformation.h
Changed
@@ -56,6 +56,7 @@ asn_struct_free_f PagingProbabilityInformation_free; asn_struct_print_f PagingProbabilityInformation_print; asn_constr_check_f PagingProbabilityInformation_constraint; +jer_type_encoder_f PagingProbabilityInformation_encode_jer; per_type_decoder_f PagingProbabilityInformation_decode_aper; per_type_encoder_f PagingProbabilityInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PedestrianUE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PedestrianUE.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f PedestrianUE_free; asn_struct_print_f PedestrianUE_print; asn_constr_check_f PedestrianUE_constraint; +jer_type_encoder_f PedestrianUE_encode_jer; per_type_decoder_f PedestrianUE_decode_aper; per_type_encoder_f PedestrianUE_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PeriodicRegistrationUpdateTimer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PeriodicRegistrationUpdateTimer.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PeriodicRegistrationUpdateTimer_free; asn_struct_print_f NGAP_PeriodicRegistrationUpdateTimer_print; asn_constr_check_f NGAP_PeriodicRegistrationUpdateTimer_constraint; +jer_type_encoder_f NGAP_PeriodicRegistrationUpdateTimer_encode_jer; per_type_decoder_f NGAP_PeriodicRegistrationUpdateTimer_decode_aper; per_type_encoder_f NGAP_PeriodicRegistrationUpdateTimer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Periodicity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Periodicity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_Periodicity_free; asn_struct_print_f NGAP_Periodicity_print; asn_constr_check_f NGAP_Periodicity_constraint; +jer_type_encoder_f NGAP_Periodicity_encode_jer; per_type_decoder_f NGAP_Periodicity_decode_aper; per_type_encoder_f NGAP_Periodicity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PortNumber.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PortNumber.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PortNumber_free; asn_struct_print_f NGAP_PortNumber_print; asn_constr_check_f NGAP_PortNumber_constraint; +jer_type_encoder_f NGAP_PortNumber_encode_jer; per_type_decoder_f NGAP_PortNumber_decode_aper; per_type_encoder_f NGAP_PortNumber_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Pre-emptionCapability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Pre-emptionCapability.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f Pre_emptionCapability_free; asn_struct_print_f Pre_emptionCapability_print; asn_constr_check_f Pre_emptionCapability_constraint; +jer_type_encoder_f Pre_emptionCapability_encode_jer; per_type_decoder_f Pre_emptionCapability_decode_aper; per_type_encoder_f Pre_emptionCapability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Pre-emptionVulnerability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Pre-emptionVulnerability.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f Pre_emptionVulnerability_free; asn_struct_print_f Pre_emptionVulnerability_print; asn_constr_check_f Pre_emptionVulnerability_constraint; +jer_type_encoder_f Pre_emptionVulnerability_encode_jer; per_type_decoder_f Pre_emptionVulnerability_decode_aper; per_type_encoder_f Pre_emptionVulnerability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Presence.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Presence.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f Presence_free; asn_struct_print_f Presence_print; asn_constr_check_f Presence_constraint; +jer_type_encoder_f Presence_encode_jer; per_type_decoder_f Presence_decode_aper; per_type_encoder_f Presence_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PriorityLevelARP.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PriorityLevelARP.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PriorityLevelARP_free; asn_struct_print_f NGAP_PriorityLevelARP_print; asn_constr_check_f NGAP_PriorityLevelARP_constraint; +jer_type_encoder_f NGAP_PriorityLevelARP_encode_jer; per_type_decoder_f NGAP_PriorityLevelARP_decode_aper; per_type_encoder_f NGAP_PriorityLevelARP_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PriorityLevelQos.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PriorityLevelQos.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_PriorityLevelQos_free; asn_struct_print_f NGAP_PriorityLevelQos_print; asn_constr_check_f NGAP_PriorityLevelQos_constraint; +jer_type_encoder_f NGAP_PriorityLevelQos_encode_jer; per_type_decoder_f NGAP_PriorityLevelQos_decode_aper; per_type_encoder_f NGAP_PriorityLevelQos_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_PrivacyIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_PrivacyIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_PrivacyIndicator_free; asn_struct_print_f NGAP_PrivacyIndicator_print; asn_constr_check_f NGAP_PrivacyIndicator_constraint; +jer_type_encoder_f NGAP_PrivacyIndicator_encode_jer; per_type_decoder_f NGAP_PrivacyIndicator_decode_aper; per_type_encoder_f NGAP_PrivacyIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ProcedureCode.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ProcedureCode.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ProcedureCode_free; asn_struct_print_f NGAP_ProcedureCode_print; asn_constr_check_f NGAP_ProcedureCode_constraint; +jer_type_encoder_f NGAP_ProcedureCode_encode_jer; per_type_decoder_f NGAP_ProcedureCode_decode_aper; per_type_encoder_f NGAP_ProcedureCode_encode_aper; #define NGAP_ProcedureCode_id_AMFConfigurationUpdate ((NGAP_ProcedureCode_t)0)
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ProtocolExtensionID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ProtocolExtensionID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ProtocolExtensionID_free; asn_struct_print_f NGAP_ProtocolExtensionID_print; asn_constr_check_f NGAP_ProtocolExtensionID_constraint; +jer_type_encoder_f NGAP_ProtocolExtensionID_encode_jer; per_type_decoder_f NGAP_ProtocolExtensionID_decode_aper; per_type_encoder_f NGAP_ProtocolExtensionID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ProtocolIE-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ProtocolIE-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_ProtocolIE_ID_free; asn_struct_print_f NGAP_ProtocolIE_ID_print; asn_constr_check_f NGAP_ProtocolIE_ID_constraint; +jer_type_encoder_f NGAP_ProtocolIE_ID_encode_jer; per_type_decoder_f NGAP_ProtocolIE_ID_decode_aper; per_type_encoder_f NGAP_ProtocolIE_ID_encode_aper; #define NGAP_ProtocolIE_ID_id_AllowedNSSAI ((NGAP_ProtocolIE_ID_t)0)
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ProtocolIE-SingleContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ProtocolIE-SingleContainer.h
Changed
@@ -77,312 +77,364 @@ asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P0_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P0_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P0_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P0_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P0_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P0_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P1; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P1_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P1_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P1_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P1_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P1_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P1_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P2; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P2_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P2_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P2_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P2_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P2_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P2_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P3; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P3_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P3_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P3_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P3_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P3_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P3_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P4; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P4_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P4_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P4_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P4_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P4_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P4_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P5; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P5_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P5_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P5_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P5_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P5_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P5_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P6; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P6_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P6_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P6_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P6_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P6_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P6_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P7; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P7_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P7_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P7_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P7_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P7_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P7_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P8; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P8_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P8_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P8_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P8_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P8_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P8_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P9; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P9_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P9_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P9_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P9_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P9_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P9_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P10; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P10_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P10_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P10_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P10_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P10_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P10_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P11; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P11_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P11_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P11_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P11_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P11_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P11_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P12; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P12_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P12_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P12_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P12_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P12_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P12_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P13; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P13_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P13_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P13_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P13_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P13_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P13_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P14; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P14_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P14_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P14_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P14_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P14_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P14_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P15; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P15_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P15_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P15_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P15_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P15_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P15_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P16; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P16_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P16_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P16_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P16_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P16_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P16_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P17; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P17_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P17_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P17_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P17_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P17_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P17_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P18; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P18_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P18_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P18_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P18_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P18_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P18_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P19; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P19_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P19_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P19_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P19_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P19_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P19_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P20; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P20_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P20_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P20_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P20_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P20_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P20_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P21; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P21_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P21_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P21_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P21_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P21_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P21_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P22; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P22_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P22_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P22_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P22_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P22_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P22_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P23; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P23_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P23_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P23_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P23_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P23_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P23_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P24; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P24_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P24_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P24_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P24_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P24_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P24_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P25; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P25_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P25_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P25_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P25_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P25_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P25_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P26; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P26_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P26_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P26_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P26_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P26_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P26_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P27; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P27_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P27_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P27_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P27_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P27_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P27_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P28; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P28_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P28_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P28_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P28_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P28_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P28_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P29; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P29_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P29_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P29_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P29_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P29_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P29_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P30; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P30_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P30_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P30_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P30_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P30_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P30_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P31; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P31_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P31_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P31_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P31_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P31_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P31_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P32; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P32_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P32_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P32_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P32_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P32_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P32_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P33; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P33_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P33_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P33_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P33_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P33_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P33_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P34; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P34_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P34_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P34_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P34_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P34_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P34_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P35; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P35_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P35_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P35_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P35_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P35_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P35_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P36; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P36_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P36_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P36_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P36_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P36_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P36_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P37; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P37_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P37_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P37_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P37_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P37_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P37_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P38; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P38_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P38_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P38_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P38_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P38_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P38_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P39; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P39_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P39_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P39_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P39_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P39_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P39_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P40; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P40_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P40_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P40_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P40_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P40_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P40_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P41; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P41_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P41_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P41_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P41_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P41_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P41_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P42; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P42_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P42_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P42_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P42_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P42_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P42_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P43; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P43_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P43_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P43_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P43_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P43_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P43_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P44; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P44_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P44_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P44_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P44_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P44_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P44_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P45; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P45_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P45_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P45_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P45_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P45_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P45_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P46; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P46_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P46_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P46_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P46_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P46_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P46_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P47; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P47_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P47_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P47_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P47_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P47_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P47_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P48; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P48_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P48_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P48_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P48_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P48_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P48_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P49; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P49_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P49_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P49_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P49_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P49_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P49_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P50; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P50_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P50_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P50_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P50_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P50_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P50_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_NGAP_ProtocolIE_SingleContainer_9577P51; asn_struct_free_f NGAP_ProtocolIE_SingleContainer_9577P51_free; asn_struct_print_f NGAP_ProtocolIE_SingleContainer_9577P51_print; asn_constr_check_f NGAP_ProtocolIE_SingleContainer_9577P51_constraint; +jer_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P51_encode_jer; per_type_decoder_f NGAP_ProtocolIE_SingleContainer_9577P51_decode_aper; per_type_encoder_f NGAP_ProtocolIE_SingleContainer_9577P51_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_QosFlowIdentifier.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_QosFlowIdentifier.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_QosFlowIdentifier_free; asn_struct_print_f NGAP_QosFlowIdentifier_print; asn_constr_check_f NGAP_QosFlowIdentifier_constraint; +jer_type_encoder_f NGAP_QosFlowIdentifier_encode_jer; per_type_decoder_f NGAP_QosFlowIdentifier_decode_aper; per_type_encoder_f NGAP_QosFlowIdentifier_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_QosMonitoringReportingFrequency.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_QosMonitoringReportingFrequency.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_QosMonitoringReportingFrequency_free; asn_struct_print_f NGAP_QosMonitoringReportingFrequency_print; asn_constr_check_f NGAP_QosMonitoringReportingFrequency_constraint; +jer_type_encoder_f NGAP_QosMonitoringReportingFrequency_encode_jer; per_type_decoder_f NGAP_QosMonitoringReportingFrequency_decode_aper; per_type_encoder_f NGAP_QosMonitoringReportingFrequency_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_QosMonitoringRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_QosMonitoringRequest.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NGAP_QosMonitoringRequest_free; asn_struct_print_f NGAP_QosMonitoringRequest_print; asn_constr_check_f NGAP_QosMonitoringRequest_constraint; +jer_type_encoder_f NGAP_QosMonitoringRequest_encode_jer; per_type_decoder_f NGAP_QosMonitoringRequest_decode_aper; per_type_encoder_f NGAP_QosMonitoringRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RAN-UE-NGAP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RAN-UE-NGAP-ID.h
Changed
@@ -28,6 +28,7 @@ asn_struct_free_f RAN_UE_NGAP_ID_free; asn_struct_print_f RAN_UE_NGAP_ID_print; asn_constr_check_f RAN_UE_NGAP_ID_constraint; +jer_type_encoder_f RAN_UE_NGAP_ID_encode_jer; per_type_decoder_f RAN_UE_NGAP_ID_decode_aper; per_type_encoder_f RAN_UE_NGAP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RANNodeName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RANNodeName.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RANNodeName_free; asn_struct_print_f NGAP_RANNodeName_print; asn_constr_check_f NGAP_RANNodeName_constraint; +jer_type_encoder_f NGAP_RANNodeName_encode_jer; per_type_decoder_f NGAP_RANNodeName_decode_aper; per_type_encoder_f NGAP_RANNodeName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RANNodeNameUTF8String.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RANNodeNameUTF8String.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RANNodeNameUTF8String_free; asn_struct_print_f NGAP_RANNodeNameUTF8String_print; asn_constr_check_f NGAP_RANNodeNameUTF8String_constraint; +jer_type_encoder_f NGAP_RANNodeNameUTF8String_encode_jer; per_type_decoder_f NGAP_RANNodeNameUTF8String_decode_aper; per_type_encoder_f NGAP_RANNodeNameUTF8String_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RANNodeNameVisibleString.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RANNodeNameVisibleString.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RANNodeNameVisibleString_free; asn_struct_print_f NGAP_RANNodeNameVisibleString_print; asn_constr_check_f NGAP_RANNodeNameVisibleString_constraint; +jer_type_encoder_f NGAP_RANNodeNameVisibleString_encode_jer; per_type_decoder_f NGAP_RANNodeNameVisibleString_decode_aper; per_type_encoder_f NGAP_RANNodeNameVisibleString_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RANPagingPriority.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RANPagingPriority.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RANPagingPriority_free; asn_struct_print_f NGAP_RANPagingPriority_print; asn_constr_check_f NGAP_RANPagingPriority_constraint; +jer_type_encoder_f NGAP_RANPagingPriority_encode_jer; per_type_decoder_f NGAP_RANPagingPriority_decode_aper; per_type_encoder_f NGAP_RANPagingPriority_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RAT-Information.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RAT-Information.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_RAT_Information_free; asn_struct_print_f NGAP_RAT_Information_print; asn_constr_check_f NGAP_RAT_Information_constraint; +jer_type_encoder_f NGAP_RAT_Information_encode_jer; per_type_decoder_f NGAP_RAT_Information_decode_aper; per_type_encoder_f NGAP_RAT_Information_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RATRestrictionInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RATRestrictionInformation.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RATRestrictionInformation_free; asn_struct_print_f NGAP_RATRestrictionInformation_print; asn_constr_check_f NGAP_RATRestrictionInformation_constraint; +jer_type_encoder_f NGAP_RATRestrictionInformation_encode_jer; per_type_decoder_f NGAP_RATRestrictionInformation_decode_aper; per_type_encoder_f NGAP_RATRestrictionInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RGLevelWirelineAccessCharacteristics.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RGLevelWirelineAccessCharacteristics.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RGLevelWirelineAccessCharacteristics_free; asn_struct_print_f NGAP_RGLevelWirelineAccessCharacteristics_print; asn_constr_check_f NGAP_RGLevelWirelineAccessCharacteristics_constraint; +jer_type_encoder_f NGAP_RGLevelWirelineAccessCharacteristics_encode_jer; per_type_decoder_f NGAP_RGLevelWirelineAccessCharacteristics_decode_aper; per_type_encoder_f NGAP_RGLevelWirelineAccessCharacteristics_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RNC-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RNC-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RNC_ID_free; asn_struct_print_f NGAP_RNC_ID_print; asn_constr_check_f NGAP_RNC_ID_constraint; +jer_type_encoder_f NGAP_RNC_ID_encode_jer; per_type_decoder_f NGAP_RNC_ID_decode_aper; per_type_encoder_f NGAP_RNC_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RRCContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RRCContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RRCContainer_free; asn_struct_print_f NGAP_RRCContainer_print; asn_constr_check_f NGAP_RRCContainer_constraint; +jer_type_encoder_f NGAP_RRCContainer_encode_jer; per_type_decoder_f NGAP_RRCContainer_decode_aper; per_type_encoder_f NGAP_RRCContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RRCEstablishmentCause.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RRCEstablishmentCause.h
Changed
@@ -45,6 +45,7 @@ asn_struct_free_f NGAP_RRCEstablishmentCause_free; asn_struct_print_f NGAP_RRCEstablishmentCause_print; asn_constr_check_f NGAP_RRCEstablishmentCause_constraint; +jer_type_encoder_f NGAP_RRCEstablishmentCause_encode_jer; per_type_decoder_f NGAP_RRCEstablishmentCause_decode_aper; per_type_encoder_f NGAP_RRCEstablishmentCause_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RRCInactiveTransitionReportRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RRCInactiveTransitionReportRequest.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f NGAP_RRCInactiveTransitionReportRequest_free; asn_struct_print_f NGAP_RRCInactiveTransitionReportRequest_print; asn_constr_check_f NGAP_RRCInactiveTransitionReportRequest_constraint; +jer_type_encoder_f NGAP_RRCInactiveTransitionReportRequest_encode_jer; per_type_decoder_f NGAP_RRCInactiveTransitionReportRequest_decode_aper; per_type_encoder_f NGAP_RRCInactiveTransitionReportRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RRCState.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RRCState.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_RRCState_free; asn_struct_print_f NGAP_RRCState_print; asn_constr_check_f NGAP_RRCState_constraint; +jer_type_encoder_f NGAP_RRCState_encode_jer; per_type_decoder_f NGAP_RRCState_decode_aper; per_type_encoder_f NGAP_RRCState_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RSN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RSN.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f RSN_free; asn_struct_print_f RSN_print; asn_constr_check_f RSN_constraint; +jer_type_encoder_f RSN_encode_jer; per_type_decoder_f RSN_decode_aper; per_type_encoder_f RSN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Range.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Range.h
Changed
@@ -44,6 +44,7 @@ asn_struct_free_f Range_free; asn_struct_print_f Range_print; asn_constr_check_f Range_constraint; +jer_type_encoder_f Range_encode_jer; per_type_decoder_f Range_decode_aper; per_type_encoder_f Range_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RedirectionVoiceFallback.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RedirectionVoiceFallback.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_RedirectionVoiceFallback_free; asn_struct_print_f NGAP_RedirectionVoiceFallback_print; asn_constr_check_f NGAP_RedirectionVoiceFallback_constraint; +jer_type_encoder_f NGAP_RedirectionVoiceFallback_encode_jer; per_type_decoder_f NGAP_RedirectionVoiceFallback_decode_aper; per_type_encoder_f NGAP_RedirectionVoiceFallback_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RedundantQosFlowIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RedundantQosFlowIndicator.h
Changed
@@ -32,6 +32,7 @@ asn_struct_free_f NGAP_RedundantQosFlowIndicator_free; asn_struct_print_f NGAP_RedundantQosFlowIndicator_print; asn_constr_check_f NGAP_RedundantQosFlowIndicator_constraint; +jer_type_encoder_f NGAP_RedundantQosFlowIndicator_encode_jer; per_type_decoder_f NGAP_RedundantQosFlowIndicator_decode_aper; per_type_encoder_f NGAP_RedundantQosFlowIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ReflectiveQosAttribute.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ReflectiveQosAttribute.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f ReflectiveQosAttribute_free; asn_struct_print_f ReflectiveQosAttribute_print; asn_constr_check_f ReflectiveQosAttribute_constraint; +jer_type_encoder_f ReflectiveQosAttribute_encode_jer; per_type_decoder_f ReflectiveQosAttribute_decode_aper; per_type_encoder_f ReflectiveQosAttribute_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RejectedNSSAIinPLMN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RejectedNSSAIinPLMN.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RejectedNSSAIinPLMN_free; asn_struct_print_f NGAP_RejectedNSSAIinPLMN_print; asn_constr_check_f NGAP_RejectedNSSAIinPLMN_constraint; +jer_type_encoder_f NGAP_RejectedNSSAIinPLMN_encode_jer; per_type_decoder_f NGAP_RejectedNSSAIinPLMN_decode_aper; per_type_encoder_f NGAP_RejectedNSSAIinPLMN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RejectedNSSAIinTA.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RejectedNSSAIinTA.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_RejectedNSSAIinTA_free; asn_struct_print_f NGAP_RejectedNSSAIinTA_print; asn_constr_check_f NGAP_RejectedNSSAIinTA_constraint; +jer_type_encoder_f NGAP_RejectedNSSAIinTA_encode_jer; per_type_decoder_f NGAP_RejectedNSSAIinTA_decode_aper; per_type_encoder_f NGAP_RejectedNSSAIinTA_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RelativeAMFCapacity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RelativeAMFCapacity.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RelativeAMFCapacity_free; asn_struct_print_f NGAP_RelativeAMFCapacity_print; asn_constr_check_f NGAP_RelativeAMFCapacity_constraint; +jer_type_encoder_f NGAP_RelativeAMFCapacity_encode_jer; per_type_decoder_f NGAP_RelativeAMFCapacity_decode_aper; per_type_encoder_f NGAP_RelativeAMFCapacity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RepetitionPeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RepetitionPeriod.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RepetitionPeriod_free; asn_struct_print_f NGAP_RepetitionPeriod_print; asn_constr_check_f NGAP_RepetitionPeriod_constraint; +jer_type_encoder_f NGAP_RepetitionPeriod_encode_jer; per_type_decoder_f NGAP_RepetitionPeriod_decode_aper; per_type_encoder_f NGAP_RepetitionPeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ReportAmountMDT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ReportAmountMDT.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f ReportAmountMDT_free; asn_struct_print_f ReportAmountMDT_print; asn_constr_check_f ReportAmountMDT_constraint; +jer_type_encoder_f ReportAmountMDT_encode_jer; per_type_decoder_f ReportAmountMDT_decode_aper; per_type_encoder_f ReportAmountMDT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ReportArea.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ReportArea.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f ReportArea_free; asn_struct_print_f ReportArea_print; asn_constr_check_f ReportArea_constraint; +jer_type_encoder_f ReportArea_encode_jer; per_type_decoder_f ReportArea_decode_aper; per_type_encoder_f ReportArea_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ReportIntervalMDT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ReportIntervalMDT.h
Changed
@@ -45,6 +45,7 @@ asn_struct_free_f ReportIntervalMDT_free; asn_struct_print_f ReportIntervalMDT_print; asn_constr_check_f ReportIntervalMDT_constraint; +jer_type_encoder_f ReportIntervalMDT_encode_jer; per_type_decoder_f ReportIntervalMDT_decode_aper; per_type_encoder_f ReportIntervalMDT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ResetAll.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ResetAll.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f ResetAll_free; asn_struct_print_f ResetAll_print; asn_constr_check_f ResetAll_constraint; +jer_type_encoder_f ResetAll_encode_jer; per_type_decoder_f ResetAll_decode_aper; per_type_encoder_f ResetAll_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_RoutingID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_RoutingID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_RoutingID_free; asn_struct_print_f NGAP_RoutingID_print; asn_constr_check_f NGAP_RoutingID_constraint; +jer_type_encoder_f NGAP_RoutingID_encode_jer; per_type_decoder_f NGAP_RoutingID_decode_aper; per_type_encoder_f NGAP_RoutingID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SD.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SD.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_SD_free; asn_struct_print_f NGAP_SD_print; asn_constr_check_f NGAP_SD_constraint; +jer_type_encoder_f NGAP_SD_encode_jer; per_type_decoder_f NGAP_SD_decode_aper; per_type_encoder_f NGAP_SD_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SONInformationRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SONInformationRequest.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f SONInformationRequest_free; asn_struct_print_f SONInformationRequest_print; asn_constr_check_f SONInformationRequest_constraint; +jer_type_encoder_f SONInformationRequest_encode_jer; per_type_decoder_f SONInformationRequest_decode_aper; per_type_encoder_f SONInformationRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SRVCCOperationPossible.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SRVCCOperationPossible.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f NGAP_SRVCCOperationPossible_free; asn_struct_print_f NGAP_SRVCCOperationPossible_print; asn_constr_check_f NGAP_SRVCCOperationPossible_constraint; +jer_type_encoder_f NGAP_SRVCCOperationPossible_encode_jer; per_type_decoder_f NGAP_SRVCCOperationPossible_decode_aper; per_type_encoder_f NGAP_SRVCCOperationPossible_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SST.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SST.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_SST_free; asn_struct_print_f NGAP_SST_print; asn_constr_check_f NGAP_SST_constraint; +jer_type_encoder_f NGAP_SST_encode_jer; per_type_decoder_f NGAP_SST_decode_aper; per_type_encoder_f NGAP_SST_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SecurityKey.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SecurityKey.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_SecurityKey_free; asn_struct_print_f NGAP_SecurityKey_print; asn_constr_check_f NGAP_SecurityKey_constraint; +jer_type_encoder_f NGAP_SecurityKey_encode_jer; per_type_decoder_f NGAP_SecurityKey_decode_aper; per_type_encoder_f NGAP_SecurityKey_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SensorMeasConfig.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SensorMeasConfig.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f SensorMeasConfig_free; asn_struct_print_f SensorMeasConfig_print; asn_constr_check_f SensorMeasConfig_constraint; +jer_type_encoder_f SensorMeasConfig_encode_jer; per_type_decoder_f SensorMeasConfig_decode_aper; per_type_encoder_f SensorMeasConfig_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SerialNumber.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SerialNumber.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_SerialNumber_free; asn_struct_print_f NGAP_SerialNumber_print; asn_constr_check_f NGAP_SerialNumber_constraint; +jer_type_encoder_f NGAP_SerialNumber_encode_jer; per_type_decoder_f NGAP_SerialNumber_decode_aper; per_type_encoder_f NGAP_SerialNumber_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SgNB-UE-X2AP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SgNB-UE-X2AP-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_SgNB_UE_X2AP_ID_free; asn_struct_print_f NGAP_SgNB_UE_X2AP_ID_print; asn_constr_check_f NGAP_SgNB_UE_X2AP_ID_constraint; +jer_type_encoder_f NGAP_SgNB_UE_X2AP_ID_encode_jer; per_type_decoder_f NGAP_SgNB_UE_X2AP_ID_decode_aper; per_type_encoder_f NGAP_SgNB_UE_X2AP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SourceOfUEActivityBehaviourInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SourceOfUEActivityBehaviourInformation.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f SourceOfUEActivityBehaviourInformation_free; asn_struct_print_f SourceOfUEActivityBehaviourInformation_print; asn_constr_check_f SourceOfUEActivityBehaviourInformation_constraint; +jer_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_jer; per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_aper; per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SourceToTarget-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SourceToTarget-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_SourceToTarget_TransparentContainer_free; asn_struct_print_f NGAP_SourceToTarget_TransparentContainer_print; asn_constr_check_f NGAP_SourceToTarget_TransparentContainer_constraint; +jer_type_encoder_f NGAP_SourceToTarget_TransparentContainer_encode_jer; per_type_decoder_f NGAP_SourceToTarget_TransparentContainer_decode_aper; per_type_encoder_f NGAP_SourceToTarget_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Suspend-Request-Indication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Suspend-Request-Indication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_Suspend_Request_Indication_free; asn_struct_print_f NGAP_Suspend_Request_Indication_print; asn_constr_check_f NGAP_Suspend_Request_Indication_constraint; +jer_type_encoder_f NGAP_Suspend_Request_Indication_encode_jer; per_type_decoder_f NGAP_Suspend_Request_Indication_decode_aper; per_type_encoder_f NGAP_Suspend_Request_Indication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Suspend-Response-Indication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Suspend-Response-Indication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_Suspend_Response_Indication_free; asn_struct_print_f NGAP_Suspend_Response_Indication_print; asn_constr_check_f NGAP_Suspend_Response_Indication_constraint; +jer_type_encoder_f NGAP_Suspend_Response_Indication_encode_jer; per_type_decoder_f NGAP_Suspend_Response_Indication_decode_aper; per_type_encoder_f NGAP_Suspend_Response_Indication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_SuspendIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_SuspendIndicator.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f SuspendIndicator_free; asn_struct_print_f SuspendIndicator_print; asn_constr_check_f SuspendIndicator_constraint; +jer_type_encoder_f SuspendIndicator_encode_jer; per_type_decoder_f SuspendIndicator_decode_aper; per_type_encoder_f SuspendIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TAC_free; asn_struct_print_f NGAP_TAC_print; asn_constr_check_f NGAP_TAC_constraint; +jer_type_encoder_f NGAP_TAC_encode_jer; per_type_decoder_f NGAP_TAC_decode_aper; per_type_encoder_f NGAP_TAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TNAP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TNAP-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_TNAP_ID_free; asn_struct_print_f NGAP_TNAP_ID_print; asn_constr_check_f NGAP_TNAP_ID_constraint; +jer_type_encoder_f NGAP_TNAP_ID_encode_jer; per_type_decoder_f NGAP_TNAP_ID_decode_aper; per_type_encoder_f NGAP_TNAP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TNLAddressWeightFactor.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TNLAddressWeightFactor.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TNLAddressWeightFactor_free; asn_struct_print_f NGAP_TNLAddressWeightFactor_print; asn_constr_check_f NGAP_TNLAddressWeightFactor_constraint; +jer_type_encoder_f NGAP_TNLAddressWeightFactor_encode_jer; per_type_decoder_f NGAP_TNLAddressWeightFactor_decode_aper; per_type_encoder_f NGAP_TNLAddressWeightFactor_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TNLAssociationUsage.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TNLAssociationUsage.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f TNLAssociationUsage_free; asn_struct_print_f TNLAssociationUsage_print; asn_constr_check_f TNLAssociationUsage_constraint; +jer_type_encoder_f TNLAssociationUsage_encode_jer; per_type_decoder_f TNLAssociationUsage_decode_aper; per_type_encoder_f TNLAssociationUsage_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TWAP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TWAP-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_TWAP_ID_free; asn_struct_print_f NGAP_TWAP_ID_print; asn_constr_check_f NGAP_TWAP_ID_constraint; +jer_type_encoder_f NGAP_TWAP_ID_encode_jer; per_type_decoder_f NGAP_TWAP_ID_decode_aper; per_type_encoder_f NGAP_TWAP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TargetToSource-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TargetToSource-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_TargetToSource_TransparentContainer_free; asn_struct_print_f NGAP_TargetToSource_TransparentContainer_print; asn_constr_check_f NGAP_TargetToSource_TransparentContainer_constraint; +jer_type_encoder_f NGAP_TargetToSource_TransparentContainer_encode_jer; per_type_decoder_f NGAP_TargetToSource_TransparentContainer_decode_aper; per_type_encoder_f NGAP_TargetToSource_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TargettoSource-Failure-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TargettoSource-Failure-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_TargettoSource_Failure_TransparentContainer_free; asn_struct_print_f NGAP_TargettoSource_Failure_TransparentContainer_print; asn_constr_check_f NGAP_TargettoSource_Failure_TransparentContainer_constraint; +jer_type_encoder_f NGAP_TargettoSource_Failure_TransparentContainer_encode_jer; per_type_decoder_f NGAP_TargettoSource_Failure_TransparentContainer_decode_aper; per_type_encoder_f NGAP_TargettoSource_Failure_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Threshold-RSRP.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Threshold-RSRP.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_Threshold_RSRP_free; asn_struct_print_f NGAP_Threshold_RSRP_print; asn_constr_check_f NGAP_Threshold_RSRP_constraint; +jer_type_encoder_f NGAP_Threshold_RSRP_encode_jer; per_type_decoder_f NGAP_Threshold_RSRP_decode_aper; per_type_encoder_f NGAP_Threshold_RSRP_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Threshold-RSRQ.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Threshold-RSRQ.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_Threshold_RSRQ_free; asn_struct_print_f NGAP_Threshold_RSRQ_print; asn_constr_check_f NGAP_Threshold_RSRQ_constraint; +jer_type_encoder_f NGAP_Threshold_RSRQ_encode_jer; per_type_decoder_f NGAP_Threshold_RSRQ_decode_aper; per_type_encoder_f NGAP_Threshold_RSRQ_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_Threshold-SINR.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_Threshold-SINR.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_Threshold_SINR_free; asn_struct_print_f NGAP_Threshold_SINR_print; asn_constr_check_f NGAP_Threshold_SINR_constraint; +jer_type_encoder_f NGAP_Threshold_SINR_encode_jer; per_type_decoder_f NGAP_Threshold_SINR_decode_aper; per_type_encoder_f NGAP_Threshold_SINR_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimeStamp.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimeStamp.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TimeStamp_free; asn_struct_print_f NGAP_TimeStamp_print; asn_constr_check_f NGAP_TimeStamp_constraint; +jer_type_encoder_f NGAP_TimeStamp_encode_jer; per_type_decoder_f NGAP_TimeStamp_decode_aper; per_type_encoder_f NGAP_TimeStamp_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimeToTrigger.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimeToTrigger.h
Changed
@@ -48,6 +48,7 @@ asn_struct_free_f TimeToTrigger_free; asn_struct_print_f TimeToTrigger_print; asn_constr_check_f TimeToTrigger_constraint; +jer_type_encoder_f TimeToTrigger_encode_jer; per_type_decoder_f TimeToTrigger_decode_aper; per_type_encoder_f TimeToTrigger_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimeToWait.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimeToWait.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f NGAP_TimeToWait_free; asn_struct_print_f NGAP_TimeToWait_print; asn_constr_check_f NGAP_TimeToWait_constraint; +jer_type_encoder_f NGAP_TimeToWait_encode_jer; per_type_decoder_f NGAP_TimeToWait_decode_aper; per_type_encoder_f NGAP_TimeToWait_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimeUEStayedInCell.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimeUEStayedInCell.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TimeUEStayedInCell_free; asn_struct_print_f NGAP_TimeUEStayedInCell_print; asn_constr_check_f NGAP_TimeUEStayedInCell_constraint; +jer_type_encoder_f NGAP_TimeUEStayedInCell_encode_jer; per_type_decoder_f NGAP_TimeUEStayedInCell_decode_aper; per_type_encoder_f NGAP_TimeUEStayedInCell_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimeUEStayedInCellEnhancedGranularity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimeUEStayedInCellEnhancedGranularity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TimeUEStayedInCellEnhancedGranularity_free; asn_struct_print_f NGAP_TimeUEStayedInCellEnhancedGranularity_print; asn_constr_check_f NGAP_TimeUEStayedInCellEnhancedGranularity_constraint; +jer_type_encoder_f NGAP_TimeUEStayedInCellEnhancedGranularity_encode_jer; per_type_decoder_f NGAP_TimeUEStayedInCellEnhancedGranularity_decode_aper; per_type_encoder_f NGAP_TimeUEStayedInCellEnhancedGranularity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TimerApproachForGUAMIRemoval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TimerApproachForGUAMIRemoval.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f TimerApproachForGUAMIRemoval_free; asn_struct_print_f TimerApproachForGUAMIRemoval_print; asn_constr_check_f TimerApproachForGUAMIRemoval_constraint; +jer_type_encoder_f TimerApproachForGUAMIRemoval_encode_jer; per_type_decoder_f TimerApproachForGUAMIRemoval_decode_aper; per_type_encoder_f TimerApproachForGUAMIRemoval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TraceDepth.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TraceDepth.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f TraceDepth_free; asn_struct_print_f TraceDepth_print; asn_constr_check_f TraceDepth_constraint; +jer_type_encoder_f TraceDepth_encode_jer; per_type_decoder_f TraceDepth_decode_aper; per_type_encoder_f TraceDepth_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TrafficLoadReductionIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TrafficLoadReductionIndication.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TrafficLoadReductionIndication_free; asn_struct_print_f NGAP_TrafficLoadReductionIndication_print; asn_constr_check_f NGAP_TrafficLoadReductionIndication_constraint; +jer_type_encoder_f NGAP_TrafficLoadReductionIndication_encode_jer; per_type_decoder_f NGAP_TrafficLoadReductionIndication_decode_aper; per_type_encoder_f NGAP_TrafficLoadReductionIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TransportLayerAddress.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TransportLayerAddress.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_TransportLayerAddress_free; asn_struct_print_f NGAP_TransportLayerAddress_print; asn_constr_check_f NGAP_TransportLayerAddress_constraint; +jer_type_encoder_f NGAP_TransportLayerAddress_encode_jer; per_type_decoder_f NGAP_TransportLayerAddress_decode_aper; per_type_encoder_f NGAP_TransportLayerAddress_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TriggeringMessage.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TriggeringMessage.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f TriggeringMessage_free; asn_struct_print_f TriggeringMessage_print; asn_constr_check_f TriggeringMessage_constraint; +jer_type_encoder_f TriggeringMessage_encode_jer; per_type_decoder_f TriggeringMessage_decode_aper; per_type_encoder_f TriggeringMessage_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_TypeOfError.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_TypeOfError.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f TypeOfError_free; asn_struct_print_f TypeOfError_print; asn_constr_check_f TypeOfError_constraint; +jer_type_encoder_f TypeOfError_encode_jer; per_type_decoder_f TypeOfError_decode_aper; per_type_encoder_f TypeOfError_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UE-UP-CIoT-Support.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UE-UP-CIoT-Support.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_UE_UP_CIoT_Support_free; asn_struct_print_f NGAP_UE_UP_CIoT_Support_print; asn_constr_check_f NGAP_UE_UP_CIoT_Support_constraint; +jer_type_encoder_f NGAP_UE_UP_CIoT_Support_encode_jer; per_type_decoder_f NGAP_UE_UP_CIoT_Support_decode_aper; per_type_encoder_f NGAP_UE_UP_CIoT_Support_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UECapabilityInfoRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UECapabilityInfoRequest.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_UECapabilityInfoRequest_free; asn_struct_print_f NGAP_UECapabilityInfoRequest_print; asn_constr_check_f NGAP_UECapabilityInfoRequest_constraint; +jer_type_encoder_f NGAP_UECapabilityInfoRequest_encode_jer; per_type_decoder_f NGAP_UECapabilityInfoRequest_decode_aper; per_type_encoder_f NGAP_UECapabilityInfoRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UEContextRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UEContextRequest.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_UEContextRequest_free; asn_struct_print_f NGAP_UEContextRequest_print; asn_constr_check_f NGAP_UEContextRequest_constraint; +jer_type_encoder_f NGAP_UEContextRequest_encode_jer; per_type_decoder_f NGAP_UEContextRequest_decode_aper; per_type_encoder_f NGAP_UEContextRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UEPresence.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UEPresence.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f UEPresence_free; asn_struct_print_f UEPresence_print; asn_constr_check_f UEPresence_constraint; +jer_type_encoder_f UEPresence_encode_jer; per_type_decoder_f UEPresence_decode_aper; per_type_encoder_f UEPresence_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapability.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_UERadioCapability_free; asn_struct_print_f NGAP_UERadioCapability_print; asn_constr_check_f NGAP_UERadioCapability_constraint; +jer_type_encoder_f NGAP_UERadioCapability_encode_jer; per_type_decoder_f NGAP_UERadioCapability_decode_aper; per_type_encoder_f NGAP_UERadioCapability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfEUTRA.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfEUTRA.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_UERadioCapabilityForPagingOfEUTRA_free; asn_struct_print_f NGAP_UERadioCapabilityForPagingOfEUTRA_print; asn_constr_check_f NGAP_UERadioCapabilityForPagingOfEUTRA_constraint; +jer_type_encoder_f NGAP_UERadioCapabilityForPagingOfEUTRA_encode_jer; per_type_decoder_f NGAP_UERadioCapabilityForPagingOfEUTRA_decode_aper; per_type_encoder_f NGAP_UERadioCapabilityForPagingOfEUTRA_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfNB-IoT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfNB-IoT.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_UERadioCapabilityForPagingOfNB_IoT_free; asn_struct_print_f NGAP_UERadioCapabilityForPagingOfNB_IoT_print; asn_constr_check_f NGAP_UERadioCapabilityForPagingOfNB_IoT_constraint; +jer_type_encoder_f NGAP_UERadioCapabilityForPagingOfNB_IoT_encode_jer; per_type_decoder_f NGAP_UERadioCapabilityForPagingOfNB_IoT_decode_aper; per_type_encoder_f NGAP_UERadioCapabilityForPagingOfNB_IoT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfNR.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityForPagingOfNR.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_UERadioCapabilityForPagingOfNR_free; asn_struct_print_f NGAP_UERadioCapabilityForPagingOfNR_print; asn_constr_check_f NGAP_UERadioCapabilityForPagingOfNR_constraint; +jer_type_encoder_f NGAP_UERadioCapabilityForPagingOfNR_encode_jer; per_type_decoder_f NGAP_UERadioCapabilityForPagingOfNR_decode_aper; per_type_encoder_f NGAP_UERadioCapabilityForPagingOfNR_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERadioCapabilityID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_UERadioCapabilityID_free; asn_struct_print_f NGAP_UERadioCapabilityID_print; asn_constr_check_f NGAP_UERadioCapabilityID_constraint; +jer_type_encoder_f NGAP_UERadioCapabilityID_encode_jer; per_type_decoder_f NGAP_UERadioCapabilityID_decode_aper; per_type_encoder_f NGAP_UERadioCapabilityID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UERetentionInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UERetentionInformation.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_UERetentionInformation_free; asn_struct_print_f NGAP_UERetentionInformation_print; asn_constr_check_f NGAP_UERetentionInformation_constraint; +jer_type_encoder_f NGAP_UERetentionInformation_encode_jer; per_type_decoder_f NGAP_UERetentionInformation_decode_aper; per_type_encoder_f NGAP_UERetentionInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UL-NAS-Count.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UL-NAS-Count.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_UL_NAS_Count_free; asn_struct_print_f NGAP_UL_NAS_Count_print; asn_constr_check_f NGAP_UL_NAS_Count_constraint; +jer_type_encoder_f NGAP_UL_NAS_Count_encode_jer; per_type_decoder_f NGAP_UL_NAS_Count_decode_aper; per_type_encoder_f NGAP_UL_NAS_Count_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UL-NAS-MAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UL-NAS-MAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_UL_NAS_MAC_free; asn_struct_print_f NGAP_UL_NAS_MAC_print; asn_constr_check_f NGAP_UL_NAS_MAC_constraint; +jer_type_encoder_f NGAP_UL_NAS_MAC_encode_jer; per_type_decoder_f NGAP_UL_NAS_MAC_decode_aper; per_type_encoder_f NGAP_UL_NAS_MAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_ULForwarding.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_ULForwarding.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f NGAP_ULForwarding_free; asn_struct_print_f NGAP_ULForwarding_print; asn_constr_check_f NGAP_ULForwarding_constraint; +jer_type_encoder_f NGAP_ULForwarding_encode_jer; per_type_decoder_f NGAP_ULForwarding_decode_aper; per_type_encoder_f NGAP_ULForwarding_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_URI-address.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_URI-address.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_URI_address_free; asn_struct_print_f NGAP_URI_address_print; asn_constr_check_f NGAP_URI_address_constraint; +jer_type_encoder_f NGAP_URI_address_encode_jer; per_type_decoder_f NGAP_URI_address_decode_aper; per_type_encoder_f NGAP_URI_address_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_UpdateFeedback.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_UpdateFeedback.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_UpdateFeedback_free; asn_struct_print_f NGAP_UpdateFeedback_print; asn_constr_check_f NGAP_UpdateFeedback_constraint; +jer_type_encoder_f NGAP_UpdateFeedback_encode_jer; per_type_decoder_f NGAP_UpdateFeedback_decode_aper; per_type_encoder_f NGAP_UpdateFeedback_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_VehicleUE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_VehicleUE.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f VehicleUE_free; asn_struct_print_f VehicleUE_print; asn_constr_check_f VehicleUE_constraint; +jer_type_encoder_f VehicleUE_encode_jer; per_type_decoder_f VehicleUE_decode_aper; per_type_encoder_f VehicleUE_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WLANMeasConfig.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WLANMeasConfig.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f WLANMeasConfig_free; asn_struct_print_f WLANMeasConfig_print; asn_constr_check_f WLANMeasConfig_constraint; +jer_type_encoder_f WLANMeasConfig_encode_jer; per_type_decoder_f WLANMeasConfig_decode_aper; per_type_encoder_f WLANMeasConfig_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WLANName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WLANName.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f NGAP_WLANName_free; asn_struct_print_f NGAP_WLANName_print; asn_constr_check_f NGAP_WLANName_constraint; +jer_type_encoder_f NGAP_WLANName_encode_jer; per_type_decoder_f NGAP_WLANName_decode_aper; per_type_encoder_f NGAP_WLANName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WarningAreaCoordinates.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WarningAreaCoordinates.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_WarningAreaCoordinates_free; asn_struct_print_f NGAP_WarningAreaCoordinates_print; asn_constr_check_f NGAP_WarningAreaCoordinates_constraint; +jer_type_encoder_f NGAP_WarningAreaCoordinates_encode_jer; per_type_decoder_f NGAP_WarningAreaCoordinates_decode_aper; per_type_encoder_f NGAP_WarningAreaCoordinates_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WarningMessageContents.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WarningMessageContents.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_WarningMessageContents_free; asn_struct_print_f NGAP_WarningMessageContents_print; asn_constr_check_f NGAP_WarningMessageContents_constraint; +jer_type_encoder_f NGAP_WarningMessageContents_encode_jer; per_type_decoder_f NGAP_WarningMessageContents_decode_aper; per_type_encoder_f NGAP_WarningMessageContents_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WarningSecurityInfo.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WarningSecurityInfo.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_WarningSecurityInfo_free; asn_struct_print_f NGAP_WarningSecurityInfo_print; asn_constr_check_f NGAP_WarningSecurityInfo_constraint; +jer_type_encoder_f NGAP_WarningSecurityInfo_encode_jer; per_type_decoder_f NGAP_WarningSecurityInfo_decode_aper; per_type_encoder_f NGAP_WarningSecurityInfo_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/ngap/NGAP_WarningType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/ngap/NGAP_WarningType.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f NGAP_WarningType_free; asn_struct_print_f NGAP_WarningType_print; asn_constr_check_f NGAP_WarningType_constraint; +jer_type_encoder_f NGAP_WarningType_encode_jer; per_type_decoder_f NGAP_WarningType_decode_aper; per_type_encoder_f NGAP_WarningType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_AdditionalCSFallbackIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_AdditionalCSFallbackIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_AdditionalCSFallbackIndicator_free; asn_struct_print_f S1AP_AdditionalCSFallbackIndicator_print; asn_constr_check_f S1AP_AdditionalCSFallbackIndicator_constraint; +jer_type_encoder_f S1AP_AdditionalCSFallbackIndicator_encode_jer; per_type_decoder_f S1AP_AdditionalCSFallbackIndicator_decode_aper; per_type_encoder_f S1AP_AdditionalCSFallbackIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_AdditionalRRMPriorityIndex.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_AdditionalRRMPriorityIndex.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_AdditionalRRMPriorityIndex_free; asn_struct_print_f S1AP_AdditionalRRMPriorityIndex_print; asn_constr_check_f S1AP_AdditionalRRMPriorityIndex_constraint; +jer_type_encoder_f S1AP_AdditionalRRMPriorityIndex_encode_jer; per_type_decoder_f S1AP_AdditionalRRMPriorityIndex_decode_aper; per_type_encoder_f S1AP_AdditionalRRMPriorityIndex_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_AerialUEsubscriptionInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_AerialUEsubscriptionInformation.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_AerialUEsubscriptionInformation_free; asn_struct_print_f S1AP_AerialUEsubscriptionInformation_print; asn_constr_check_f S1AP_AerialUEsubscriptionInformation_constraint; +jer_type_encoder_f S1AP_AerialUEsubscriptionInformation_encode_jer; per_type_decoder_f S1AP_AerialUEsubscriptionInformation_decode_aper; per_type_encoder_f S1AP_AerialUEsubscriptionInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_BearerType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_BearerType.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_BearerType_free; asn_struct_print_f S1AP_BearerType_print; asn_constr_check_f S1AP_BearerType_constraint; +jer_type_encoder_f S1AP_BearerType_encode_jer; per_type_decoder_f S1AP_BearerType_decode_aper; per_type_encoder_f S1AP_BearerType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_BitRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_BitRate.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_BitRate_free; asn_struct_print_f S1AP_BitRate_print; asn_constr_check_f S1AP_BitRate_constraint; +jer_type_encoder_f S1AP_BitRate_encode_jer; per_type_decoder_f S1AP_BitRate_decode_aper; per_type_encoder_f S1AP_BitRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_BluetoothMeasConfig.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_BluetoothMeasConfig.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f BluetoothMeasConfig_free; asn_struct_print_f BluetoothMeasConfig_print; asn_constr_check_f BluetoothMeasConfig_constraint; +jer_type_encoder_f BluetoothMeasConfig_encode_jer; per_type_decoder_f BluetoothMeasConfig_decode_aper; per_type_encoder_f BluetoothMeasConfig_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_BluetoothName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_BluetoothName.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_BluetoothName_free; asn_struct_print_f S1AP_BluetoothName_print; asn_constr_check_f S1AP_BluetoothName_constraint; +jer_type_encoder_f S1AP_BluetoothName_encode_jer; per_type_decoder_f S1AP_BluetoothName_decode_aper; per_type_encoder_f S1AP_BluetoothName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CE-ModeBRestricted.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CE-ModeBRestricted.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_CE_ModeBRestricted_free; asn_struct_print_f S1AP_CE_ModeBRestricted_print; asn_constr_check_f S1AP_CE_ModeBRestricted_constraint; +jer_type_encoder_f S1AP_CE_ModeBRestricted_encode_jer; per_type_decoder_f S1AP_CE_ModeBRestricted_decode_aper; per_type_encoder_f S1AP_CE_ModeBRestricted_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CE-mode-B-SupportIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CE-mode-B-SupportIndicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_CE_mode_B_SupportIndicator_free; asn_struct_print_f S1AP_CE_mode_B_SupportIndicator_print; asn_constr_check_f S1AP_CE_mode_B_SupportIndicator_constraint; +jer_type_encoder_f S1AP_CE_mode_B_SupportIndicator_encode_jer; per_type_decoder_f S1AP_CE_mode_B_SupportIndicator_decode_aper; per_type_encoder_f S1AP_CE_mode_B_SupportIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CELevel.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CELevel.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_CELevel_free; asn_struct_print_f S1AP_CELevel_print; asn_constr_check_f S1AP_CELevel_constraint; +jer_type_encoder_f S1AP_CELevel_encode_jer; per_type_decoder_f S1AP_CELevel_decode_aper; per_type_encoder_f S1AP_CELevel_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_CI_free; asn_struct_print_f S1AP_CI_print; asn_constr_check_f S1AP_CI_constraint; +jer_type_encoder_f S1AP_CI_encode_jer; per_type_decoder_f S1AP_CI_decode_aper; per_type_encoder_f S1AP_CI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CNDomain.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CNDomain.h
Changed
@@ -32,6 +32,7 @@ asn_struct_free_f S1AP_CNDomain_free; asn_struct_print_f S1AP_CNDomain_print; asn_constr_check_f S1AP_CNDomain_constraint; +jer_type_encoder_f S1AP_CNDomain_encode_jer; per_type_decoder_f S1AP_CNDomain_decode_aper; per_type_encoder_f S1AP_CNDomain_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CNType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CNType.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f CNType_free; asn_struct_print_f CNType_print; asn_constr_check_f CNType_constraint; +jer_type_encoder_f CNType_encode_jer; per_type_decoder_f CNType_decode_aper; per_type_encoder_f CNType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CSFallbackIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CSFallbackIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_CSFallbackIndicator_free; asn_struct_print_f S1AP_CSFallbackIndicator_print; asn_constr_check_f S1AP_CSFallbackIndicator_constraint; +jer_type_encoder_f S1AP_CSFallbackIndicator_encode_jer; per_type_decoder_f S1AP_CSFallbackIndicator_decode_aper; per_type_encoder_f S1AP_CSFallbackIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CSG-Id.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CSG-Id.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_CSG_Id_free; asn_struct_print_f S1AP_CSG_Id_print; asn_constr_check_f S1AP_CSG_Id_constraint; +jer_type_encoder_f S1AP_CSG_Id_encode_jer; per_type_decoder_f S1AP_CSG_Id_decode_aper; per_type_encoder_f S1AP_CSG_Id_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CSGMembershipStatus.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CSGMembershipStatus.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f CSGMembershipStatus_free; asn_struct_print_f CSGMembershipStatus_print; asn_constr_check_f CSGMembershipStatus_constraint; +jer_type_encoder_f CSGMembershipStatus_encode_jer; per_type_decoder_f CSGMembershipStatus_decode_aper; per_type_encoder_f CSGMembershipStatus_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CauseMisc.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CauseMisc.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f CauseMisc_free; asn_struct_print_f CauseMisc_print; asn_constr_check_f CauseMisc_constraint; +jer_type_encoder_f CauseMisc_encode_jer; per_type_decoder_f CauseMisc_decode_aper; per_type_encoder_f CauseMisc_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CauseNas.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CauseNas.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f CauseNas_free; asn_struct_print_f CauseNas_print; asn_constr_check_f CauseNas_constraint; +jer_type_encoder_f CauseNas_encode_jer; per_type_decoder_f CauseNas_decode_aper; per_type_encoder_f CauseNas_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CauseProtocol.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CauseProtocol.h
Changed
@@ -42,6 +42,7 @@ asn_struct_free_f CauseProtocol_free; asn_struct_print_f CauseProtocol_print; asn_constr_check_f CauseProtocol_constraint; +jer_type_encoder_f CauseProtocol_encode_jer; per_type_decoder_f CauseProtocol_decode_aper; per_type_encoder_f CauseProtocol_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CauseRadioNetwork.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CauseRadioNetwork.h
Changed
@@ -77,6 +77,7 @@ asn_struct_free_f CauseRadioNetwork_free; asn_struct_print_f CauseRadioNetwork_print; asn_constr_check_f CauseRadioNetwork_constraint; +jer_type_encoder_f CauseRadioNetwork_encode_jer; per_type_decoder_f CauseRadioNetwork_decode_aper; per_type_encoder_f CauseRadioNetwork_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CauseTransport.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CauseTransport.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f CauseTransport_free; asn_struct_print_f CauseTransport_print; asn_constr_check_f CauseTransport_constraint; +jer_type_encoder_f CauseTransport_encode_jer; per_type_decoder_f CauseTransport_decode_aper; per_type_encoder_f CauseTransport_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000HORequiredIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000HORequiredIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_Cdma2000HORequiredIndication_free; asn_struct_print_f S1AP_Cdma2000HORequiredIndication_print; asn_constr_check_f S1AP_Cdma2000HORequiredIndication_constraint; +jer_type_encoder_f S1AP_Cdma2000HORequiredIndication_encode_jer; per_type_decoder_f S1AP_Cdma2000HORequiredIndication_decode_aper; per_type_encoder_f S1AP_Cdma2000HORequiredIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000HOStatus.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000HOStatus.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_Cdma2000HOStatus_free; asn_struct_print_f S1AP_Cdma2000HOStatus_print; asn_constr_check_f S1AP_Cdma2000HOStatus_constraint; +jer_type_encoder_f S1AP_Cdma2000HOStatus_encode_jer; per_type_decoder_f S1AP_Cdma2000HOStatus_decode_aper; per_type_encoder_f S1AP_Cdma2000HOStatus_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXMEID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXMEID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000OneXMEID_free; asn_struct_print_f S1AP_Cdma2000OneXMEID_print; asn_constr_check_f S1AP_Cdma2000OneXMEID_constraint; +jer_type_encoder_f S1AP_Cdma2000OneXMEID_encode_jer; per_type_decoder_f S1AP_Cdma2000OneXMEID_decode_aper; per_type_encoder_f S1AP_Cdma2000OneXMEID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXMSI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXMSI.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000OneXMSI_free; asn_struct_print_f S1AP_Cdma2000OneXMSI_print; asn_constr_check_f S1AP_Cdma2000OneXMSI_constraint; +jer_type_encoder_f S1AP_Cdma2000OneXMSI_encode_jer; per_type_decoder_f S1AP_Cdma2000OneXMSI_decode_aper; per_type_encoder_f S1AP_Cdma2000OneXMSI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXPilot.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXPilot.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000OneXPilot_free; asn_struct_print_f S1AP_Cdma2000OneXPilot_print; asn_constr_check_f S1AP_Cdma2000OneXPilot_constraint; +jer_type_encoder_f S1AP_Cdma2000OneXPilot_encode_jer; per_type_decoder_f S1AP_Cdma2000OneXPilot_decode_aper; per_type_encoder_f S1AP_Cdma2000OneXPilot_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXRAND.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000OneXRAND.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000OneXRAND_free; asn_struct_print_f S1AP_Cdma2000OneXRAND_print; asn_constr_check_f S1AP_Cdma2000OneXRAND_constraint; +jer_type_encoder_f S1AP_Cdma2000OneXRAND_encode_jer; per_type_decoder_f S1AP_Cdma2000OneXRAND_decode_aper; per_type_encoder_f S1AP_Cdma2000OneXRAND_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000PDU.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000PDU.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000PDU_free; asn_struct_print_f S1AP_Cdma2000PDU_print; asn_constr_check_f S1AP_Cdma2000PDU_constraint; +jer_type_encoder_f S1AP_Cdma2000PDU_encode_jer; per_type_decoder_f S1AP_Cdma2000PDU_decode_aper; per_type_encoder_f S1AP_Cdma2000PDU_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000RATType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000RATType.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_Cdma2000RATType_free; asn_struct_print_f S1AP_Cdma2000RATType_print; asn_constr_check_f S1AP_Cdma2000RATType_constraint; +jer_type_encoder_f S1AP_Cdma2000RATType_encode_jer; per_type_decoder_f S1AP_Cdma2000RATType_decode_aper; per_type_encoder_f S1AP_Cdma2000RATType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000SectorID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cdma2000SectorID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Cdma2000SectorID_free; asn_struct_print_f S1AP_Cdma2000SectorID_print; asn_constr_check_f S1AP_Cdma2000SectorID_constraint; +jer_type_encoder_f S1AP_Cdma2000SectorID_encode_jer; per_type_decoder_f S1AP_Cdma2000SectorID_decode_aper; per_type_encoder_f S1AP_Cdma2000SectorID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Cell-Size.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Cell-Size.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f Cell_Size_free; asn_struct_print_f Cell_Size_print; asn_constr_check_f Cell_Size_constraint; +jer_type_encoder_f Cell_Size_encode_jer; per_type_decoder_f Cell_Size_decode_aper; per_type_encoder_f Cell_Size_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CellAccessMode.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CellAccessMode.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f CellAccessMode_free; asn_struct_print_f CellAccessMode_print; asn_constr_check_f CellAccessMode_constraint; +jer_type_encoder_f CellAccessMode_encode_jer; per_type_decoder_f CellAccessMode_decode_aper; per_type_encoder_f CellAccessMode_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_CellIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_CellIdentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_CellIdentity_free; asn_struct_print_f S1AP_CellIdentity_print; asn_constr_check_f S1AP_CellIdentity_constraint; +jer_type_encoder_f S1AP_CellIdentity_encode_jer; per_type_decoder_f S1AP_CellIdentity_decode_aper; per_type_encoder_f S1AP_CellIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ConcurrentWarningMessageIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ConcurrentWarningMessageIndicator.h
Changed
@@ -31,6 +31,7 @@ asn_struct_free_f S1AP_ConcurrentWarningMessageIndicator_free; asn_struct_print_f S1AP_ConcurrentWarningMessageIndicator_print; asn_constr_check_f S1AP_ConcurrentWarningMessageIndicator_constraint; +jer_type_encoder_f S1AP_ConcurrentWarningMessageIndicator_encode_jer; per_type_decoder_f S1AP_ConcurrentWarningMessageIndicator_decode_aper; per_type_encoder_f S1AP_ConcurrentWarningMessageIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Correlation-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Correlation-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Correlation_ID_free; asn_struct_print_f S1AP_Correlation_ID_print; asn_constr_check_f S1AP_Correlation_ID_constraint; +jer_type_encoder_f S1AP_Correlation_ID_encode_jer; per_type_decoder_f S1AP_Correlation_ID_decode_aper; per_type_encoder_f S1AP_Correlation_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Coverage-Level.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Coverage-Level.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_Coverage_Level_free; asn_struct_print_f S1AP_Coverage_Level_print; asn_constr_check_f S1AP_Coverage_Level_constraint; +jer_type_encoder_f S1AP_Coverage_Level_encode_jer; per_type_decoder_f S1AP_Coverage_Level_decode_aper; per_type_encoder_f S1AP_Coverage_Level_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Criticality.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Criticality.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f Criticality_free; asn_struct_print_f Criticality_print; asn_constr_check_f Criticality_constraint; +jer_type_encoder_f Criticality_encode_jer; per_type_decoder_f Criticality_decode_aper; per_type_encoder_f Criticality_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DCN-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DCN-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_DCN_ID_free; asn_struct_print_f S1AP_DCN_ID_print; asn_constr_check_f S1AP_DCN_ID_constraint; +jer_type_encoder_f S1AP_DCN_ID_encode_jer; per_type_decoder_f S1AP_DCN_ID_decode_aper; per_type_encoder_f S1AP_DCN_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DL-Forwarding.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DL-Forwarding.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f DL_Forwarding_free; asn_struct_print_f DL_Forwarding_print; asn_constr_check_f DL_Forwarding_constraint; +jer_type_encoder_f DL_Forwarding_encode_jer; per_type_decoder_f DL_Forwarding_decode_aper; per_type_encoder_f DL_Forwarding_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DL-NAS-MAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DL-NAS-MAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_DL_NAS_MAC_free; asn_struct_print_f S1AP_DL_NAS_MAC_print; asn_constr_check_f S1AP_DL_NAS_MAC_constraint; +jer_type_encoder_f S1AP_DL_NAS_MAC_encode_jer; per_type_decoder_f S1AP_DL_NAS_MAC_decode_aper; per_type_encoder_f S1AP_DL_NAS_MAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DLNASPDUDeliveryAckRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DLNASPDUDeliveryAckRequest.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_DLNASPDUDeliveryAckRequest_free; asn_struct_print_f S1AP_DLNASPDUDeliveryAckRequest_print; asn_constr_check_f S1AP_DLNASPDUDeliveryAckRequest_constraint; +jer_type_encoder_f S1AP_DLNASPDUDeliveryAckRequest_encode_jer; per_type_decoder_f S1AP_DLNASPDUDeliveryAckRequest_decode_aper; per_type_encoder_f S1AP_DLNASPDUDeliveryAckRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Data-Forwarding-Not-Possible.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Data-Forwarding-Not-Possible.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_Data_Forwarding_Not_Possible_free; asn_struct_print_f S1AP_Data_Forwarding_Not_Possible_print; asn_constr_check_f S1AP_Data_Forwarding_Not_Possible_constraint; +jer_type_encoder_f S1AP_Data_Forwarding_Not_Possible_encode_jer; per_type_decoder_f S1AP_Data_Forwarding_Not_Possible_decode_aper; per_type_encoder_f S1AP_Data_Forwarding_Not_Possible_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DataCodingScheme.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DataCodingScheme.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_DataCodingScheme_free; asn_struct_print_f S1AP_DataCodingScheme_print; asn_constr_check_f S1AP_DataCodingScheme_constraint; +jer_type_encoder_f S1AP_DataCodingScheme_encode_jer; per_type_decoder_f S1AP_DataCodingScheme_decode_aper; per_type_encoder_f S1AP_DataCodingScheme_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_DataSize.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_DataSize.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_DataSize_free; asn_struct_print_f S1AP_DataSize_print; asn_constr_check_f S1AP_DataSize_constraint; +jer_type_encoder_f S1AP_DataSize_encode_jer; per_type_decoder_f S1AP_DataSize_decode_aper; per_type_encoder_f S1AP_DataSize_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Direct-Forwarding-Path-Availability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Direct-Forwarding-Path-Availability.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_Direct_Forwarding_Path_Availability_free; asn_struct_print_f S1AP_Direct_Forwarding_Path_Availability_print; asn_constr_check_f S1AP_Direct_Forwarding_Path_Availability_constraint; +jer_type_encoder_f S1AP_Direct_Forwarding_Path_Availability_encode_jer; per_type_decoder_f S1AP_Direct_Forwarding_Path_Availability_decode_aper; per_type_encoder_f S1AP_Direct_Forwarding_Path_Availability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RAB-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RAB-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_E_RAB_ID_free; asn_struct_print_f S1AP_E_RAB_ID_print; asn_constr_check_f S1AP_E_RAB_ID_constraint; +jer_type_encoder_f S1AP_E_RAB_ID_encode_jer; per_type_decoder_f S1AP_E_RAB_ID_decode_aper; per_type_encoder_f S1AP_E_RAB_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RAB-IE-ContainerList.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RAB-IE-ContainerList.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P0_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P0_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P0_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P0_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P0_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P0_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P1_constr_2; @@ -43,6 +44,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P1_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P1_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P1_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P1_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P1_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P1_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P2_constr_3; @@ -50,6 +52,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P2_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P2_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P2_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P2_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P2_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P2_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P3_constr_4; @@ -57,6 +60,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P3_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P3_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P3_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P3_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P3_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P3_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P4_constr_5; @@ -64,6 +68,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P4_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P4_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P4_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P4_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P4_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P4_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P5_constr_6; @@ -71,6 +76,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P5_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P5_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P5_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P5_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P5_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P5_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P6_constr_7; @@ -78,6 +84,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P6_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P6_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P6_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P6_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P6_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P6_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P7_constr_8; @@ -85,6 +92,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P7_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P7_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P7_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P7_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P7_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P7_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P8_constr_9; @@ -92,6 +100,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P8_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P8_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P8_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P8_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P8_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P8_encode_aper; extern asn_per_constraints_t asn_PER_type_S1AP_E_RAB_IE_ContainerList_1267P9_constr_10; @@ -99,6 +108,7 @@ asn_struct_free_f S1AP_E_RAB_IE_ContainerList_1267P9_free; asn_struct_print_f S1AP_E_RAB_IE_ContainerList_1267P9_print; asn_constr_check_f S1AP_E_RAB_IE_ContainerList_1267P9_constraint; +jer_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P9_encode_jer; per_type_decoder_f S1AP_E_RAB_IE_ContainerList_1267P9_decode_aper; per_type_encoder_f S1AP_E_RAB_IE_ContainerList_1267P9_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABAdmittedList.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABAdmittedList.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABAdmittedList_free; asn_struct_print_f S1AP_E_RABAdmittedList_print; asn_constr_check_f S1AP_E_RABAdmittedList_constraint; +jer_type_encoder_f S1AP_E_RABAdmittedList_encode_jer; per_type_decoder_f S1AP_E_RABAdmittedList_decode_aper; per_type_encoder_f S1AP_E_RABAdmittedList_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedToResumeListResumeReq.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedToResumeListResumeReq.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABFailedToResumeListResumeReq_free; asn_struct_print_f S1AP_E_RABFailedToResumeListResumeReq_print; asn_constr_check_f S1AP_E_RABFailedToResumeListResumeReq_constraint; +jer_type_encoder_f S1AP_E_RABFailedToResumeListResumeReq_encode_jer; per_type_decoder_f S1AP_E_RABFailedToResumeListResumeReq_decode_aper; per_type_encoder_f S1AP_E_RABFailedToResumeListResumeReq_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedToResumeListResumeRes.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedToResumeListResumeRes.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABFailedToResumeListResumeRes_free; asn_struct_print_f S1AP_E_RABFailedToResumeListResumeRes_print; asn_constr_check_f S1AP_E_RABFailedToResumeListResumeRes_constraint; +jer_type_encoder_f S1AP_E_RABFailedToResumeListResumeRes_encode_jer; per_type_decoder_f S1AP_E_RABFailedToResumeListResumeRes_decode_aper; per_type_encoder_f S1AP_E_RABFailedToResumeListResumeRes_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedtoSetupListHOReqAck.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABFailedtoSetupListHOReqAck.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABFailedtoSetupListHOReqAck_free; asn_struct_print_f S1AP_E_RABFailedtoSetupListHOReqAck_print; asn_constr_check_f S1AP_E_RABFailedtoSetupListHOReqAck_constraint; +jer_type_encoder_f S1AP_E_RABFailedtoSetupListHOReqAck_encode_jer; per_type_decoder_f S1AP_E_RABFailedtoSetupListHOReqAck_decode_aper; per_type_encoder_f S1AP_E_RABFailedtoSetupListHOReqAck_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABNotToBeModifiedListBearerModInd.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABNotToBeModifiedListBearerModInd.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABNotToBeModifiedListBearerModInd_free; asn_struct_print_f S1AP_E_RABNotToBeModifiedListBearerModInd_print; asn_constr_check_f S1AP_E_RABNotToBeModifiedListBearerModInd_constraint; +jer_type_encoder_f S1AP_E_RABNotToBeModifiedListBearerModInd_encode_jer; per_type_decoder_f S1AP_E_RABNotToBeModifiedListBearerModInd_decode_aper; per_type_encoder_f S1AP_E_RABNotToBeModifiedListBearerModInd_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABSubjecttoDataForwardingList.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABSubjecttoDataForwardingList.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABSubjecttoDataForwardingList_free; asn_struct_print_f S1AP_E_RABSubjecttoDataForwardingList_print; asn_constr_check_f S1AP_E_RABSubjecttoDataForwardingList_constraint; +jer_type_encoder_f S1AP_E_RABSubjecttoDataForwardingList_encode_jer; per_type_decoder_f S1AP_E_RABSubjecttoDataForwardingList_decode_aper; per_type_encoder_f S1AP_E_RABSubjecttoDataForwardingList_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeModifiedListBearerModInd.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeModifiedListBearerModInd.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABToBeModifiedListBearerModInd_free; asn_struct_print_f S1AP_E_RABToBeModifiedListBearerModInd_print; asn_constr_check_f S1AP_E_RABToBeModifiedListBearerModInd_constraint; +jer_type_encoder_f S1AP_E_RABToBeModifiedListBearerModInd_encode_jer; per_type_decoder_f S1AP_E_RABToBeModifiedListBearerModInd_decode_aper; per_type_encoder_f S1AP_E_RABToBeModifiedListBearerModInd_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSetupListHOReq.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSetupListHOReq.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABToBeSetupListHOReq_free; asn_struct_print_f S1AP_E_RABToBeSetupListHOReq_print; asn_constr_check_f S1AP_E_RABToBeSetupListHOReq_constraint; +jer_type_encoder_f S1AP_E_RABToBeSetupListHOReq_encode_jer; per_type_decoder_f S1AP_E_RABToBeSetupListHOReq_decode_aper; per_type_encoder_f S1AP_E_RABToBeSetupListHOReq_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSwitchedDLList.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSwitchedDLList.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABToBeSwitchedDLList_free; asn_struct_print_f S1AP_E_RABToBeSwitchedDLList_print; asn_constr_check_f S1AP_E_RABToBeSwitchedDLList_constraint; +jer_type_encoder_f S1AP_E_RABToBeSwitchedDLList_encode_jer; per_type_decoder_f S1AP_E_RABToBeSwitchedDLList_decode_aper; per_type_encoder_f S1AP_E_RABToBeSwitchedDLList_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSwitchedULList.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-RABToBeSwitchedULList.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_E_RABToBeSwitchedULList_free; asn_struct_print_f S1AP_E_RABToBeSwitchedULList_print; asn_constr_check_f S1AP_E_RABToBeSwitchedULList_constraint; +jer_type_encoder_f S1AP_E_RABToBeSwitchedULList_encode_jer; per_type_decoder_f S1AP_E_RABToBeSwitchedULList_decode_aper; per_type_encoder_f S1AP_E_RABToBeSwitchedULList_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_E-UTRAN-Trace-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_E-UTRAN-Trace-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_E_UTRAN_Trace_ID_free; asn_struct_print_f S1AP_E_UTRAN_Trace_ID_print; asn_constr_check_f S1AP_E_UTRAN_Trace_ID_constraint; +jer_type_encoder_f S1AP_E_UTRAN_Trace_ID_encode_jer; per_type_decoder_f S1AP_E_UTRAN_Trace_ID_decode_aper; per_type_encoder_f S1AP_E_UTRAN_Trace_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EARFCN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EARFCN.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_EARFCN_free; asn_struct_print_f S1AP_EARFCN_print; asn_constr_check_f S1AP_EARFCN_constraint; +jer_type_encoder_f S1AP_EARFCN_encode_jer; per_type_decoder_f S1AP_EARFCN_decode_aper; per_type_encoder_f S1AP_EARFCN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EDT-Session.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EDT-Session.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_EDT_Session_free; asn_struct_print_f S1AP_EDT_Session_print; asn_constr_check_f S1AP_EDT_Session_constraint; +jer_type_encoder_f S1AP_EDT_Session_encode_jer; per_type_decoder_f S1AP_EDT_Session_decode_aper; per_type_encoder_f S1AP_EDT_Session_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ENB-UE-S1AP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ENB-UE-S1AP-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ENB_UE_S1AP_ID_free; asn_struct_print_f S1AP_ENB_UE_S1AP_ID_print; asn_constr_check_f S1AP_ENB_UE_S1AP_ID_constraint; +jer_type_encoder_f S1AP_ENB_UE_S1AP_ID_encode_jer; per_type_decoder_f S1AP_ENB_UE_S1AP_ID_decode_aper; per_type_encoder_f S1AP_ENB_UE_S1AP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ENBname.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ENBname.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_ENBname_free; asn_struct_print_f S1AP_ENBname_print; asn_constr_check_f S1AP_ENBname_constraint; +jer_type_encoder_f S1AP_ENBname_encode_jer; per_type_decoder_f S1AP_ENBname_decode_aper; per_type_encoder_f S1AP_ENBname_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EUTRANRoundTripDelayEstimationInfo.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EUTRANRoundTripDelayEstimationInfo.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_EUTRANRoundTripDelayEstimationInfo_free; asn_struct_print_f S1AP_EUTRANRoundTripDelayEstimationInfo_print; asn_constr_check_f S1AP_EUTRANRoundTripDelayEstimationInfo_constraint; +jer_type_encoder_f S1AP_EUTRANRoundTripDelayEstimationInfo_encode_jer; per_type_decoder_f S1AP_EUTRANRoundTripDelayEstimationInfo_decode_aper; per_type_encoder_f S1AP_EUTRANRoundTripDelayEstimationInfo_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EmergencyAreaID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EmergencyAreaID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_EmergencyAreaID_free; asn_struct_print_f S1AP_EmergencyAreaID_print; asn_constr_check_f S1AP_EmergencyAreaID_constraint; +jer_type_encoder_f S1AP_EmergencyAreaID_encode_jer; per_type_decoder_f S1AP_EmergencyAreaID_decode_aper; per_type_encoder_f S1AP_EmergencyAreaID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EmergencyIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EmergencyIndicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_EmergencyIndicator_free; asn_struct_print_f S1AP_EmergencyIndicator_print; asn_constr_check_f S1AP_EmergencyIndicator_constraint; +jer_type_encoder_f S1AP_EmergencyIndicator_encode_jer; per_type_decoder_f S1AP_EmergencyIndicator_decode_aper; per_type_encoder_f S1AP_EmergencyIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_En-gNB-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_En-gNB-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_En_gNB_ID_free; asn_struct_print_f S1AP_En_gNB_ID_print; asn_constr_check_f S1AP_En_gNB_ID_constraint; +jer_type_encoder_f S1AP_En_gNB_ID_encode_jer; per_type_decoder_f S1AP_En_gNB_ID_decode_aper; per_type_encoder_f S1AP_En_gNB_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EncryptionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EncryptionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_EncryptionAlgorithms_free; asn_struct_print_f S1AP_EncryptionAlgorithms_print; asn_constr_check_f S1AP_EncryptionAlgorithms_constraint; +jer_type_encoder_f S1AP_EncryptionAlgorithms_encode_jer; per_type_decoder_f S1AP_EncryptionAlgorithms_decode_aper; per_type_encoder_f S1AP_EncryptionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EndIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EndIndication.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_EndIndication_free; asn_struct_print_f S1AP_EndIndication_print; asn_constr_check_f S1AP_EndIndication_constraint; +jer_type_encoder_f S1AP_EndIndication_encode_jer; per_type_decoder_f S1AP_EndIndication_decode_aper; per_type_encoder_f S1AP_EndIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EnhancedCoverageRestricted.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EnhancedCoverageRestricted.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_EnhancedCoverageRestricted_free; asn_struct_print_f S1AP_EnhancedCoverageRestricted_print; asn_constr_check_f S1AP_EnhancedCoverageRestricted_constraint; +jer_type_encoder_f S1AP_EnhancedCoverageRestricted_encode_jer; per_type_decoder_f S1AP_EnhancedCoverageRestricted_decode_aper; per_type_encoder_f S1AP_EnhancedCoverageRestricted_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Ethernet-Type.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Ethernet-Type.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_Ethernet_Type_free; asn_struct_print_f S1AP_Ethernet_Type_print; asn_constr_check_f S1AP_Ethernet_Type_constraint; +jer_type_encoder_f S1AP_Ethernet_Type_encode_jer; per_type_decoder_f S1AP_Ethernet_Type_decode_aper; per_type_encoder_f S1AP_Ethernet_Type_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_EventType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_EventType.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f EventType_free; asn_struct_print_f EventType_print; asn_constr_check_f EventType_constraint; +jer_type_encoder_f EventType_encode_jer; per_type_decoder_f EventType_decode_aper; per_type_encoder_f EventType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedActivityPeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedActivityPeriod.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ExpectedActivityPeriod_free; asn_struct_print_f S1AP_ExpectedActivityPeriod_print; asn_constr_check_f S1AP_ExpectedActivityPeriod_constraint; +jer_type_encoder_f S1AP_ExpectedActivityPeriod_encode_jer; per_type_decoder_f S1AP_ExpectedActivityPeriod_decode_aper; per_type_encoder_f S1AP_ExpectedActivityPeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedHOInterval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedHOInterval.h
Changed
@@ -42,6 +42,7 @@ asn_struct_free_f ExpectedHOInterval_free; asn_struct_print_f ExpectedHOInterval_print; asn_constr_check_f ExpectedHOInterval_constraint; +jer_type_encoder_f ExpectedHOInterval_encode_jer; per_type_decoder_f ExpectedHOInterval_decode_aper; per_type_encoder_f ExpectedHOInterval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedIdlePeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExpectedIdlePeriod.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ExpectedIdlePeriod_free; asn_struct_print_f S1AP_ExpectedIdlePeriod_print; asn_constr_check_f S1AP_ExpectedIdlePeriod_constraint; +jer_type_encoder_f S1AP_ExpectedIdlePeriod_encode_jer; per_type_decoder_f S1AP_ExpectedIdlePeriod_decode_aper; per_type_encoder_f S1AP_ExpectedIdlePeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Extended-UEIdentityIndexValue.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Extended-UEIdentityIndexValue.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Extended_UEIdentityIndexValue_free; asn_struct_print_f S1AP_Extended_UEIdentityIndexValue_print; asn_constr_check_f S1AP_Extended_UEIdentityIndexValue_constraint; +jer_type_encoder_f S1AP_Extended_UEIdentityIndexValue_encode_jer; per_type_decoder_f S1AP_Extended_UEIdentityIndexValue_decode_aper; per_type_encoder_f S1AP_Extended_UEIdentityIndexValue_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedBitRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedBitRate.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_ExtendedBitRate_free; asn_struct_print_f S1AP_ExtendedBitRate_print; asn_constr_check_f S1AP_ExtendedBitRate_constraint; +jer_type_encoder_f S1AP_ExtendedBitRate_encode_jer; per_type_decoder_f S1AP_ExtendedBitRate_decode_aper; per_type_encoder_f S1AP_ExtendedBitRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedRNC-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedRNC-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ExtendedRNC_ID_free; asn_struct_print_f S1AP_ExtendedRNC_ID_print; asn_constr_check_f S1AP_ExtendedRNC_ID_constraint; +jer_type_encoder_f S1AP_ExtendedRNC_ID_encode_jer; per_type_decoder_f S1AP_ExtendedRNC_ID_decode_aper; per_type_encoder_f S1AP_ExtendedRNC_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedRepetitionPeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ExtendedRepetitionPeriod.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_ExtendedRepetitionPeriod_free; asn_struct_print_f S1AP_ExtendedRepetitionPeriod_print; asn_constr_check_f S1AP_ExtendedRepetitionPeriod_constraint; +jer_type_encoder_f S1AP_ExtendedRepetitionPeriod_encode_jer; per_type_decoder_f S1AP_ExtendedRepetitionPeriod_decode_aper; per_type_encoder_f S1AP_ExtendedRepetitionPeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_FiveGSTAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_FiveGSTAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_FiveGSTAC_free; asn_struct_print_f S1AP_FiveGSTAC_print; asn_constr_check_f S1AP_FiveGSTAC_constraint; +jer_type_encoder_f S1AP_FiveGSTAC_encode_jer; per_type_decoder_f S1AP_FiveGSTAC_decode_aper; per_type_encoder_f S1AP_FiveGSTAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_FiveQI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_FiveQI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_FiveQI_free; asn_struct_print_f S1AP_FiveQI_print; asn_constr_check_f S1AP_FiveQI_constraint; +jer_type_encoder_f S1AP_FiveQI_encode_jer; per_type_decoder_f S1AP_FiveQI_decode_aper; per_type_encoder_f S1AP_FiveQI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ForbiddenInterRATs.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ForbiddenInterRATs.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f ForbiddenInterRATs_free; asn_struct_print_f ForbiddenInterRATs_print; asn_constr_check_f ForbiddenInterRATs_constraint; +jer_type_encoder_f ForbiddenInterRATs_encode_jer; per_type_decoder_f ForbiddenInterRATs_decode_aper; per_type_encoder_f ForbiddenInterRATs_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_GNB-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_GNB-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_GNB_ID_free; asn_struct_print_f S1AP_GNB_ID_print; asn_constr_check_f S1AP_GNB_ID_constraint; +jer_type_encoder_f S1AP_GNB_ID_encode_jer; per_type_decoder_f S1AP_GNB_ID_decode_aper; per_type_encoder_f S1AP_GNB_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_GTP-TEID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_GTP-TEID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_GTP_TEID_free; asn_struct_print_f S1AP_GTP_TEID_print; asn_constr_check_f S1AP_GTP_TEID_constraint; +jer_type_encoder_f S1AP_GTP_TEID_encode_jer; per_type_decoder_f S1AP_GTP_TEID_decode_aper; per_type_encoder_f S1AP_GTP_TEID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_GUMMEIType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_GUMMEIType.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f S1AP_GUMMEIType_free; asn_struct_print_f S1AP_GUMMEIType_print; asn_constr_check_f S1AP_GUMMEIType_constraint; +jer_type_encoder_f S1AP_GUMMEIType_encode_jer; per_type_decoder_f S1AP_GUMMEIType_decode_aper; per_type_encoder_f S1AP_GUMMEIType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_GWContextReleaseIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_GWContextReleaseIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_GWContextReleaseIndication_free; asn_struct_print_f S1AP_GWContextReleaseIndication_print; asn_constr_check_f S1AP_GWContextReleaseIndication_constraint; +jer_type_encoder_f S1AP_GWContextReleaseIndication_encode_jer; per_type_decoder_f S1AP_GWContextReleaseIndication_decode_aper; per_type_encoder_f S1AP_GWContextReleaseIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_HFN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_HFN.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_HFN_free; asn_struct_print_f S1AP_HFN_print; asn_constr_check_f S1AP_HFN_constraint; +jer_type_encoder_f S1AP_HFN_encode_jer; per_type_decoder_f S1AP_HFN_decode_aper; per_type_encoder_f S1AP_HFN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_HFNModified.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_HFNModified.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_HFNModified_free; asn_struct_print_f S1AP_HFNModified_print; asn_constr_check_f S1AP_HFNModified_constraint; +jer_type_encoder_f S1AP_HFNModified_encode_jer; per_type_decoder_f S1AP_HFNModified_decode_aper; per_type_encoder_f S1AP_HFNModified_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_HFNforPDCP-SNlength18.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_HFNforPDCP-SNlength18.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_HFNforPDCP_SNlength18_free; asn_struct_print_f S1AP_HFNforPDCP_SNlength18_print; asn_constr_check_f S1AP_HFNforPDCP_SNlength18_constraint; +jer_type_encoder_f S1AP_HFNforPDCP_SNlength18_encode_jer; per_type_decoder_f S1AP_HFNforPDCP_SNlength18_decode_aper; per_type_encoder_f S1AP_HFNforPDCP_SNlength18_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_HandoverFlag.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_HandoverFlag.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_HandoverFlag_free; asn_struct_print_f S1AP_HandoverFlag_print; asn_constr_check_f S1AP_HandoverFlag_constraint; +jer_type_encoder_f S1AP_HandoverFlag_encode_jer; per_type_decoder_f S1AP_HandoverFlag_decode_aper; per_type_encoder_f S1AP_HandoverFlag_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_HandoverType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_HandoverType.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f S1AP_HandoverType_free; asn_struct_print_f S1AP_HandoverType_print; asn_constr_check_f S1AP_HandoverType_constraint; +jer_type_encoder_f S1AP_HandoverType_encode_jer; per_type_decoder_f S1AP_HandoverType_decode_aper; per_type_encoder_f S1AP_HandoverType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Authorized.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Authorized.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_IAB_Authorized_free; asn_struct_print_f S1AP_IAB_Authorized_print; asn_constr_check_f S1AP_IAB_Authorized_constraint; +jer_type_encoder_f S1AP_IAB_Authorized_encode_jer; per_type_decoder_f S1AP_IAB_Authorized_decode_aper; per_type_encoder_f S1AP_IAB_Authorized_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Node-Indication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Node-Indication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_IAB_Node_Indication_free; asn_struct_print_f S1AP_IAB_Node_Indication_print; asn_constr_check_f S1AP_IAB_Node_Indication_constraint; +jer_type_encoder_f S1AP_IAB_Node_Indication_encode_jer; per_type_decoder_f S1AP_IAB_Node_Indication_decode_aper; per_type_encoder_f S1AP_IAB_Node_Indication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Supported.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IAB-Supported.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_IAB_Supported_free; asn_struct_print_f S1AP_IAB_Supported_print; asn_constr_check_f S1AP_IAB_Supported_constraint; +jer_type_encoder_f S1AP_IAB_Supported_encode_jer; per_type_decoder_f S1AP_IAB_Supported_decode_aper; per_type_encoder_f S1AP_IAB_Supported_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IMSI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IMSI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_IMSI_free; asn_struct_print_f S1AP_IMSI_print; asn_constr_check_f S1AP_IMSI_constraint; +jer_type_encoder_f S1AP_IMSI_encode_jer; per_type_decoder_f S1AP_IMSI_decode_aper; per_type_encoder_f S1AP_IMSI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IMSvoiceEPSfallbackfrom5G.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IMSvoiceEPSfallbackfrom5G.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_IMSvoiceEPSfallbackfrom5G_free; asn_struct_print_f S1AP_IMSvoiceEPSfallbackfrom5G_print; asn_constr_check_f S1AP_IMSvoiceEPSfallbackfrom5G_constraint; +jer_type_encoder_f S1AP_IMSvoiceEPSfallbackfrom5G_encode_jer; per_type_decoder_f S1AP_IMSvoiceEPSfallbackfrom5G_decode_aper; per_type_encoder_f S1AP_IMSvoiceEPSfallbackfrom5G_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IntegrityProtectionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IntegrityProtectionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_IntegrityProtectionAlgorithms_free; asn_struct_print_f S1AP_IntegrityProtectionAlgorithms_print; asn_constr_check_f S1AP_IntegrityProtectionAlgorithms_constraint; +jer_type_encoder_f S1AP_IntegrityProtectionAlgorithms_encode_jer; per_type_decoder_f S1AP_IntegrityProtectionAlgorithms_decode_aper; per_type_encoder_f S1AP_IntegrityProtectionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IntendedNumberOfPagingAttempts.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IntendedNumberOfPagingAttempts.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_IntendedNumberOfPagingAttempts_free; asn_struct_print_f S1AP_IntendedNumberOfPagingAttempts_print; asn_constr_check_f S1AP_IntendedNumberOfPagingAttempts_constraint; +jer_type_encoder_f S1AP_IntendedNumberOfPagingAttempts_encode_jer; per_type_decoder_f S1AP_IntendedNumberOfPagingAttempts_decode_aper; per_type_encoder_f S1AP_IntendedNumberOfPagingAttempts_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_InterfacesToTrace.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_InterfacesToTrace.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_InterfacesToTrace_free; asn_struct_print_f S1AP_InterfacesToTrace_print; asn_constr_check_f S1AP_InterfacesToTrace_constraint; +jer_type_encoder_f S1AP_InterfacesToTrace_encode_jer; per_type_decoder_f S1AP_InterfacesToTrace_decode_aper; per_type_encoder_f S1AP_InterfacesToTrace_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_IntersystemSONConfigurationTransfer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_IntersystemSONConfigurationTransfer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_IntersystemSONConfigurationTransfer_free; asn_struct_print_f S1AP_IntersystemSONConfigurationTransfer_print; asn_constr_check_f S1AP_IntersystemSONConfigurationTransfer_constraint; +jer_type_encoder_f S1AP_IntersystemSONConfigurationTransfer_encode_jer; per_type_decoder_f S1AP_IntersystemSONConfigurationTransfer_decode_aper; per_type_encoder_f S1AP_IntersystemSONConfigurationTransfer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_KillAllWarningMessages.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_KillAllWarningMessages.h
Changed
@@ -31,6 +31,7 @@ asn_struct_free_f S1AP_KillAllWarningMessages_free; asn_struct_print_f S1AP_KillAllWarningMessages_print; asn_constr_check_f S1AP_KillAllWarningMessages_constraint; +jer_type_encoder_f S1AP_KillAllWarningMessages_encode_jer; per_type_decoder_f S1AP_KillAllWarningMessages_decode_aper; per_type_encoder_f S1AP_KillAllWarningMessages_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_L3-Information.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_L3-Information.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_L3_Information_free; asn_struct_print_f S1AP_L3_Information_print; asn_constr_check_f S1AP_L3_Information_constraint; +jer_type_encoder_f S1AP_L3_Information_encode_jer; per_type_decoder_f S1AP_L3_Information_decode_aper; per_type_encoder_f S1AP_L3_Information_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_LAC_free; asn_struct_print_f S1AP_LAC_print; asn_constr_check_f S1AP_LAC_constraint; +jer_type_encoder_f S1AP_LAC_encode_jer; per_type_decoder_f S1AP_LAC_decode_aper; per_type_encoder_f S1AP_LAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LHN-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LHN-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_LHN_ID_free; asn_struct_print_f S1AP_LHN_ID_print; asn_constr_check_f S1AP_LHN_ID_constraint; +jer_type_encoder_f S1AP_LHN_ID_encode_jer; per_type_decoder_f S1AP_LHN_ID_decode_aper; per_type_encoder_f S1AP_LHN_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LPPa-PDU.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LPPa-PDU.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_LPPa_PDU_free; asn_struct_print_f S1AP_LPPa_PDU_print; asn_constr_check_f S1AP_LPPa_PDU_constraint; +jer_type_encoder_f S1AP_LPPa_PDU_encode_jer; per_type_decoder_f S1AP_LPPa_PDU_decode_aper; per_type_encoder_f S1AP_LPPa_PDU_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LTE-M-Indication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LTE-M-Indication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_LTE_M_Indication_free; asn_struct_print_f S1AP_LTE_M_Indication_print; asn_constr_check_f S1AP_LTE_M_Indication_constraint; +jer_type_encoder_f S1AP_LTE_M_Indication_encode_jer; per_type_decoder_f S1AP_LTE_M_Indication_decode_aper; per_type_encoder_f S1AP_LTE_M_Indication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LastVisitedNGRANCellInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LastVisitedNGRANCellInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_LastVisitedNGRANCellInformation_free; asn_struct_print_f S1AP_LastVisitedNGRANCellInformation_print; asn_constr_check_f S1AP_LastVisitedNGRANCellInformation_constraint; +jer_type_encoder_f S1AP_LastVisitedNGRANCellInformation_encode_jer; per_type_decoder_f S1AP_LastVisitedNGRANCellInformation_decode_aper; per_type_encoder_f S1AP_LastVisitedNGRANCellInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LastVisitedUTRANCellInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LastVisitedUTRANCellInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_LastVisitedUTRANCellInformation_free; asn_struct_print_f S1AP_LastVisitedUTRANCellInformation_print; asn_constr_check_f S1AP_LastVisitedUTRANCellInformation_constraint; +jer_type_encoder_f S1AP_LastVisitedUTRANCellInformation_encode_jer; per_type_decoder_f S1AP_LastVisitedUTRANCellInformation_decode_aper; per_type_encoder_f S1AP_LastVisitedUTRANCellInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Links-to-log.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Links-to-log.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f Links_to_log_free; asn_struct_print_f Links_to_log_print; asn_constr_check_f Links_to_log_constraint; +jer_type_encoder_f Links_to_log_encode_jer; per_type_decoder_f Links_to_log_decode_aper; per_type_encoder_f Links_to_log_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LoggingDuration.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LoggingDuration.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f LoggingDuration_free; asn_struct_print_f LoggingDuration_print; asn_constr_check_f LoggingDuration_constraint; +jer_type_encoder_f LoggingDuration_encode_jer; per_type_decoder_f LoggingDuration_decode_aper; per_type_encoder_f LoggingDuration_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_LoggingInterval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_LoggingInterval.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f LoggingInterval_free; asn_struct_print_f LoggingInterval_print; asn_constr_check_f LoggingInterval_constraint; +jer_type_encoder_f LoggingInterval_encode_jer; per_type_decoder_f LoggingInterval_decode_aper; per_type_encoder_f LoggingInterval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M-TMSI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M-TMSI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_M_TMSI_free; asn_struct_print_f S1AP_M_TMSI_print; asn_constr_check_f S1AP_M_TMSI_constraint; +jer_type_encoder_f S1AP_M_TMSI_encode_jer; per_type_decoder_f S1AP_M_TMSI_decode_aper; per_type_encoder_f S1AP_M_TMSI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M1ReportingTrigger.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M1ReportingTrigger.h
Changed
@@ -38,6 +38,7 @@ asn_struct_free_f M1ReportingTrigger_free; asn_struct_print_f M1ReportingTrigger_print; asn_constr_check_f M1ReportingTrigger_constraint; +jer_type_encoder_f M1ReportingTrigger_encode_jer; per_type_decoder_f M1ReportingTrigger_decode_aper; per_type_encoder_f M1ReportingTrigger_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M3period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M3period.h
Changed
@@ -45,6 +45,7 @@ asn_struct_free_f M3period_free; asn_struct_print_f M3period_print; asn_constr_check_f M3period_constraint; +jer_type_encoder_f M3period_encode_jer; per_type_decoder_f M3period_decode_aper; per_type_encoder_f M3period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M4period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M4period.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f M4period_free; asn_struct_print_f M4period_print; asn_constr_check_f M4period_constraint; +jer_type_encoder_f M4period_encode_jer; per_type_decoder_f M4period_decode_aper; per_type_encoder_f M4period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M5period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M5period.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f M5period_free; asn_struct_print_f M5period_print; asn_constr_check_f M5period_constraint; +jer_type_encoder_f M5period_encode_jer; per_type_decoder_f M5period_decode_aper; per_type_encoder_f M5period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M6delay-threshold.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M6delay-threshold.h
Changed
@@ -47,6 +47,7 @@ asn_struct_free_f M6delay_threshold_free; asn_struct_print_f M6delay_threshold_print; asn_constr_check_f M6delay_threshold_constraint; +jer_type_encoder_f M6delay_threshold_encode_jer; per_type_decoder_f M6delay_threshold_decode_aper; per_type_encoder_f M6delay_threshold_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M6report-Interval.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M6report-Interval.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f M6report_Interval_free; asn_struct_print_f M6report_Interval_print; asn_constr_check_f M6report_Interval_constraint; +jer_type_encoder_f M6report_Interval_encode_jer; per_type_decoder_f M6report_Interval_decode_aper; per_type_encoder_f M6report_Interval_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_M7period.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_M7period.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_M7period_free; asn_struct_print_f S1AP_M7period_print; asn_constr_check_f S1AP_M7period_constraint; +jer_type_encoder_f S1AP_M7period_encode_jer; per_type_decoder_f S1AP_M7period_decode_aper; per_type_encoder_f S1AP_M7period_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MDT-Activation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MDT-Activation.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f MDT_Activation_free; asn_struct_print_f MDT_Activation_print; asn_constr_check_f MDT_Activation_constraint; +jer_type_encoder_f MDT_Activation_encode_jer; per_type_decoder_f MDT_Activation_decode_aper; per_type_encoder_f MDT_Activation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MDT-ConfigurationNR.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MDT-ConfigurationNR.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MDT_ConfigurationNR_free; asn_struct_print_f S1AP_MDT_ConfigurationNR_print; asn_constr_check_f S1AP_MDT_ConfigurationNR_constraint; +jer_type_encoder_f S1AP_MDT_ConfigurationNR_encode_jer; per_type_decoder_f S1AP_MDT_ConfigurationNR_decode_aper; per_type_encoder_f S1AP_MDT_ConfigurationNR_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MDT-Location-Info.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MDT-Location-Info.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MDT_Location_Info_free; asn_struct_print_f S1AP_MDT_Location_Info_print; asn_constr_check_f S1AP_MDT_Location_Info_constraint; +jer_type_encoder_f S1AP_MDT_Location_Info_encode_jer; per_type_decoder_f S1AP_MDT_Location_Info_decode_aper; per_type_encoder_f S1AP_MDT_Location_Info_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MDTMode-Extension.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MDTMode-Extension.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MDTMode_Extension_free; asn_struct_print_f S1AP_MDTMode_Extension_print; asn_constr_check_f S1AP_MDTMode_Extension_constraint; +jer_type_encoder_f S1AP_MDTMode_Extension_encode_jer; per_type_decoder_f S1AP_MDTMode_Extension_decode_aper; per_type_encoder_f S1AP_MDTMode_Extension_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MME-Code.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MME-Code.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_MME_Code_free; asn_struct_print_f S1AP_MME_Code_print; asn_constr_check_f S1AP_MME_Code_constraint; +jer_type_encoder_f S1AP_MME_Code_encode_jer; per_type_decoder_f S1AP_MME_Code_decode_aper; per_type_encoder_f S1AP_MME_Code_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MME-Group-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MME-Group-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_MME_Group_ID_free; asn_struct_print_f S1AP_MME_Group_ID_print; asn_constr_check_f S1AP_MME_Group_ID_constraint; +jer_type_encoder_f S1AP_MME_Group_ID_encode_jer; per_type_decoder_f S1AP_MME_Group_ID_decode_aper; per_type_encoder_f S1AP_MME_Group_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MME-UE-S1AP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MME-UE-S1AP-ID.h
Changed
@@ -28,6 +28,7 @@ asn_struct_free_f MME_UE_S1AP_ID_free; asn_struct_print_f MME_UE_S1AP_ID_print; asn_constr_check_f MME_UE_S1AP_ID_constraint; +jer_type_encoder_f MME_UE_S1AP_ID_encode_jer; per_type_decoder_f MME_UE_S1AP_ID_decode_aper; per_type_encoder_f MME_UE_S1AP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MMERelaySupportIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MMERelaySupportIndicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_MMERelaySupportIndicator_free; asn_struct_print_f S1AP_MMERelaySupportIndicator_print; asn_constr_check_f S1AP_MMERelaySupportIndicator_constraint; +jer_type_encoder_f S1AP_MMERelaySupportIndicator_encode_jer; per_type_decoder_f S1AP_MMERelaySupportIndicator_decode_aper; per_type_encoder_f S1AP_MMERelaySupportIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MMEname.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MMEname.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MMEname_free; asn_struct_print_f S1AP_MMEname_print; asn_constr_check_f S1AP_MMEname_constraint; +jer_type_encoder_f S1AP_MMEname_encode_jer; per_type_decoder_f S1AP_MMEname_decode_aper; per_type_encoder_f S1AP_MMEname_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MSClassmark2.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MSClassmark2.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MSClassmark2_free; asn_struct_print_f S1AP_MSClassmark2_print; asn_constr_check_f S1AP_MSClassmark2_constraint; +jer_type_encoder_f S1AP_MSClassmark2_encode_jer; per_type_decoder_f S1AP_MSClassmark2_decode_aper; per_type_encoder_f S1AP_MSClassmark2_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MSClassmark3.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MSClassmark3.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MSClassmark3_free; asn_struct_print_f S1AP_MSClassmark3_print; asn_constr_check_f S1AP_MSClassmark3_constraint; +jer_type_encoder_f S1AP_MSClassmark3_encode_jer; per_type_decoder_f S1AP_MSClassmark3_decode_aper; per_type_encoder_f S1AP_MSClassmark3_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ManagementBasedMDTAllowed.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ManagementBasedMDTAllowed.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_ManagementBasedMDTAllowed_free; asn_struct_print_f S1AP_ManagementBasedMDTAllowed_print; asn_constr_check_f S1AP_ManagementBasedMDTAllowed_constraint; +jer_type_encoder_f S1AP_ManagementBasedMDTAllowed_encode_jer; per_type_decoder_f S1AP_ManagementBasedMDTAllowed_decode_aper; per_type_encoder_f S1AP_ManagementBasedMDTAllowed_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Masked-IMEISV.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Masked-IMEISV.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Masked_IMEISV_free; asn_struct_print_f S1AP_Masked_IMEISV_print; asn_constr_check_f S1AP_Masked_IMEISV_constraint; +jer_type_encoder_f S1AP_Masked_IMEISV_encode_jer; per_type_decoder_f S1AP_Masked_IMEISV_decode_aper; per_type_encoder_f S1AP_Masked_IMEISV_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MeasurementsToActivate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MeasurementsToActivate.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_MeasurementsToActivate_free; asn_struct_print_f S1AP_MeasurementsToActivate_print; asn_constr_check_f S1AP_MeasurementsToActivate_constraint; +jer_type_encoder_f S1AP_MeasurementsToActivate_encode_jer; per_type_decoder_f S1AP_MeasurementsToActivate_decode_aper; per_type_encoder_f S1AP_MeasurementsToActivate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MessageIdentifier.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MessageIdentifier.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MessageIdentifier_free; asn_struct_print_f S1AP_MessageIdentifier_print; asn_constr_check_f S1AP_MessageIdentifier_constraint; +jer_type_encoder_f S1AP_MessageIdentifier_encode_jer; per_type_decoder_f S1AP_MessageIdentifier_decode_aper; per_type_encoder_f S1AP_MessageIdentifier_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MobilityInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MobilityInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_MobilityInformation_free; asn_struct_print_f S1AP_MobilityInformation_print; asn_constr_check_f S1AP_MobilityInformation_constraint; +jer_type_encoder_f S1AP_MobilityInformation_encode_jer; per_type_decoder_f S1AP_MobilityInformation_decode_aper; per_type_encoder_f S1AP_MobilityInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_MutingAvailabilityIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_MutingAvailabilityIndication.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_MutingAvailabilityIndication_free; asn_struct_print_f S1AP_MutingAvailabilityIndication_print; asn_constr_check_f S1AP_MutingAvailabilityIndication_constraint; +jer_type_encoder_f S1AP_MutingAvailabilityIndication_encode_jer; per_type_decoder_f S1AP_MutingAvailabilityIndication_decode_aper; per_type_encoder_f S1AP_MutingAvailabilityIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NAS-PDU.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NAS-PDU.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NAS_PDU_free; asn_struct_print_f S1AP_NAS_PDU_print; asn_constr_check_f S1AP_NAS_PDU_constraint; +jer_type_encoder_f S1AP_NAS_PDU_encode_jer; per_type_decoder_f S1AP_NAS_PDU_decode_aper; per_type_encoder_f S1AP_NAS_PDU_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NASSecurityParametersfromE-UTRAN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NASSecurityParametersfromE-UTRAN.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NASSecurityParametersfromE_UTRAN_free; asn_struct_print_f S1AP_NASSecurityParametersfromE_UTRAN_print; asn_constr_check_f S1AP_NASSecurityParametersfromE_UTRAN_constraint; +jer_type_encoder_f S1AP_NASSecurityParametersfromE_UTRAN_encode_jer; per_type_decoder_f S1AP_NASSecurityParametersfromE_UTRAN_decode_aper; per_type_encoder_f S1AP_NASSecurityParametersfromE_UTRAN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NASSecurityParameterstoE-UTRAN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NASSecurityParameterstoE-UTRAN.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NASSecurityParameterstoE_UTRAN_free; asn_struct_print_f S1AP_NASSecurityParameterstoE_UTRAN_print; asn_constr_check_f S1AP_NASSecurityParameterstoE_UTRAN_constraint; +jer_type_encoder_f S1AP_NASSecurityParameterstoE_UTRAN_encode_jer; per_type_decoder_f S1AP_NASSecurityParameterstoE_UTRAN_decode_aper; per_type_encoder_f S1AP_NASSecurityParameterstoE_UTRAN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-DefaultPagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-DefaultPagingDRX.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f S1AP_NB_IoT_DefaultPagingDRX_free; asn_struct_print_f S1AP_NB_IoT_DefaultPagingDRX_print; asn_constr_check_f S1AP_NB_IoT_DefaultPagingDRX_constraint; +jer_type_encoder_f S1AP_NB_IoT_DefaultPagingDRX_encode_jer; per_type_decoder_f S1AP_NB_IoT_DefaultPagingDRX_decode_aper; per_type_encoder_f S1AP_NB_IoT_DefaultPagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-Paging-eDRX-Cycle.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-Paging-eDRX-Cycle.h
Changed
@@ -49,6 +49,7 @@ asn_struct_free_f NB_IoT_Paging_eDRX_Cycle_free; asn_struct_print_f NB_IoT_Paging_eDRX_Cycle_print; asn_constr_check_f NB_IoT_Paging_eDRX_Cycle_constraint; +jer_type_encoder_f NB_IoT_Paging_eDRX_Cycle_encode_jer; per_type_decoder_f NB_IoT_Paging_eDRX_Cycle_decode_aper; per_type_encoder_f NB_IoT_Paging_eDRX_Cycle_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-PagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-PagingDRX.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f S1AP_NB_IoT_PagingDRX_free; asn_struct_print_f S1AP_NB_IoT_PagingDRX_print; asn_constr_check_f S1AP_NB_IoT_PagingDRX_constraint; +jer_type_encoder_f S1AP_NB_IoT_PagingDRX_encode_jer; per_type_decoder_f S1AP_NB_IoT_PagingDRX_decode_aper; per_type_encoder_f S1AP_NB_IoT_PagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-PagingTimeWindow.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-PagingTimeWindow.h
Changed
@@ -51,6 +51,7 @@ asn_struct_free_f NB_IoT_PagingTimeWindow_free; asn_struct_print_f NB_IoT_PagingTimeWindow_print; asn_constr_check_f NB_IoT_PagingTimeWindow_constraint; +jer_type_encoder_f NB_IoT_PagingTimeWindow_encode_jer; per_type_decoder_f NB_IoT_PagingTimeWindow_decode_aper; per_type_encoder_f NB_IoT_PagingTimeWindow_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-RLF-Report-Container.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-RLF-Report-Container.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NB_IoT_RLF_Report_Container_free; asn_struct_print_f S1AP_NB_IoT_RLF_Report_Container_print; asn_constr_check_f S1AP_NB_IoT_RLF_Report_Container_constraint; +jer_type_encoder_f S1AP_NB_IoT_RLF_Report_Container_encode_jer; per_type_decoder_f S1AP_NB_IoT_RLF_Report_Container_decode_aper; per_type_encoder_f S1AP_NB_IoT_RLF_Report_Container_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-UEIdentityIndexValue.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NB-IoT-UEIdentityIndexValue.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NB_IoT_UEIdentityIndexValue_free; asn_struct_print_f S1AP_NB_IoT_UEIdentityIndexValue_print; asn_constr_check_f S1AP_NB_IoT_UEIdentityIndexValue_constraint; +jer_type_encoder_f S1AP_NB_IoT_UEIdentityIndexValue_encode_jer; per_type_decoder_f S1AP_NB_IoT_UEIdentityIndexValue_decode_aper; per_type_encoder_f S1AP_NB_IoT_UEIdentityIndexValue_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NRCellIdentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NRCellIdentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_NRCellIdentity_free; asn_struct_print_f S1AP_NRCellIdentity_print; asn_constr_check_f S1AP_NRCellIdentity_constraint; +jer_type_encoder_f S1AP_NRCellIdentity_encode_jer; per_type_decoder_f S1AP_NRCellIdentity_decode_aper; per_type_encoder_f S1AP_NRCellIdentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NRencryptionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NRencryptionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_NRencryptionAlgorithms_free; asn_struct_print_f S1AP_NRencryptionAlgorithms_print; asn_constr_check_f S1AP_NRencryptionAlgorithms_constraint; +jer_type_encoder_f S1AP_NRencryptionAlgorithms_encode_jer; per_type_decoder_f S1AP_NRencryptionAlgorithms_decode_aper; per_type_encoder_f S1AP_NRencryptionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NRintegrityProtectionAlgorithms.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NRintegrityProtectionAlgorithms.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_NRintegrityProtectionAlgorithms_free; asn_struct_print_f S1AP_NRintegrityProtectionAlgorithms_print; asn_constr_check_f S1AP_NRintegrityProtectionAlgorithms_constraint; +jer_type_encoder_f S1AP_NRintegrityProtectionAlgorithms_encode_jer; per_type_decoder_f S1AP_NRintegrityProtectionAlgorithms_decode_aper; per_type_encoder_f S1AP_NRintegrityProtectionAlgorithms_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NRrestrictionin5GS.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NRrestrictionin5GS.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_NRrestrictionin5GS_free; asn_struct_print_f S1AP_NRrestrictionin5GS_print; asn_constr_check_f S1AP_NRrestrictionin5GS_constraint; +jer_type_encoder_f S1AP_NRrestrictionin5GS_encode_jer; per_type_decoder_f S1AP_NRrestrictionin5GS_decode_aper; per_type_encoder_f S1AP_NRrestrictionin5GS_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NRrestrictioninEPSasSecondaryRAT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NRrestrictioninEPSasSecondaryRAT.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_NRrestrictioninEPSasSecondaryRAT_free; asn_struct_print_f S1AP_NRrestrictioninEPSasSecondaryRAT_print; asn_constr_check_f S1AP_NRrestrictioninEPSasSecondaryRAT_constraint; +jer_type_encoder_f S1AP_NRrestrictioninEPSasSecondaryRAT_encode_jer; per_type_decoder_f S1AP_NRrestrictioninEPSasSecondaryRAT_decode_aper; per_type_encoder_f S1AP_NRrestrictioninEPSasSecondaryRAT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NextPagingAreaScope.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NextPagingAreaScope.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f NextPagingAreaScope_free; asn_struct_print_f NextPagingAreaScope_print; asn_constr_check_f NextPagingAreaScope_constraint; +jer_type_encoder_f NextPagingAreaScope_encode_jer; per_type_decoder_f NextPagingAreaScope_decode_aper; per_type_encoder_f NextPagingAreaScope_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NotifySourceeNB.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NotifySourceeNB.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_NotifySourceeNB_free; asn_struct_print_f S1AP_NotifySourceeNB_print; asn_constr_check_f S1AP_NotifySourceeNB_constraint; +jer_type_encoder_f S1AP_NotifySourceeNB_encode_jer; per_type_decoder_f S1AP_NotifySourceeNB_decode_aper; per_type_encoder_f S1AP_NotifySourceeNB_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NumberOfBroadcasts.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NumberOfBroadcasts.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_NumberOfBroadcasts_free; asn_struct_print_f S1AP_NumberOfBroadcasts_print; asn_constr_check_f S1AP_NumberOfBroadcasts_constraint; +jer_type_encoder_f S1AP_NumberOfBroadcasts_encode_jer; per_type_decoder_f S1AP_NumberOfBroadcasts_decode_aper; per_type_encoder_f S1AP_NumberOfBroadcasts_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_NumberofBroadcastRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_NumberofBroadcastRequest.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_NumberofBroadcastRequest_free; asn_struct_print_f S1AP_NumberofBroadcastRequest_print; asn_constr_check_f S1AP_NumberofBroadcastRequest_constraint; +jer_type_encoder_f S1AP_NumberofBroadcastRequest_encode_jer; per_type_decoder_f S1AP_NumberofBroadcastRequest_decode_aper; per_type_encoder_f S1AP_NumberofBroadcastRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_OldBSS-ToNewBSS-Information.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_OldBSS-ToNewBSS-Information.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_OldBSS_ToNewBSS_Information_free; asn_struct_print_f S1AP_OldBSS_ToNewBSS_Information_print; asn_constr_check_f S1AP_OldBSS_ToNewBSS_Information_constraint; +jer_type_encoder_f S1AP_OldBSS_ToNewBSS_Information_encode_jer; per_type_decoder_f S1AP_OldBSS_ToNewBSS_Information_decode_aper; per_type_encoder_f S1AP_OldBSS_ToNewBSS_Information_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_OverloadAction.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_OverloadAction.h
Changed
@@ -42,6 +42,7 @@ asn_struct_free_f OverloadAction_free; asn_struct_print_f OverloadAction_print; asn_constr_check_f OverloadAction_constraint; +jer_type_encoder_f OverloadAction_encode_jer; per_type_decoder_f OverloadAction_decode_aper; per_type_encoder_f OverloadAction_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SN.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SN.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_PDCP_SN_free; asn_struct_print_f S1AP_PDCP_SN_print; asn_constr_check_f S1AP_PDCP_SN_constraint; +jer_type_encoder_f S1AP_PDCP_SN_encode_jer; per_type_decoder_f S1AP_PDCP_SN_decode_aper; per_type_encoder_f S1AP_PDCP_SN_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SNExtended.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SNExtended.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_PDCP_SNExtended_free; asn_struct_print_f S1AP_PDCP_SNExtended_print; asn_constr_check_f S1AP_PDCP_SNExtended_constraint; +jer_type_encoder_f S1AP_PDCP_SNExtended_encode_jer; per_type_decoder_f S1AP_PDCP_SNExtended_decode_aper; per_type_encoder_f S1AP_PDCP_SNExtended_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SNlength18.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PDCP-SNlength18.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_PDCP_SNlength18_free; asn_struct_print_f S1AP_PDCP_SNlength18_print; asn_constr_check_f S1AP_PDCP_SNlength18_constraint; +jer_type_encoder_f S1AP_PDCP_SNlength18_encode_jer; per_type_decoder_f S1AP_PDCP_SNlength18_decode_aper; per_type_encoder_f S1AP_PDCP_SNlength18_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PLMNidentity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PLMNidentity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_PLMNidentity_free; asn_struct_print_f S1AP_PLMNidentity_print; asn_constr_check_f S1AP_PLMNidentity_constraint; +jer_type_encoder_f S1AP_PLMNidentity_encode_jer; per_type_decoder_f S1AP_PLMNidentity_decode_aper; per_type_encoder_f S1AP_PLMNidentity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PS-ServiceNotAvailable.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PS-ServiceNotAvailable.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_PS_ServiceNotAvailable_free; asn_struct_print_f S1AP_PS_ServiceNotAvailable_print; asn_constr_check_f S1AP_PS_ServiceNotAvailable_constraint; +jer_type_encoder_f S1AP_PS_ServiceNotAvailable_encode_jer; per_type_decoder_f S1AP_PS_ServiceNotAvailable_decode_aper; per_type_encoder_f S1AP_PS_ServiceNotAvailable_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Packet-LossRate.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Packet-LossRate.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Packet_LossRate_free; asn_struct_print_f S1AP_Packet_LossRate_print; asn_constr_check_f S1AP_Packet_LossRate_constraint; +jer_type_encoder_f S1AP_Packet_LossRate_encode_jer; per_type_decoder_f S1AP_Packet_LossRate_decode_aper; per_type_encoder_f S1AP_Packet_LossRate_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Paging-eDRX-Cycle.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Paging-eDRX-Cycle.h
Changed
@@ -49,6 +49,7 @@ asn_struct_free_f Paging_eDRX_Cycle_free; asn_struct_print_f Paging_eDRX_Cycle_print; asn_constr_check_f Paging_eDRX_Cycle_constraint; +jer_type_encoder_f Paging_eDRX_Cycle_encode_jer; per_type_decoder_f Paging_eDRX_Cycle_decode_aper; per_type_encoder_f Paging_eDRX_Cycle_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PagingAttemptCount.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PagingAttemptCount.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_PagingAttemptCount_free; asn_struct_print_f S1AP_PagingAttemptCount_print; asn_constr_check_f S1AP_PagingAttemptCount_constraint; +jer_type_encoder_f S1AP_PagingAttemptCount_encode_jer; per_type_decoder_f S1AP_PagingAttemptCount_decode_aper; per_type_encoder_f S1AP_PagingAttemptCount_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PagingDRX.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PagingDRX.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f S1AP_PagingDRX_free; asn_struct_print_f S1AP_PagingDRX_print; asn_constr_check_f S1AP_PagingDRX_constraint; +jer_type_encoder_f S1AP_PagingDRX_encode_jer; per_type_decoder_f S1AP_PagingDRX_decode_aper; per_type_encoder_f S1AP_PagingDRX_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PagingPriority.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PagingPriority.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f S1AP_PagingPriority_free; asn_struct_print_f S1AP_PagingPriority_print; asn_constr_check_f S1AP_PagingPriority_constraint; +jer_type_encoder_f S1AP_PagingPriority_encode_jer; per_type_decoder_f S1AP_PagingPriority_decode_aper; per_type_encoder_f S1AP_PagingPriority_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PagingProbabilityInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PagingProbabilityInformation.h
Changed
@@ -56,6 +56,7 @@ asn_struct_free_f PagingProbabilityInformation_free; asn_struct_print_f PagingProbabilityInformation_print; asn_constr_check_f PagingProbabilityInformation_constraint; +jer_type_encoder_f PagingProbabilityInformation_encode_jer; per_type_decoder_f PagingProbabilityInformation_decode_aper; per_type_encoder_f PagingProbabilityInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PagingTimeWindow.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PagingTimeWindow.h
Changed
@@ -51,6 +51,7 @@ asn_struct_free_f PagingTimeWindow_free; asn_struct_print_f PagingTimeWindow_print; asn_constr_check_f PagingTimeWindow_constraint; +jer_type_encoder_f PagingTimeWindow_encode_jer; per_type_decoder_f PagingTimeWindow_decode_aper; per_type_encoder_f PagingTimeWindow_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PedestrianUE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PedestrianUE.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f PedestrianUE_free; asn_struct_print_f PedestrianUE_print; asn_constr_check_f PedestrianUE_constraint; +jer_type_encoder_f PedestrianUE_encode_jer; per_type_decoder_f PedestrianUE_decode_aper; per_type_encoder_f PedestrianUE_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PendingDataIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PendingDataIndication.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_PendingDataIndication_free; asn_struct_print_f S1AP_PendingDataIndication_print; asn_constr_check_f S1AP_PendingDataIndication_constraint; +jer_type_encoder_f S1AP_PendingDataIndication_encode_jer; per_type_decoder_f S1AP_PendingDataIndication_decode_aper; per_type_encoder_f S1AP_PendingDataIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Port-Number.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Port-Number.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_Port_Number_free; asn_struct_print_f S1AP_Port_Number_print; asn_constr_check_f S1AP_Port_Number_constraint; +jer_type_encoder_f S1AP_Port_Number_encode_jer; per_type_decoder_f S1AP_Port_Number_decode_aper; per_type_encoder_f S1AP_Port_Number_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Pre-emptionCapability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Pre-emptionCapability.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f Pre_emptionCapability_free; asn_struct_print_f Pre_emptionCapability_print; asn_constr_check_f Pre_emptionCapability_constraint; +jer_type_encoder_f Pre_emptionCapability_encode_jer; per_type_decoder_f Pre_emptionCapability_decode_aper; per_type_encoder_f Pre_emptionCapability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Pre-emptionVulnerability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Pre-emptionVulnerability.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f Pre_emptionVulnerability_free; asn_struct_print_f Pre_emptionVulnerability_print; asn_constr_check_f Pre_emptionVulnerability_constraint; +jer_type_encoder_f Pre_emptionVulnerability_encode_jer; per_type_decoder_f Pre_emptionVulnerability_decode_aper; per_type_encoder_f Pre_emptionVulnerability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Presence.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Presence.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f Presence_free; asn_struct_print_f Presence_print; asn_constr_check_f Presence_constraint; +jer_type_encoder_f Presence_encode_jer; per_type_decoder_f Presence_decode_aper; per_type_encoder_f Presence_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PriorityLevel.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PriorityLevel.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_PriorityLevel_free; asn_struct_print_f S1AP_PriorityLevel_print; asn_constr_check_f S1AP_PriorityLevel_constraint; +jer_type_encoder_f S1AP_PriorityLevel_encode_jer; per_type_decoder_f S1AP_PriorityLevel_decode_aper; per_type_encoder_f S1AP_PriorityLevel_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_PrivacyIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_PrivacyIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_PrivacyIndicator_free; asn_struct_print_f S1AP_PrivacyIndicator_print; asn_constr_check_f S1AP_PrivacyIndicator_constraint; +jer_type_encoder_f S1AP_PrivacyIndicator_encode_jer; per_type_decoder_f S1AP_PrivacyIndicator_decode_aper; per_type_encoder_f S1AP_PrivacyIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProSeDirectCommunication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProSeDirectCommunication.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f ProSeDirectCommunication_free; asn_struct_print_f ProSeDirectCommunication_print; asn_constr_check_f ProSeDirectCommunication_constraint; +jer_type_encoder_f ProSeDirectCommunication_encode_jer; per_type_decoder_f ProSeDirectCommunication_decode_aper; per_type_encoder_f ProSeDirectCommunication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProSeDirectDiscovery.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProSeDirectDiscovery.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f ProSeDirectDiscovery_free; asn_struct_print_f ProSeDirectDiscovery_print; asn_constr_check_f ProSeDirectDiscovery_constraint; +jer_type_encoder_f ProSeDirectDiscovery_encode_jer; per_type_decoder_f ProSeDirectDiscovery_decode_aper; per_type_encoder_f ProSeDirectDiscovery_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProSeUEtoNetworkRelaying.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProSeUEtoNetworkRelaying.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_ProSeUEtoNetworkRelaying_free; asn_struct_print_f S1AP_ProSeUEtoNetworkRelaying_print; asn_constr_check_f S1AP_ProSeUEtoNetworkRelaying_constraint; +jer_type_encoder_f S1AP_ProSeUEtoNetworkRelaying_encode_jer; per_type_decoder_f S1AP_ProSeUEtoNetworkRelaying_decode_aper; per_type_encoder_f S1AP_ProSeUEtoNetworkRelaying_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProcedureCode.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProcedureCode.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ProcedureCode_free; asn_struct_print_f S1AP_ProcedureCode_print; asn_constr_check_f S1AP_ProcedureCode_constraint; +jer_type_encoder_f S1AP_ProcedureCode_encode_jer; per_type_decoder_f S1AP_ProcedureCode_decode_aper; per_type_encoder_f S1AP_ProcedureCode_encode_aper; #define S1AP_ProcedureCode_id_HandoverPreparation ((S1AP_ProcedureCode_t)0)
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolExtensionID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolExtensionID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ProtocolExtensionID_free; asn_struct_print_f S1AP_ProtocolExtensionID_print; asn_constr_check_f S1AP_ProtocolExtensionID_constraint; +jer_type_encoder_f S1AP_ProtocolExtensionID_encode_jer; per_type_decoder_f S1AP_ProtocolExtensionID_decode_aper; per_type_encoder_f S1AP_ProtocolExtensionID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolIE-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolIE-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ProtocolIE_ID_free; asn_struct_print_f S1AP_ProtocolIE_ID_print; asn_constr_check_f S1AP_ProtocolIE_ID_constraint; +jer_type_encoder_f S1AP_ProtocolIE_ID_encode_jer; per_type_decoder_f S1AP_ProtocolIE_ID_decode_aper; per_type_encoder_f S1AP_ProtocolIE_ID_encode_aper; #define S1AP_ProtocolIE_ID_id_MME_UE_S1AP_ID ((S1AP_ProtocolIE_ID_t)0)
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolIE-SingleContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ProtocolIE-SingleContainer.h
Changed
@@ -58,198 +58,231 @@ asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P0_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P0_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P0_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P0_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P0_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P0_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P1; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P1_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P1_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P1_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P1_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P1_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P1_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P2; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P2_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P2_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P2_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P2_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P2_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P2_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P3; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P3_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P3_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P3_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P3_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P3_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P3_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P4; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P4_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P4_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P4_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P4_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P4_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P4_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P5; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P5_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P5_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P5_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P5_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P5_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P5_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P6; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P6_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P6_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P6_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P6_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P6_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P6_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P7; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P7_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P7_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P7_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P7_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P7_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P7_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P8; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P8_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P8_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P8_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P8_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P8_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P8_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P9; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P9_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P9_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P9_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P9_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P9_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P9_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P10; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P10_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P10_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P10_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P10_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P10_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P10_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P11; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P11_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P11_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P11_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P11_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P11_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P11_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P12; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P12_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P12_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P12_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P12_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P12_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P12_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P13; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P13_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P13_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P13_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P13_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P13_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P13_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P14; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P14_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P14_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P14_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P14_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P14_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P14_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P15; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P15_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P15_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P15_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P15_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P15_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P15_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P16; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P16_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P16_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P16_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P16_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P16_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P16_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P17; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P17_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P17_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P17_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P17_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P17_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P17_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P18; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P18_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P18_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P18_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P18_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P18_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P18_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P19; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P19_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P19_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P19_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P19_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P19_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P19_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P20; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P20_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P20_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P20_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P20_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P20_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P20_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P21; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P21_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P21_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P21_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P21_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P21_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P21_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P22; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P22_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P22_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P22_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P22_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P22_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P22_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P23; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P23_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P23_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P23_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P23_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P23_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P23_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P24; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P24_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P24_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P24_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P24_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P24_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P24_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P25; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P25_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P25_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P25_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P25_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P25_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P25_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P26; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P26_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P26_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P26_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P26_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P26_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P26_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P27; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P27_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P27_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P27_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P27_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P27_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P27_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P28; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P28_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P28_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P28_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P28_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P28_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P28_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P29; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P29_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P29_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P29_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P29_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P29_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P29_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P30; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P30_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P30_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P30_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P30_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P30_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P30_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P31; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P31_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P31_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P31_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P31_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P31_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P31_encode_aper; extern asn_TYPE_descriptor_t asn_DEF_S1AP_ProtocolIE_SingleContainer_7850P32; asn_struct_free_f S1AP_ProtocolIE_SingleContainer_7850P32_free; asn_struct_print_f S1AP_ProtocolIE_SingleContainer_7850P32_print; asn_constr_check_f S1AP_ProtocolIE_SingleContainer_7850P32_constraint; +jer_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P32_encode_jer; per_type_decoder_f S1AP_ProtocolIE_SingleContainer_7850P32_decode_aper; per_type_encoder_f S1AP_ProtocolIE_SingleContainer_7850P32_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_QCI.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_QCI.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_QCI_free; asn_struct_print_f S1AP_QCI_print; asn_constr_check_f S1AP_QCI_constraint; +jer_type_encoder_f S1AP_QCI_encode_jer; per_type_decoder_f S1AP_QCI_decode_aper; per_type_encoder_f S1AP_QCI_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_RAC_free; asn_struct_print_f S1AP_RAC_print; asn_constr_check_f S1AP_RAC_constraint; +jer_type_encoder_f S1AP_RAC_encode_jer; per_type_decoder_f S1AP_RAC_decode_aper; per_type_encoder_f S1AP_RAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RAN-UE-NGAP-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RAN-UE-NGAP-ID.h
Changed
@@ -28,6 +28,7 @@ asn_struct_free_f RAN_UE_NGAP_ID_free; asn_struct_print_f RAN_UE_NGAP_ID_print; asn_constr_check_f RAN_UE_NGAP_ID_constraint; +jer_type_encoder_f RAN_UE_NGAP_ID_encode_jer; per_type_decoder_f RAN_UE_NGAP_ID_decode_aper; per_type_encoder_f RAN_UE_NGAP_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RAT-Type.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RAT-Type.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_RAT_Type_free; asn_struct_print_f S1AP_RAT_Type_print; asn_constr_check_f S1AP_RAT_Type_constraint; +jer_type_encoder_f S1AP_RAT_Type_encode_jer; per_type_decoder_f S1AP_RAT_Type_decode_aper; per_type_encoder_f S1AP_RAT_Type_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RIMInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RIMInformation.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_RIMInformation_free; asn_struct_print_f S1AP_RIMInformation_print; asn_constr_check_f S1AP_RIMInformation_constraint; +jer_type_encoder_f S1AP_RIMInformation_encode_jer; per_type_decoder_f S1AP_RIMInformation_decode_aper; per_type_encoder_f S1AP_RIMInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RNC-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RNC-ID.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_RNC_ID_free; asn_struct_print_f S1AP_RNC_ID_print; asn_constr_check_f S1AP_RNC_ID_constraint; +jer_type_encoder_f S1AP_RNC_ID_encode_jer; per_type_decoder_f S1AP_RNC_ID_decode_aper; per_type_encoder_f S1AP_RNC_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RRC-Container.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RRC-Container.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_RRC_Container_free; asn_struct_print_f S1AP_RRC_Container_print; asn_constr_check_f S1AP_RRC_Container_constraint; +jer_type_encoder_f S1AP_RRC_Container_encode_jer; per_type_decoder_f S1AP_RRC_Container_decode_aper; per_type_encoder_f S1AP_RRC_Container_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RRC-Establishment-Cause.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RRC-Establishment-Cause.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f S1AP_RRC_Establishment_Cause_free; asn_struct_print_f S1AP_RRC_Establishment_Cause_print; asn_constr_check_f S1AP_RRC_Establishment_Cause_constraint; +jer_type_encoder_f S1AP_RRC_Establishment_Cause_encode_jer; per_type_decoder_f S1AP_RRC_Establishment_Cause_decode_aper; per_type_encoder_f S1AP_RRC_Establishment_Cause_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Range.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Range.h
Changed
@@ -44,6 +44,7 @@ asn_struct_free_f Range_free; asn_struct_print_f Range_print; asn_constr_check_f Range_constraint; +jer_type_encoder_f Range_encode_jer; per_type_decoder_f Range_decode_aper; per_type_encoder_f Range_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusOfULPDCPSDUsExtended.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusOfULPDCPSDUsExtended.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_free; asn_struct_print_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_print; asn_constr_check_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_constraint; +jer_type_encoder_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_encode_jer; per_type_decoder_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_decode_aper; per_type_encoder_f S1AP_ReceiveStatusOfULPDCPSDUsExtended_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_free; asn_struct_print_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_print; asn_constr_check_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint; +jer_type_encoder_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_jer; per_type_decoder_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_aper; per_type_encoder_f S1AP_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusofULPDCPSDUs.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReceiveStatusofULPDCPSDUs.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_ReceiveStatusofULPDCPSDUs_free; asn_struct_print_f S1AP_ReceiveStatusofULPDCPSDUs_print; asn_constr_check_f S1AP_ReceiveStatusofULPDCPSDUs_constraint; +jer_type_encoder_f S1AP_ReceiveStatusofULPDCPSDUs_encode_jer; per_type_decoder_f S1AP_ReceiveStatusofULPDCPSDUs_decode_aper; per_type_encoder_f S1AP_ReceiveStatusofULPDCPSDUs_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RelativeMMECapacity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RelativeMMECapacity.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_RelativeMMECapacity_free; asn_struct_print_f S1AP_RelativeMMECapacity_print; asn_constr_check_f S1AP_RelativeMMECapacity_constraint; +jer_type_encoder_f S1AP_RelativeMMECapacity_encode_jer; per_type_decoder_f S1AP_RelativeMMECapacity_decode_aper; per_type_encoder_f S1AP_RelativeMMECapacity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RelayNode-Indicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RelayNode-Indicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_RelayNode_Indicator_free; asn_struct_print_f S1AP_RelayNode_Indicator_print; asn_constr_check_f S1AP_RelayNode_Indicator_constraint; +jer_type_encoder_f S1AP_RelayNode_Indicator_encode_jer; per_type_decoder_f S1AP_RelayNode_Indicator_decode_aper; per_type_encoder_f S1AP_RelayNode_Indicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RepetitionPeriod.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RepetitionPeriod.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_RepetitionPeriod_free; asn_struct_print_f S1AP_RepetitionPeriod_print; asn_constr_check_f S1AP_RepetitionPeriod_constraint; +jer_type_encoder_f S1AP_RepetitionPeriod_encode_jer; per_type_decoder_f S1AP_RepetitionPeriod_decode_aper; per_type_encoder_f S1AP_RepetitionPeriod_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReportAmountMDT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReportAmountMDT.h
Changed
@@ -40,6 +40,7 @@ asn_struct_free_f ReportAmountMDT_free; asn_struct_print_f ReportAmountMDT_print; asn_constr_check_f ReportAmountMDT_constraint; +jer_type_encoder_f ReportAmountMDT_encode_jer; per_type_decoder_f ReportAmountMDT_decode_aper; per_type_encoder_f ReportAmountMDT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReportArea.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReportArea.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f ReportArea_free; asn_struct_print_f ReportArea_print; asn_constr_check_f ReportArea_constraint; +jer_type_encoder_f ReportArea_encode_jer; per_type_decoder_f ReportArea_decode_aper; per_type_encoder_f ReportArea_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ReportIntervalMDT.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ReportIntervalMDT.h
Changed
@@ -45,6 +45,7 @@ asn_struct_free_f ReportIntervalMDT_free; asn_struct_print_f ReportIntervalMDT_print; asn_constr_check_f ReportIntervalMDT_constraint; +jer_type_encoder_f ReportIntervalMDT_encode_jer; per_type_decoder_f ReportIntervalMDT_decode_aper; per_type_encoder_f ReportIntervalMDT_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_RequestTypeAdditionalInfo.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_RequestTypeAdditionalInfo.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_RequestTypeAdditionalInfo_free; asn_struct_print_f S1AP_RequestTypeAdditionalInfo_print; asn_constr_check_f S1AP_RequestTypeAdditionalInfo_constraint; +jer_type_encoder_f S1AP_RequestTypeAdditionalInfo_encode_jer; per_type_decoder_f S1AP_RequestTypeAdditionalInfo_decode_aper; per_type_encoder_f S1AP_RequestTypeAdditionalInfo_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ResetAll.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ResetAll.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f ResetAll_free; asn_struct_print_f ResetAll_print; asn_constr_check_f ResetAll_constraint; +jer_type_encoder_f ResetAll_encode_jer; per_type_decoder_f ResetAll_decode_aper; per_type_encoder_f ResetAll_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Routing-ID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Routing-ID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Routing_ID_free; asn_struct_print_f S1AP_Routing_ID_print; asn_constr_check_f S1AP_Routing_ID_constraint; +jer_type_encoder_f S1AP_Routing_ID_encode_jer; per_type_decoder_f S1AP_Routing_ID_decode_aper; per_type_encoder_f S1AP_Routing_ID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SONInformation-Extension.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SONInformation-Extension.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SONInformation_Extension_free; asn_struct_print_f S1AP_SONInformation_Extension_print; asn_constr_check_f S1AP_SONInformation_Extension_constraint; +jer_type_encoder_f S1AP_SONInformation_Extension_encode_jer; per_type_decoder_f S1AP_SONInformation_Extension_decode_aper; per_type_encoder_f S1AP_SONInformation_Extension_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SONInformationRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SONInformationRequest.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f SONInformationRequest_free; asn_struct_print_f SONInformationRequest_print; asn_constr_check_f SONInformationRequest_constraint; +jer_type_encoder_f SONInformationRequest_encode_jer; per_type_decoder_f SONInformationRequest_decode_aper; per_type_encoder_f SONInformationRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCHOIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCHOIndication.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_SRVCCHOIndication_free; asn_struct_print_f S1AP_SRVCCHOIndication_print; asn_constr_check_f S1AP_SRVCCHOIndication_constraint; +jer_type_encoder_f S1AP_SRVCCHOIndication_encode_jer; per_type_decoder_f S1AP_SRVCCHOIndication_decode_aper; per_type_encoder_f S1AP_SRVCCHOIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCOperationNotPossible.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCOperationNotPossible.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_SRVCCOperationNotPossible_free; asn_struct_print_f S1AP_SRVCCOperationNotPossible_print; asn_constr_check_f S1AP_SRVCCOperationNotPossible_constraint; +jer_type_encoder_f S1AP_SRVCCOperationNotPossible_encode_jer; per_type_decoder_f S1AP_SRVCCOperationNotPossible_decode_aper; per_type_encoder_f S1AP_SRVCCOperationNotPossible_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCOperationPossible.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SRVCCOperationPossible.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_SRVCCOperationPossible_free; asn_struct_print_f S1AP_SRVCCOperationPossible_print; asn_constr_check_f S1AP_SRVCCOperationPossible_constraint; +jer_type_encoder_f S1AP_SRVCCOperationPossible_encode_jer; per_type_decoder_f S1AP_SRVCCOperationPossible_decode_aper; per_type_encoder_f S1AP_SRVCCOperationPossible_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SecondaryRATDataUsageRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SecondaryRATDataUsageRequest.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_SecondaryRATDataUsageRequest_free; asn_struct_print_f S1AP_SecondaryRATDataUsageRequest_print; asn_constr_check_f S1AP_SecondaryRATDataUsageRequest_constraint; +jer_type_encoder_f S1AP_SecondaryRATDataUsageRequest_encode_jer; per_type_decoder_f S1AP_SecondaryRATDataUsageRequest_decode_aper; per_type_encoder_f S1AP_SecondaryRATDataUsageRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SecondaryRATType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SecondaryRATType.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f SecondaryRATType_free; asn_struct_print_f SecondaryRATType_print; asn_constr_check_f SecondaryRATType_constraint; +jer_type_encoder_f SecondaryRATType_encode_jer; per_type_decoder_f SecondaryRATType_decode_aper; per_type_encoder_f SecondaryRATType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SecurityKey.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SecurityKey.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_SecurityKey_free; asn_struct_print_f S1AP_SecurityKey_print; asn_constr_check_f S1AP_SecurityKey_constraint; +jer_type_encoder_f S1AP_SecurityKey_encode_jer; per_type_decoder_f S1AP_SecurityKey_decode_aper; per_type_encoder_f S1AP_SecurityKey_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SerialNumber.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SerialNumber.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SerialNumber_free; asn_struct_print_f S1AP_SerialNumber_print; asn_constr_check_f S1AP_SerialNumber_constraint; +jer_type_encoder_f S1AP_SerialNumber_encode_jer; per_type_decoder_f S1AP_SerialNumber_decode_aper; per_type_encoder_f S1AP_SerialNumber_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_ServiceType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_ServiceType.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_ServiceType_free; asn_struct_print_f S1AP_ServiceType_print; asn_constr_check_f S1AP_ServiceType_constraint; +jer_type_encoder_f S1AP_ServiceType_encode_jer; per_type_decoder_f S1AP_ServiceType_decode_aper; per_type_encoder_f S1AP_ServiceType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Source-ToTarget-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Source-ToTarget-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Source_ToTarget_TransparentContainer_free; asn_struct_print_f S1AP_Source_ToTarget_TransparentContainer_print; asn_constr_check_f S1AP_Source_ToTarget_TransparentContainer_constraint; +jer_type_encoder_f S1AP_Source_ToTarget_TransparentContainer_encode_jer; per_type_decoder_f S1AP_Source_ToTarget_TransparentContainer_decode_aper; per_type_encoder_f S1AP_Source_ToTarget_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SourceBSS-ToTargetBSS-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SourceBSS-ToTargetBSS-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_free; asn_struct_print_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_print; asn_constr_check_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_constraint; +jer_type_encoder_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_encode_jer; per_type_decoder_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_decode_aper; per_type_encoder_f S1AP_SourceBSS_ToTargetBSS_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SourceNgRanNode-ToTargetNgRanNode-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SourceNgRanNode-ToTargetNgRanNode-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_free; asn_struct_print_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_print; asn_constr_check_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_constraint; +jer_type_encoder_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_encode_jer; per_type_decoder_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_decode_aper; per_type_encoder_f S1AP_SourceNgRanNode_ToTargetNgRanNode_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SourceNodeID-Extension.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SourceNodeID-Extension.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SourceNodeID_Extension_free; asn_struct_print_f S1AP_SourceNodeID_Extension_print; asn_constr_check_f S1AP_SourceNodeID_Extension_constraint; +jer_type_encoder_f S1AP_SourceNodeID_Extension_encode_jer; per_type_decoder_f S1AP_SourceNodeID_Extension_decode_aper; per_type_encoder_f S1AP_SourceNodeID_Extension_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SourceOfUEActivityBehaviourInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SourceOfUEActivityBehaviourInformation.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f SourceOfUEActivityBehaviourInformation_free; asn_struct_print_f SourceOfUEActivityBehaviourInformation_print; asn_constr_check_f SourceOfUEActivityBehaviourInformation_constraint; +jer_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_jer; per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_aper; per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SourceRNC-ToTargetRNC-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SourceRNC-ToTargetRNC-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_free; asn_struct_print_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_print; asn_constr_check_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_constraint; +jer_type_encoder_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_encode_jer; per_type_decoder_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_decode_aper; per_type_encoder_f S1AP_SourceRNC_ToTargetRNC_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_StratumLevel.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_StratumLevel.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_StratumLevel_free; asn_struct_print_f S1AP_StratumLevel_print; asn_constr_check_f S1AP_StratumLevel_constraint; +jer_type_encoder_f S1AP_StratumLevel_encode_jer; per_type_decoder_f S1AP_StratumLevel_decode_aper; per_type_encoder_f S1AP_StratumLevel_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SubscriberProfileIDforRFP.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SubscriberProfileIDforRFP.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_SubscriberProfileIDforRFP_free; asn_struct_print_f S1AP_SubscriberProfileIDforRFP_print; asn_constr_check_f S1AP_SubscriberProfileIDforRFP_constraint; +jer_type_encoder_f S1AP_SubscriberProfileIDforRFP_encode_jer; per_type_decoder_f S1AP_SubscriberProfileIDforRFP_decode_aper; per_type_encoder_f S1AP_SubscriberProfileIDforRFP_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_SynchronisationStatus.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_SynchronisationStatus.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f SynchronisationStatus_free; asn_struct_print_f SynchronisationStatus_print; asn_constr_check_f SynchronisationStatus_constraint; +jer_type_encoder_f SynchronisationStatus_encode_jer; per_type_decoder_f SynchronisationStatus_decode_aper; per_type_encoder_f SynchronisationStatus_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_TAC_free; asn_struct_print_f S1AP_TAC_print; asn_constr_check_f S1AP_TAC_constraint; +jer_type_encoder_f S1AP_TAC_encode_jer; per_type_decoder_f S1AP_TAC_decode_aper; per_type_encoder_f S1AP_TAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TBCD-STRING.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TBCD-STRING.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_TBCD_STRING_free; asn_struct_print_f S1AP_TBCD_STRING_print; asn_constr_check_f S1AP_TBCD_STRING_constraint; +jer_type_encoder_f S1AP_TBCD_STRING_encode_jer; per_type_decoder_f S1AP_TBCD_STRING_decode_aper; per_type_encoder_f S1AP_TBCD_STRING_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Target-ToSource-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Target-ToSource-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Target_ToSource_TransparentContainer_free; asn_struct_print_f S1AP_Target_ToSource_TransparentContainer_print; asn_constr_check_f S1AP_Target_ToSource_TransparentContainer_constraint; +jer_type_encoder_f S1AP_Target_ToSource_TransparentContainer_encode_jer; per_type_decoder_f S1AP_Target_ToSource_TransparentContainer_decode_aper; per_type_encoder_f S1AP_Target_ToSource_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TargetBSS-ToSourceBSS-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TargetBSS-ToSourceBSS-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_free; asn_struct_print_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_print; asn_constr_check_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_constraint; +jer_type_encoder_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_encode_jer; per_type_decoder_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_decode_aper; per_type_encoder_f S1AP_TargetBSS_ToSourceBSS_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TargetNgRanNode-ToSourceNgRanNode-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TargetNgRanNode-ToSourceNgRanNode-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_free; asn_struct_print_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_print; asn_constr_check_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_constraint; +jer_type_encoder_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_encode_jer; per_type_decoder_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_decode_aper; per_type_encoder_f S1AP_TargetNgRanNode_ToSourceNgRanNode_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TargetRNC-ToSourceRNC-TransparentContainer.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TargetRNC-ToSourceRNC-TransparentContainer.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_free; asn_struct_print_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_print; asn_constr_check_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_constraint; +jer_type_encoder_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_encode_jer; per_type_decoder_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_decode_aper; per_type_encoder_f S1AP_TargetRNC_ToSourceRNC_TransparentContainer_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Threshold-RSRP.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Threshold-RSRP.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_Threshold_RSRP_free; asn_struct_print_f S1AP_Threshold_RSRP_print; asn_constr_check_f S1AP_Threshold_RSRP_constraint; +jer_type_encoder_f S1AP_Threshold_RSRP_encode_jer; per_type_decoder_f S1AP_Threshold_RSRP_decode_aper; per_type_encoder_f S1AP_Threshold_RSRP_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Threshold-RSRQ.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Threshold-RSRQ.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_Threshold_RSRQ_free; asn_struct_print_f S1AP_Threshold_RSRQ_print; asn_constr_check_f S1AP_Threshold_RSRQ_constraint; +jer_type_encoder_f S1AP_Threshold_RSRQ_encode_jer; per_type_decoder_f S1AP_Threshold_RSRQ_decode_aper; per_type_encoder_f S1AP_Threshold_RSRQ_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Time-UE-StayedInCell-EnhancedGranularity.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Time-UE-StayedInCell-EnhancedGranularity.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_free; asn_struct_print_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_print; asn_constr_check_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_constraint; +jer_type_encoder_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_encode_jer; per_type_decoder_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_decode_aper; per_type_encoder_f S1AP_Time_UE_StayedInCell_EnhancedGranularity_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_Time-UE-StayedInCell.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_Time-UE-StayedInCell.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_Time_UE_StayedInCell_free; asn_struct_print_f S1AP_Time_UE_StayedInCell_print; asn_constr_check_f S1AP_Time_UE_StayedInCell_constraint; +jer_type_encoder_f S1AP_Time_UE_StayedInCell_encode_jer; per_type_decoder_f S1AP_Time_UE_StayedInCell_decode_aper; per_type_encoder_f S1AP_Time_UE_StayedInCell_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TimeSinceSecondaryNodeRelease.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TimeSinceSecondaryNodeRelease.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_TimeSinceSecondaryNodeRelease_free; asn_struct_print_f S1AP_TimeSinceSecondaryNodeRelease_print; asn_constr_check_f S1AP_TimeSinceSecondaryNodeRelease_constraint; +jer_type_encoder_f S1AP_TimeSinceSecondaryNodeRelease_encode_jer; per_type_decoder_f S1AP_TimeSinceSecondaryNodeRelease_decode_aper; per_type_encoder_f S1AP_TimeSinceSecondaryNodeRelease_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TimeToWait.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TimeToWait.h
Changed
@@ -39,6 +39,7 @@ asn_struct_free_f S1AP_TimeToWait_free; asn_struct_print_f S1AP_TimeToWait_print; asn_constr_check_f S1AP_TimeToWait_constraint; +jer_type_encoder_f S1AP_TimeToWait_encode_jer; per_type_decoder_f S1AP_TimeToWait_decode_aper; per_type_encoder_f S1AP_TimeToWait_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TraceDepth.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TraceDepth.h
Changed
@@ -41,6 +41,7 @@ asn_struct_free_f TraceDepth_free; asn_struct_print_f TraceDepth_print; asn_constr_check_f TraceDepth_constraint; +jer_type_encoder_f TraceDepth_encode_jer; per_type_decoder_f TraceDepth_decode_aper; per_type_encoder_f TraceDepth_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TrafficLoadReductionIndication.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TrafficLoadReductionIndication.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_TrafficLoadReductionIndication_free; asn_struct_print_f S1AP_TrafficLoadReductionIndication_print; asn_constr_check_f S1AP_TrafficLoadReductionIndication_constraint; +jer_type_encoder_f S1AP_TrafficLoadReductionIndication_encode_jer; per_type_decoder_f S1AP_TrafficLoadReductionIndication_decode_aper; per_type_encoder_f S1AP_TrafficLoadReductionIndication_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TransportLayerAddress.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TransportLayerAddress.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_TransportLayerAddress_free; asn_struct_print_f S1AP_TransportLayerAddress_print; asn_constr_check_f S1AP_TransportLayerAddress_constraint; +jer_type_encoder_f S1AP_TransportLayerAddress_encode_jer; per_type_decoder_f S1AP_TransportLayerAddress_decode_aper; per_type_encoder_f S1AP_TransportLayerAddress_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TriggeringMessage.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TriggeringMessage.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f TriggeringMessage_free; asn_struct_print_f TriggeringMessage_print; asn_constr_check_f TriggeringMessage_constraint; +jer_type_encoder_f TriggeringMessage_encode_jer; per_type_decoder_f TriggeringMessage_decode_aper; per_type_encoder_f TriggeringMessage_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_TypeOfError.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_TypeOfError.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f TypeOfError_free; asn_struct_print_f TypeOfError_print; asn_constr_check_f TypeOfError_constraint; +jer_type_encoder_f TypeOfError_encode_jer; per_type_decoder_f TypeOfError_decode_aper; per_type_encoder_f TypeOfError_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-Application-Layer-Measurement-Capability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-Application-Layer-Measurement-Capability.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UE_Application_Layer_Measurement_Capability_free; asn_struct_print_f S1AP_UE_Application_Layer_Measurement_Capability_print; asn_constr_check_f S1AP_UE_Application_Layer_Measurement_Capability_constraint; +jer_type_encoder_f S1AP_UE_Application_Layer_Measurement_Capability_encode_jer; per_type_decoder_f S1AP_UE_Application_Layer_Measurement_Capability_decode_aper; per_type_encoder_f S1AP_UE_Application_Layer_Measurement_Capability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-HistoryInformationFromTheUE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-HistoryInformationFromTheUE.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UE_HistoryInformationFromTheUE_free; asn_struct_print_f S1AP_UE_HistoryInformationFromTheUE_print; asn_constr_check_f S1AP_UE_HistoryInformationFromTheUE_constraint; +jer_type_encoder_f S1AP_UE_HistoryInformationFromTheUE_encode_jer; per_type_decoder_f S1AP_UE_HistoryInformationFromTheUE_decode_aper; per_type_encoder_f S1AP_UE_HistoryInformationFromTheUE_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-RLF-Report-Container-for-extended-bands.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-RLF-Report-Container-for-extended-bands.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UE_RLF_Report_Container_for_extended_bands_free; asn_struct_print_f S1AP_UE_RLF_Report_Container_for_extended_bands_print; asn_constr_check_f S1AP_UE_RLF_Report_Container_for_extended_bands_constraint; +jer_type_encoder_f S1AP_UE_RLF_Report_Container_for_extended_bands_encode_jer; per_type_decoder_f S1AP_UE_RLF_Report_Container_for_extended_bands_decode_aper; per_type_encoder_f S1AP_UE_RLF_Report_Container_for_extended_bands_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-RLF-Report-Container.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-RLF-Report-Container.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UE_RLF_Report_Container_free; asn_struct_print_f S1AP_UE_RLF_Report_Container_print; asn_constr_check_f S1AP_UE_RLF_Report_Container_constraint; +jer_type_encoder_f S1AP_UE_RLF_Report_Container_encode_jer; per_type_decoder_f S1AP_UE_RLF_Report_Container_decode_aper; per_type_encoder_f S1AP_UE_RLF_Report_Container_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-RetentionInformation.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-RetentionInformation.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_UE_RetentionInformation_free; asn_struct_print_f S1AP_UE_RetentionInformation_print; asn_constr_check_f S1AP_UE_RetentionInformation_constraint; +jer_type_encoder_f S1AP_UE_RetentionInformation_encode_jer; per_type_decoder_f S1AP_UE_RetentionInformation_decode_aper; per_type_encoder_f S1AP_UE_RetentionInformation_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UE-Usage-Type.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UE-Usage-Type.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UE_Usage_Type_free; asn_struct_print_f S1AP_UE_Usage_Type_print; asn_constr_check_f S1AP_UE_Usage_Type_constraint; +jer_type_encoder_f S1AP_UE_Usage_Type_encode_jer; per_type_decoder_f S1AP_UE_Usage_Type_decode_aper; per_type_encoder_f S1AP_UE_Usage_Type_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UECapabilityInfoRequest.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UECapabilityInfoRequest.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_UECapabilityInfoRequest_free; asn_struct_print_f S1AP_UECapabilityInfoRequest_print; asn_constr_check_f S1AP_UECapabilityInfoRequest_constraint; +jer_type_encoder_f S1AP_UECapabilityInfoRequest_encode_jer; per_type_decoder_f S1AP_UECapabilityInfoRequest_decode_aper; per_type_encoder_f S1AP_UECapabilityInfoRequest_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UEIdentityIndexValue.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UEIdentityIndexValue.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UEIdentityIndexValue_free; asn_struct_print_f S1AP_UEIdentityIndexValue_print; asn_constr_check_f S1AP_UEIdentityIndexValue_constraint; +jer_type_encoder_f S1AP_UEIdentityIndexValue_encode_jer; per_type_decoder_f S1AP_UEIdentityIndexValue_decode_aper; per_type_encoder_f S1AP_UEIdentityIndexValue_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapability.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapability.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UERadioCapability_free; asn_struct_print_f S1AP_UERadioCapability_print; asn_constr_check_f S1AP_UERadioCapability_constraint; +jer_type_encoder_f S1AP_UERadioCapability_encode_jer; per_type_decoder_f S1AP_UERadioCapability_decode_aper; per_type_encoder_f S1AP_UERadioCapability_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapabilityForPaging.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapabilityForPaging.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UERadioCapabilityForPaging_free; asn_struct_print_f S1AP_UERadioCapabilityForPaging_print; asn_constr_check_f S1AP_UERadioCapabilityForPaging_constraint; +jer_type_encoder_f S1AP_UERadioCapabilityForPaging_encode_jer; per_type_decoder_f S1AP_UERadioCapabilityForPaging_decode_aper; per_type_encoder_f S1AP_UERadioCapabilityForPaging_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapabilityID.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UERadioCapabilityID.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_UERadioCapabilityID_free; asn_struct_print_f S1AP_UERadioCapabilityID_print; asn_constr_check_f S1AP_UERadioCapabilityID_constraint; +jer_type_encoder_f S1AP_UERadioCapabilityID_encode_jer; per_type_decoder_f S1AP_UERadioCapabilityID_decode_aper; per_type_encoder_f S1AP_UERadioCapabilityID_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UEUserPlaneCIoTSupportIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UEUserPlaneCIoTSupportIndicator.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_UEUserPlaneCIoTSupportIndicator_free; asn_struct_print_f S1AP_UEUserPlaneCIoTSupportIndicator_print; asn_constr_check_f S1AP_UEUserPlaneCIoTSupportIndicator_constraint; +jer_type_encoder_f S1AP_UEUserPlaneCIoTSupportIndicator_encode_jer; per_type_decoder_f S1AP_UEUserPlaneCIoTSupportIndicator_decode_aper; per_type_encoder_f S1AP_UEUserPlaneCIoTSupportIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UL-NAS-Count.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UL-NAS-Count.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_UL_NAS_Count_free; asn_struct_print_f S1AP_UL_NAS_Count_print; asn_constr_check_f S1AP_UL_NAS_Count_constraint; +jer_type_encoder_f S1AP_UL_NAS_Count_encode_jer; per_type_decoder_f S1AP_UL_NAS_Count_decode_aper; per_type_encoder_f S1AP_UL_NAS_Count_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UL-NAS-MAC.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UL-NAS-MAC.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_UL_NAS_MAC_free; asn_struct_print_f S1AP_UL_NAS_MAC_print; asn_constr_check_f S1AP_UL_NAS_MAC_constraint; +jer_type_encoder_f S1AP_UL_NAS_MAC_encode_jer; per_type_decoder_f S1AP_UL_NAS_MAC_decode_aper; per_type_encoder_f S1AP_UL_NAS_MAC_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_URI-Address.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_URI-Address.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_URI_Address_free; asn_struct_print_f S1AP_URI_Address_print; asn_constr_check_f S1AP_URI_Address_constraint; +jer_type_encoder_f S1AP_URI_Address_encode_jer; per_type_decoder_f S1AP_URI_Address_decode_aper; per_type_encoder_f S1AP_URI_Address_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_UnlicensedSpectrumRestriction.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_UnlicensedSpectrumRestriction.h
Changed
@@ -34,6 +34,7 @@ asn_struct_free_f S1AP_UnlicensedSpectrumRestriction_free; asn_struct_print_f S1AP_UnlicensedSpectrumRestriction_print; asn_constr_check_f S1AP_UnlicensedSpectrumRestriction_constraint; +jer_type_encoder_f S1AP_UnlicensedSpectrumRestriction_encode_jer; per_type_decoder_f S1AP_UnlicensedSpectrumRestriction_decode_aper; per_type_encoder_f S1AP_UnlicensedSpectrumRestriction_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_VehicleUE.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_VehicleUE.h
Changed
@@ -37,6 +37,7 @@ asn_struct_free_f VehicleUE_free; asn_struct_print_f VehicleUE_print; asn_constr_check_f VehicleUE_constraint; +jer_type_encoder_f VehicleUE_encode_jer; per_type_decoder_f VehicleUE_decode_aper; per_type_encoder_f VehicleUE_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_VoiceSupportMatchIndicator.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_VoiceSupportMatchIndicator.h
Changed
@@ -35,6 +35,7 @@ asn_struct_free_f S1AP_VoiceSupportMatchIndicator_free; asn_struct_print_f S1AP_VoiceSupportMatchIndicator_print; asn_constr_check_f S1AP_VoiceSupportMatchIndicator_constraint; +jer_type_encoder_f S1AP_VoiceSupportMatchIndicator_encode_jer; per_type_decoder_f S1AP_VoiceSupportMatchIndicator_decode_aper; per_type_encoder_f S1AP_VoiceSupportMatchIndicator_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WLANMeasConfig.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WLANMeasConfig.h
Changed
@@ -36,6 +36,7 @@ asn_struct_free_f WLANMeasConfig_free; asn_struct_print_f WLANMeasConfig_print; asn_constr_check_f WLANMeasConfig_constraint; +jer_type_encoder_f WLANMeasConfig_encode_jer; per_type_decoder_f WLANMeasConfig_decode_aper; per_type_encoder_f WLANMeasConfig_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WLANName.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WLANName.h
Changed
@@ -27,6 +27,7 @@ asn_struct_free_f S1AP_WLANName_free; asn_struct_print_f S1AP_WLANName_print; asn_constr_check_f S1AP_WLANName_constraint; +jer_type_encoder_f S1AP_WLANName_encode_jer; per_type_decoder_f S1AP_WLANName_decode_aper; per_type_encoder_f S1AP_WLANName_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WarningAreaCoordinates.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WarningAreaCoordinates.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_WarningAreaCoordinates_free; asn_struct_print_f S1AP_WarningAreaCoordinates_print; asn_constr_check_f S1AP_WarningAreaCoordinates_constraint; +jer_type_encoder_f S1AP_WarningAreaCoordinates_encode_jer; per_type_decoder_f S1AP_WarningAreaCoordinates_decode_aper; per_type_encoder_f S1AP_WarningAreaCoordinates_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WarningMessageContents.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WarningMessageContents.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_WarningMessageContents_free; asn_struct_print_f S1AP_WarningMessageContents_print; asn_constr_check_f S1AP_WarningMessageContents_constraint; +jer_type_encoder_f S1AP_WarningMessageContents_encode_jer; per_type_decoder_f S1AP_WarningMessageContents_decode_aper; per_type_encoder_f S1AP_WarningMessageContents_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WarningSecurityInfo.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WarningSecurityInfo.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_WarningSecurityInfo_free; asn_struct_print_f S1AP_WarningSecurityInfo_print; asn_constr_check_f S1AP_WarningSecurityInfo_constraint; +jer_type_encoder_f S1AP_WarningSecurityInfo_encode_jer; per_type_decoder_f S1AP_WarningSecurityInfo_decode_aper; per_type_encoder_f S1AP_WarningSecurityInfo_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/s1ap/S1AP_WarningType.h -> open5gs_2.4.9.tar.xz/lib/asn1c/s1ap/S1AP_WarningType.h
Changed
@@ -26,6 +26,7 @@ asn_struct_free_f S1AP_WarningType_free; asn_struct_print_f S1AP_WarningType_print; asn_constr_check_f S1AP_WarningType_constraint; +jer_type_encoder_f S1AP_WarningType_encode_jer; per_type_decoder_f S1AP_WarningType_decode_aper; per_type_encoder_f S1AP_WarningType_encode_aper;
View file
open5gs_2.4.8.tar.xz/lib/asn1c/support/README.md -> open5gs_2.4.9.tar.xz/lib/asn1c/support/README.md
Changed
@@ -1,17 +1,26 @@ Use mounse07410(vlm_master) git's fork for asn1c -commit c098de2086633d2027f1d117092541d8482c1c96 (HEAD -> vlm_master, origin/vlm_master, origin/HEAD) -Author: Nikolaos Koutsianas <nkoutsianas@gmail.com> -Date: Fri Feb 25 13:18:01 2022 +0200 - - aper decoder can ignore unknown open types in a sequence and continue with next ones +commit 24247e2813a7510ebabe6a9b6b6b29fffa0eb27b (HEAD -> vlm_master, origin/vlm_master, origin/HEAD) +Author: Pau Espin Pedrol <pespin@sysmocom.de> +Date: Fri Jul 15 17:43:08 2022 +0200 + + aper: Rework aper_get_length to gain lb & ub information + + This should help aper_put_length() to take proper decisions on the way + to encode the length, since the range alone is not enough. + A contraint of lb=1 ub=65536 would yield a range=65536, but according to + ITU-T X.691 11.9 it shouldn't be encoded using nsnnwn since that only + applies in case ub<65536. + As a result, it would end up encoding/decoding it using 2 bytes while it + should use only 1. + Related: https://github.com/mouse07410/asn1c/issues/94 =========================================== user@host ~/Documents/git/my$ \ git clone https://github.com/mouse07410/asn1c.git user@host ~/Documents/git/my$ \ - git checkout git checkout c098de2086633d2027f1d117092541d8482c1c96 + git checkout git checkout 24247e2813a7510ebabe6a9b6b6b29fffa0eb27b OR @@ -23,8 +32,8 @@ Modify 36413-g40.txt to 36413-g40.asn =========================================== -user@host ~/documents/git/open5gs/lib/asn1c/support/s1ap-r16.4.0$ \ - diff 36413-g40.txt 36413-g40.asn +user@host ~/documents/git/open5gs/lib/asn1c/support/s1ap-r16.7.0$ \ + diff 36413-g70.txt 36413-g70.asn ASN.1 encoder/decoder =========================================== @@ -40,86 +49,8 @@ -no-gen-BER -no-gen-XER -no-gen-OER -no-gen-UPER \ ../support/ngap-r16.7.0/38413-g70.asn -Fix aper_support.c (Issues #773 - NGReset Decode Problem) -=========================================== -diff --git a/lib/asn1c/common/aper_support.c b/lib/asn1c/common/aper_support.c -index 67ad9db5..1adbdde6 100644 ---- a/lib/asn1c/common/aper_support.c -+++ b/lib/asn1c/common/aper_support.c -@@ -22,7 +22,20 @@ aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { - - *repeat = 0; - -- if (range <= 65536 && range >= 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) - return aper_get_nsnnwn(pd, range); - - if (aper_get_align(pd) < 0) -@@ -32,14 +45,14 @@ aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { - - value = per_get_few_bits(pd, 8); - if(value < 0) return -1; -- if((value & 128) == 0) /* #10.9.3.6 */ -+ if((value & 128) == 0) /* #11.9.3.6 */ - return (value & 0x7F); -- if((value & 64) == 0) { /* #10.9.3.7 */ -+ if((value & 64) == 0) { /* #11.9.3.7 */ - value = ((value & 63) << 8) | per_get_few_bits(pd, 8); - if(value < 0) return -1; - return value; - } -- value &= 63; /* this is "m" from X.691, #10.9.3.8 */ -+ value &= 63; /* this is "m" from X.691, #11.9.3.8 */ - if(value < 1 || value > 4) - return -1; - *repeat = 1; -@@ -162,18 +175,18 @@ aper_put_length(asn_per_outp_t *po, int range, size_t length, int *need_eom) { - - ASN_DEBUG("APER put length %zu with range %d", length, range); - -- /* 10.9 X.691 Note 2 */ -+ /* 11.9 X.691 Note 2 */ - if (range <= 65536 && range >= 0) - return aper_put_nsnnwn(po, range, length); - - if (aper_put_align(po) < 0) - return -1; - -- if(length <= 127) /* #10.9.3.6 */{ -+ if(length <= 127) /* #11.9.3.6 */{ - return per_put_few_bits(po, length, 8) - ? -1 : (ssize_t)length; - } -- else if(length < 16384) /* #10.9.3.7 */ -+ else if(length < 16384) /* #11.9.3.7 */ - return per_put_few_bits(po, length|0x8000, 16) - ? -1 : (ssize_t)length; - -@@ -193,7 +206,7 @@ int - aper_put_nslength(asn_per_outp_t *po, size_t length) { - - if(length <= 64) { -- /* #10.9.3.4 */ -+ /* #11.9.3.4 */ - if(length == 0) return -1; - return per_put_few_bits(po, length-1, 7) ? -1 : 0; - } else { - -Fix NGAP_RANNodeNameUTF8String.c/NGAP_AMFNameUTF8String.c (Issues #994 - APC_EXTENSIBLE) -=========================================== +Fix NGAP_RANNodeNameUTF8String.c (Issues #994 - APC_EXTENSIBLE) +=============================================================== diff --git a/lib/asn1c/ngap/NGAP_RANNodeNameUTF8String.c b/lib/asn1c/ngap/NGAP_RANNodeNameUTF8String.c index 9e469f7f..79ebd028 100644 --- a/lib/asn1c/ngap/NGAP_RANNodeNameUTF8String.c @@ -136,6 +67,9 @@ 0, 0 /* No PER value map */ }; #endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */ + +Fix NGAP_AMFNameUTF8String.c (Issues #994 - APC_EXTENSIBLE) +=============================================================== diff --git a/lib/asn1c/ngap/NGAP_AMFNameUTF8String.c b/lib/asn1c/ngap/NGAP_AMFNameUTF8String.c index 1df33a4d..a74f97ea 100644 --- a/lib/asn1c/ngap/NGAP_AMFNameUTF8String.c
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-3gpp-types.c -> open5gs_2.4.9.tar.xz/lib/core/ogs-3gpp-types.c
Changed
@@ -427,12 +427,19 @@ ogs_assert(list); addr = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr, OGS_ERROR); + if (!addr) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } addr->ogs_sa_family = AF_INET; addr->ogs_sin_port = htobe16(port); addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr6, OGS_ERROR); + if (!addr6) { + ogs_error("ogs_calloc() failed"); + ogs_free(addr); + return OGS_ERROR; + } addr6->ogs_sa_family = AF_INET6; addr6->ogs_sin_port = htobe16(port); @@ -454,6 +461,7 @@ *list = addr6; } else { + ogs_error("No IPv4 and IPv6"); ogs_free(addr); ogs_free(addr6); return OGS_ERROR;
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-3gpp-types.h -> open5gs_2.4.9.tar.xz/lib/core/ogs-3gpp-types.h
Changed
@@ -33,6 +33,9 @@ #define OGS_BEARER_PER_UE 8 /* Num of Bearer per UE */ #define OGS_MAX_NUM_OF_PACKET_BUFFER 64 /* Num of PacketBuffer per UE */ +/* Num of NF Service per NF Instance */ +#define OGS_MAX_NUM_OF_NF_SERVICE 16 + /* * The array of TLV messages is limited to 8. * So, Flow(PDI.SDF_Filter) in PDR is limited to 8. @@ -56,6 +59,8 @@ #define OGS_PLMN_ID_LEN 3 #define OGS_MAX_PLMN_ID_BCD_LEN 6 +#define OGS_CHRGCHARS_LEN 2 + #define OGS_BCD_TO_BUFFER_LEN(x) (((x)+1)/2) #define OGS_MAX_IMSI_BCD_LEN 15 #define OGS_MAX_IMSI_LEN \ @@ -453,6 +458,9 @@ uint32_t context_identifier; /* EPC */ bool default_dnn_indicator; /* 5GC */ + uint8_t charging_characteristicsOGS_CHRGCHARS_LEN; + bool charging_characteristics_presence; + #define OGS_PDU_SESSION_TYPE_IPV4 1 #define OGS_PDU_SESSION_TYPE_IPV6 2 #define OGS_PDU_SESSION_TYPE_IPV4V6 3
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-fsm.c -> open5gs_2.4.9.tar.xz/lib/core/ogs-fsm.c
Changed
@@ -38,6 +38,7 @@ { ogs_fsm_t *s = sm; fsm_event_t *e = event; + ogs_assert(s); if (s->init != NULL) { (*s->init)(s, e); @@ -56,6 +57,7 @@ { ogs_fsm_t *s = sm; fsm_event_t *e = event; + ogs_assert(s); ogs_fsm_handler_t tmp = s->state; if (e) @@ -81,6 +83,7 @@ { ogs_fsm_t *s = sm; fsm_event_t *e = event; + ogs_assert(s); if (s->fini != s->state) { if (e) {
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-pkbuf.c -> open5gs_2.4.9.tar.xz/lib/core/ogs-pkbuf.c
Changed
@@ -297,11 +297,13 @@ { #if OGS_USE_TALLOC ogs_pkbuf_t *newbuf; - int size = pkbuf->end - pkbuf->head; + int size = 0; + ogs_assert(pkbuf); + size = pkbuf->end - pkbuf->head; ogs_assert(size > 0); newbuf = ogs_pkbuf_alloc_debug(NULL, size, file_line); - if (!pkbuf) { + if (!newbuf) { ogs_error("ogs_pkbuf_alloc() failed size=%d", size); return NULL; }
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-process.h -> open5gs_2.4.9.tar.xz/lib/core/ogs-process.h
Changed
@@ -84,7 +84,7 @@ ogs_proc_option_inherit_environment = 0x2 }; -int ogs_proc_create(const char *const command_line, int options, +int ogs_proc_create(const char *const commandLine, int options, ogs_proc_t *const out_process); FILE *ogs_proc_stdin(const ogs_proc_t *const process);
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-sockaddr.c -> open5gs_2.4.9.tar.xz/lib/core/ogs-sockaddr.c
Changed
@@ -416,17 +416,23 @@ if (a->ogs_sa_family != b->ogs_sa_family) return false; - if (a->ogs_sa_family == AF_INET && memcmp( - &a->sin.sin_addr, &b->sin.sin_addr, sizeof(struct in_addr)) == 0) + switch (a->ogs_sa_family) { + case AF_INET: + if (a->sin.sin_port != b->sin.sin_port) + return false; + if (memcmp(&a->sin.sin_addr, &b->sin.sin_addr, sizeof(struct in_addr)) != 0) + return false; return true; - else if (a->ogs_sa_family == AF_INET6 && memcmp( - &a->sin6.sin6_addr, &b->sin6.sin6_addr, sizeof(struct in6_addr)) == 0) + case AF_INET6: + if (a->sin6.sin6_port != b->sin6.sin6_port) + return false; + if (memcmp(&a->sin6.sin6_addr, &b->sin6.sin6_addr, sizeof(struct in6_addr)) != 0) + return false; return true; - else { - return false; + default: + ogs_error("Unexpected address faimily %u", a->ogs_sa_family); + ogs_abort(); } - - return false; } static int parse_network(ogs_ipsubnet_t *ipsub, const char *network)
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-sockaddr.h -> open5gs_2.4.9.tar.xz/lib/core/ogs-sockaddr.h
Changed
@@ -99,10 +99,10 @@ ogs_inet_ntop(__aDDR, __bUF, OGS_ADDRSTRLEN) #define OGS_PORT(__aDDR) \ be16toh((__aDDR)->ogs_sin_port) -const char *ogs_inet_ntop(void *addr, char *buf, int buflen); -int ogs_inet_pton(int family, const char *src, void *addr); +const char *ogs_inet_ntop(void *sa, char *buf, int buflen); +int ogs_inet_pton(int family, const char *src, void *sa); -socklen_t ogs_sockaddr_len(const void *addr); +socklen_t ogs_sockaddr_len(const void *sa); bool ogs_sockaddr_is_equal(void *p, void *q); int ogs_ipsubnet(ogs_ipsubnet_t *ipsub,
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-tlv-msg.c -> open5gs_2.4.9.tar.xz/lib/core/ogs-tlv-msg.c
Changed
@@ -36,6 +36,22 @@ OGS_TLV_MORE, "More", 0, 7, 0, 0, { NULL } }; ogs_tlv_desc_t ogs_tlv_desc_more8 = { OGS_TLV_MORE, "More", 0, 8, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more9 = { + OGS_TLV_MORE, "More", 0, 9, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more10 = { + OGS_TLV_MORE, "More", 0, 10, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more11 = { + OGS_TLV_MORE, "More", 0, 11, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more12 = { + OGS_TLV_MORE, "More", 0, 12, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more13 = { + OGS_TLV_MORE, "More", 0, 13, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more14 = { + OGS_TLV_MORE, "More", 0, 14, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more15 = { + OGS_TLV_MORE, "More", 0, 15, 0, 0, { NULL } }; +ogs_tlv_desc_t ogs_tlv_desc_more16 = { + OGS_TLV_MORE, "More", 0, 16, 0, 0, { NULL } }; /* Return specific TLV mode based on its TLV description type and the msg * provided mode (used to know the type length) */
View file
open5gs_2.4.8.tar.xz/lib/core/ogs-tlv-msg.h -> open5gs_2.4.9.tar.xz/lib/core/ogs-tlv-msg.h
Changed
@@ -31,7 +31,7 @@ #define OGS_TLV_MAX_HEADROOM 16 #define OGS_TLV_VARIABLE_LEN 0 -#define OGS_TLV_MAX_MORE 8 +#define OGS_TLV_MAX_MORE 16 #define OGS_TLV_1_OR_MORE(__v) __vOGS_TLV_MAX_MORE #define OGS_TLV_MAX_CHILD_DESC 128 @@ -83,6 +83,14 @@ extern ogs_tlv_desc_t ogs_tlv_desc_more6; extern ogs_tlv_desc_t ogs_tlv_desc_more7; extern ogs_tlv_desc_t ogs_tlv_desc_more8; +extern ogs_tlv_desc_t ogs_tlv_desc_more9; +extern ogs_tlv_desc_t ogs_tlv_desc_more10; +extern ogs_tlv_desc_t ogs_tlv_desc_more11; +extern ogs_tlv_desc_t ogs_tlv_desc_more12; +extern ogs_tlv_desc_t ogs_tlv_desc_more13; +extern ogs_tlv_desc_t ogs_tlv_desc_more14; +extern ogs_tlv_desc_t ogs_tlv_desc_more15; +extern ogs_tlv_desc_t ogs_tlv_desc_more16; typedef uint64_t ogs_tlv_presence_t;
View file
open5gs_2.4.8.tar.xz/lib/crypt/ogs-base64.h -> open5gs_2.4.9.tar.xz/lib/crypt/ogs-base64.h
Changed
@@ -43,16 +43,16 @@ extern "C" { #endif -int ogs_base64_decode_len(const char *coded_src); -int ogs_base64_decode(char *plain_dst, const char *coded_src); +int ogs_base64_decode_len(const char *bufcoded); +int ogs_base64_decode(char *bufplain, const char *bufcoded); int ogs_base64_decode_binary( - unsigned char *plain_dst, const char *coded_src); + unsigned char *bufplain, const char *bufcoded); int ogs_base64_encode_len(int len); int ogs_base64_encode( - char *coded_dst, const char *plain_src, int len_plain_src); + char *encoded, const char *string, int len); int ogs_base64_encode_binary( - char *coded_dst, const unsigned char *plain_src, int len_plain_src); + char *encoded, const unsigned char *string, int len); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/lib/diameter/s6a/message.c -> open5gs_2.4.9.tar.xz/lib/diameter/s6a/message.c
Changed
@@ -57,6 +57,7 @@ struct dict_object *ogs_diam_s6a_max_bandwidth_ul = NULL; struct dict_object *ogs_diam_s6a_max_bandwidth_dl = NULL; struct dict_object *ogs_diam_s6a_pdn_type = NULL; +struct dict_object *ogs_diam_s6a_3gpp_charging_characteristics = NULL; struct dict_object *ogs_diam_s6a_served_party_ip_address = NULL; struct dict_object *ogs_diam_s6a_eps_subscribed_qos_profile = NULL; struct dict_object *ogs_diam_s6a_qos_class_identifier = NULL; @@ -125,6 +126,7 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "All-APN-Configurations-Included-Indicator", &ogs_diam_s6a_all_apn_configuration_included_indicator); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", &ogs_diam_s6a_apn_configuration); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "PDN-Type", &ogs_diam_s6a_pdn_type); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "3GPP-Charging-Characteristics", &ogs_diam_s6a_3gpp_charging_characteristics); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Served-Party-IP-Address", &ogs_diam_s6a_served_party_ip_address); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", &ogs_diam_s6a_subscription_data); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscriber-Status", &ogs_diam_s6a_subscriber_status);
View file
open5gs_2.4.8.tar.xz/lib/diameter/s6a/message.h -> open5gs_2.4.9.tar.xz/lib/diameter/s6a/message.h
Changed
@@ -103,6 +103,7 @@ extern struct dict_object *ogs_diam_s6a_max_bandwidth_ul; extern struct dict_object *ogs_diam_s6a_max_bandwidth_dl; extern struct dict_object *ogs_diam_s6a_pdn_type; +extern struct dict_object *ogs_diam_s6a_3gpp_charging_characteristics; extern struct dict_object *ogs_diam_s6a_served_party_ip_address; extern struct dict_object *ogs_diam_s6a_eps_subscribed_qos_profile; extern struct dict_object *ogs_diam_s6a_qos_class_identifier;
View file
open5gs_2.4.8.tar.xz/lib/gtp/context.c -> open5gs_2.4.9.tar.xz/lib/gtp/context.c
Changed
@@ -35,7 +35,7 @@ ogs_log_install_domain(&__ogs_gtp_domain, "gtp", ogs_core()->log.level); - ogs_pool_init(&pool, ogs_app()->pool.gtp_node); + ogs_pool_init(&pool, ogs_app()->pool.nf); ogs_pool_init(&ogs_gtpu_resource_pool, num_of_gtpu_resource); context_initialized = 1; @@ -570,7 +570,10 @@ ogs_app()->parameter.no_ipv4, ogs_app()->parameter.no_ipv6, ogs_app()->parameter.prefer_ipv4); - ogs_assert(addr); + if (!addr) { + ogs_error("ogs_filter_ip_version() failed"); + return NULL; + } #if 0 /* deprecated */ rv = ogs_socknode_fill_scope_id_in_local(addr); @@ -578,10 +581,18 @@ #endif node = ogs_gtp_node_new(addr); - ogs_assert(node); + if (!node) { + ogs_error("ogs_gtp_node_new() failed"); + ogs_freeaddrinfo(addr); + return NULL; + } rv = ogs_gtp2_f_teid_to_ip(f_teid, &node->ip); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_f_teid_to_ip() failed"); + ogs_freeaddrinfo(addr); + return NULL; + } ogs_list_add(list, node); @@ -598,8 +609,12 @@ ogs_assert(OGS_OK == ogs_copyaddrinfo(&new, addr)); gnode = ogs_gtp_node_new(new); + if (!gnode) { + ogs_error("ogs_gtp_node_new() failed"); + ogs_freeaddrinfo(new); + return NULL; + } - ogs_assert(gnode); memcpy(&gnode->addr, new, sizeof gnode->addr); ogs_list_add(list, gnode); @@ -680,15 +695,22 @@ ogs_app()->parameter.no_ipv4, ogs_app()->parameter.no_ipv6, ogs_app()->parameter.prefer_ipv4); - ogs_expect_or_return_val(addr, NULL); + if (!addr) { + ogs_error("ogs_filter_ip_version() failed"); + return NULL; + } #if 0 /* deprecated */ rv = ogs_socknode_fill_scope_id_in_local(addr); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + ogs_assert(rv == OGS_OK); #endif node = ogs_gtp_node_new(addr); - ogs_expect_or_return_val(node, NULL); + if (!node) { + ogs_error("ogs_gtp_node_new() failed"); + ogs_freeaddrinfo(addr); + return NULL; + } memcpy(&node->ip, ip, sizeof(*ip));
View file
open5gs_2.4.8.tar.xz/lib/gtp/v1/message.c -> open5gs_2.4.9.tar.xz/lib/gtp/v1/message.c
Changed
@@ -21,7 +21,7 @@ /******************************************************************************* * This file had been created by gtp1-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-05-12 14:42:38.611950 by pespin + * Created on: 2022-06-30 08:56:31.641366 by ubuntu * from 29060-g00.docx ******************************************************************************/ @@ -2264,20 +2264,20 @@ }}; -int ogs_gtp1_parse_msg(ogs_gtp1_message_t *gtp_message, ogs_pkbuf_t *pkbuf) +int ogs_gtp1_parse_msg(ogs_gtp1_message_t *gtp1_message, ogs_pkbuf_t *pkbuf) { int rv = OGS_ERROR; ogs_gtp1_header_t *h = NULL; uint16_t size = 0; - ogs_assert(gtp_message); + ogs_assert(gtp1_message); ogs_assert(pkbuf); ogs_assert(pkbuf->len); h = (ogs_gtp1_header_t *)pkbuf->data; ogs_assert(h); - memset(gtp_message, 0, sizeof(ogs_gtp1_message_t)); + memset(gtp1_message, 0, sizeof(ogs_gtp1_message_t)); if (h->e || h->s || h->pn) size = OGS_GTPV1C_HEADER_LEN; @@ -2285,242 +2285,242 @@ size = OGS_GTPV1C_HEADER_LEN - 4; ogs_assert(ogs_pkbuf_pull(pkbuf, size)); - memcpy(>p_message->h, pkbuf->data - size, size); + memcpy(>p1_message->h, pkbuf->data - size, size); - gtp_message->h.teid = be32toh(gtp_message->h.teid); + gtp1_message->h.teid = be32toh(gtp1_message->h.teid); if (pkbuf->len == 0) { ogs_assert(ogs_pkbuf_push(pkbuf, size)); return OGS_OK; } - switch(gtp_message->h.type) { + switch(gtp1_message->h.type) { case OGS_GTP1_ECHO_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->echo_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->echo_request, &ogs_gtp1_tlv_desc_echo_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_ECHO_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->echo_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->echo_response, &ogs_gtp1_tlv_desc_echo_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_PDP_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->create_pdp_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->create_pdp_context_request, &ogs_gtp1_tlv_desc_create_pdp_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->create_pdp_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->create_pdp_context_response, &ogs_gtp1_tlv_desc_create_pdp_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_PDP_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->update_pdp_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->update_pdp_context_request, &ogs_gtp1_tlv_desc_update_pdp_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_PDP_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->update_pdp_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->update_pdp_context_response, &ogs_gtp1_tlv_desc_update_pdp_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_PDP_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->delete_pdp_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->delete_pdp_context_request, &ogs_gtp1_tlv_desc_delete_pdp_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_PDP_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->delete_pdp_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->delete_pdp_context_response, &ogs_gtp1_tlv_desc_delete_pdp_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_INITIATE_PDP_CONTEXT_ACTIVATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->initiate_pdp_context_activation_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->initiate_pdp_context_activation_request, &ogs_gtp1_tlv_desc_initiate_pdp_context_activation_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_INITIATE_PDP_CONTEXT_ACTIVATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->initiate_pdp_context_activation_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->initiate_pdp_context_activation_response, &ogs_gtp1_tlv_desc_initiate_pdp_context_activation_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->pdu_notification_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->pdu_notification_request, &ogs_gtp1_tlv_desc_pdu_notification_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->pdu_notification_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->pdu_notification_response, &ogs_gtp1_tlv_desc_pdu_notification_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REJECT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->pdu_notification_reject_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->pdu_notification_reject_request, &ogs_gtp1_tlv_desc_pdu_notification_reject_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REJECT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->pdu_notification_reject_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->pdu_notification_reject_response, &ogs_gtp1_tlv_desc_pdu_notification_reject_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SUPPORTED_EXTENSION_HEADERS_NOTIFICATION_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->supported_extension_headers_notification, + rv = ogs_tlv_parse_msg_desc(>p1_message->supported_extension_headers_notification, &ogs_gtp1_tlv_desc_supported_extension_headers_notification, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SEND_ROUTEING_INFORMATION_FOR_GPRS_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->send_routeing_information_for_gprs_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->send_routeing_information_for_gprs_request, &ogs_gtp1_tlv_desc_send_routeing_information_for_gprs_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SEND_ROUTEING_INFORMATION_FOR_GPRS_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->send_routeing_information_for_gprs_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->send_routeing_information_for_gprs_response, &ogs_gtp1_tlv_desc_send_routeing_information_for_gprs_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FAILURE_REPORT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->failure_report_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->failure_report_request, &ogs_gtp1_tlv_desc_failure_report_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FAILURE_REPORT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->failure_report_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->failure_report_response, &ogs_gtp1_tlv_desc_failure_report_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_NOTE_MS_GPRS_PRESENT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->note_ms_gprs_present_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->note_ms_gprs_present_request, &ogs_gtp1_tlv_desc_note_ms_gprs_present_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_NOTE_MS_GPRS_PRESENT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->note_ms_gprs_present_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->note_ms_gprs_present_response, &ogs_gtp1_tlv_desc_note_ms_gprs_present_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_IDENTIFICATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->identification_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->identification_request, &ogs_gtp1_tlv_desc_identification_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_IDENTIFICATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->identification_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->identification_response, &ogs_gtp1_tlv_desc_identification_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->sgsn_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->sgsn_context_request, &ogs_gtp1_tlv_desc_sgsn_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->sgsn_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->sgsn_context_response, &ogs_gtp1_tlv_desc_sgsn_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_ACKNOWLEDGE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->sgsn_context_acknowledge, + rv = ogs_tlv_parse_msg_desc(>p1_message->sgsn_context_acknowledge, &ogs_gtp1_tlv_desc_sgsn_context_acknowledge, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_relocation_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_relocation_request, &ogs_gtp1_tlv_desc_forward_relocation_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_relocation_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_relocation_response, &ogs_gtp1_tlv_desc_forward_relocation_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_COMPLETE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_relocation_complete, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_relocation_complete, &ogs_gtp1_tlv_desc_forward_relocation_complete, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RELOCATION_CANCEL_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->relocation_cancel_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->relocation_cancel_request, &ogs_gtp1_tlv_desc_relocation_cancel_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RELOCATION_CANCEL_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->relocation_cancel_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->relocation_cancel_response, &ogs_gtp1_tlv_desc_relocation_cancel_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_SRNS_CONTEXT_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_srns_context, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_srns_context, &ogs_gtp1_tlv_desc_forward_srns_context, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_relocation_complete_acknowledge, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_relocation_complete_acknowledge, &ogs_gtp1_tlv_desc_forward_relocation_complete_acknowledge, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_SRNS_CONTEXT_ACKNOWLEDGE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->forward_srns_context_acknowledge, + rv = ogs_tlv_parse_msg_desc(>p1_message->forward_srns_context_acknowledge, &ogs_gtp1_tlv_desc_forward_srns_context_acknowledge, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UE_REGISTRATION_QUERY_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->ue_registration_query_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->ue_registration_query_request, &ogs_gtp1_tlv_desc_ue_registration_query_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UE_REGISTRATION_QUERY_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->ue_registration_query_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->ue_registration_query_response, &ogs_gtp1_tlv_desc_ue_registration_query_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RAN_INFORMATION_RELAY_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->ran_information_relay, + rv = ogs_tlv_parse_msg_desc(>p1_message->ran_information_relay, &ogs_gtp1_tlv_desc_ran_information_relay, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_notification_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_notification_request, &ogs_gtp1_tlv_desc_mbms_notification_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_notification_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_notification_response, &ogs_gtp1_tlv_desc_mbms_notification_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REJECT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_notification_reject_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_notification_reject_request, &ogs_gtp1_tlv_desc_mbms_notification_reject_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REJECT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_notification_reject_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_notification_reject_response, &ogs_gtp1_tlv_desc_mbms_notification_reject_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_MBMS_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->create_mbms_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->create_mbms_context_request, &ogs_gtp1_tlv_desc_create_mbms_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_MBMS_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->create_mbms_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->create_mbms_context_response, &ogs_gtp1_tlv_desc_create_mbms_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_MBMS_CONTEXT_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->update_mbms_context_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->update_mbms_context_request, &ogs_gtp1_tlv_desc_update_mbms_context_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_MBMS_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->update_mbms_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->update_mbms_context_response, &ogs_gtp1_tlv_desc_update_mbms_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_MBMS_CONTEXT_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->delete_mbms_context_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->delete_mbms_context_response, &ogs_gtp1_tlv_desc_delete_mbms_context_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_REGISTRATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_registration_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_registration_request, &ogs_gtp1_tlv_desc_mbms_registration_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_REGISTRATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_registration_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_registration_response, &ogs_gtp1_tlv_desc_mbms_registration_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_DE_REGISTRATION_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_de_registration_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_de_registration_request, &ogs_gtp1_tlv_desc_mbms_de_registration_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_DE_REGISTRATION_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_de_registration_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_de_registration_response, &ogs_gtp1_tlv_desc_mbms_de_registration_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_START_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_start_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_start_request, &ogs_gtp1_tlv_desc_mbms_session_start_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_START_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_start_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_start_response, &ogs_gtp1_tlv_desc_mbms_session_start_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_STOP_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_stop_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_stop_request, &ogs_gtp1_tlv_desc_mbms_session_stop_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_STOP_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_stop_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_stop_response, &ogs_gtp1_tlv_desc_mbms_session_stop_response, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_UPDATE_REQUEST_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_update_request, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_update_request, &ogs_gtp1_tlv_desc_mbms_session_update_request, pkbuf, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_UPDATE_RESPONSE_TYPE: - rv = ogs_tlv_parse_msg_desc(>p_message->mbms_session_update_response, + rv = ogs_tlv_parse_msg_desc(>p1_message->mbms_session_update_response, &ogs_gtp1_tlv_desc_mbms_session_update_response, pkbuf, OGS_TLV_MODE_T1_L2); break; default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + ogs_warn("Not implmeneted(type:%d)", gtp1_message->h.type); break; } @@ -2529,238 +2529,238 @@ return rv; } -ogs_pkbuf_t *ogs_gtp1_build_msg(ogs_gtp1_message_t *gtp_message) +ogs_pkbuf_t *ogs_gtp1_build_msg(ogs_gtp1_message_t *gtp1_message) { ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(gtp_message); - switch(gtp_message->h.type) { + ogs_assert(gtp1_message); + switch(gtp1_message->h.type) { case OGS_GTP1_ECHO_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_echo_request, - >p_message->echo_request, OGS_TLV_MODE_T1_L2); + >p1_message->echo_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_ECHO_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_echo_response, - >p_message->echo_response, OGS_TLV_MODE_T1_L2); + >p1_message->echo_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_PDP_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_create_pdp_context_request, - >p_message->create_pdp_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->create_pdp_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_create_pdp_context_response, - >p_message->create_pdp_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->create_pdp_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_PDP_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_update_pdp_context_request, - >p_message->update_pdp_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->update_pdp_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_PDP_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_update_pdp_context_response, - >p_message->update_pdp_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->update_pdp_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_PDP_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_delete_pdp_context_request, - >p_message->delete_pdp_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->delete_pdp_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_PDP_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_delete_pdp_context_response, - >p_message->delete_pdp_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->delete_pdp_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_INITIATE_PDP_CONTEXT_ACTIVATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_initiate_pdp_context_activation_request, - >p_message->initiate_pdp_context_activation_request, OGS_TLV_MODE_T1_L2); + >p1_message->initiate_pdp_context_activation_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_INITIATE_PDP_CONTEXT_ACTIVATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_initiate_pdp_context_activation_response, - >p_message->initiate_pdp_context_activation_response, OGS_TLV_MODE_T1_L2); + >p1_message->initiate_pdp_context_activation_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_pdu_notification_request, - >p_message->pdu_notification_request, OGS_TLV_MODE_T1_L2); + >p1_message->pdu_notification_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_pdu_notification_response, - >p_message->pdu_notification_response, OGS_TLV_MODE_T1_L2); + >p1_message->pdu_notification_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REJECT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_pdu_notification_reject_request, - >p_message->pdu_notification_reject_request, OGS_TLV_MODE_T1_L2); + >p1_message->pdu_notification_reject_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_PDU_NOTIFICATION_REJECT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_pdu_notification_reject_response, - >p_message->pdu_notification_reject_response, OGS_TLV_MODE_T1_L2); + >p1_message->pdu_notification_reject_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SUPPORTED_EXTENSION_HEADERS_NOTIFICATION_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_supported_extension_headers_notification, - >p_message->supported_extension_headers_notification, OGS_TLV_MODE_T1_L2); + >p1_message->supported_extension_headers_notification, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SEND_ROUTEING_INFORMATION_FOR_GPRS_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_send_routeing_information_for_gprs_request, - >p_message->send_routeing_information_for_gprs_request, OGS_TLV_MODE_T1_L2); + >p1_message->send_routeing_information_for_gprs_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SEND_ROUTEING_INFORMATION_FOR_GPRS_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_send_routeing_information_for_gprs_response, - >p_message->send_routeing_information_for_gprs_response, OGS_TLV_MODE_T1_L2); + >p1_message->send_routeing_information_for_gprs_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FAILURE_REPORT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_failure_report_request, - >p_message->failure_report_request, OGS_TLV_MODE_T1_L2); + >p1_message->failure_report_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FAILURE_REPORT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_failure_report_response, - >p_message->failure_report_response, OGS_TLV_MODE_T1_L2); + >p1_message->failure_report_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_NOTE_MS_GPRS_PRESENT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_note_ms_gprs_present_request, - >p_message->note_ms_gprs_present_request, OGS_TLV_MODE_T1_L2); + >p1_message->note_ms_gprs_present_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_NOTE_MS_GPRS_PRESENT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_note_ms_gprs_present_response, - >p_message->note_ms_gprs_present_response, OGS_TLV_MODE_T1_L2); + >p1_message->note_ms_gprs_present_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_IDENTIFICATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_identification_request, - >p_message->identification_request, OGS_TLV_MODE_T1_L2); + >p1_message->identification_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_IDENTIFICATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_identification_response, - >p_message->identification_response, OGS_TLV_MODE_T1_L2); + >p1_message->identification_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_sgsn_context_request, - >p_message->sgsn_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->sgsn_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_sgsn_context_response, - >p_message->sgsn_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->sgsn_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_SGSN_CONTEXT_ACKNOWLEDGE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_sgsn_context_acknowledge, - >p_message->sgsn_context_acknowledge, OGS_TLV_MODE_T1_L2); + >p1_message->sgsn_context_acknowledge, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_relocation_request, - >p_message->forward_relocation_request, OGS_TLV_MODE_T1_L2); + >p1_message->forward_relocation_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_relocation_response, - >p_message->forward_relocation_response, OGS_TLV_MODE_T1_L2); + >p1_message->forward_relocation_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_COMPLETE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_relocation_complete, - >p_message->forward_relocation_complete, OGS_TLV_MODE_T1_L2); + >p1_message->forward_relocation_complete, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RELOCATION_CANCEL_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_relocation_cancel_request, - >p_message->relocation_cancel_request, OGS_TLV_MODE_T1_L2); + >p1_message->relocation_cancel_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RELOCATION_CANCEL_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_relocation_cancel_response, - >p_message->relocation_cancel_response, OGS_TLV_MODE_T1_L2); + >p1_message->relocation_cancel_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_SRNS_CONTEXT_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_srns_context, - >p_message->forward_srns_context, OGS_TLV_MODE_T1_L2); + >p1_message->forward_srns_context, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_RELOCATION_COMPLETE_ACKNOWLEDGE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_relocation_complete_acknowledge, - >p_message->forward_relocation_complete_acknowledge, OGS_TLV_MODE_T1_L2); + >p1_message->forward_relocation_complete_acknowledge, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_FORWARD_SRNS_CONTEXT_ACKNOWLEDGE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_forward_srns_context_acknowledge, - >p_message->forward_srns_context_acknowledge, OGS_TLV_MODE_T1_L2); + >p1_message->forward_srns_context_acknowledge, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UE_REGISTRATION_QUERY_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_ue_registration_query_request, - >p_message->ue_registration_query_request, OGS_TLV_MODE_T1_L2); + >p1_message->ue_registration_query_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UE_REGISTRATION_QUERY_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_ue_registration_query_response, - >p_message->ue_registration_query_response, OGS_TLV_MODE_T1_L2); + >p1_message->ue_registration_query_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_RAN_INFORMATION_RELAY_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_ran_information_relay, - >p_message->ran_information_relay, OGS_TLV_MODE_T1_L2); + >p1_message->ran_information_relay, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_notification_request, - >p_message->mbms_notification_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_notification_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_notification_response, - >p_message->mbms_notification_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_notification_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REJECT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_notification_reject_request, - >p_message->mbms_notification_reject_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_notification_reject_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_NOTIFICATION_REJECT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_notification_reject_response, - >p_message->mbms_notification_reject_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_notification_reject_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_MBMS_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_create_mbms_context_request, - >p_message->create_mbms_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->create_mbms_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_CREATE_MBMS_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_create_mbms_context_response, - >p_message->create_mbms_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->create_mbms_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_MBMS_CONTEXT_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_update_mbms_context_request, - >p_message->update_mbms_context_request, OGS_TLV_MODE_T1_L2); + >p1_message->update_mbms_context_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_UPDATE_MBMS_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_update_mbms_context_response, - >p_message->update_mbms_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->update_mbms_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_DELETE_MBMS_CONTEXT_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_delete_mbms_context_response, - >p_message->delete_mbms_context_response, OGS_TLV_MODE_T1_L2); + >p1_message->delete_mbms_context_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_REGISTRATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_registration_request, - >p_message->mbms_registration_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_registration_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_REGISTRATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_registration_response, - >p_message->mbms_registration_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_registration_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_DE_REGISTRATION_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_de_registration_request, - >p_message->mbms_de_registration_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_de_registration_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_DE_REGISTRATION_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_de_registration_response, - >p_message->mbms_de_registration_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_de_registration_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_START_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_start_request, - >p_message->mbms_session_start_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_start_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_START_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_start_response, - >p_message->mbms_session_start_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_start_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_STOP_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_stop_request, - >p_message->mbms_session_stop_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_stop_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_STOP_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_stop_response, - >p_message->mbms_session_stop_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_stop_response, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_UPDATE_REQUEST_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_update_request, - >p_message->mbms_session_update_request, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_update_request, OGS_TLV_MODE_T1_L2); break; case OGS_GTP1_MBMS_SESSION_UPDATE_RESPONSE_TYPE: pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_mbms_session_update_response, - >p_message->mbms_session_update_response, OGS_TLV_MODE_T1_L2); + >p1_message->mbms_session_update_response, OGS_TLV_MODE_T1_L2); break; default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + ogs_warn("Not implmeneted(type:%d)", gtp1_message->h.type); break; }
View file
open5gs_2.4.8.tar.xz/lib/gtp/v1/message.h -> open5gs_2.4.9.tar.xz/lib/gtp/v1/message.h
Changed
@@ -21,7 +21,7 @@ /******************************************************************************* * This file had been created by gtp1-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-05-12 14:42:38.599141 by pespin + * Created on: 2022-06-30 08:56:31.627300 by ubuntu * from 29060-g00.docx ******************************************************************************/
View file
open5gs_2.4.8.tar.xz/lib/gtp/v1/path.h -> open5gs_2.4.9.tar.xz/lib/gtp/v1/path.h
Changed
@@ -32,7 +32,7 @@ typedef struct ogs_gtp_xact_s ogs_gtp_xact_t; -ogs_pkbuf_t *ogs_gtp1_handle_echo_req(ogs_pkbuf_t *pkt); +ogs_pkbuf_t *ogs_gtp1_handle_echo_req(ogs_pkbuf_t *pkb); void ogs_gtp1_send_error_message( ogs_gtp_xact_t *xact, uint32_t teid, uint8_t type, uint8_t cause_value);
View file
open5gs_2.4.8.tar.xz/lib/gtp/v1/support/gtp1-tlv.py -> open5gs_2.4.9.tar.xz/lib/gtp/v1/support/gtp1-tlv.py
Changed
@@ -594,20 +594,20 @@ f.write("}};\n\n") f.write("\n") -f.write("""int ogs_gtp1_parse_msg(ogs_gtp1_message_t *gtp_message, ogs_pkbuf_t *pkbuf) +f.write("""int ogs_gtp1_parse_msg(ogs_gtp1_message_t *gtp1_message, ogs_pkbuf_t *pkbuf) { int rv = OGS_ERROR; ogs_gtp1_header_t *h = NULL; uint16_t size = 0; - ogs_assert(gtp_message); + ogs_assert(gtp1_message); ogs_assert(pkbuf); ogs_assert(pkbuf->len); h = (ogs_gtp1_header_t *)pkbuf->data; ogs_assert(h); - memset(gtp_message, 0, sizeof(ogs_gtp1_message_t)); + memset(gtp1_message, 0, sizeof(ogs_gtp1_message_t)); if (h->e || h->s || h->pn) size = OGS_GTPV1C_HEADER_LEN; @@ -615,25 +615,25 @@ size = OGS_GTPV1C_HEADER_LEN - 4; ogs_assert(ogs_pkbuf_pull(pkbuf, size)); - memcpy(>p_message->h, pkbuf->data - size, size); + memcpy(>p1_message->h, pkbuf->data - size, size); - gtp_message->h.teid = be32toh(gtp_message->h.teid); + gtp1_message->h.teid = be32toh(gtp1_message->h.teid); if (pkbuf->len == 0) { ogs_assert(ogs_pkbuf_push(pkbuf, size)); return OGS_OK; } - switch(gtp_message->h.type) { + switch(gtp1_message->h.type) { """) for (k, v) in sorted_msg_list: if "ies" in msg_listk: f.write(" case OGS_GTP1_%s_TYPE:\n" % v_upper(k)) - f.write(" rv = ogs_tlv_parse_msg_desc(>p_message->%s,\n" % v_lower(k)) + f.write(" rv = ogs_tlv_parse_msg_desc(>p1_message->%s,\n" % v_lower(k)) f.write(" &ogs_gtp1_tlv_desc_%s, pkbuf, OGS_TLV_MODE_T1_L2);\n" % v_lower(k)) f.write(" break;\n") f.write(""" default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + ogs_warn("Not implmeneted(type:%d)", gtp1_message->h.type); break; } @@ -644,21 +644,21 @@ """) -f.write("""ogs_pkbuf_t *ogs_gtp1_build_msg(ogs_gtp1_message_t *gtp_message) +f.write("""ogs_pkbuf_t *ogs_gtp1_build_msg(ogs_gtp1_message_t *gtp1_message) { ogs_pkbuf_t *pkbuf = NULL; - ogs_assert(gtp_message); - switch(gtp_message->h.type) { + ogs_assert(gtp1_message); + switch(gtp1_message->h.type) { """) for (k, v) in sorted_msg_list: if "ies" in msg_listk: f.write(" case OGS_GTP1_%s_TYPE:\n" % v_upper(k)) f.write(" pkbuf = ogs_tlv_build_msg(&ogs_gtp1_tlv_desc_%s,\n" % v_lower(k)) - f.write(" >p_message->%s, OGS_TLV_MODE_T1_L2);\n" % v_lower(k)) + f.write(" >p1_message->%s, OGS_TLV_MODE_T1_L2);\n" % v_lower(k)) f.write(" break;\n") f.write(""" default: - ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type); + ogs_warn("Not implmeneted(type:%d)", gtp1_message->h.type); break; }
View file
open5gs_2.4.8.tar.xz/lib/gtp/v1/types.h -> open5gs_2.4.9.tar.xz/lib/gtp/v1/types.h
Changed
@@ -277,6 +277,18 @@ #define OGS_GTP1_QOS_SRC_STATS_DESC_UNKNOWN 0 #define OGS_GTP1_QOS_SRC_STATS_DESC_SPEECH 1 +/* 7.7.48 Common Flags */ +typedef struct ogs_gtp1_common_flags_s { +ED8(uint8_t dual_address_bearer_flag:1;, + uint8_t upgrade_qos_supported:1;, + uint8_t nrsn:1;, + uint8_t no_qos_negotiation:1;, + uint8_t mbms_counting_information:1;, + uint8_t ran_procedures_ready:1;, + uint8_t mbms_service_type:1;, + uint8_t prohibit_payload_compression:1;) +} __attribute__ ((packed)) ogs_gtp1_common_flags_t; + /* 7.7.98 APN Aggregate Maximum Bit Rate (APN-AMBR) */ typedef struct ogs_gtp1_apn_ambr_s { uint32_t uplink;
View file
open5gs_2.4.8.tar.xz/lib/gtp/v2/conv.c -> open5gs_2.4.9.tar.xz/lib/gtp/v2/conv.c
Changed
@@ -33,7 +33,11 @@ addr->ogs_sin_port = htobe16(port); addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr6, OGS_ERROR); + if (!addr6) { + ogs_error("ogs_calloc() failed"); + ogs_free(addr); + return OGS_ERROR; + } addr6->ogs_sa_family = AF_INET6; addr6->ogs_sin_port = htobe16(port); @@ -55,9 +59,9 @@ *list = addr6; } else { + ogs_error("No IPv4 or IPv6"); ogs_free(addr); ogs_free(addr6); - ogs_error("No IPv4 or IPv6"); return OGS_ERROR; }
View file
open5gs_2.4.8.tar.xz/lib/gtp/v2/message.c -> open5gs_2.4.9.tar.xz/lib/gtp/v2/message.c
Changed
@@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by gtp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-06-11 20:06:47.872181 by acetcom + * Created on: 2022-06-30 08:56:57.201419 by ubuntu * from 29274-g30.docx ******************************************************************************/
View file
open5gs_2.4.8.tar.xz/lib/gtp/v2/message.h -> open5gs_2.4.9.tar.xz/lib/gtp/v2/message.h
Changed
@@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by gtp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-06-11 20:06:47.866971 by acetcom + * Created on: 2022-06-30 08:56:57.190289 by ubuntu * from 29274-g30.docx ******************************************************************************/ @@ -1274,8 +1274,8 @@ }; } ogs_gtp2_message_t; -int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp_message, ogs_pkbuf_t *pkbuf); -ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp_message); +int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp2_message, ogs_pkbuf_t *pkbuf); +ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp2_message); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/lib/gtp/v2/path.h -> open5gs_2.4.9.tar.xz/lib/gtp/v2/path.h
Changed
@@ -35,7 +35,7 @@ ogs_gtp2_header_t *gtp_hdesc, ogs_gtp2_extension_header_t *ext_hdesc, ogs_pkbuf_t *pkbuf); -ogs_pkbuf_t *ogs_gtp2_handle_echo_req(ogs_pkbuf_t *pkt); +ogs_pkbuf_t *ogs_gtp2_handle_echo_req(ogs_pkbuf_t *pkb); void ogs_gtp2_send_error_message( ogs_gtp_xact_t *xact, uint32_t teid, uint8_t type, uint8_t cause_value);
View file
open5gs_2.4.8.tar.xz/lib/gtp/v2/support/gtp-tlv.py -> open5gs_2.4.9.tar.xz/lib/gtp/v2/support/gtp-tlv.py
Changed
@@ -603,8 +603,8 @@ f.write(" };\n"); f.write("} ogs_gtp2_message_t;\n\n") -f.write("""int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp_message, ogs_pkbuf_t *pkbuf); -ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp_message); +f.write("""int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp2_message, ogs_pkbuf_t *pkbuf); +ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp2_message); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/lib/gtp/xact.c -> open5gs_2.4.9.tar.xz/lib/gtp/xact.c
Changed
@@ -34,8 +34,8 @@ static OGS_POOL(pool, ogs_gtp_xact_t); static ogs_gtp_xact_t *ogs_gtp_xact_remote_create(ogs_gtp_node_t *gnode, uint8_t gtp_version, uint32_t sqn); -static ogs_gtp_xact_stage_t ogs_gtp2_xact_get_stage(uint8_t type, uint32_t sqn); -static ogs_gtp_xact_stage_t ogs_gtp1_xact_get_stage(uint8_t type, uint32_t sqn); +static ogs_gtp_xact_stage_t ogs_gtp2_xact_get_stage(uint8_t type, uint32_t xid); +static ogs_gtp_xact_stage_t ogs_gtp1_xact_get_stage(uint8_t type, uint32_t xid); static int ogs_gtp_xact_delete(ogs_gtp_xact_t *xact); static int ogs_gtp_xact_update_rx(ogs_gtp_xact_t *xact, uint8_t type); static ogs_gtp_xact_t *ogs_gtp_xact_find_by_xid( @@ -48,7 +48,7 @@ { ogs_assert(ogs_gtp_xact_initialized == 0); - ogs_pool_init(&pool, ogs_app()->pool.gtp_xact); + ogs_pool_init(&pool, ogs_app()->pool.xact); g_xact_id = 0;
View file
open5gs_2.4.8.tar.xz/lib/gtp/xact.h -> open5gs_2.4.9.tar.xz/lib/gtp/xact.h
Changed
@@ -86,6 +86,9 @@ ogs_timer_t *tm_holding; /**< Timer waiting for holding message */ uint8_t holding_rcount; + uint32_t local_teid; /**< Local TEID, + expected in reply from peer */ + void *assoc_xact; /**< Associated GTP transaction */ void *pfcp_xact; /**< Associated PFCP transaction */
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/decoder.c -> open5gs_2.4.9.tar.xz/lib/nas/5gs/decoder.c
Changed
@@ -28,7 +28,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:09.045630 by acetcom + * Created on: 2022-07-11 07:09:47.173881 by ubuntu * from 24501-g41.docx ******************************************************************************/ @@ -979,7 +979,7 @@ int decoded = 0; int size = 0; - ogs_trace("NAS Decode DEREGISTRATION_REQUEST\n"); + ogs_trace("NAS Decode DEREGISTRATION_REQUEST_FROM_UE\n"); size = ogs_nas_5gs_decode_de_registration_type(&deregistration_request_from_ue->de_registration_type, pkbuf); if (size < 0) { @@ -1006,7 +1006,7 @@ int decoded = 0; int size = 0; - ogs_trace("NAS Decode DEREGISTRATION_REQUEST\n"); + ogs_trace("NAS Decode DEREGISTRATION_REQUEST_TO_UE\n"); size = ogs_nas_5gs_decode_de_registration_type(&deregistration_request_to_ue->de_registration_type, pkbuf); if (size < 0) { @@ -1028,34 +1028,34 @@ decoded += size; switch(type) { - case OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE: size = ogs_nas_5gs_decode_5gmm_cause(&deregistration_request_to_ue->gmm_cause, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_5gmm_cause() failed"); return size; } - deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT; + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT; decoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE: size = ogs_nas_5gs_decode_gprs_timer_2(&deregistration_request_to_ue->t3346_value, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_gprs_timer_2() failed"); return size; } - deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT; + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT; decoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE: size = ogs_nas_5gs_decode_rejected_nssai(&deregistration_request_to_ue->rejected_nssai, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_rejected_nssai() failed"); return size; } - deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT; + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT; decoded += size; break; default: @@ -3742,7 +3742,7 @@ decoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: size = ogs_nas_5gs_decode_deregistration_request_from_ue(message, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_deregistration_request_from_ue() failed"); @@ -3751,7 +3751,18 @@ decoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_ACCEPT: + case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE: + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE: + size = ogs_nas_5gs_decode_deregistration_request_to_ue(message, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_deregistration_request_to_ue() failed"); + return size; + } + + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE: break; case OGS_NAS_5GS_SERVICE_REQUEST: size = ogs_nas_5gs_decode_service_request(message, pkbuf);
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/encoder.c -> open5gs_2.4.9.tar.xz/lib/nas/5gs/encoder.c
Changed
@@ -28,7 +28,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:09.053958 by acetcom + * Created on: 2022-07-11 07:09:47.188485 by ubuntu * from 24501-g41.docx ******************************************************************************/ @@ -851,7 +851,7 @@ int encoded = 0; int size = 0; - ogs_trace("NAS Encode DEREGISTRATION_REQUEST"); + ogs_trace("NAS Encode DEREGISTRATION_REQUEST_FROM_UE"); size = ogs_nas_5gs_encode_de_registration_type(pkbuf, &deregistration_request_from_ue->de_registration_type); ogs_assert(size >= 0); @@ -870,14 +870,14 @@ int encoded = 0; int size = 0; - ogs_trace("NAS Encode DEREGISTRATION_REQUEST"); + ogs_trace("NAS Encode DEREGISTRATION_REQUEST_TO_UE"); size = ogs_nas_5gs_encode_de_registration_type(pkbuf, &deregistration_request_to_ue->de_registration_type); ogs_assert(size >= 0); encoded += size; - if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE); + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE); ogs_assert(size >= 0); encoded += size; @@ -886,8 +886,8 @@ encoded += size; } - if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE); + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE); ogs_assert(size >= 0); encoded += size; @@ -896,8 +896,8 @@ encoded += size; } - if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE); + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE); ogs_assert(size >= 0); encoded += size; @@ -2848,12 +2848,19 @@ ogs_assert(size >= 0); encoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: + size = ogs_nas_5gs_encode_deregistration_request_from_ue(pkbuf, message); + ogs_assert(size >= 0); + encoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE: + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE: size = ogs_nas_5gs_encode_deregistration_request_to_ue(pkbuf, message); ogs_assert(size >= 0); encoded += size; break; - case OGS_NAS_5GS_DEREGISTRATION_ACCEPT: + case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE: break; case OGS_NAS_5GS_SERVICE_REQUEST: size = ogs_nas_5gs_encode_service_request(pkbuf, message);
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/ies.c -> open5gs_2.4.9.tar.xz/lib/nas/5gs/ies.c
Changed
@@ -28,7 +28,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:09.032504 by acetcom + * Created on: 2022-07-11 07:09:47.151738 by ubuntu * from 24501-g41.docx ******************************************************************************/
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/ies.h -> open5gs_2.4.9.tar.xz/lib/nas/5gs/ies.h
Changed
@@ -28,7 +28,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:09.029942 by acetcom + * Created on: 2022-07-11 07:09:47.146947 by ubuntu * from 24501-g41.docx ******************************************************************************/
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/message.h -> open5gs_2.4.9.tar.xz/lib/nas/5gs/message.h
Changed
@@ -28,7 +28,7 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:09.040249 by acetcom + * Created on: 2022-07-11 07:09:47.165005 by ubuntu * from 24501-g41.docx ******************************************************************************/ @@ -72,8 +72,10 @@ #define OGS_NAS_5GS_REGISTRATION_ACCEPT 66 #define OGS_NAS_5GS_REGISTRATION_COMPLETE 67 #define OGS_NAS_5GS_REGISTRATION_REJECT 68 -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST 69 -#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT 70 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE 69 +#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE 70 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE 71 +#define OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE 72 #define OGS_NAS_5GS_SERVICE_REQUEST 76 #define OGS_NAS_5GS_SERVICE_REJECT 77 #define OGS_NAS_5GS_SERVICE_ACCEPT 78 @@ -396,12 +398,12 @@ /******************************************************* * DEREGISTRATION REQUEST TO UE ******************************************************/ -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_PRESENT ((uint64_t)1<<0) -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_PRESENT ((uint64_t)1<<1) -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_PRESENT ((uint64_t)1<<2) -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_5GMM_CAUSE_TYPE 0x58 -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_T3346_VALUE_TYPE 0x5F -#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_REJECTED_NSSAI_TYPE 0x6D +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE 0x58 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE 0x5F +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE 0x6D typedef struct ogs_nas_5gs_deregistration_request_to_ue_s { /* Mandatory fields */
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/support/nas-message.py -> open5gs_2.4.9.tar.xz/lib/nas/5gs/support/nas-message.py
Changed
@@ -106,7 +106,7 @@ print("-h Print this help and return") def v_upper(v): - return re.sub('_TO_UE', '', re.sub('_FROM_UE', '', re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).upper())) + return re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).upper() def v_lower(v): return re.sub('\'', '_', re.sub('/', '_', re.sub('-', '_', re.sub(' ', '_', v)))).lower() @@ -550,8 +550,7 @@ """) for (k, v) in sorted_msg_list: - if k.find("TO UE") == -1: - f.write("#define OGS_NAS_5GS_" + v_upper(k) + " " + v.split('.')0 + "\n") + f.write("#define OGS_NAS_5GS_" + v_upper(k) + " " + v.split('.')0 + "\n") f.write("\n") for (k, v) in sorted_msg_list: @@ -749,7 +748,7 @@ for (k, v) in sorted_msg_list: if "ies" not in msg_listk: continue; - if float(msg_listk"type") < 192 and k.find("TO UE") == -1: + if float(msg_listk"type") < 192: f.write(" case OGS_NAS_5GS_%s:\n" % v_upper(k)) if len(msg_listk"ies") != 0: f.write(" size = ogs_nas_5gs_decode_%s(message, pkbuf);\n" % v_lower(k)) @@ -903,7 +902,7 @@ for (k, v) in sorted_msg_list: if "ies" not in msg_listk: continue; - if float(msg_listk"type") < 192 and k.find("FROM UE") == -1: + if float(msg_listk"type") < 192: f.write(" case OGS_NAS_5GS_%s:\n" % v_upper(k)) if len(msg_listk"ies") != 0: f.write(" size = ogs_nas_5gs_encode_%s(pkbuf, message);\n" % v_lower(k))
View file
open5gs_2.4.8.tar.xz/lib/nas/5gs/types.h -> open5gs_2.4.9.tar.xz/lib/nas/5gs/types.h
Changed
@@ -106,34 +106,53 @@ /* 9.11.3.2 5GMM cause * M V 1 */ + +/* REQUEST_ACCEPTED(16) cause is defined by Open5GS */ +#define OGS_5GMM_CAUSE_REQUEST_ACCEPTED 16 + +/* Annex A (informative): Cause values for 5GS mobility management + * A.1 Causes related to UE identification */ #define OGS_5GMM_CAUSE_ILLEGAL_UE 3 -#define OGS_5GMM_CAUSE_PEI_NOT_ACCEPTED 5 #define OGS_5GMM_CAUSE_ILLEGAL_ME 6 -#define OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED 7 #define OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9 #define OGS_5GMM_CAUSE_IMPLICITLY_DE_REGISTERED 10 + +/* A.2 Cause related to subscription options */ +#define OGS_5GMM_CAUSE_PEI_NOT_ACCEPTED 5 +#define OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED 7 #define OGS_5GMM_CAUSE_PLMN_NOT_ALLOWED 11 #define OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12 #define OGS_5GMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13 #define OGS_5GMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15 +#define OGS_5GMM_CAUSE_N1_MODE_NOT_ALLOWED 27 +#define OGS_5GMM_CAUSE_REDIRECTION_TO_EPC_REQUIRED 31 +#define OGS_5GMM_CAUSE_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED 72 +#define OGS_5GMM_CAUSE_TEMPORARILY_NOT_AUTHORIZED_FOR_THIS_SNPN 74 +#define OGS_5GMM_CAUSE_PERMANENTLY_NOT_AUTHORIZED_FOR_THIS_SNPN 75 +#define OGS_5GMM_CAUSE_NOT_AUTHORIZED_FOR_THIS_CAG_OR_AUITHORIZED_FOR_CAG_CELLS_ONLY 76 +#define WIRELESS_ACCESS_AREA_NOT_ALLOWED 76 + +/* A.3 Causes related to PLMN or SNPN specific network failures + * and congestion/authentication failures */ #define OGS_5GMM_CAUSE_MAC_FAILURE 20 #define OGS_5GMM_CAUSE_SYNCH_FAILURE 21 #define OGS_5GMM_CAUSE_CONGESTION 22 #define OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23 #define OGS_5GMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24 #define OGS_5GMM_CAUSE_NON_5G_AUTHENTICATION_UNACCEPTABLE 26 -#define OGS_5GMM_CAUSE_N1_MODE_NOT_ALLOWED 27 #define OGS_5GMM_CAUSE_RESTRICTED_SERVICE_AREA 28 #define OGS_5GMM_CAUSE_LADN_NOT_AVAILABLE 43 +#define OGS_5GMM_CAUSE_NO_NETWORK_SLICES_AVAILABLE 62 #define OGS_5GMM_CAUSE_MAXIMUM_NUMBER_OF_PDU_SESSIONS_REACHED 65 #define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67 #define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69 #define OGS_5GMM_CAUSE_NGKSI_ALREADY_IN_USE 71 -#define OGS_5GMM_CAUSE_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED 72 #define OGS_5GMM_CAUSE_SERVING_NETWORK_NOT_AUTHORIZED 73 #define OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED 90 #define OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE 91 #define OGS_5GMM_CAUSE_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION 92 + +/* A.4 Causes related to invalid messages */ #define OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_5GMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 @@ -291,7 +310,7 @@ /* * Do not change 'ogs_5gs_tai_t' to 'ogs_nas_tracking_area_identity_t'. * Use 'ogs_5gs_tai_t' for easy implementation. - * ogs_nas_tai_list_build() changes to NAS + * ogs_nas_tai_list_build() changes to NAS * format(ogs_nas_tracking_area_identity_t) * and is sent to the UE. */ @@ -554,12 +573,12 @@ } __attribute__ ((packed)) ogs_nas_rejected_s_nssai_t; void ogs_nas_build_rejected_nssai( - ogs_nas_rejected_nssai_t *nas_rejected_nssai, - ogs_nas_rejected_s_nssai_t *nas_rejected_s_nssai, - int num_of_nas_rejected_s_nssai); + ogs_nas_rejected_nssai_t *rejected_nssai, + ogs_nas_rejected_s_nssai_t *rejected_s_nssai, + int num_of_rejected_s_nssai); int ogs_nas_parse_rejected_nssai( - ogs_nas_rejected_s_nssai_t *nas_rejected_s_nssai, - ogs_nas_rejected_nssai_t *nas_rejected_nssai); + ogs_nas_rejected_s_nssai_t *rejected_s_nssai, + ogs_nas_rejected_nssai_t *rejected_nssai); /* 9.11.3.49 Service area list * O TLV 6-114 */ @@ -639,6 +658,9 @@ /* 9.11.4.2 5GSM cause * O TV 2 */ + +/* Annex B (informative): Cause values for 5GS session management + * B.1 Causes related to nature of request */ #define OGS_5GSM_CAUSE_OPERATOR_DETERMINED_BARRING 8 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES 26 #define OGS_5GSM_CAUSE_MISSING_OR_UNKNOWN_DNN 27 @@ -647,11 +669,12 @@ #define OGS_5GSM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31 #define OGS_5GSM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32 #define OGS_5GSM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33 -#define OGS_5GSM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34 #define OGS_5GSM_CAUSE_PTI_ALREADY_IN_USE 35 #define OGS_5GSM_CAUSE_REGULAR_DEACTIVATION 36 #define OGS_5GSM_CAUSE_NETWORK_FAILURE 38 #define OGS_5GSM_CAUSE_REACTIVATION_REQUESTED 39 +#define OGS_5GSM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41 +#define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42 #define OGS_5GSM_CAUSE_INVALID_PDU_SESSION_IDENTITY 43 #define OGS_5GSM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44 #define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45 @@ -660,6 +683,10 @@ #define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV4_ONLY_ALLOWED 50 #define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV6_ONLY_ALLOWED 51 #define OGS_5GSM_CAUSE_PDU_SESSION_DOES_NOT_EXIST 54 +#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV4V6_ONLY_ALLOWED 57 +#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_UNSTRUCTURED_ONLY_ALLOWED 58 +#define OGS_5GSM_CAUSE_UNSUPPORTED_5QI_VALUE 59 +#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_ETHERNET_ONLY_ALLOWED 61 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67 #define OGS_5GSM_CAUSE_NOT_SUPPORTED_SSC_MODE 68 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69 @@ -669,6 +696,8 @@ #define OGS_5GSM_CAUSE_SEMANTIC_ERROR_IN_THE_QOS_OPERATION 83 #define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_THE_QOS_OPERATION 84 #define OGS_5GSM_CAUSE_INVALID_MAPPED_EPS_BEARER_IDENTITY 85 + +/* B.2 Protocol errors (e.g., unknown message) */ #define OGS_5GSM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_5GSM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_5GSM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97
View file
open5gs_2.4.8.tar.xz/lib/nas/common/types.h -> open5gs_2.4.9.tar.xz/lib/nas/common/types.h
Changed
@@ -748,8 +748,8 @@ } __attribute__ ((packed)) ogs_nas_apn_aggregate_maximum_bit_rate_t; void apn_ambr_build( - ogs_nas_apn_aggregate_maximum_bit_rate_t * apn_aggregate_maximum_bit_rate, - uint32_t dl_ambr, uint32_t ul_ambr); + ogs_nas_apn_aggregate_maximum_bit_rate_t *apn_aggregate_maximum_bit_rate, + uint32_t dl_apn_ambr, uint32_t ul_apn_ambr); /* 9.9.4.3 EPS quality of service * M LV 2-14 */
View file
open5gs_2.4.8.tar.xz/lib/nas/eps/types.h -> open5gs_2.4.9.tar.xz/lib/nas/eps/types.h
Changed
@@ -182,8 +182,8 @@ } __attribute__ ((packed)) ogs_nas_csfb_response_t; /* 9.9.3.7 Detach type - * M V 1/2 - * 9.9.3.21 NAS key set identifier + * M V 1/2 + * 9.9.3.21 NAS key set identifier * M V 1/2 */ #define OGS_NAS_DETACH_TYPE_FROM_UE_EPS_DETACH 1 #define OGS_NAS_DETACH_TYPE_FROM_UE_IMSI_DETACH 2 @@ -222,51 +222,55 @@ } __attribute__ ((packed)) ogs_nas_drx_parameter_t; /* 9.9.3.9 EMM cause - * O TV 2 - * Annex A (informative) Cause values for EPS mobility management + * O TV 2 */ + +/* REQUEST_ACCEPTED(16) cause is defined by Open5GS */ +#define EMM_CAUSE_REQUEST_ACCEPTED 16 + +/* Annex A (informative) Cause values for EPS mobility management * A.1 Causes related to UE identification */ -#define EMM_CAUSE_IMSI_UNKNOWN_IN_HSS 2 -#define EMM_CAUSE_ILLEGAL_UE 3 -#define EMM_CAUSE_IMSI_UNKNOWN_IN_VLR 4 -#define EMM_CAUSE_ILLEGAL_ME 6 -#define EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9 -#define EMM_CAUSE_IMPLICITLY_DETACHED 10 +#define OGS_NAS_EMM_CAUSE_IMSI_UNKNOWN_IN_HSS 2 +#define OGS_NAS_EMM_CAUSE_ILLEGAL_UE 3 +#define OGS_NAS_EMM_CAUSE_IMSI_UNKNOWN_IN_VLR 4 +#define OGS_NAS_EMM_CAUSE_ILLEGAL_ME 6 +#define OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9 +#define OGS_NAS_EMM_CAUSE_IMPLICITLY_DETACHED 10 /* A.2 Cause related to subscription options */ -#define EMM_CAUSE_IMEI_NOT_ACCEPTED 5 -#define EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED 7 -#define EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED 8 -#define EMM_CAUSE_PLMN_NOT_ALLOWED 11 -#define EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12 -#define EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13 -#define EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN 14 -#define EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15 -#define EMM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED_IN_THIS_PLMN 35 -#define EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED 40 -/* A.3 Causes related to PLMN specific network failures and +#define OGS_NAS_EMM_CAUSE_IMEI_NOT_ACCEPTED 5 +#define OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED 7 +#define OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED 8 +#define OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED 11 +#define OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12 +#define OGS_NAS_EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13 +#define OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN 14 +#define OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15 +#define OGS_NAS_EMM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED_IN_THIS_PLMN 35 +#define OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED 40 +/* A.3 Causes related to PLMN specific network failures and * congestion/authentication failures */ -#define EMM_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE 16 -#define EMM_CAUSE_NETWORK_FAILURE 17 -#define EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE 18 -#define EMM_CAUSE_ESM_FAILURE 19 -#define EMM_CAUSE_MAC_FAILURE 20 -#define EMM_CAUSE_SYNCH_FAILURE 21 -#define EMM_CAUSE_CONGESTION 22 -#define EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23 -#define EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24 -#define EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE 26 -#define EMM_CAUSE_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE 39 -#define EMM_CAUSE_SEVERE_NETWORK_FAILURE 42 -/* A.4 Causes related to nature of request +#define OGS_NAS_EMM_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE 16 +#define OGS_NAS_EMM_CAUSE_NETWORK_FAILURE 17 +#define OGS_NAS_EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE 18 +#define OGS_NAS_EMM_CAUSE_ESM_FAILURE 19 +#define OGS_NAS_EMM_CAUSE_MAC_FAILURE 20 +#define OGS_NAS_EMM_CAUSE_SYNCH_FAILURE 21 +#define OGS_NAS_EMM_CAUSE_CONGESTION 22 +#define OGS_NAS_EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23 +#define OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24 +#define OGS_NAS_EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE 26 +#define OGS_NAS_EMM_CAUSE_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE 39 +#define OGS_NAS_EMM_CAUSE_SEVERE_NETWORK_FAILURE 42 +/* A.4 Causes related to nature of request * NOTE: This subclause has no entries in this version of the specification * * A.5 Causes related to invalid messages */ -#define EMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 -#define EMM_CAUSE_INVALID_MANDATORY_INFORMATION 96 -#define EMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 -#define EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 -#define EMM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 -#define EMM_CAUSE_CONDITIONAL_IE_ERROR 100 -#define EMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 -#define EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 +#define OGS_NAS_EMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 +#define OGS_NAS_EMM_CAUSE_INVALID_MANDATORY_INFORMATION 96 +#define OGS_NAS_EMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 +#define OGS_NAS_EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 +#define OGS_NAS_EMM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 +#define OGS_NAS_EMM_CAUSE_CONDITIONAL_IE_ERROR 100 +#define OGS_NAS_EMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 +#define OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 typedef uint8_t ogs_nas_emm_cause_t; /* 9.9.3.10 * EPS attach result @@ -280,7 +284,7 @@ /* 9.9.3.11 EPS attach type * M V 1/2 - * 9.9.3.21 NAS key set identifier + * 9.9.3.21 NAS key set identifier * M V 1/2 */ #define OGS_NAS_KEY_SET_IDENTIFIER_NATIVE 0 #define OGS_NAS_KEY_SET_IDENTIFIER_MAPPED 1 @@ -320,7 +324,7 @@ }; } __attribute__ ((packed)) ogs_nas_eps_mobile_identity_t; -/* 9.9.3.12A EPS network feature support +/* 9.9.3.12A EPS network feature support * O TLV 3 */ typedef struct ogs_nas_eps_network_feature_support_s { uint8_t length; @@ -353,8 +357,8 @@ } __attribute__ ((packed)) ogs_nas_eps_update_result_t; /* 9.9.3.14 EPS update type - * M V 1/2 - * 9.9.3.21 NAS key set identifier + * M V 1/2 + * 9.9.3.21 NAS key set identifier * M V 1/2 */ #define OGS_NAS_EPS_UPDATE_TYPE_TA_UPDATING 0 #define OGS_NAS_EPS_UPDATE_TYPE_COMBINED_TA_LA_UPDATING 1 @@ -430,7 +434,7 @@ uint8_t spare:3;) } __attribute__ ((packed)) ogs_nas_ms_network_capability_t; -/* 9.9.3.20A MS network feature support +/* 9.9.3.20A MS network feature support * See subclause 10.5.1.15 in 3GPP TS 24.008 13. * O TV 1 */ typedef struct ogs_nas_ms_network_feature_support_s { @@ -470,12 +474,12 @@ uint8_t identity:1;) } ogs_nas_paging_identity_t; -/* 9.9.3.26 P-TMSI signature +/* 9.9.3.26 P-TMSI signature * See subclause 10.5.5.8 in 3GPP TS 24.008 * O TV 4 */ typedef uint32_t ogs_nas_p_tmsi_signature_t; /* TV : 4bytes */ -/* 9.9.3.26A Extended EMM cause +/* 9.9.3.26A Extended EMM cause * O TV 1 */ typedef struct ogs_nas_extended_emm_cause_s { ED4(uint8_t type:4;, @@ -485,8 +489,8 @@ } ogs_nas_extended_emm_cause_t; /* 9.9.3.27 Service type - * M V 1/2 - * 9.9.3.21 NAS key set identifier + * M V 1/2 + * 9.9.3.21 NAS key set identifier * M V 1/2 */ #define OGS_NAS_SERVICE_TYPE_CS_FALLBACK_FROM_UE 0 #define OGS_NAS_SERVICE_TYPE_CS_FALLBACK_TO_UE 1 @@ -540,7 +544,7 @@ /* * Do not change 'ogs_eps_tai_t' to 'ogs_nas_tracking_area_identity_t'. * Use 'ogs_eps_tai_t' for easy implementation. - * ogs_nas_tai_list_build() changes to NAS + * ogs_nas_tai_list_build() changes to NAS * format(ogs_nas_tracking_area_identity_t) * and is sent to the UE. */ @@ -565,9 +569,9 @@ } __attribute__ ((packed)) ogs_nas_ue_radio_capability_information_update_needed_t; /* 9.9.3.38 CLI - * O TLV 3-14 - * The coding of the CLI value part is the same as for - * octets 3 to 14 of the Calling party BCD number information element + * O TLV 3-14 + * The coding of the CLI value part is the same as for + * octets 3 to 14 of the Calling party BCD number information element * defined in subclause 10.5.4.9 of 3GPP TS 24.008 13. */ #define NAX_MAX_CLI_LEN 12 typedef struct ogs_nas_cli_s { @@ -576,8 +580,8 @@ } __attribute__ ((packed)) ogs_nas_cli_t; /* 9.9.3.39 SS Code - * O TV 2 - * The coding of the SS Code value is given in subclause 17.7.5 of + * O TV 2 + * The coding of the SS Code value is given in subclause 17.7.5 of * 3GPP TS 29.002 15C */ typedef uint8_t ogs_nas_ss_code_t; @@ -613,11 +617,11 @@ typedef struct ogs_nas_voice_domain_preference_and_ue_usage_setting_s { uint8_t length; ED3(uint8_t spare:5;, - uint8_t ue_usage_setting:1;, + uint8_t ue_usage_setting:1;, uint8_t voice_domain_preference_for_e_utran:2;) } __attribute__ ((packed)) ogs_nas_voice_domain_preference_and_ue_usage_setting_t; -/* 9.9.3.45 GUTI type +/* 9.9.3.45 GUTI type * O TV 1 */ typedef struct ogs_nas_guti_type_s { ED3(uint8_t type:4;, @@ -767,56 +771,56 @@ } __attribute__ ((packed)) ogs_nas_connectivity_type_t; /* 9.9.4.4 ESM cause - * M V 1 - * Annex B (informative) Cause values for EPS session management + * M V 1 + * Annex B (informative) Cause values for EPS session management B.1 Causes related to nature of request */ -#define ESM_CAUSE_OPERATOR_DETERMINED_BARRING 8 -#define ESM_CAUSE_INSUFFICIENT_RESOURCES 26 -#define ESM_CAUSE_MISSING_OR_UNKNOWN_APN 27 -#define ESM_CAUSE_UNKNOWN_PDN_TYPE 28 -#define ESM_CAUSE_USER_AUTHENTICATION_FAILED 29 -#define ESM_CAUSE_REQUEST_REJECTED_BY_SERVING_GW_OR_PDN_GW 30 -#define ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31 -#define ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32 -#define ESM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33 -#define ESM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34 -#define ESM_CAUSE_PTI_ALREADY_IN_USE 35 -#define ESM_CAUSE_REGULAR_DEACTIVATION 36 -#define ESM_CAUSE_EPS_QOS_NOT_ACCEPTED 37 -#define ESM_CAUSE_NETWORK_FAILURE 38 -#define ESM_CAUSE_REACTIVATION_REQUESTED 39 -#define ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41 -#define ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42 -#define ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY 43 -#define ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44 -#define ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45 -#define ESM_CAUSE_PTI_MISMATCH 47 -#define ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED 49 -#define ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED 50 -#define ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED 51 -#define ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED 52 -#define ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED 53 -#define ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST 54 -#define ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 55 -#define ESM_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 56 -#define ESM_CAUSE_PDN_TYPE_IPV4V6_ONLY_ALLOWED 57 -#define ESM_CAUSE_PDN_TYPE_NON_IP_ONLY_ALLOWED 58 -#define ESM_CAUSE_UNSUPPORTED_QCI_VALUE 59 -#define ESM_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 60 -#define ESM_CAUSE_MAXIMUM_NUMBER_OF_EPS_BEARERS_REACHED 65 -#define ESM_CAUSE_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN_COMBINATION 66 -#define ESM_CAUSE_INVALID_PTI_VALUE 81 -#define ESM_CAUSE_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_EPS_BEARER_CONTEXT 112 -#define ESM_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 113 +#define OGS_NAS_ESM_CAUSE_OPERATOR_DETERMINED_BARRING 8 +#define OGS_NAS_ESM_CAUSE_INSUFFICIENT_RESOURCES 26 +#define OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN 27 +#define OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE 28 +#define OGS_NAS_ESM_CAUSE_USER_AUTHENTICATION_FAILED 29 +#define OGS_NAS_ESM_CAUSE_REQUEST_REJECTED_BY_SERVING_GW_OR_PDN_GW 30 +#define OGS_NAS_ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31 +#define OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32 +#define OGS_NAS_ESM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33 +#define OGS_NAS_ESM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34 +#define OGS_NAS_ESM_CAUSE_PTI_ALREADY_IN_USE 35 +#define OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION 36 +#define OGS_NAS_ESM_CAUSE_EPS_QOS_NOT_ACCEPTED 37 +#define OGS_NAS_ESM_CAUSE_NETWORK_FAILURE 38 +#define OGS_NAS_ESM_CAUSE_REACTIVATION_REQUESTED 39 +#define OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41 +#define OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42 +#define OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY 43 +#define OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44 +#define OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45 +#define OGS_NAS_ESM_CAUSE_PTI_MISMATCH 47 +#define OGS_NAS_ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED 49 +#define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED 50 +#define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED 51 +#define OGS_NAS_ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED 52 +#define OGS_NAS_ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED 53 +#define OGS_NAS_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST 54 +#define OGS_NAS_ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 55 +#define OGS_NAS_ESM_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 56 +#define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4V6_ONLY_ALLOWED 57 +#define OGS_NAS_ESM_CAUSE_PDN_TYPE_NON_IP_ONLY_ALLOWED 58 +#define OGS_NAS_ESM_CAUSE_UNSUPPORTED_QCI_VALUE 59 +#define OGS_NAS_ESM_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 60 +#define OGS_NAS_ESM_CAUSE_MAXIMUM_NUMBER_OF_EPS_BEARERS_REACHED 65 +#define OGS_NAS_ESM_CAUSE_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN_COMBINATION 66 +#define OGS_NAS_ESM_CAUSE_INVALID_PTI_VALUE 81 +#define OGS_NAS_ESM_CAUSE_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_EPS_BEARER_CONTEXT 112 +#define OGS_NAS_ESM_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 113 /* B.2 Protocol errors (e.g., unknown message) class */ -#define ESM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 -#define ESM_CAUSE_INVALID_MANDATORY_INFORMATION 96 -#define ESM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 -#define ESM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 -#define ESM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 -#define ESM_CAUSE_CONDITIONAL_IE_ERROR 100 -#define ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 -#define ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 +#define OGS_NAS_ESM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 +#define OGS_NAS_ESM_CAUSE_INVALID_MANDATORY_INFORMATION 96 +#define OGS_NAS_ESM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 +#define OGS_NAS_ESM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 +#define OGS_NAS_ESM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 +#define OGS_NAS_ESM_CAUSE_CONDITIONAL_IE_ERROR 100 +#define OGS_NAS_ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 +#define OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 typedef uint8_t ogs_nas_esm_cause_t; /* 9.9.4.5 ESM information transfer flag @@ -869,7 +873,7 @@ /* 9.9.4.11 Protocol configuration options * See subclause 10.5.6.3 in 3GPP TS 24.008 13. - * O TLV 3-253 */ + * O TLV 3-253 */ typedef struct ogs_nas_protocol_configuration_options_s { uint8_t length; uint8_t bufferOGS_MAX_PCO_LEN;
View file
open5gs_2.4.8.tar.xz/lib/pfcp/build.c -> open5gs_2.4.9.tar.xz/lib/pfcp/build.c
Changed
@@ -446,6 +446,7 @@ static struct { ogs_pfcp_outer_header_creation_t outer_header_creation; + char dnnOGS_MAX_DNN_LEN+1; } farbufOGS_MAX_NUM_OF_FAR; void ogs_pfcp_build_create_far( @@ -471,6 +472,14 @@ message->forwarding_parameters.destination_interface.u8 = far->dst_if; + if (far->dnn) { + message->forwarding_parameters.network_instance.presence = 1; + message->forwarding_parameters.network_instance.len = + ogs_fqdn_build(farbufi.dnn, far->dnn, strlen(far->dnn)); + message->forwarding_parameters.network_instance.data = + farbufi.dnn; + } + if (far->outer_header_creation_len) { memcpy(&farbufi.outer_header_creation, &far->outer_header_creation, far->outer_header_creation_len); @@ -534,6 +543,14 @@ message->update_forwarding_parameters. destination_interface.u8 = far->dst_if; + if (far->dnn) { + message->update_forwarding_parameters.network_instance.presence = 1; + message->update_forwarding_parameters.network_instance.len = + ogs_fqdn_build(farbufi.dnn, far->dnn, strlen(far->dnn)); + message->update_forwarding_parameters.network_instance.data = + farbufi.dnn; + } + if (far->outer_header_creation_len || far->smreq_flags.value) { if (far->outer_header_creation_len) {
View file
open5gs_2.4.8.tar.xz/lib/pfcp/context.c -> open5gs_2.4.9.tar.xz/lib/pfcp/context.c
Changed
@@ -48,7 +48,7 @@ ogs_log_install_domain(&__ogs_pfcp_domain, "pfcp", ogs_core()->log.level); - ogs_pool_init(&ogs_pfcp_node_pool, ogs_app()->pool.pfcp_node); + ogs_pool_init(&ogs_pfcp_node_pool, ogs_app()->pool.nf); ogs_pool_init(&ogs_pfcp_sess_pool, ogs_app()->pool.sess); @@ -1222,6 +1222,9 @@ ogs_hash_set(self.far_f_teid_hash, &far->hash.f_teid.key, far->hash.f_teid.len, NULL); + if (far->dnn) + ogs_free(far->dnn); + for (i = 0; i < far->num_of_buffered_packet; i++) ogs_pkbuf_free(far->buffered_packeti);
View file
open5gs_2.4.8.tar.xz/lib/pfcp/context.h -> open5gs_2.4.9.tar.xz/lib/pfcp/context.h
Changed
@@ -208,6 +208,11 @@ } teid; } hash; + union { + char *apn; + char *dnn; + }; + uint8_t *id_node; /* Pool-Node for ID */ ogs_pfcp_far_id_t id; ogs_pfcp_apply_action_t apply_action;
View file
open5gs_2.4.8.tar.xz/lib/pfcp/conv.c -> open5gs_2.4.9.tar.xz/lib/pfcp/conv.c
Changed
@@ -286,23 +286,29 @@ ogs_pfcp_f_teid_t *f_teid, int *len) { const int hdr_len = 5; + int v4, v6; ogs_assert(info); ogs_assert(f_teid); + + v4 = info->v4 & f_teid->ipv4; + v6 = info->v6 & f_teid->ipv6; + ogs_assert(v4 || v6); + memset(f_teid, 0, sizeof *f_teid); - if (info->v4 && info->v6) { + if (v4 && v6) { f_teid->ipv4 = 1; f_teid->both.addr = info->addr; f_teid->ipv6 = 1; memcpy(f_teid->both.addr6, info->addr6, OGS_IPV6_LEN); *len = OGS_IPV4V6_LEN + hdr_len; - } else if (info->v4) { + } else if (v4) { f_teid->ipv4 = 1; f_teid->ipv6 = 0; f_teid->addr = info->addr; *len = OGS_IPV4_LEN + hdr_len; - } else if (info->v6) { + } else if (v6) { f_teid->ipv4 = 0; f_teid->ipv6 = 1; memcpy(f_teid->addr6, info->addr6, OGS_IPV6_LEN);
View file
open5gs_2.4.8.tar.xz/lib/pfcp/conv.h -> open5gs_2.4.9.tar.xz/lib/pfcp/conv.h
Changed
@@ -40,7 +40,8 @@ int ogs_pfcp_f_seid_to_ip(ogs_pfcp_f_seid_t *f_seid, ogs_ip_t *ip); int ogs_pfcp_sockaddr_to_f_teid( - ogs_sockaddr_t *a, ogs_sockaddr_t *b, ogs_pfcp_f_teid_t *f_teid, int *len); + ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6, + ogs_pfcp_f_teid_t *f_teid, int *len); int ogs_pfcp_f_teid_to_sockaddr( ogs_pfcp_f_teid_t *f_teid, int f_teid_len, ogs_sockaddr_t **addr, ogs_sockaddr_t **addr6);
View file
open5gs_2.4.8.tar.xz/lib/pfcp/handler.c -> open5gs_2.4.9.tar.xz/lib/pfcp/handler.c
Changed
@@ -311,6 +311,20 @@ return NULL; } + if (message->pdi.local_f_teid.presence) { + ogs_pfcp_f_teid_t f_teid; + + memcpy(&f_teid, message->pdi.local_f_teid.data, + message->pdi.local_f_teid.len); + if (f_teid.ipv4 == 0 && f_teid.ipv6 == 0) { + ogs_error("One of the IPv4 and IPv6 flags should be 1 " + "in the local F-TEID"); + *cause_value = OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT; + *offending_ie_value = OGS_PFCP_F_TEID_TYPE; + return NULL; + } + } + pdr->src_if = message->pdi.source_interface.u8; ogs_pfcp_rule_remove_all(pdr); @@ -437,6 +451,7 @@ if (message->pdi.local_f_teid.presence) { pdr->f_teid_len = message->pdi.local_f_teid.len; memcpy(&pdr->f_teid, message->pdi.local_f_teid.data, pdr->f_teid_len); + ogs_assert(pdr->f_teid.ipv4 || pdr->f_teid.ipv6); pdr->f_teid.teid = be32toh(pdr->f_teid.teid); } @@ -522,8 +537,21 @@ } if (message->local_f_teid.presence) { + ogs_pfcp_f_teid_t f_teid; + + memcpy(&f_teid, message->local_f_teid.data, message->local_f_teid.len); + if (f_teid.ipv4 == 0 && f_teid.ipv6 == 0) { + ogs_error("One of the IPv4 and IPv6 flags should be 1 " + "in the local F-TEID"); + *cause_value = OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT; + *offending_ie_value = OGS_PFCP_F_TEID_TYPE; + + return NULL; + } + pdr->f_teid_len = message->local_f_teid.len; memcpy(&pdr->f_teid, message->local_f_teid.data, pdr->f_teid_len); + ogs_assert(pdr->f_teid.ipv4 || pdr->f_teid.ipv6); pdr->f_teid.teid = be32toh(pdr->f_teid.teid); } @@ -567,6 +595,20 @@ return NULL; } + if (message->pdi.local_f_teid.presence) { + ogs_pfcp_f_teid_t f_teid; + + memcpy(&f_teid, message->pdi.local_f_teid.data, + message->pdi.local_f_teid.len); + if (f_teid.ipv4 == 0 && f_teid.ipv6 == 0) { + ogs_error("One of the IPv4 and IPv6 flags should be 1 " + "in the local F-TEID"); + *cause_value = OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT; + *offending_ie_value = OGS_PFCP_F_TEID_TYPE; + return NULL; + } + } + pdr->src_if = message->pdi.source_interface.u8; ogs_pfcp_rule_remove_all(pdr); @@ -766,12 +808,29 @@ far->dst_if = 0; memset(&far->outer_header_creation, 0, sizeof(far->outer_header_creation)); + if (far->dnn) { + ogs_free(far->dnn); + far->dnn = NULL; + } + if (message->forwarding_parameters.presence) { if (message->forwarding_parameters.destination_interface.presence) { far->dst_if = message->forwarding_parameters.destination_interface.u8; } + if (message->forwarding_parameters.network_instance.presence) { + char dnnOGS_MAX_DNN_LEN+1; + + ogs_assert(0 < ogs_fqdn_parse(dnn, + message->forwarding_parameters.network_instance.data, + ogs_min(message->forwarding_parameters.network_instance.len, + OGS_MAX_DNN_LEN))); + + far->dnn = ogs_strdup(dnn); + ogs_assert(far->dnn); + } + if (message->forwarding_parameters.outer_header_creation.presence) { ogs_pfcp_tlv_outer_header_creation_t *outer_header_creation = &message->forwarding_parameters.outer_header_creation; @@ -864,6 +923,20 @@ message->update_forwarding_parameters.destination_interface.u8; } + if (message->update_forwarding_parameters.network_instance.presence) { + char dnnOGS_MAX_DNN_LEN+1; + + ogs_assert(0 < ogs_fqdn_parse(dnn, + message->update_forwarding_parameters.network_instance.data, + ogs_min(message->update_forwarding_parameters. + network_instance.len, OGS_MAX_DNN_LEN))); + + if (far->dnn) + ogs_free(far->dnn); + far->dnn = ogs_strdup(dnn); + ogs_assert(far->dnn); + } + if (message->update_forwarding_parameters. outer_header_creation.presence) { ogs_pfcp_tlv_outer_header_creation_t *outer_header_creation =
View file
open5gs_2.4.8.tar.xz/lib/pfcp/message.c -> open5gs_2.4.9.tar.xz/lib/pfcp/message.c
Changed
@@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by pfcp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-06-12 08:57:15.347805 by acetcom + * Created on: 2022-06-29 14:29:16.181253 by acetcom * from 29244-g91-modified.docx ******************************************************************************/ @@ -3778,11 +3778,11 @@ &ogs_pfcp_tlv_desc_node_id, &ogs_pfcp_tlv_desc_f_seid, &ogs_pfcp_tlv_desc_create_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_far, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_urr, - &ogs_tlv_desc_more2, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_qer, &ogs_tlv_desc_more4, &ogs_pfcp_tlv_desc_create_bar, @@ -3818,7 +3818,7 @@ &ogs_pfcp_tlv_desc_offending_ie, &ogs_pfcp_tlv_desc_f_seid, &ogs_pfcp_tlv_desc_created_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_load_control_information, &ogs_pfcp_tlv_desc_overload_control_information, &ogs_pfcp_tlv_desc_fq_csid, @@ -3837,31 +3837,31 @@ 0, 0, 0, 0, { &ogs_pfcp_tlv_desc_f_seid, &ogs_pfcp_tlv_desc_remove_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_remove_far, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_remove_urr, - &ogs_tlv_desc_more2, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_remove_qer, &ogs_tlv_desc_more4, &ogs_pfcp_tlv_desc_remove_bar, &ogs_pfcp_tlv_desc_remove_traffic_endpoint, &ogs_pfcp_tlv_desc_create_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_far, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_urr, - &ogs_tlv_desc_more2, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_create_qer, &ogs_tlv_desc_more4, &ogs_pfcp_tlv_desc_create_bar, &ogs_pfcp_tlv_desc_create_traffic_endpoint, &ogs_pfcp_tlv_desc_update_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_update_far, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_update_urr, - &ogs_tlv_desc_more2, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_update_qer, &ogs_tlv_desc_more4, &ogs_pfcp_tlv_desc_update_bar_session_modification_request, @@ -3900,7 +3900,7 @@ &ogs_pfcp_tlv_desc_cause, &ogs_pfcp_tlv_desc_offending_ie, &ogs_pfcp_tlv_desc_created_pdr, - &ogs_tlv_desc_more8, + &ogs_tlv_desc_more16, &ogs_pfcp_tlv_desc_load_control_information, &ogs_pfcp_tlv_desc_overload_control_information, &ogs_pfcp_tlv_desc_usage_report_session_modification_response,
View file
open5gs_2.4.8.tar.xz/lib/pfcp/message.h -> open5gs_2.4.9.tar.xz/lib/pfcp/message.h
Changed
@@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by pfcp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-06-12 08:57:15.335605 by acetcom + * Created on: 2022-06-29 14:29:16.169884 by acetcom * from 29244-g91-modified.docx ******************************************************************************/ @@ -1699,9 +1699,9 @@ typedef struct ogs_pfcp_session_establishment_request_s { ogs_pfcp_tlv_node_id_t node_id; ogs_pfcp_tlv_f_seid_t cp_f_seid; - ogs_pfcp_tlv_create_pdr_t create_pdr8; - ogs_pfcp_tlv_create_far_t create_far8; - ogs_pfcp_tlv_create_urr_t create_urr2; + ogs_pfcp_tlv_create_pdr_t create_pdr16; + ogs_pfcp_tlv_create_far_t create_far16; + ogs_pfcp_tlv_create_urr_t create_urr16; ogs_pfcp_tlv_create_qer_t create_qer4; ogs_pfcp_tlv_create_bar_t create_bar; ogs_pfcp_tlv_create_traffic_endpoint_t create_traffic_endpoint; @@ -1730,7 +1730,7 @@ ogs_pfcp_tlv_cause_t cause; ogs_pfcp_tlv_offending_ie_t offending_ie; ogs_pfcp_tlv_f_seid_t up_f_seid; - ogs_pfcp_tlv_created_pdr_t created_pdr8; + ogs_pfcp_tlv_created_pdr_t created_pdr16; ogs_pfcp_tlv_load_control_information_t load_control_information; ogs_pfcp_tlv_overload_control_information_t overload_control_information; ogs_pfcp_tlv_fq_csid_t pgw_u_sgw_u_fq_csid; @@ -1743,21 +1743,21 @@ typedef struct ogs_pfcp_session_modification_request_s { ogs_pfcp_tlv_f_seid_t cp_f_seid; - ogs_pfcp_tlv_remove_pdr_t remove_pdr8; - ogs_pfcp_tlv_remove_far_t remove_far8; - ogs_pfcp_tlv_remove_urr_t remove_urr2; + ogs_pfcp_tlv_remove_pdr_t remove_pdr16; + ogs_pfcp_tlv_remove_far_t remove_far16; + ogs_pfcp_tlv_remove_urr_t remove_urr16; ogs_pfcp_tlv_remove_qer_t remove_qer4; ogs_pfcp_tlv_remove_bar_t remove_bar; ogs_pfcp_tlv_remove_traffic_endpoint_t remove_traffic_endpoint; - ogs_pfcp_tlv_create_pdr_t create_pdr8; - ogs_pfcp_tlv_create_far_t create_far8; - ogs_pfcp_tlv_create_urr_t create_urr2; + ogs_pfcp_tlv_create_pdr_t create_pdr16; + ogs_pfcp_tlv_create_far_t create_far16; + ogs_pfcp_tlv_create_urr_t create_urr16; ogs_pfcp_tlv_create_qer_t create_qer4; ogs_pfcp_tlv_create_bar_t create_bar; ogs_pfcp_tlv_create_traffic_endpoint_t create_traffic_endpoint; - ogs_pfcp_tlv_update_pdr_t update_pdr8; - ogs_pfcp_tlv_update_far_t update_far8; - ogs_pfcp_tlv_update_urr_t update_urr2; + ogs_pfcp_tlv_update_pdr_t update_pdr16; + ogs_pfcp_tlv_update_far_t update_far16; + ogs_pfcp_tlv_update_urr_t update_urr16; ogs_pfcp_tlv_update_qer_t update_qer4; ogs_pfcp_tlv_update_bar_session_modification_request_t update_bar; ogs_pfcp_tlv_update_traffic_endpoint_t update_traffic_endpoint; @@ -1789,7 +1789,7 @@ typedef struct ogs_pfcp_session_modification_response_s { ogs_pfcp_tlv_cause_t cause; ogs_pfcp_tlv_offending_ie_t offending_ie; - ogs_pfcp_tlv_created_pdr_t created_pdr8; + ogs_pfcp_tlv_created_pdr_t created_pdr16; ogs_pfcp_tlv_load_control_information_t load_control_information; ogs_pfcp_tlv_overload_control_information_t overload_control_information; ogs_pfcp_tlv_usage_report_session_modification_response_t usage_report8;
View file
open5gs_2.4.8.tar.xz/lib/pfcp/support/cache/tlv-msg-50.py -> open5gs_2.4.9.tar.xz/lib/pfcp/support/cache/tlv-msg-50.py
Changed
@@ -1,12 +1,12 @@ ies = ies.append({ "ie_type" : "Node ID", "ie_value" : "Node ID", "presence" : "M", "tlv_more" : "0", "comment" : "This IE shall contain the unique identifier of the sending Node."}) ies.append({ "ie_type" : "F-SEID", "ie_value" : "CP F-SEID", "presence" : "M", "tlv_more" : "0", "comment" : "This IE shall contain the unique identifier allocated by the CP function identifying the session."}) -type_list"Create PDR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Create PDR", "ie_value" : "Create PDR", "presence" : "M", "tlv_more" : "7", "comment" : "This IE shall be present for at least one PDR to be associated to the PFCP session.Several IEs with the same IE type may be present to represent multiple PDRs.See Table 7.5.2.2-1."}) -type_list"Create FAR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Create FAR", "ie_value" : "Create FAR", "presence" : "M", "tlv_more" : "7", "comment" : "This IE shall be present for at least one FAR to be associated to the PFCP session.Several IEs with the same IE type may be present to represent multiple FARs.See Table 7.5.2.3-1."}) -type_list"Create URR""max_tlv_more" = "1" -ies.append({ "ie_type" : "Create URR", "ie_value" : "Create URR", "presence" : "C", "tlv_more" : "1", "comment" : "This IE shall be present if a measurement action shall be applied to packets matching one or more PDR(s) of this PFCP session.Several IEs within the same IE type may be present to represent multiple URRs.See Table 7.5.2.4-1."}) +type_list"Create PDR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Create PDR", "ie_value" : "Create PDR", "presence" : "M", "tlv_more" : "15", "comment" : "This IE shall be present for at least one PDR to be associated to the PFCP session.Several IEs with the same IE type may be present to represent multiple PDRs.See Table 7.5.2.2-1."}) +type_list"Create FAR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Create FAR", "ie_value" : "Create FAR", "presence" : "M", "tlv_more" : "15", "comment" : "This IE shall be present for at least one FAR to be associated to the PFCP session.Several IEs with the same IE type may be present to represent multiple FARs.See Table 7.5.2.3-1."}) +type_list"Create URR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Create URR", "ie_value" : "Create URR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if a measurement action shall be applied to packets matching one or more PDR(s) of this PFCP session.Several IEs within the same IE type may be present to represent multiple URRs.See Table 7.5.2.4-1."}) type_list"Create QER""max_tlv_more" = "3" ies.append({ "ie_type" : "Create QER", "ie_value" : "Create QER", "presence" : "C", "tlv_more" : "3", "comment" : "This IE shall be present if a QoS enforcement or QoS marking action shall be applied to packets matching one or more PDR(s) of this PFCP session.Several IEs within the same IE type may be present to represent multiple QERs.See Table 7.5.2.5-1."}) ies.append({ "ie_type" : "Create BAR", "ie_value" : "Create BAR", "presence" : "O", "tlv_more" : "0", "comment" : "When present, this IE shall contain the buffering instructions to be applied by the UP function to any FAR of this PFCP session set with the Apply Action requesting the packets to be buffered and with a BAR ID IE referring to this BAR. See table 7.5.2.6-1."})
View file
open5gs_2.4.8.tar.xz/lib/pfcp/support/cache/tlv-msg-51.py -> open5gs_2.4.9.tar.xz/lib/pfcp/support/cache/tlv-msg-51.py
Changed
@@ -3,8 +3,8 @@ ies.append({ "ie_type" : "Cause", "ie_value" : "Cause", "presence" : "M", "tlv_more" : "0", "comment" : "This IE shall indicate the acceptance or the rejection of the corresponding request message."}) ies.append({ "ie_type" : "Offending IE", "ie_value" : "Offending IE", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be included if the rejection is due to a conditional or mandatory IE missing or faulty."}) ies.append({ "ie_type" : "F-SEID", "ie_value" : "UP F-SEID", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be present if the cause is set to Request accepted (success). When present, it shall contain the unique identifier allocated by the UP function identifying the session."}) -type_list"Created PDR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Created PDR", "ie_value" : "Created PDR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if the cause is set to success and the UP function was requested to allocate a local F-TEID or a UE IP address/prefix for the PDR.When present, this IE shall contain the PDR information associated to the PFCP session. There may be several instances of this IE.See table 7.5.3.2-1."}) +type_list"Created PDR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Created PDR", "ie_value" : "Created PDR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if the cause is set to success and the UP function was requested to allocate a local F-TEID or a UE IP address/prefix for the PDR.When present, this IE shall contain the PDR information associated to the PFCP session. There may be several instances of this IE.See table 7.5.3.2-1."}) ies.append({ "ie_type" : "Load Control Information", "ie_value" : "Load Control Information", "presence" : "O", "tlv_more" : "0", "comment" : "The UP function may include this IE if it supports the load control feature and the feature is activated in the network.See Table 7.5.3.3-1."}) ies.append({ "ie_type" : "Overload Control Information", "ie_value" : "Overload Control Information", "presence" : "O", "tlv_more" : "0", "comment" : "During an overload condition, the UP function may include this IE if it supports the overload control feature and the feature is activated in the network.See Table 7.5.3.4-1."}) ies.append({ "ie_type" : "FQ-CSID", "ie_value" : "PGW-U/SGW-U FQ-CSID", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be included according to the requirements in clause23 of 3GPPTS23.00724."})
View file
open5gs_2.4.8.tar.xz/lib/pfcp/support/cache/tlv-msg-52.py -> open5gs_2.4.9.tar.xz/lib/pfcp/support/cache/tlv-msg-52.py
Changed
@@ -1,27 +1,27 @@ ies = ies.append({ "ie_type" : "F-SEID", "ie_value" : "CP F-SEID", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be present if the CP function decides to change its F-SEID for the PFCP session. The UP function shall use the new CP F-SEID for subsequent PFCP Session related messages for this PFCP Session. See Note 2."}) -type_list"Remove PDR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Remove PDR", "ie_value" : "Remove PDR", "presence" : "C", "tlv_more" : "7", "comment" : "When present, this IE shall contain the PDR Rule which is requested to be removed. See Table 7.5.4-6-1.Several IEs within the same IE type may be present to represent a list of PDRs to remove."}) -type_list"Remove FAR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Remove FAR", "ie_value" : "Remove FAR", "presence" : "C", "tlv_more" : "7", "comment" : "When present, this IE shall contain the FAR Rule which is requested to be removed. See Table 7.5.4-7-1.Several IEs within the same IE type may be present to represent a list of FARs to remove."}) -type_list"Remove URR""max_tlv_more" = "1" -ies.append({ "ie_type" : "Remove URR", "ie_value" : "Remove URR", "presence" : "C", "tlv_more" : "1", "comment" : "When present, this shall contain the URR Rule which is requested to be removed. See Table 7.5.4-8-1.Several IEs within the same IE type may be present to represent a list of URRs to remove."}) +type_list"Remove PDR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Remove PDR", "ie_value" : "Remove PDR", "presence" : "C", "tlv_more" : "15", "comment" : "When present, this IE shall contain the PDR Rule which is requested to be removed. See Table 7.5.4-6-1.Several IEs within the same IE type may be present to represent a list of PDRs to remove."}) +type_list"Remove FAR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Remove FAR", "ie_value" : "Remove FAR", "presence" : "C", "tlv_more" : "15", "comment" : "When present, this IE shall contain the FAR Rule which is requested to be removed. See Table 7.5.4-7-1.Several IEs within the same IE type may be present to represent a list of FARs to remove."}) +type_list"Remove URR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Remove URR", "ie_value" : "Remove URR", "presence" : "C", "tlv_more" : "15", "comment" : "When present, this shall contain the URR Rule which is requested to be removed. See Table 7.5.4-8-1.Several IEs within the same IE type may be present to represent a list of URRs to remove."}) type_list"Remove QER""max_tlv_more" = "3" ies.append({ "ie_type" : "Remove QER", "ie_value" : "Remove QER", "presence" : "C", "tlv_more" : "3", "comment" : "When present, this IE shall contain the QER Rule which is requested to be removed. See Table 7.5.4-9-1.Several IEs within the same IE type may be present to represent a list of QERs to remove."}) ies.append({ "ie_type" : "Remove BAR", "ie_value" : "Remove BAR", "presence" : "C", "tlv_more" : "0", "comment" : "When present, this IE shall contain the BAR Rule which is requested to be removed. See Table 7.5.4.12-1."}) ies.append({ "ie_type" : "Remove Traffic Endpoint", "ie_value" : "Remove Traffic Endpoint", "presence" : "C", "tlv_more" : "0", "comment" : "When present, this IE shall contain the Traffic Endpoint ID identifying the traffic endpoint to be removed, if the UP function has indicated support of PDI optimization.All the PDRs that refer to the removed Traffic Endpoint shall be deleted.See Table 7.5.4.14-1."}) -ies.append({ "ie_type" : "Create PDR", "ie_value" : "Create PDR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if the CP function requests the UP function to create a new PDR.See Table 7.5.2.2-1.Several IEs within the same IE type may be present to represent a list of PDRs to create."}) -ies.append({ "ie_type" : "Create FAR", "ie_value" : "Create FAR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if the CP function requests the UP function to create a new FAR. See Table 7.5.2.3-1.Several IEs within the same IE type may be present to represent a list of FARs to create."}) -ies.append({ "ie_type" : "Create URR", "ie_value" : "Create URR", "presence" : "C", "tlv_more" : "1", "comment" : "This IE shall be present if the CP function requests the UP function to create a new URR. See Table 7.5.2.4-1.Several IEs within the same IE type may be present to represent a list of URRs to create."}) +ies.append({ "ie_type" : "Create PDR", "ie_value" : "Create PDR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if the CP function requests the UP function to create a new PDR.See Table 7.5.2.2-1.Several IEs within the same IE type may be present to represent a list of PDRs to create."}) +ies.append({ "ie_type" : "Create FAR", "ie_value" : "Create FAR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if the CP function requests the UP function to create a new FAR. See Table 7.5.2.3-1.Several IEs within the same IE type may be present to represent a list of FARs to create."}) +ies.append({ "ie_type" : "Create URR", "ie_value" : "Create URR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if the CP function requests the UP function to create a new URR. See Table 7.5.2.4-1.Several IEs within the same IE type may be present to represent a list of URRs to create."}) ies.append({ "ie_type" : "Create QER", "ie_value" : "Create QER", "presence" : "C", "tlv_more" : "3", "comment" : "This IE shall be present if the CP function requests the UP function to create a new QER. See Table 7.5.2.5-1.Several IEs within the same IE type may be present to represent a list of QERs to create."}) ies.append({ "ie_type" : "Create BAR", "ie_value" : "Create BAR", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be present if the CP function requests the UP function to create a new BAR.See Table 7.5.2.6-1."}) ies.append({ "ie_type" : "Create Traffic Endpoint", "ie_value" : "Create Traffic Endpoint", "presence" : "C", "tlv_more" : "0", "comment" : "When present this IE shall contain the information associated with the Traffic Endpoint to be created, if the UP function has indicated support of PDI optimization. See Table 7.5.2.7-1."}) -type_list"Update PDR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Update PDR", "ie_value" : "Update PDR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if a PDR previously created for the PFCP session need to be modified. See Table 7.5.4.2-1.Several IEs within the same IE type may be present to represent a list of PDRs to update."}) -type_list"Update FAR""max_tlv_more" = "7" -ies.append({ "ie_type" : "Update FAR", "ie_value" : "Update FAR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if a FAR previously created for the PFCP session need to be modified. See Table 7.5.4.3-1. Several IEs within the same IE type may be present to represent a list of FARs to update."}) -type_list"Update URR""max_tlv_more" = "1" -ies.append({ "ie_type" : "Update URR", "ie_value" : "Update URR", "presence" : "C", "tlv_more" : "1", "comment" : "This IE shall be present if URR(s) previously created for the PFCP session need to be modified.Several IEs within the same IE type may be present to represent a list of modified URRs. Previously URRs that are not modified shall not be included. See Table 7.5.4.4-1."}) +type_list"Update PDR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Update PDR", "ie_value" : "Update PDR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if a PDR previously created for the PFCP session need to be modified. See Table 7.5.4.2-1.Several IEs within the same IE type may be present to represent a list of PDRs to update."}) +type_list"Update FAR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Update FAR", "ie_value" : "Update FAR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if a FAR previously created for the PFCP session need to be modified. See Table 7.5.4.3-1. Several IEs within the same IE type may be present to represent a list of FARs to update."}) +type_list"Update URR""max_tlv_more" = "15" +ies.append({ "ie_type" : "Update URR", "ie_value" : "Update URR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if URR(s) previously created for the PFCP session need to be modified.Several IEs within the same IE type may be present to represent a list of modified URRs. Previously URRs that are not modified shall not be included. See Table 7.5.4.4-1."}) type_list"Update QER""max_tlv_more" = "3" ies.append({ "ie_type" : "Update QER", "ie_value" : "Update QER", "presence" : "C", "tlv_more" : "3", "comment" : "This IE shall be present if QER(s) previously created for the PFCP session need to be modified.Several IEs within the same IE type may be present to represent a list of modified QERs.Previously created QERs that are not modified shall not be included.See Table 7.5.4.5-1."}) ies.append({ "ie_type" : "Update BAR Session Modification Request", "ie_value" : "Update BAR", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be present if a BAR previously created for the PFCP session needs to be modified.A previously created BAR that is not modified shall not be included.See Table 7.5.4.11-1."})
View file
open5gs_2.4.8.tar.xz/lib/pfcp/support/cache/tlv-msg-53.py -> open5gs_2.4.9.tar.xz/lib/pfcp/support/cache/tlv-msg-53.py
Changed
@@ -1,7 +1,7 @@ ies = ies.append({ "ie_type" : "Cause", "ie_value" : "Cause", "presence" : "M", "tlv_more" : "0", "comment" : "This IE shall indicate the acceptance or the rejection of the corresponding request message."}) ies.append({ "ie_type" : "Offending IE", "ie_value" : "Offending IE", "presence" : "C", "tlv_more" : "0", "comment" : "This IE shall be included if the rejection is due to a conditional or mandatory IE missing or faulty."}) -ies.append({ "ie_type" : "Created PDR", "ie_value" : "Created PDR", "presence" : "C", "tlv_more" : "7", "comment" : "This IE shall be present if the cause is set to success, new PDR(s) were requested to be created and the UP function was requested to allocate the local F-TEID or a UE IP address/prefix for the PDR(s).When present, this IE shall contain the PDR information associated to the PFCP session.See Table 7.5.3.2-1."}) +ies.append({ "ie_type" : "Created PDR", "ie_value" : "Created PDR", "presence" : "C", "tlv_more" : "15", "comment" : "This IE shall be present if the cause is set to success, new PDR(s) were requested to be created and the UP function was requested to allocate the local F-TEID or a UE IP address/prefix for the PDR(s).When present, this IE shall contain the PDR information associated to the PFCP session.See Table 7.5.3.2-1."}) ies.append({ "ie_type" : "Load Control Information", "ie_value" : "Load Control Information", "presence" : "O", "tlv_more" : "0", "comment" : "The UP function may include this IE if it supports the load control feature and the feature is activated in the network.See Table 7.5.3.3-1."}) ies.append({ "ie_type" : "Overload Control Information", "ie_value" : "Overload Control Information", "presence" : "O", "tlv_more" : "0", "comment" : "During an overload condition, the UP function may include this IE if it supports the overload control feature and the feature is activated in the network."}) type_list"Usage Report Session Modification Response""max_tlv_more" = "7"
View file
open5gs_2.4.8.tar.xz/lib/pfcp/support/pfcp-tlv.py -> open5gs_2.4.9.tar.xz/lib/pfcp/support/pfcp-tlv.py
Changed
@@ -160,11 +160,11 @@ tlv_more = "0" # PFCP has no tlv_more if ie_type == 'Create PDR' or ie_type == 'Created PDR' or ie_type == 'Update PDR' or ie_type == "Remove PDR": - tlv_more = "7" + tlv_more = "15" if ie_type == 'Create FAR' or ie_type == 'Update FAR' or ie_type == "Remove FAR": - tlv_more = "7" + tlv_more = "15" if ie_type == 'Create URR' or ie_type == 'Update URR' or ie_type == "Remove URR": - tlv_more = "1" + tlv_more = "15" if ie_type == 'Create QER' or ie_type == 'Update QER' or ie_type == "Remove QER": tlv_more = "3" if ie_type == 'User Plane IP Resource Information':
View file
open5gs_2.4.8.tar.xz/lib/pfcp/types.h -> open5gs_2.4.9.tar.xz/lib/pfcp/types.h
Changed
@@ -342,18 +342,20 @@ * The EDRT flag may be set if the FORW flag is set. * The DDPN flag may be set with any of the DROP and BUFF flags. */ -#define OGS_PFCP_APPLY_ACTION_DROP (1<<0) -#define OGS_PFCP_APPLY_ACTION_FORW (1<<1) -#define OGS_PFCP_APPLY_ACTION_BUFF (1<<2) -#define OGS_PFCP_APPLY_ACTION_NOCP (1<<3) -#define OGS_PFCP_APPLY_ACTION_DUPL (1<<4) -#define OGS_PFCP_APPLY_ACTION_IPMA (1<<5) -#define OGS_PFCP_APPLY_ACTION_IPMD (1<<6) -#define OGS_PFCP_APPLY_ACTION_DFRT (1<<7) -#define OGS_PFCP_APPLY_ACTION_EDRT (1<<8) -#define OGS_PFCP_APPLY_ACTION_BDPN (1<<9) -#define OGS_PFCP_APPLY_ACTION_DDPN (1<<10) -typedef uint8_t ogs_pfcp_apply_action_t; +#define OGS_PFCP_APPLY_ACTION_DROP (1<<8) +#define OGS_PFCP_APPLY_ACTION_FORW (1<<9) +#define OGS_PFCP_APPLY_ACTION_BUFF (1<<10) +#define OGS_PFCP_APPLY_ACTION_NOCP (1<<11) +#define OGS_PFCP_APPLY_ACTION_DUPL (1<<12) +#define OGS_PFCP_APPLY_ACTION_IPMA (1<<13) +#define OGS_PFCP_APPLY_ACTION_IPMD (1<<14) +#define OGS_PFCP_APPLY_ACTION_DFRT (1<<15) +#define OGS_PFCP_APPLY_ACTION_EDRT (1<<0) +#define OGS_PFCP_APPLY_ACTION_BDPN (1<<1) +#define OGS_PFCP_APPLY_ACTION_DDPN (1<<2) +typedef uint16_t ogs_pfcp_apply_action_t; + + /* 8.2.58 CP Function Features */ typedef struct ogs_pfcp_cp_function_features_s { @@ -397,6 +399,7 @@ }; } __attribute__ ((packed)) ogs_pfcp_cp_function_features_t; + /* * 8.2.64 Outer Header Remaval * @@ -835,10 +838,10 @@ } __attribute__ ((packed)) ogs_pfcp_sdf_filter_t; int16_t ogs_pfcp_build_sdf_filter( - ogs_tlv_octet_t *octet, ogs_pfcp_sdf_filter_t *info, + ogs_tlv_octet_t *octet, ogs_pfcp_sdf_filter_t *filter, void *data, int data_len); int16_t ogs_pfcp_parse_sdf_filter( - ogs_pfcp_sdf_filter_t *info, ogs_tlv_octet_t *octet); + ogs_pfcp_sdf_filter_t *filter, ogs_tlv_octet_t *octet); /* * 8.2.8 MBR
View file
open5gs_2.4.8.tar.xz/lib/pfcp/xact.c -> open5gs_2.4.9.tar.xz/lib/pfcp/xact.c
Changed
@@ -38,7 +38,7 @@ static ogs_pfcp_xact_t *ogs_pfcp_xact_remote_create( ogs_pfcp_node_t *node, uint32_t sqn); static ogs_pfcp_xact_stage_t ogs_pfcp_xact_get_stage( - uint8_t type, uint32_t sqn); + uint8_t type, uint32_t xid); static int ogs_pfcp_xact_delete(ogs_pfcp_xact_t *xact); static int ogs_pfcp_xact_update_rx(ogs_pfcp_xact_t *xact, uint8_t type); static ogs_pfcp_xact_t *ogs_pfcp_xact_find_by_xid( @@ -53,7 +53,7 @@ { ogs_assert(ogs_pfcp_xact_initialized == 0); - ogs_pool_init(&pool, ogs_app()->pool.pfcp_xact); + ogs_pool_init(&pool, ogs_app()->pool.xact); g_xact_id = 0;
View file
open5gs_2.4.8.tar.xz/lib/pfcp/xact.h -> open5gs_2.4.9.tar.xz/lib/pfcp/xact.h
Changed
@@ -65,6 +65,9 @@ ogs_timer_t *tm_delayed_commit; /**< Timer waiting for commit xact */ + uint64_t local_seid; /**< Local SEID, + expected in reply from peer */ + void *assoc_xact; /**< Associated GTP transaction */ ogs_pkbuf_t *gtpbuf; /**< GTP packet buffer */
View file
open5gs_2.4.8.tar.xz/lib/sbi/client.c -> open5gs_2.4.9.tar.xz/lib/sbi/client.c
Changed
@@ -169,14 +169,33 @@ ogs_assert(addr); ogs_list_for_each(&ogs_sbi_self()->client_list, client) { - if (ogs_sockaddr_is_equal(client->node.addr, addr) == true && - OGS_PORT(client->node.addr) == OGS_PORT(addr)) + if (ogs_sockaddr_is_equal(client->node.addr, addr) == true) break; } return client; } +void ogs_sbi_client_stop(ogs_sbi_client_t *client) +{ + connection_t *conn = NULL; + + ogs_assert(client); + + ogs_list_for_each(&client->connection_list, conn) { + ogs_assert(conn->client_cb); + conn->client_cb(OGS_DONE, NULL, conn->data); + } +} + +void ogs_sbi_client_stop_all(void) +{ + ogs_sbi_client_t *client = NULL; + + ogs_list_for_each(&ogs_sbi_self()->client_list, client) + ogs_sbi_client_stop(client); +} + #define mycase(code) \ case code: s = OGS_STRINGIFY(code) @@ -247,6 +266,8 @@ return uri; } +static void _connection_remove(connection_t *conn); + static connection_t *connection_add( ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, ogs_sbi_request_t *request, void *data) @@ -270,19 +291,31 @@ conn->data = data; conn->method = ogs_strdup(request->h.method); - ogs_expect_or_return_val(conn->method, NULL); + if (!conn->method) { + ogs_error("conn->method is NULL"); + _connection_remove(conn); + return NULL; + } conn->num_of_header = ogs_hash_count(request->http.headers); if (conn->num_of_header) { conn->headers = ogs_calloc(conn->num_of_header, sizeof(char *)); - ogs_expect_or_return_val(conn->headers, NULL); + if (!conn->headers) { + ogs_error("conn->headers is NULL"); + _connection_remove(conn); + return NULL; + } for (hi = ogs_hash_first(request->http.headers), i = 0; hi && i < conn->num_of_header; hi = ogs_hash_next(hi), i++) { const char *key = ogs_hash_this_key(hi); char *val = ogs_hash_this_val(hi); conn->headersi = ogs_msprintf("%s: %s", key, val); - ogs_expect_or_return_val(conn->headersi, NULL); + if (!conn->headersi) { + ogs_error("conn->headersi=%d is NULL", i); + _connection_remove(conn); + return NULL; + } conn->header_list = curl_slist_append( conn->header_list, conn->headersi); } @@ -290,9 +323,11 @@ conn->timer = ogs_timer_add( ogs_app()->timer_mgr, connection_timer_expired, conn); - ogs_expect_or_return_val(conn->timer, NULL); - - ogs_list_add(&client->connection_list, conn); + if (!conn->timer) { + ogs_error("conn->timer is NULL"); + _connection_remove(conn); + return NULL; + } /* If http response is not received within deadline, * Open5GS will discard this request. */ @@ -300,7 +335,23 @@ ogs_app()->time.message.sbi.connection_deadline); conn->easy = curl_easy_init(); - ogs_assert(conn->easy); + if (!conn->easy) { + ogs_error("conn->easy is NULL"); + _connection_remove(conn); + return NULL; + } + + if (ogs_hash_count(request->http.params)) { + char *uri = add_params_to_uri(conn->easy, + request->h.uri, request->http.params); + if (!uri) { + ogs_error("add_params_to_uri() failed"); + _connection_remove(conn); + return NULL; + } + + request->h.uri = uri; + } /* HTTP Method */ if (strcmp(request->h.method, OGS_SBI_HTTP_METHOD_PUT) == 0 || @@ -313,7 +364,11 @@ if (request->http.content) { conn->content = ogs_memdup( request->http.content, request->http.content_length); - ogs_assert(conn->content); + if (!conn->content) { + ogs_error("conn->content is NULL"); + _connection_remove(conn); + return NULL; + } curl_easy_setopt(conn->easy, CURLOPT_POSTFIELDS, conn->content); curl_easy_setopt(conn->easy, @@ -337,11 +392,7 @@ CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE); #endif - if (ogs_hash_count(request->http.params)) { - request->h.uri = add_params_to_uri(conn->easy, - request->h.uri, request->http.params); - ogs_expect_or_return_val(request->h.uri, NULL); - } + ogs_list_add(&client->connection_list, conn); curl_easy_setopt(conn->easy, CURLOPT_URL, request->h.uri); @@ -359,27 +410,11 @@ return conn; } -static void connection_remove(connection_t *conn) +static void _connection_remove(connection_t *conn) { - ogs_sbi_client_t *client = NULL; int i; ogs_assert(conn); - client = conn->client; - ogs_assert(client); - - ogs_list_remove(&client->connection_list, conn); - - ogs_assert(conn->timer); - ogs_timer_delete(conn->timer); - - ogs_assert(conn->easy); - ogs_assert(client->multi); - curl_multi_remove_handle(client->multi, conn->easy); - curl_easy_cleanup(conn->easy); - - ogs_assert(conn->method); - ogs_free(conn->method); if (conn->content) ogs_free(conn->content); @@ -387,19 +422,45 @@ if (conn->location) ogs_free(conn->location); + if (conn->memory) + ogs_free(conn->memory); + + if (conn->easy) + curl_easy_cleanup(conn->easy); + + if (conn->timer) + ogs_timer_delete(conn->timer); + if (conn->num_of_header) { for (i = 0; i < conn->num_of_header; i++) - ogs_free(conn->headersi); + if (conn->headersi) + ogs_free(conn->headersi); ogs_free(conn->headers); } curl_slist_free_all(conn->header_list); - if (conn->memory) - ogs_free(conn->memory); + if (conn->method) + ogs_free(conn->method); ogs_pool_free(&connection_pool, conn); } +static void connection_remove(connection_t *conn) +{ + ogs_sbi_client_t *client = NULL; + + ogs_assert(conn); + client = conn->client; + ogs_assert(client); + + ogs_list_remove(&client->connection_list, conn); + + ogs_assert(client->multi); + curl_multi_remove_handle(client->multi, conn->easy); + + _connection_remove(conn); +} + static void connection_remove_all(ogs_sbi_client_t *client) { connection_t *conn = NULL, *next_conn = NULL; @@ -417,6 +478,11 @@ conn = data; ogs_assert(conn); + ogs_error("Connection timer expired"); + + ogs_assert(conn->client_cb); + conn->client_cb(OGS_TIMEUP, NULL, conn->data); + connection_remove(conn); } @@ -472,7 +538,7 @@ if (conn->memory) { response->http.content = - ogs_memdup(conn->memory, conn->size); + ogs_memdup(conn->memory, conn->size + 1); ogs_assert(response->http.content); response->http.content_length = conn->size; ogs_assert(response->http.content_length); @@ -488,12 +554,12 @@ if (conn->location) ogs_sbi_header_set(response->http.headers, OGS_SBI_LOCATION, conn->location); - - ogs_assert(conn->client_cb); - conn->client_cb(response, conn->data); } else ogs_warn("%d %s", res, conn->error); + ogs_assert(conn->client_cb); + conn->client_cb(res == CURLE_OK ? OGS_OK : OGS_ERROR, + response, conn->data); connection_remove(conn); break; default: @@ -503,7 +569,7 @@ } } -bool ogs_sbi_client_send_request( +bool ogs_sbi_client_send_reqmem_persistent( ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, ogs_sbi_request_t *request, void *data) { @@ -514,17 +580,128 @@ if (request->h.uri == NULL) { request->h.uri = ogs_sbi_client_uri(client, &request->h); + ogs_expect_or_return_val(request->h.uri, false); } ogs_debug("%s %s", request->h.method, request->h.uri); conn = connection_add(client, client_cb, request, data); ogs_expect_or_return_val(conn, false); + return true; +} + +bool ogs_sbi_client_send_request( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data) +{ + bool rc; + + ogs_assert(client); + ogs_assert(request); + + rc = ogs_sbi_client_send_reqmem_persistent( + client, client_cb, request, data); + ogs_expect(rc == true); + ogs_sbi_request_free(request); + return rc; +} + +bool ogs_sbi_scp_send_reqmem_persistent( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data) +{ + ogs_sbi_nf_instance_t *scp_instance = NULL; + connection_t *conn = NULL; + char *apiroot = NULL; + + ogs_assert(client); + ogs_assert(request); + + scp_instance = ogs_sbi_self()->scp_instance; + + if (scp_instance) { + /* + * In case of indirect communication using SCP, + * add 3gpp-Sbi-Target-apiRoot to HTTP header and + * change CLIENT instance to SCP. + */ + apiroot = ogs_sbi_client_apiroot(client); + ogs_assert(apiroot); + + ogs_sbi_header_set(request->http.headers, + OGS_SBI_CUSTOM_TARGET_APIROOT, apiroot); + + ogs_free(apiroot); + + client = scp_instance->client; + ogs_assert(client); + } + + if (request->h.uri == NULL) { + /* + * Regardless of direct or indirect communication, + * if there is no URI, we automatically creates a URI + * with Client Address and request->h + */ + request->h.uri = ogs_sbi_client_uri(client, &request->h); + ogs_assert(request->h.uri); + + ogs_debug("%s %s", request->h.method, request->h.uri); + + } else if (scp_instance) { + /* + * In case of indirect communication using SCP, + * If the full URI is already defined, change full URI to SCP as below. + * + * OLD: http://127.0.0.5:7777/nnrf-nfm/v1/nf-status-notify + * NEW: https://scp.open5gs.org/nnrf-nfm/v1/nf-status-notify + */ + char *path = NULL; + char *old = NULL; + + old = request->h.uri; + + apiroot = ogs_sbi_client_apiroot(client); + ogs_assert(apiroot); + + path = ogs_sbi_getpath_from_uri(request->h.uri); + ogs_assert(path); + + request->h.uri = ogs_msprintf("%s/%s", apiroot, path); + ogs_assert(request->h.uri); + + ogs_free(apiroot); + ogs_free(path); + ogs_free(old); + + ogs_debug("%s %s", request->h.method, request->h.uri); + } + + conn = connection_add(client, client_cb, request, data); + ogs_expect_or_return_val(conn, false); + return true; } +bool ogs_sbi_scp_send_request( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data) +{ + bool rc; + + ogs_assert(client); + ogs_assert(request); + + rc = ogs_sbi_scp_send_reqmem_persistent(client, client_cb, request, data); + ogs_expect(rc == true); + + ogs_sbi_request_free(request); + + return rc; +} + static size_t write_cb(void *contents, size_t size, size_t nmemb, void *data) { size_t realsize = 0;
View file
open5gs_2.4.8.tar.xz/lib/sbi/client.h -> open5gs_2.4.9.tar.xz/lib/sbi/client.h
Changed
@@ -53,7 +53,8 @@ (__pClient)->reference_count); \ } while(0) -typedef int (*ogs_sbi_client_cb_f)(ogs_sbi_response_t *response, void *data); +typedef int (*ogs_sbi_client_cb_f)( + int status, ogs_sbi_response_t *response, void *data); typedef struct ogs_sbi_client_s { ogs_socknode_t node; @@ -84,10 +85,23 @@ void ogs_sbi_client_remove_all(void); ogs_sbi_client_t *ogs_sbi_client_find(ogs_sockaddr_t *addr); +void ogs_sbi_client_stop(ogs_sbi_client_t *client); +void ogs_sbi_client_stop_all(void); + +bool ogs_sbi_client_send_reqmem_persistent( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data); bool ogs_sbi_client_send_request( ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, ogs_sbi_request_t *request, void *data); +bool ogs_sbi_scp_send_reqmem_persistent( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data); +bool ogs_sbi_scp_send_request( + ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, + ogs_sbi_request_t *request, void *data); + #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/lib/sbi/context.c -> open5gs_2.4.9.tar.xz/lib/sbi/context.c
Changed
@@ -33,6 +33,8 @@ void ogs_sbi_context_init(void) { + char nf_instance_idOGS_UUID_FORMATTED_LENGTH + 1; + ogs_assert(context_initialized == 0); /* Initialize SBI context */ @@ -41,24 +43,30 @@ ogs_log_install_domain(&__ogs_sbi_domain, "sbi", ogs_core()->log.level); ogs_sbi_message_init(ogs_app()->pool.message, ogs_app()->pool.message); - ogs_sbi_server_init(ogs_app()->pool.nf, ogs_app()->pool.event); + ogs_sbi_server_init(ogs_app()->pool.event, ogs_app()->pool.event); ogs_sbi_client_init(ogs_app()->pool.event, ogs_app()->pool.event); ogs_list_init(&self.nf_instance_list); ogs_pool_init(&nf_instance_pool, ogs_app()->pool.nf); ogs_pool_init(&nf_service_pool, ogs_app()->pool.nf_service); - ogs_pool_init(&xact_pool, ogs_app()->pool.message); + ogs_pool_init(&xact_pool, ogs_app()->pool.xact); ogs_list_init(&self.subscription_list); - ogs_pool_init(&subscription_pool, ogs_app()->pool.nf_subscription); + ogs_pool_init(&subscription_pool, ogs_app()->pool.subscription); ogs_pool_init(&smf_info_pool, ogs_app()->pool.nf); ogs_pool_init(&nf_info_pool, ogs_app()->pool.nf * OGS_MAX_NUM_OF_NF_INFO); + /* Add SELF NF instance */ + self.nf_instance = ogs_sbi_nf_instance_add(); + ogs_assert(self.nf_instance); + ogs_uuid_get(&self.uuid); - ogs_uuid_format(self.nf_instance_id, &self.uuid); + ogs_uuid_format(nf_instance_id, &self.uuid); + + ogs_sbi_nf_instance_set_id(self.nf_instance, nf_instance_id); context_initialized = 1; } @@ -74,8 +82,6 @@ ogs_sbi_nf_instance_remove_all(); - ogs_sbi_nf_info_remove_all(&self.nf_info_list); - ogs_pool_final(&nf_instance_pool); ogs_pool_final(&nf_service_pool); ogs_pool_final(&smf_info_pool); @@ -105,7 +111,8 @@ return OGS_OK; } -static int ogs_sbi_context_validation(const char *local) +static int ogs_sbi_context_validation( + const char *local, const char *nrf, const char *scp) { /* If SMF is only used in 4G EPC, no SBI interface is required. */ if (strcmp(local, "smf") != 0 && @@ -114,10 +121,48 @@ return OGS_ERROR; } + if (context_initialized == 1) { + switch (self.discovery_config.delegated) { + case OGS_SBI_DISCOVERY_DELEGATED_AUTO: + if (strcmp(local, "nrf") != 0 && /* Skip NRF */ + strcmp(local, "smf") != 0 && /* Skip SMF since SMF can run 4G */ + ogs_sbi_self()->nrf_instance == NULL && + ogs_sbi_self()->scp_instance == NULL) { + ogs_error("DELEGATED_AUTO - Both NRF and %s are unavailable", + strcmp(scp, "next_scp") == 0 ? "Next-hop SCP" : "SCP"); + return OGS_ERROR; + } + break; + case OGS_SBI_DISCOVERY_DELEGATED_YES: + if (ogs_sbi_self()->scp_instance == NULL) { + ogs_error("DELEGATED_YES - no %s available", + strcmp(scp, "next_scp") == 0 ? "Next-hop SCP" : "SCP"); + return OGS_ERROR; + } + break; + case OGS_SBI_DISCOVERY_DELEGATED_NO: + if (ogs_sbi_self()->nrf_instance == NULL) { + ogs_error("DELEGATED_NO - no NRF available"); + return OGS_ERROR; + } + break; + default: + ogs_fatal("Invalid dicovery-config delegated %d", + self.discovery_config.delegated); + ogs_assert_if_reached(); + } + } + return OGS_OK; } -int ogs_sbi_context_parse_config(const char *local, const char *remote) +ogs_sbi_nf_instance_t *ogs_sbi_scp_instance(void) +{ + return NULL; +} + +int ogs_sbi_context_parse_config( + const char *local, const char *nrf, const char *scp) { int rv; yaml_document_t *document = NULL; @@ -357,17 +402,17 @@ } } } - } else if (remote && !strcmp(root_key, remote)) { - ogs_yaml_iter_t remote_iter; - ogs_yaml_iter_recurse(&root_iter, &remote_iter); - while (ogs_yaml_iter_next(&remote_iter)) { - const char *remote_key = ogs_yaml_iter_key(&remote_iter); - ogs_assert(remote_key); - if (!strcmp(remote_key, "sbi")) { + } else if (nrf && !strcmp(root_key, nrf)) { + ogs_yaml_iter_t nrf_iter; + ogs_yaml_iter_recurse(&root_iter, &nrf_iter); + while (ogs_yaml_iter_next(&nrf_iter)) { + const char *nrf_key = ogs_yaml_iter_key(&nrf_iter); + ogs_assert(nrf_key); + if (!strcmp(nrf_key, "sbi")) { ogs_yaml_iter_t sbi_array, sbi_iter; - ogs_yaml_iter_recurse(&remote_iter, &sbi_array); + ogs_yaml_iter_recurse(&nrf_iter, &sbi_array); do { - ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_instance_t *nrf_instance = NULL; ogs_sbi_client_t *client = NULL; ogs_sockaddr_t *addr = NULL; int family = AF_UNSPEC; @@ -470,11 +515,13 @@ client = ogs_sbi_client_add(addr); ogs_assert(client); - nf_instance = ogs_sbi_nf_instance_add( - ogs_sbi_self()->nf_instance_id); - ogs_assert(nf_instance); + ogs_sbi_self()->nrf_instance = + nrf_instance = ogs_sbi_nf_instance_add(); + ogs_assert(nrf_instance); + ogs_sbi_nf_instance_set_type( + nrf_instance, OpenAPI_nf_type_NRF); - OGS_SBI_SETUP_CLIENT(nf_instance, client); + OGS_SBI_SETUP_CLIENT(nrf_instance, client); if (key) client->tls.key = key; if (pem) client->tls.pem = pem; @@ -485,26 +532,184 @@ YAML_SEQUENCE_NODE); } } + } else if (scp && !strcmp(root_key, scp)) { + ogs_yaml_iter_t scp_iter; + ogs_yaml_iter_recurse(&root_iter, &scp_iter); + while (ogs_yaml_iter_next(&scp_iter)) { + const char *scp_key = ogs_yaml_iter_key(&scp_iter); + ogs_assert(scp_key); + if (!strcmp(scp_key, "sbi")) { + ogs_yaml_iter_t sbi_array, sbi_iter; + ogs_yaml_iter_recurse(&scp_iter, &sbi_array); + do { + ogs_sbi_nf_instance_t *scp_instance = NULL; + ogs_sbi_client_t *client = NULL; + ogs_sockaddr_t *addr = NULL; + int family = AF_UNSPEC; + int i, num = 0; + const char *hostnameOGS_MAX_NUM_OF_HOSTNAME; + uint16_t port = self.sbi_port; + const char *key = NULL; + const char *pem = NULL; + + if (ogs_yaml_iter_type(&sbi_array) == + YAML_MAPPING_NODE) { + memcpy(&sbi_iter, &sbi_array, + sizeof(ogs_yaml_iter_t)); + } else if (ogs_yaml_iter_type(&sbi_array) == + YAML_SEQUENCE_NODE) { + if (!ogs_yaml_iter_next(&sbi_array)) + break; + ogs_yaml_iter_recurse(&sbi_array, &sbi_iter); + } else if (ogs_yaml_iter_type(&sbi_array) == + YAML_SCALAR_NODE) { + break; + } else + ogs_assert_if_reached(); + + while (ogs_yaml_iter_next(&sbi_iter)) { + const char *sbi_key = + ogs_yaml_iter_key(&sbi_iter); + ogs_assert(sbi_key); + if (!strcmp(sbi_key, "family")) { + const char *v = ogs_yaml_iter_value(&sbi_iter); + if (v) family = atoi(v); + if (family != AF_UNSPEC && + family != AF_INET && family != AF_INET6) { + ogs_warn("Ignore family(%d) : " + "AF_UNSPEC(%d), " + "AF_INET(%d), AF_INET6(%d) ", + family, AF_UNSPEC, AF_INET, AF_INET6); + family = AF_UNSPEC; + } + } else if (!strcmp(sbi_key, "addr") || + !strcmp(sbi_key, "name")) { + ogs_yaml_iter_t hostname_iter; + ogs_yaml_iter_recurse(&sbi_iter, + &hostname_iter); + ogs_assert(ogs_yaml_iter_type(&hostname_iter) != + YAML_MAPPING_NODE); + + do { + if (ogs_yaml_iter_type(&hostname_iter) == + YAML_SEQUENCE_NODE) { + if (!ogs_yaml_iter_next(&hostname_iter)) + break; + } + + ogs_assert(num < OGS_MAX_NUM_OF_HOSTNAME); + hostnamenum++ = + ogs_yaml_iter_value(&hostname_iter); + } while ( + ogs_yaml_iter_type(&hostname_iter) == + YAML_SEQUENCE_NODE); + } else if (!strcmp(sbi_key, "port")) { + const char *v = ogs_yaml_iter_value(&sbi_iter); + if (v) port = atoi(v); + } else if (!strcmp(sbi_key, "tls")) { + ogs_yaml_iter_t tls_iter; + ogs_yaml_iter_recurse(&sbi_iter, &tls_iter); + + while (ogs_yaml_iter_next(&tls_iter)) { + const char *tls_key = + ogs_yaml_iter_key(&tls_iter); + ogs_assert(tls_key); + + if (!strcmp(tls_key, "key")) { + key = ogs_yaml_iter_value(&tls_iter); + } else if (!strcmp(tls_key, "pem")) { + pem = ogs_yaml_iter_value(&tls_iter); + } else + ogs_warn("unknown key `%s`", tls_key); + } + } else if (!strcmp(sbi_key, "advertise")) { + /* Nothing in client */ + } else + ogs_warn("unknown key `%s`", sbi_key); + } + + addr = NULL; + for (i = 0; i < num; i++) { + rv = ogs_addaddrinfo(&addr, + family, hostnamei, port, 0); + ogs_assert(rv == OGS_OK); + } + + ogs_filter_ip_version(&addr, + ogs_app()->parameter.no_ipv4, + ogs_app()->parameter.no_ipv6, + ogs_app()->parameter.prefer_ipv4); + + if (addr == NULL) continue; + + client = ogs_sbi_client_add(addr); + ogs_assert(client); + + ogs_sbi_self()->scp_instance = + scp_instance = ogs_sbi_nf_instance_add(); + ogs_assert(scp_instance); + ogs_sbi_nf_instance_set_type( + scp_instance, OpenAPI_nf_type_SCP); + + OGS_SBI_SETUP_CLIENT(scp_instance, client); + + if (key) client->tls.key = key; + if (pem) client->tls.pem = pem; + + ogs_freeaddrinfo(addr); + + } while (ogs_yaml_iter_type(&sbi_array) == + YAML_SEQUENCE_NODE); + } else if (!strcmp(scp_key, "discovery")) { + ogs_yaml_iter_t discovery_iter; + yaml_node_t *node = yaml_document_get_node( + document, scp_iter.pair->value); + ogs_assert(node); + ogs_assert(node->type == YAML_MAPPING_NODE); + ogs_yaml_iter_recurse(&scp_iter, &discovery_iter); + while (ogs_yaml_iter_next(&discovery_iter)) { + const char *discovery_key = + ogs_yaml_iter_key(&discovery_iter); + ogs_assert(discovery_key); + if (!strcmp(discovery_key, "delegated")) { + yaml_node_t *discovery_node = + yaml_document_get_node(document, + discovery_iter.pair->value); + ogs_assert(discovery_node->type == + YAML_SCALAR_NODE); + const char* delegated = + ogs_yaml_iter_value(&discovery_iter); + if (!strcmp(delegated, "auto")) + self.discovery_config.delegated = + OGS_SBI_DISCOVERY_DELEGATED_AUTO; + else if (!strcmp(delegated, "yes")) + self.discovery_config.delegated = + OGS_SBI_DISCOVERY_DELEGATED_YES; + else if (!strcmp(delegated, "no")) + self.discovery_config.delegated = + OGS_SBI_DISCOVERY_DELEGATED_NO; + else + ogs_warn("unknown 'delegated' value `%s`", + delegated); + } else + ogs_warn("unknown key `%s`", + discovery_key); + } + } + } } } - rv = ogs_sbi_context_validation(local); + rv = ogs_sbi_context_validation(local, nrf, scp); if (rv != OGS_OK) return rv; return OGS_OK; } -bool ogs_sbi_nf_instance_maximum_number_is_reached() -{ - return nf_instance_pool.avail <= 0; -} - -ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(char *id) +ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; - ogs_assert(id); - ogs_pool_alloc(&nf_instance_pool, &nf_instance); ogs_assert(nf_instance); memset(nf_instance, 0, sizeof(ogs_sbi_nf_instance_t)); @@ -512,25 +717,9 @@ nf_instance->reference_count++; ogs_trace("ogs_sbi_nf_instance_add()"); - nf_instance->id = ogs_strdup(id); - ogs_assert(nf_instance->id); - nf_instance->time.heartbeat_interval = ogs_app()->time.nf_instance.heartbeat_interval; - nf_instance->t_registration_interval = ogs_timer_add( - ogs_app()->timer_mgr, NULL, nf_instance); - ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_heartbeat_interval = ogs_timer_add( - ogs_app()->timer_mgr, NULL, nf_instance); - ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_no_heartbeat = ogs_timer_add( - ogs_app()->timer_mgr, NULL, nf_instance); - ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_validity = ogs_timer_add( - ogs_app()->timer_mgr, NULL, nf_instance); - ogs_assert(nf_instance->t_validity); - nf_instance->priority = OGS_SBI_DEFAULT_PRIORITY; nf_instance->capacity = OGS_SBI_DEFAULT_CAPACITY; nf_instance->load = OGS_SBI_DEFAULT_LOAD; @@ -540,6 +729,33 @@ return nf_instance; } +void ogs_sbi_nf_instance_set_id(ogs_sbi_nf_instance_t *nf_instance, char *id) +{ + ogs_assert(nf_instance); + ogs_assert(id); + + nf_instance->id = ogs_strdup(id); + ogs_assert(nf_instance->id); +} + +void ogs_sbi_nf_instance_set_type( + ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_type_e nf_type) +{ + ogs_assert(nf_instance); + ogs_assert(nf_type); + + nf_instance->nf_type = nf_type; +} + +void ogs_sbi_nf_instance_set_status( + ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_status_e nf_status) +{ + ogs_assert(nf_instance); + ogs_assert(nf_status); + + nf_instance->nf_status = nf_status; +} + void ogs_sbi_nf_instance_add_allowed_nf_type( ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_type_e allowed_nf_type) { @@ -592,18 +808,14 @@ ogs_sbi_nf_info_remove_all(&nf_instance->nf_info_list); - ogs_sbi_subscription_remove_all_by_nf_instance_id(nf_instance->id); ogs_sbi_nf_service_remove_all(nf_instance); ogs_sbi_nf_instance_clear(nf_instance); - ogs_assert(nf_instance->id); - ogs_free(nf_instance->id); - - ogs_timer_delete(nf_instance->t_registration_interval); - ogs_timer_delete(nf_instance->t_heartbeat_interval); - ogs_timer_delete(nf_instance->t_no_heartbeat); - ogs_timer_delete(nf_instance->t_validity); + if (nf_instance->id) { + ogs_sbi_subscription_remove_all_by_nf_instance_id(nf_instance->id); + ogs_free(nf_instance->id); + } if (nf_instance->client) ogs_sbi_client_remove(nf_instance->client); @@ -630,15 +842,20 @@ ogs_assert(id); ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_assert(nf_instance->id); - if (strcmp(nf_instance->id, id) == 0) + if (nf_instance->id && strcmp(nf_instance->id, id) == 0) break; } return nf_instance; } -ogs_sbi_nf_service_t *ogs_sbi_nf_service_add(ogs_sbi_nf_instance_t *nf_instance, +bool ogs_sbi_nf_instance_maximum_number_is_reached() +{ + return nf_instance_pool.avail <= 0; +} + +ogs_sbi_nf_service_t *ogs_sbi_nf_service_add( + ogs_sbi_nf_instance_t *nf_instance, char *id, char *name, OpenAPI_uri_scheme_e scheme) { ogs_sbi_nf_service_t *nf_service = NULL; @@ -884,9 +1101,10 @@ char *hostname = NULL; ogs_assert(nf_instance); + ogs_assert(nf_type); - nf_instance->nf_type = nf_type; - nf_instance->nf_status = OpenAPI_nf_status_REGISTERED; + ogs_sbi_nf_instance_set_type(nf_instance, nf_type); + ogs_sbi_nf_instance_set_status(nf_instance, OpenAPI_nf_status_REGISTERED); hostname = NULL; ogs_list_for_each(&ogs_sbi_self()->server_list, server) { @@ -933,11 +1151,11 @@ ogs_sbi_nf_instance_t *nf_instance, char *name) { ogs_sbi_server_t *server = NULL; - ogs_sbi_client_t *client = NULL; ogs_sbi_nf_service_t *nf_service = NULL; ogs_uuid_t uuid; char idOGS_UUID_FORMATTED_LENGTH + 1; char *hostname = NULL; + OpenAPI_uri_scheme_e scheme = OpenAPI_uri_scheme_NULL; ogs_assert(nf_instance); ogs_assert(name); @@ -945,14 +1163,27 @@ ogs_uuid_get(&uuid); ogs_uuid_format(id, &uuid); - client = nf_instance->client; - ogs_assert(client); + ogs_list_for_each(&ogs_sbi_self()->server_list, server) { + OpenAPI_uri_scheme_e s; + + if (server->tls.key && server->tls.pem) + s = OpenAPI_uri_scheme_https; + else + s = OpenAPI_uri_scheme_http; + + if (scheme == OpenAPI_uri_scheme_NULL) { + scheme = s; + } else if (scheme != s) { + ogs_fatal("Please CHECK CONFIGURATION - sbi%d:%s", + nf_instance->nf_type, + OpenAPI_nf_type_ToString(nf_instance->nf_type)); + ogs_assert_if_reached(); + return NULL; + } + } - nf_service = ogs_sbi_nf_service_add(nf_instance, id, name, - (client->tls.key && client->tls.pem) ? - OpenAPI_uri_scheme_https : OpenAPI_uri_scheme_http); + nf_service = ogs_sbi_nf_service_add(nf_instance, id, name, scheme); ogs_assert(nf_service); - OGS_SBI_SETUP_CLIENT(nf_service, client); hostname = NULL; ogs_list_for_each(&ogs_sbi_self()->server_list, server) { @@ -1092,33 +1323,48 @@ nf_service_associate_client(nf_service); } -void ogs_sbi_select_nrf(ogs_sbi_object_t *sbi_object, void *state) +bool ogs_sbi_discovery_param_is_matched( + ogs_sbi_nf_instance_t *nf_instance, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option) { - ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_state_registered); + ogs_assert(target_nf_type); - ogs_assert(sbi_object); + if (!OGS_FSM_CHECK(&nf_instance->sm, + ogs_sbi_self()->nf_state_registered)) return false; - /* SELF NF Instace is used for NRF Instance */ - nf_instance = ogs_sbi_nf_instance_find(ogs_sbi_self()->nf_instance_id); - if (nf_instance && OGS_FSM_CHECK(&nf_instance->sm, state)) - OGS_SBI_SETUP_NF(sbi_object, OpenAPI_nf_type_NRF, nf_instance); + if (nf_instance->nf_type != target_nf_type) return false; + + if (discovery_option) { + if (discovery_option->target_nf_instance_id && + strcmp(nf_instance->id, + discovery_option->target_nf_instance_id) != 0) + return false; + } + + return true; } -void ogs_sbi_select_first_nf( - ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state) +void ogs_sbi_select_nf( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(ogs_sbi_self()->nf_state_registered); ogs_assert(sbi_object); - ogs_assert(nf_type); - ogs_assert(state); + ogs_assert(target_nf_type); ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - if (OGS_FSM_CHECK(&nf_instance->sm, state) && - nf_instance->nf_type == nf_type) { - OGS_SBI_SETUP_NF(sbi_object, nf_type, nf_instance); - break; - } + if (ogs_sbi_discovery_param_is_matched( + nf_instance, target_nf_type, discovery_option) == false) + continue; + + OGS_SBI_SETUP_NF(sbi_object, target_nf_type, nf_instance); + break; } } @@ -1184,21 +1430,25 @@ } ogs_sbi_xact_t *ogs_sbi_xact_add( - OpenAPI_nf_type_e target_nf_type, ogs_sbi_object_t *sbi_object, - ogs_sbi_build_f build, void *context, void *data, - void (*timer_cb)(void *data)) + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_build_f build, void *context, void *data) { ogs_sbi_xact_t *xact = NULL; + ogs_assert(ogs_sbi_self()->client_wait_expire); ogs_assert(sbi_object); ogs_pool_alloc(&xact_pool, &xact); ogs_expect_or_return_val(xact, NULL); memset(xact, 0, sizeof(ogs_sbi_xact_t)); - xact->target_nf_type = target_nf_type; xact->sbi_object = sbi_object; + xact->target_nf_type = target_nf_type; + xact->discovery_option = discovery_option; + xact->request = (*build)(context, data); if (!xact->request) { ogs_error("SBI build failed"); @@ -1207,7 +1457,7 @@ } xact->t_response = ogs_timer_add( - ogs_app()->timer_mgr, timer_cb, xact); + ogs_app()->timer_mgr, ogs_sbi_self()->client_wait_expire, xact); if (!xact->t_response) { ogs_error("ogs_timer_add() failed"); ogs_sbi_request_free(xact->request); @@ -1228,15 +1478,18 @@ ogs_sbi_object_t *sbi_object = NULL; ogs_assert(xact); + sbi_object = xact->sbi_object; ogs_assert(sbi_object); + if (xact->discovery_option) + ogs_sbi_discovery_option_free(xact->discovery_option); + ogs_assert(xact->t_response); ogs_timer_delete(xact->t_response); - /* If ogs_sbi_send() is called, xact->request has already been freed */ - if (xact->request) - ogs_sbi_request_free(xact->request); + ogs_assert(xact->request); + ogs_sbi_request_free(xact->request); ogs_list_remove(&sbi_object->xact_list, xact); ogs_pool_free(&xact_pool, xact); @@ -1252,6 +1505,11 @@ ogs_sbi_xact_remove(xact); } +ogs_sbi_xact_t *ogs_sbi_xact_cycle(ogs_sbi_xact_t *xact) +{ + return ogs_pool_cycle(&xact_pool, xact); +} + ogs_sbi_subscription_t *ogs_sbi_subscription_add(void) { ogs_sbi_subscription_t *subscription = NULL;
View file
open5gs_2.4.8.tar.xz/lib/sbi/context.h -> open5gs_2.4.9.tar.xz/lib/sbi/context.h
Changed
@@ -34,45 +34,68 @@ typedef struct ogs_sbi_client_s ogs_sbi_client_t; typedef struct ogs_sbi_smf_info_s ogs_sbi_smf_info_t; +typedef struct ogs_sbi_nf_instance_s ogs_sbi_nf_instance_t; + +typedef enum { + OGS_SBI_DISCOVERY_DELEGATED_AUTO = 0, + OGS_SBI_DISCOVERY_DELEGATED_YES, + OGS_SBI_DISCOVERY_DELEGATED_NO, +} ogs_sbi_discovery_delegated_mode; + +typedef struct ogs_sbi_discovery_config_s { + ogs_sbi_discovery_delegated_mode delegated; +} ogs_sbi_discovery_config_t; typedef struct ogs_sbi_context_s { - uint32_t sbi_port; /* SBI local port */ + ogs_sbi_discovery_config_t discovery_config; /* SCP Discovery Delegated */ + + uint32_t sbi_port; /* SBI local port */ - ogs_list_t server_list; - ogs_list_t client_list; + ogs_list_t server_list; + ogs_list_t client_list; - ogs_uuid_t uuid; - char nf_instance_idOGS_UUID_FORMATTED_LENGTH + 1; + ogs_uuid_t uuid; - ogs_list_t nf_instance_list; - ogs_list_t subscription_list; + ogs_list_t nf_instance_list; + ogs_list_t subscription_list; - ogs_list_t nf_info_list; + ogs_sbi_nf_instance_t *nf_instance; /* SELF NF Instance */ + ogs_sbi_nf_instance_t *nrf_instance; /* NRF Instance */ + ogs_sbi_nf_instance_t *scp_instance; /* SCP Instance */ + + const char *content_encoding; + + void (*client_wait_expire)(void *data); + ogs_fsm_handler_t nf_state_registered; - const char *content_encoding; } ogs_sbi_context_t; typedef struct ogs_sbi_nf_instance_s { - ogs_lnode_t lnode; + ogs_lnode_t lnode; - ogs_fsm_t sm; /* A state machine */ - ogs_timer_t *t_registration_interval; /* timer to retry - to register peer node */ + ogs_fsm_t sm; /* A state machine */ + ogs_timer_t *t_registration_interval; /* timer to retry + to register peer node */ struct { int heartbeat_interval; int validity_duration; } time; - ogs_timer_t *t_heartbeat_interval; /* heartbeat interval */ - ogs_timer_t *t_no_heartbeat; /* check heartbeat */ - ogs_timer_t *t_validity; /* check validation */ + ogs_timer_t *t_heartbeat_interval; /* heartbeat interval */ + ogs_timer_t *t_no_heartbeat; /* check heartbeat */ + ogs_timer_t *t_validity; /* check validation */ #define NF_INSTANCE_IS_SELF(_iD) \ - strcmp((_iD), ogs_sbi_self()->nf_instance_id) == 0 + (_iD) && ogs_sbi_self()->nf_instance && \ + strcmp((_iD), ogs_sbi_self()->nf_instance->id) == 0 #define NF_INSTANCE_IS_OTHERS(_iD) \ - strcmp((_iD), ogs_sbi_self()->nf_instance_id) != 0 + (_iD) && ogs_sbi_self()->nf_instance && \ + strcmp((_iD), ogs_sbi_self()->nf_instance->id) != 0 - char *id; /* NFInstanceId */ +#define NF_INSTANCE_IS_NRF(__nFInstance) \ + ((__nFInstance->nf_type) == OpenAPI_nf_type_NRF) + + char *id; /* NFInstanceId */ OpenAPI_nf_type_e nf_type; OpenAPI_nf_status_e nf_status; @@ -98,12 +121,12 @@ ogs_list_t nf_service_list; - void *client; /* only used in CLIENT */ - unsigned int reference_count; /* reference count for memory free */ + void *client; /* only used in CLIENT */ + unsigned int reference_count; /* reference count for memory free */ ogs_list_t nf_info_list; - OpenAPI_nf_profile_t *nf_profile; /* stored NF Profile */ + OpenAPI_nf_profile_t *nf_profile; /* stored NF Profile */ } ogs_sbi_nf_instance_t; typedef struct ogs_sbi_nf_type_array_s { @@ -137,6 +160,7 @@ ogs_lnode_t lnode; OpenAPI_nf_type_e target_nf_type; + ogs_sbi_discovery_option_t *discovery_option; ogs_sbi_request_t *request; ogs_timer_t *t_response; @@ -191,19 +215,19 @@ int validity_duration; } time; - ogs_timer_t *t_validity; /* check validation */ + ogs_timer_t *t_validity; /* check validation */ - char *id; /* SubscriptionId */ - char *req_nf_instance_id; /* reqNfInstanceId */ - OpenAPI_nf_type_e req_nf_type; /* reqNfType */ + char *id; /* SubscriptionId */ + char *req_nf_instance_id; /* reqNfInstanceId */ + OpenAPI_nf_type_e req_nf_type; /* reqNfType */ OpenAPI_nf_status_e nf_status; char *notification_uri; struct { - OpenAPI_nf_type_e nf_type; /* nfType */ + OpenAPI_nf_type_e nf_type; /* nfType */ } subscr_cond; - void *client; /* only used in SERVER */ + void *client; /* only used in SERVER */ } ogs_sbi_subscription_t; typedef struct ogs_sbi_smf_info_s { @@ -244,16 +268,24 @@ void ogs_sbi_context_init(void); void ogs_sbi_context_final(void); ogs_sbi_context_t *ogs_sbi_self(void); -int ogs_sbi_context_parse_config(const char *local, const char *remote); +int ogs_sbi_context_parse_config( + const char *local, const char *nrf, const char *scp); -bool ogs_sbi_nf_instance_maximum_number_is_reached(void); -ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(char *id); +ogs_sbi_nf_instance_t *ogs_sbi_scp_instance(void); + +ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(void); +void ogs_sbi_nf_instance_set_id(ogs_sbi_nf_instance_t *nf_instance, char *id); +void ogs_sbi_nf_instance_set_type( + ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_type_e nf_type); +void ogs_sbi_nf_instance_set_status( + ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_status_e nf_status); void ogs_sbi_nf_instance_add_allowed_nf_type( ogs_sbi_nf_instance_t *nf_instance, OpenAPI_nf_type_e allowed_nf_type); void ogs_sbi_nf_instance_clear(ogs_sbi_nf_instance_t *nf_instance); void ogs_sbi_nf_instance_remove(ogs_sbi_nf_instance_t *nf_instance); void ogs_sbi_nf_instance_remove_all(void); ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_find(char *id); +bool ogs_sbi_nf_instance_maximum_number_is_reached(void); ogs_sbi_nf_service_t *ogs_sbi_nf_service_add(ogs_sbi_nf_instance_t *nf_instance, char *id, char *name, OpenAPI_uri_scheme_e scheme); @@ -309,18 +341,26 @@ (__nFInstance)->reference_count); \ } while(0) -void ogs_sbi_select_nrf(ogs_sbi_object_t *sbi_object, void *state); -void ogs_sbi_select_first_nf( - ogs_sbi_object_t *sbi_object, OpenAPI_nf_type_e nf_type, void *state); +bool ogs_sbi_discovery_param_is_matched( + ogs_sbi_nf_instance_t *nf_instance, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option); + +void ogs_sbi_select_nf( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option); void ogs_sbi_object_free(ogs_sbi_object_t *sbi_object); ogs_sbi_xact_t *ogs_sbi_xact_add( - OpenAPI_nf_type_e target_nf_type, ogs_sbi_object_t *sbi_object, - ogs_sbi_build_f build, void *context, void *data, - void (*timer_cb)(void *data)); + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_build_f build, void *context, void *data); void ogs_sbi_xact_remove(ogs_sbi_xact_t *xact); void ogs_sbi_xact_remove_all(ogs_sbi_object_t *sbi_object); +ogs_sbi_xact_t *ogs_sbi_xact_cycle(ogs_sbi_xact_t *xact); ogs_sbi_subscription_t *ogs_sbi_subscription_add(void); void ogs_sbi_subscription_set_id(
View file
open5gs_2.4.8.tar.xz/lib/sbi/conv.c -> open5gs_2.4.9.tar.xz/lib/sbi/conv.c
Changed
@@ -29,7 +29,6 @@ char *hostname = NULL; ogs_assert(addr); - ogs_assert(h); p = uri; last = uri + OGS_HUGE_LEN; @@ -61,16 +60,18 @@ } /* API */ - ogs_assert(h->service.name); - p = ogs_slprintf(p, last, "/%s", h->service.name); - ogs_assert(h->api.version); - p = ogs_slprintf(p, last, "/%s", h->api.version); - - /* Resource */ - ogs_assert(h->resource.component0); - for (i = 0; i < OGS_SBI_MAX_NUM_OF_RESOURCE_COMPONENT && - h->resource.componenti; i++) - p = ogs_slprintf(p, last, "/%s", h->resource.componenti); + if (h) { + ogs_assert(h->service.name); + p = ogs_slprintf(p, last, "/%s", h->service.name); + ogs_assert(h->api.version); + p = ogs_slprintf(p, last, "/%s", h->api.version); + + /* Resource */ + ogs_assert(h->resource.component0); + for (i = 0; i < OGS_SBI_MAX_NUM_OF_RESOURCE_COMPONENT && + h->resource.componenti; i++) + p = ogs_slprintf(p, last, "/%s", h->resource.componenti); + } return ogs_strdup(uri); } @@ -81,7 +82,6 @@ bool https = false; ogs_assert(server); - ogs_assert(h); if (server->tls.key && server->tls.pem) https = true; @@ -100,7 +100,6 @@ bool https = false; ogs_assert(client); - ogs_assert(h); if (client->tls.key && client->tls.pem) https = true; @@ -108,6 +107,11 @@ return ogs_uridup(https, client->node.addr, h); } +char *ogs_sbi_client_apiroot(ogs_sbi_client_t *client) +{ + return ogs_sbi_client_uri(client, NULL); +} + /** * Returns a url-decoded version of str * IMPORTANT: be sure to free() the returned string after use @@ -207,6 +211,57 @@ return addr; } +char *ogs_sbi_getpath_from_uri(char *uri) +{ + int rv; + struct yuarel yuarel; + char *p = NULL; + char *path = NULL; + + p = ogs_strdup(uri); + + rv = yuarel_parse(&yuarel, p); + if (rv != OGS_OK) { + ogs_free(p); + ogs_error("yuarel_parse() failed %s", uri); + return NULL; + } + + if (!yuarel.scheme) { + ogs_error("No http.scheme found %s", uri); + ogs_free(p); + return NULL; + } + + if (strcmp(yuarel.scheme, "https") == 0) { + + } else if (strcmp(yuarel.scheme, "http") == 0) { + + } else { + ogs_error("Invalid http.scheme %s:%s", yuarel.scheme, uri); + ogs_free(p); + return NULL; + } + + if (!yuarel.host) { + ogs_error("No http.host found %s", uri); + ogs_free(p); + return NULL; + } + + if (!yuarel.path) { + ogs_error("No http.path found %s", uri); + ogs_free(p); + return NULL; + } + + path = ogs_strdup(yuarel.path); + ogs_assert(path); + + ogs_free(p); + return path; +} + char *ogs_sbi_bitrate_to_string(uint64_t bitrate, int unit) { if (unit == OGS_SBI_BITRATE_KBPS) {
View file
open5gs_2.4.8.tar.xz/lib/sbi/conv.h -> open5gs_2.4.9.tar.xz/lib/sbi/conv.h
Changed
@@ -34,10 +34,13 @@ char *ogs_uridup(bool https, ogs_sockaddr_t *addr, ogs_sbi_header_t *h); char *ogs_sbi_server_uri(ogs_sbi_server_t *server, ogs_sbi_header_t *h); +char *ogs_sbi_client_apiroot(ogs_sbi_client_t *client); char *ogs_sbi_client_uri(ogs_sbi_client_t *client, ogs_sbi_header_t *h); char *ogs_sbi_parse_uri(char *uri, const char *delim, char **saveptr); + ogs_sockaddr_t *ogs_sbi_getaddr_from_uri(char *uri); +char *ogs_sbi_getpath_from_uri(char *uri); #define OGS_SBI_BITRATE_BPS 0 #define OGS_SBI_BITRATE_KBPS 1 @@ -50,7 +53,7 @@ int ogs_strftimezone(char *str, size_t size, int tm_gmtoff); char *ogs_sbi_localtime_string(ogs_time_t time); char *ogs_sbi_gmtime_string(ogs_time_t time); -char *ogs_sbi_timezone_string(int tm_offset); +char *ogs_sbi_timezone_string(int tm_gmtoff); bool ogs_sbi_time_from_string(ogs_time_t *time, char *str); char *ogs_sbi_s_nssai_to_string(ogs_s_nssai_t *s_nssai);
View file
open5gs_2.4.8.tar.xz/lib/sbi/custom/patch_item.c -> open5gs_2.4.9.tar.xz/lib/sbi/custom/patch_item.c
Changed
@@ -76,7 +76,7 @@ } } else if (OpenAPI_IsBool(patch_item->value)) { if (cJSON_AddBoolToObject( - item, "value", OpenAPI_IsTrue(patch_item->value))) { + item, "value", OpenAPI_IsTrue(patch_item->value)) == NULL) { ogs_error("OpenAPI_patch_item_convertToJSON() failed value"); goto end; }
View file
open5gs_2.4.8.tar.xz/lib/sbi/message.c -> open5gs_2.4.9.tar.xz/lib/sbi/message.c
Changed
@@ -60,6 +60,11 @@ ogs_assert(message); + /* Discovery Option */ + if (message->param.discovery_option) + ogs_sbi_discovery_option_free(message->param.discovery_option); + + /* JSON Data */ if (message->NFProfile) OpenAPI_nf_profile_free(message->NFProfile); if (message->ProblemDetails) @@ -100,6 +105,9 @@ if (message->Amf3GppAccessRegistration) OpenAPI_amf3_gpp_access_registration_free( message->Amf3GppAccessRegistration); + if (message->Amf3GppAccessRegistrationModification) + OpenAPI_amf3_gpp_access_registration_modification_free( + message->Amf3GppAccessRegistrationModification); if (message->AccessAndMobilitySubscriptionData) OpenAPI_access_and_mobility_subscription_data_free( message->AccessAndMobilitySubscriptionData); @@ -170,7 +178,10 @@ OpenAPI_sm_policy_notification_free(message->SmPolicyNotification); if (message->TerminationNotification) OpenAPI_termination_notification_free(message->TerminationNotification); + if (message->DeregistrationData) + OpenAPI_deregistration_data_free(message->DeregistrationData); + /* HTTP Part */ for (i = 0; i < message->num_of_part; i++) { if (message->parti.pkbuf) ogs_pkbuf_free(message->parti.pkbuf); @@ -237,6 +248,7 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) { + int i; ogs_sbi_request_t *request = NULL; ogs_assert(message); @@ -247,12 +259,9 @@ ogs_expect_or_return_val(message->h.method, NULL); request->h.method = ogs_strdup(message->h.method); if (message->h.uri) { - ogs_expect_or_return_val(message->h.uri, NULL); request->h.uri = ogs_strdup(message->h.uri); ogs_expect_or_return_val(request->h.uri, NULL); } else { - int i; - ogs_expect_or_return_val(message->h.service.name, NULL); request->h.service.name = ogs_strdup(message->h.service.name); ogs_expect_or_return_val(message->h.api.version, NULL); @@ -266,15 +275,12 @@ message->h.resource.componenti); } - /* URL Param */ - if (message->param.nf_id) { - ogs_sbi_header_set(request->http.params, - OGS_SBI_PARAM_NF_ID, message->param.nf_id); - } - if (message->param.nf_type) { - char *v = OpenAPI_nf_type_ToString(message->param.nf_type); + /* Discovery Parameter */ + if (message->param.target_nf_type) { + char *v = OpenAPI_nf_type_ToString(message->param.target_nf_type); ogs_expect_or_return_val(v, NULL); - ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_NF_TYPE, v); + ogs_sbi_header_set(request->http.params, + OGS_SBI_PARAM_TARGET_NF_TYPE, v); } if (message->param.requester_nf_type) { char *v = OpenAPI_nf_type_ToString(message->param.requester_nf_type); @@ -282,11 +288,50 @@ ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_REQUESTER_NF_TYPE, v); } - if (message->param.target_nf_type) { - char *v = OpenAPI_nf_type_ToString(message->param.target_nf_type); - ogs_expect_or_return_val(v, NULL); + + /* Discovery Option Parameter */ + if (message->param.discovery_option) { + ogs_sbi_discovery_option_t *discovery_option = + message->param.discovery_option; + + if (discovery_option->target_nf_instance_id) { + ogs_sbi_header_set(request->http.params, + OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID, + discovery_option->target_nf_instance_id); + } + if (discovery_option->requester_nf_instance_id) { + ogs_sbi_header_set(request->http.params, + OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID, + discovery_option->requester_nf_instance_id); + } + if (discovery_option->num_of_service_names) { + char *v = NULL; + cJSON *item = NULL; + + item = cJSON_CreateStringArray( + (const char * const*)discovery_option->service_names, + discovery_option->num_of_service_names); + ogs_expect_or_return_val(item, NULL); + + v = cJSON_Print(item); + ogs_expect_or_return_val(v, NULL); + cJSON_Delete(item); + + ogs_sbi_header_set( + request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v); + ogs_free(v); + } + } + + /* URL Query Paramemter */ + if (message->param.nf_id) { ogs_sbi_header_set(request->http.params, - OGS_SBI_PARAM_TARGET_NF_TYPE, v); + OGS_SBI_PARAM_NF_ID, message->param.nf_id); + } + if (message->param.nf_type) { + char *v = OpenAPI_nf_type_ToString(message->param.nf_type); + ogs_expect_or_return_val(v, NULL); + ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_NF_TYPE, v); } if (message->param.limit) { char *v = ogs_msprintf("%d", message->param.limit); @@ -436,6 +481,8 @@ { int rv; ogs_hash_index_t *hi; + ogs_sbi_discovery_option_t *discovery_option = NULL; + bool discovery_option_presence = false; ogs_assert(request); ogs_assert(message); @@ -446,14 +493,14 @@ return OGS_ERROR; } + discovery_option_presence = false; + discovery_option = ogs_sbi_discovery_option_new(); + ogs_assert(discovery_option); + for (hi = ogs_hash_first(request->http.params); hi; hi = ogs_hash_next(hi)) { - if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_ID)) { - message->param.nf_id = ogs_hash_this_val(hi); - } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_TYPE)) { - message->param.nf_type = - OpenAPI_nf_type_FromString(ogs_hash_this_val(hi)); - } else if (!strcmp(ogs_hash_this_key(hi), + /* Discovery Parameter */ + if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_TARGET_NF_TYPE)) { message->param.target_nf_type = OpenAPI_nf_type_FromString(ogs_hash_this_val(hi)); @@ -461,6 +508,46 @@ OGS_SBI_PARAM_REQUESTER_NF_TYPE)) { message->param.requester_nf_type = OpenAPI_nf_type_FromString(ogs_hash_this_val(hi)); + + /* Discovery Option Parameter */ + } else if (!strcmp(ogs_hash_this_key(hi), + OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID)) { + discovery_option_presence = true; + ogs_sbi_discovery_option_set_target_nf_instance_id( + discovery_option, ogs_hash_this_val(hi)); + } else if (!strcmp(ogs_hash_this_key(hi), + OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID)) { + discovery_option_presence = true; + ogs_sbi_discovery_option_set_requester_nf_instance_id( + discovery_option, ogs_hash_this_val(hi)); + } else if (!strcmp(ogs_hash_this_key(hi), + OGS_SBI_PARAM_SERVICE_NAMES)) { + char *v = NULL; + cJSON *array = NULL, *item = NULL; + + v = ogs_hash_this_val(hi); + if (v) { + array = cJSON_Parse(v); + if (cJSON_IsArray(array)) { + + discovery_option_presence = true; + + cJSON_ArrayForEach(item, array) { + char *names = cJSON_GetStringValue(item); + if (names) + ogs_sbi_discovery_option_add_service_names( + discovery_option, names); + } + } + cJSON_Delete(array); + } + + /* URL Query Parameter */ + } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_ID)) { + message->param.nf_id = ogs_hash_this_val(hi); + } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_NF_TYPE)) { + message->param.nf_type = + OpenAPI_nf_type_FromString(ogs_hash_this_val(hi)); } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_LIMIT)) { message->param.limit = atoi(ogs_hash_this_val(hi)); } else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_DNN)) { @@ -540,8 +627,20 @@ } } + if (discovery_option_presence == true) + /* message->param.discovery_option will be freed() + * in ogs_sbi_message_free() */ + message->param.discovery_option = discovery_option; + else + ogs_sbi_discovery_option_free(discovery_option); + for (hi = ogs_hash_first(request->http.headers); hi; hi = ogs_hash_next(hi)) { + /* + * <RFC 2616> + * Each header field consists of a name followed by a colon (":") + * and the field value. Field names are case-insensitive. + */ if (!ogs_strcasecmp(ogs_hash_this_key(hi), OGS_SBI_ACCEPT_ENCODING)) { message->http.content_encoding = ogs_hash_this_val(hi); } else if (!ogs_strcasecmp( @@ -615,7 +714,7 @@ { struct yuarel yuarel; char *saveptr = NULL; - char *uri = NULL, *p = NULL;; + char *uri = NULL, *p = NULL; char *component = NULL; int i = 0; @@ -686,6 +785,21 @@ ogs_free(h->resource.componenti); } +void ogs_sbi_http_hash_free(ogs_hash_t *hash) +{ + ogs_hash_index_t *hi; + + ogs_assert(hash); + + for (hi = ogs_hash_first(hash); hi; hi = ogs_hash_next(hi)) { + char *key = (char *)ogs_hash_this_key(hi); + char *val = ogs_hash_this_val(hi); + ogs_hash_set(hash, key, strlen(key), NULL); + ogs_free(key); + ogs_free(val); + } + ogs_hash_destroy(hash); +} static char *build_json(ogs_sbi_message_t *message) { @@ -760,6 +874,10 @@ item = OpenAPI_amf3_gpp_access_registration_convertToJSON( message->Amf3GppAccessRegistration); ogs_assert(item); + } else if (message->Amf3GppAccessRegistrationModification) { + item = OpenAPI_amf3_gpp_access_registration_modification_convertToJSON( + message->Amf3GppAccessRegistrationModification); + ogs_assert(item); } else if (message->AccessAndMobilitySubscriptionData) { item = OpenAPI_access_and_mobility_subscription_data_convertToJSON( message->AccessAndMobilitySubscriptionData); @@ -881,6 +999,10 @@ item = OpenAPI_termination_notification_convertToJSON( message->TerminationNotification); ogs_assert(item); + } else if (message->DeregistrationData) { + item = OpenAPI_deregistration_data_convertToJSON( + message->DeregistrationData); + ogs_assert(item); } if (item) { @@ -1098,13 +1220,30 @@ CASE(OGS_SBI_RESOURCE_NAME_REGISTRATIONS) SWITCH(message->h.resource.component2) CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS) - message->Amf3GppAccessRegistration = - OpenAPI_amf3_gpp_access_registration_parseFromJSON( - item); - if (!message->Amf3GppAccessRegistration) { - rv = OGS_ERROR; - ogs_error("JSON parse error"); - } + + SWITCH(message->h.method) + CASE(OGS_SBI_HTTP_METHOD_PUT) + message->Amf3GppAccessRegistration = + OpenAPI_amf3_gpp_access_registration_parseFromJSON( + item); + if (!message->Amf3GppAccessRegistration) { + rv = OGS_ERROR; + ogs_error("JSON parse error"); + } + break; + CASE(OGS_SBI_HTTP_METHOD_PATCH) + message->Amf3GppAccessRegistrationModification = + OpenAPI_amf3_gpp_access_registration_modification_parseFromJSON( + item); + if (!message->Amf3GppAccessRegistrationModification) { + rv = OGS_ERROR; + ogs_error("JSON parse error"); + } + break; + DEFAULT + rv = OGS_ERROR; + ogs_error("Unknown method %s", message->h.method); + END break; DEFAULT rv = OGS_ERROR; @@ -1702,6 +1841,15 @@ } break; + CASE(OGS_SBI_RESOURCE_NAME_DEREG_NOTIFY) + message->DeregistrationData = + OpenAPI_deregistration_data_parseFromJSON(item); + if (!message->DeregistrationData) { + rv = OGS_ERROR; + ogs_error("JSON parse error"); + } + break; + DEFAULT rv = OGS_ERROR; ogs_error("Unknown resource name %s", @@ -2113,29 +2261,12 @@ int i; ogs_assert(http); - if (http->params) { - ogs_hash_index_t *hi; - for (hi = ogs_hash_first(http->params); hi; hi = ogs_hash_next(hi)) { - char *key = (char *)ogs_hash_this_key(hi); - char *val = ogs_hash_this_val(hi); - ogs_hash_set(http->params, key, strlen(key), NULL); - ogs_free(key); - ogs_free(val); - } - ogs_hash_destroy(http->params); - } + if (http->params) + ogs_sbi_http_hash_free(http->params); + + if (http->headers) + ogs_sbi_http_hash_free(http->headers); - if (http->headers) { - ogs_hash_index_t *hi; - for (hi = ogs_hash_first(http->headers); hi; hi = ogs_hash_next(hi)) { - char *key = (char *)ogs_hash_this_key(hi); - char *val = ogs_hash_this_val(hi); - ogs_hash_set(http->headers, key, strlen(key), NULL); - ogs_free(key); - ogs_free(val); - } - ogs_hash_destroy(http->headers); - } if (http->content) ogs_free(http->content); @@ -2148,3 +2279,70 @@ ogs_free(http->parti.content_type); } } + +ogs_sbi_discovery_option_t *ogs_sbi_discovery_option_new(void) +{ + ogs_sbi_discovery_option_t *discovery_option = NULL; + + discovery_option = ogs_calloc(1, sizeof(*discovery_option)); + ogs_assert(discovery_option); + + return discovery_option; +} +void ogs_sbi_discovery_option_free( + ogs_sbi_discovery_option_t *discovery_option) +{ + int i; + + ogs_assert(discovery_option); + + if (discovery_option->target_nf_instance_id) + ogs_free(discovery_option->target_nf_instance_id); + if (discovery_option->requester_nf_instance_id) + ogs_free(discovery_option->requester_nf_instance_id); + + for (i = 0; i < discovery_option->num_of_service_names; i++) + ogs_free(discovery_option->service_namesi); + + ogs_free(discovery_option); +} + +void ogs_sbi_discovery_option_set_target_nf_instance_id( + ogs_sbi_discovery_option_t *discovery_option, + char *target_nf_instance_id) +{ + ogs_assert(discovery_option); + ogs_assert(target_nf_instance_id); + + ogs_assert(!discovery_option->target_nf_instance_id); + discovery_option->target_nf_instance_id = ogs_strdup(target_nf_instance_id); + ogs_assert(discovery_option->target_nf_instance_id); +} +void ogs_sbi_discovery_option_set_requester_nf_instance_id( + ogs_sbi_discovery_option_t *discovery_option, + char *requester_nf_instance_id) +{ + ogs_assert(discovery_option); + ogs_assert(requester_nf_instance_id); + + ogs_assert(!discovery_option->requester_nf_instance_id); + discovery_option->requester_nf_instance_id = + ogs_strdup(requester_nf_instance_id); + ogs_assert(discovery_option->requester_nf_instance_id); +} +void ogs_sbi_discovery_option_add_service_names( + ogs_sbi_discovery_option_t *discovery_option, + char *service_name) +{ + ogs_assert(discovery_option); + ogs_assert(service_name); + + ogs_assert(discovery_option->num_of_service_names < + OGS_MAX_NUM_OF_NF_SERVICE); + + discovery_option->service_namesdiscovery_option->num_of_service_names = + ogs_strdup(service_name); + ogs_assert(discovery_option->service_names + discovery_option->num_of_service_names); + discovery_option->num_of_service_names++; +}
View file
open5gs_2.4.8.tar.xz/lib/sbi/message.h -> open5gs_2.4.9.tar.xz/lib/sbi/message.h
Changed
@@ -247,20 +247,6 @@ #define OGS_SBI_NBSF_MANAGEMENT_ES3XX 4 #define OGS_SBI_NBSF_MANAGEMENT_EXTENDED_SAME_PCF 5 -#define OGS_SBI_PARAM_NF_ID "nf-id" -#define OGS_SBI_PARAM_NF_TYPE "nf-type" -#define OGS_SBI_PARAM_TARGET_NF_TYPE "target-nf-type" -#define OGS_SBI_PARAM_REQUESTER_NF_TYPE "requester-nf-type" -#define OGS_SBI_PARAM_LIMIT "limit" -#define OGS_SBI_PARAM_DNN "dnn" -#define OGS_SBI_PARAM_PLMN_ID "plmn-id" -#define OGS_SBI_PARAM_SINGLE_NSSAI "single-nssai" -#define OGS_SBI_PARAM_SNSSAI "snssai" -#define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \ - "slice-info-request-for-pdu-session" -#define OGS_SBI_PARAM_IPV4ADDR "ipv4Addr" -#define OGS_SBI_PARAM_IPV6PREFIX "ipv6Prefix" - #define OGS_SBI_ACCEPT "Accept" #define OGS_SBI_ACCEPT_ENCODING "Accept-Encoding" #define OGS_SBI_CONTENT_TYPE "Content-Type" @@ -274,6 +260,62 @@ #define OGS_SBI_APPLICATION_5GNAS_TYPE "vnd.3gpp.5gnas" #define OGS_SBI_APPLICATION_NGAP_TYPE "vnd.3gpp.ngap" +#define OGS_SBI_CUSTOM_3GPP_COMMON "3gpp-Sbi-" +#define OGS_SBI_CUSTOM_MESSAGE_PRIORITY \ + OGS_SBI_CUSTOM_3GPP_COMMON "Message-Priority" +#define OGS_SBI_CUSTOM_CALLBACK \ + OGS_SBI_CUSTOM_3GPP_COMMON "Callback" +#define OGS_SBI_CUSTOM_TARGET_APIROOT \ + OGS_SBI_CUSTOM_3GPP_COMMON "Target-apiRoot" +#define OGS_SBI_CUSTOM_ROUTING_BINDING \ + OGS_SBI_CUSTOM_3GPP_COMMON "Routing-Binding" +#define OGS_SBI_CUSTOM_BINDING \ + OGS_SBI_CUSTOM_3GPP_COMMON "Binding" +#define OGS_SBI_CUSTOM_DISCOVERY_COMMON \ + OGS_SBI_CUSTOM_3GPP_COMMON "Discovery-" +#define OGS_SBI_CUSTOM_DISCOVERY_TARGET_NF_TYPE \ + OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_TARGET_NF_TYPE +#define OGS_SBI_CUSTOM_DISCOVERY_REQUESTER_NF_TYPE \ + OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_REQUESTER_NF_TYPE +#define OGS_SBI_CUSTOM_DISCOVERY_TARGET_NF_INSTANCE_ID \ + OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID +#define OGS_SBI_CUSTOM_DISCOVERY_REQUESTER_NF_INSTANCE_ID \ + OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID +#define OGS_SBI_CUSTOM_DISCOVERY_SERVICE_NAMES \ + OGS_SBI_CUSTOM_DISCOVERY_COMMON OGS_SBI_PARAM_SERVICE_NAMES +#define OGS_SBI_CUSTOM_PRODUCER_ID \ + OGS_SBI_CUSTOM_3GPP_COMMON "Producer-Id" +#define OGS_SBI_CUSTOM_OCI \ + OGS_SBI_CUSTOM_3GPP_COMMON "Oci" +#define OGS_SBI_CUSTOM_CLIENT_CREDENTIALS \ + OGS_SBI_CUSTOM_3GPP_COMMON "Client-Credentials" +#define OGS_SBI_CUSTOM_NRF_URI \ + OGS_SBI_CUSTOM_3GPP_COMMON "Nrf-Uri" +#define OGS_SBI_CUSTOM_TARGET_NF_ID \ + OGS_SBI_CUSTOM_3GPP_COMMON "Target-Nf-Id" +#define OGS_SBI_CUSTOM_ACCESS_SCOPE \ + OGS_SBI_CUSTOM_3GPP_COMMON "Access-Scope" +#define OGS_SBI_CUSTOM_ACCESS_TOKEN \ + OGS_SBI_CUSTOM_3GPP_COMMON "Access-Token" + +#define OGS_SBI_PARAM_TARGET_NF_TYPE "target-nf-type" +#define OGS_SBI_PARAM_REQUESTER_NF_TYPE "requester-nf-type" +#define OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID "target-nf-instance-id" +#define OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID "requester-nf-instance-id" +#define OGS_SBI_PARAM_SERVICE_NAMES "service-names" + +#define OGS_SBI_PARAM_NF_ID "nf-id" +#define OGS_SBI_PARAM_NF_TYPE "nf-type" +#define OGS_SBI_PARAM_LIMIT "limit" +#define OGS_SBI_PARAM_DNN "dnn" +#define OGS_SBI_PARAM_PLMN_ID "plmn-id" +#define OGS_SBI_PARAM_SINGLE_NSSAI "single-nssai" +#define OGS_SBI_PARAM_SNSSAI "snssai" +#define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \ + "slice-info-request-for-pdu-session" +#define OGS_SBI_PARAM_IPV4ADDR "ipv4Addr" +#define OGS_SBI_PARAM_IPV6PREFIX "ipv6Prefix" + #define OGS_SBI_CONTENT_JSON_TYPE \ OGS_SBI_APPLICATION_TYPE "/" OGS_SBI_APPLICATION_JSON_TYPE #define OGS_SBI_CONTENT_PROBLEM_TYPE \ @@ -322,6 +364,14 @@ ogs_pkbuf_t *pkbuf; } ogs_sbi_part_t; +typedef struct ogs_sbi_discovery_option_s { + char *target_nf_instance_id; + char *requester_nf_instance_id; + + int num_of_service_names; + char *service_namesOGS_MAX_NUM_OF_NF_SERVICE; +} ogs_sbi_discovery_option_t; + typedef struct ogs_sbi_message_s { ogs_sbi_header_t h; @@ -334,8 +384,14 @@ } http; struct { + /* Discovery Parameter */ OpenAPI_nf_type_e target_nf_type; OpenAPI_nf_type_e requester_nf_type; + + /* Discovery Option Parameter */ + ogs_sbi_discovery_option_t *discovery_option; + + /* URL Query Parameter */ char *nf_id; OpenAPI_nf_type_e nf_type; int limit; @@ -373,6 +429,8 @@ OpenAPI_confirmation_data_response_t *ConfirmationDataResponse; OpenAPI_auth_event_t *AuthEvent; OpenAPI_amf3_gpp_access_registration_t *Amf3GppAccessRegistration; + OpenAPI_amf3_gpp_access_registration_modification_t + *Amf3GppAccessRegistrationModification; OpenAPI_access_and_mobility_subscription_data_t *AccessAndMobilitySubscriptionData; OpenAPI_smf_selection_subscription_data_t *SmfSelectionSubscriptionData; @@ -406,6 +464,7 @@ *AppSessionContextUpdateDataPatch; OpenAPI_sm_policy_notification_t *SmPolicyNotification; OpenAPI_termination_notification_t *TerminationNotification; + OpenAPI_deregistration_data_t *DeregistrationData; ogs_sbi_links_t *links; @@ -474,6 +533,22 @@ int ogs_sbi_parse_header(ogs_sbi_message_t *message, ogs_sbi_header_t *header); void ogs_sbi_header_free(ogs_sbi_header_t *h); +void ogs_sbi_http_hash_free(ogs_hash_t *hash); + +ogs_sbi_discovery_option_t *ogs_sbi_discovery_option_new(void); +void ogs_sbi_discovery_option_free( + ogs_sbi_discovery_option_t *discovery_option); + +void ogs_sbi_discovery_option_set_target_nf_instance_id( + ogs_sbi_discovery_option_t *discovery_option, + char *target_nf_instance_id); +void ogs_sbi_discovery_option_set_requester_nf_instance_id( + ogs_sbi_discovery_option_t *discovery_option, + char *requester_nf_instance_id); +void ogs_sbi_discovery_option_add_service_names( + ogs_sbi_discovery_option_t *discovery_option, + char *service_name); + #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/lib/sbi/mhd-server.c -> open5gs_2.4.9.tar.xz/lib/sbi/mhd-server.c
Changed
@@ -35,6 +35,8 @@ int (*cb)(ogs_sbi_request_t *request, void *data)); static void server_stop(ogs_sbi_server_t *server); +static bool server_send_rspmem_persistent( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); static bool server_send_response( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); @@ -47,7 +49,9 @@ server_start, server_stop, + server_send_rspmem_persistent, server_send_response, + server_from_stream, }; @@ -296,7 +300,7 @@ } #endif -static bool server_send_response( +static bool server_send_rspmem_persistent( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) { int ret; @@ -312,10 +316,14 @@ ogs_sbi_request_t *request = NULL; ogs_sbi_session_t *sbi_sess = NULL; - sbi_sess = (ogs_sbi_session_t *)stream; - ogs_assert(sbi_sess); ogs_assert(response); + sbi_sess = ogs_pool_cycle(&session_pool, (ogs_sbi_session_t *)stream); + if (!sbi_sess) { + ogs_error("session has already been removed"); + return true; + } + connection = sbi_sess->connection; ogs_assert(connection); @@ -370,7 +378,6 @@ request = sbi_sess->request; ogs_assert(request); - ogs_sbi_response_free(response); session_remove(sbi_sess); request->poll.write = ogs_pollset_add(ogs_app()->pollset, @@ -387,6 +394,20 @@ return true; } +static bool server_send_response( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) +{ + bool rc; + + ogs_assert(response); + + rc = server_send_rspmem_persistent(stream, response); + + ogs_sbi_response_free(response); + + return rc; +} + static void run(short when, ogs_socket_t fd, void *data) { struct MHD_Daemon *mhd_daemon = data; @@ -539,19 +560,15 @@ sbi_sess = session_add(server, request, connection); ogs_assert(sbi_sess); - if (server->cb) { - if (server->cb(request, sbi_sess) != OGS_OK) { - ogs_warn("server callback error"); - ogs_assert(true == - ogs_sbi_server_send_error((ogs_sbi_stream_t *)sbi_sess, - OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR, NULL, - "server callback error", NULL)); + ogs_assert(server->cb); + if (server->cb(request, sbi_sess) != OGS_OK) { + ogs_error("server callback error"); + ogs_assert(true == + ogs_sbi_server_send_error((ogs_sbi_stream_t *)sbi_sess, + OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR, NULL, + "server callback error", NULL)); - return MHD_YES; - } - } else { - ogs_fatal("server callback is not registered"); - ogs_assert_if_reached(); + return MHD_YES; } return MHD_YES;
View file
open5gs_2.4.8.tar.xz/lib/sbi/nghttp2-server.c -> open5gs_2.4.9.tar.xz/lib/sbi/nghttp2-server.c
Changed
@@ -33,10 +33,12 @@ int (*cb)(ogs_sbi_request_t *request, void *data)); static void server_stop(ogs_sbi_server_t *server); +static bool server_send_rspmem_persistent( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); static bool server_send_response( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); -static ogs_sbi_server_t *server_from_stream(ogs_sbi_stream_t *data); +static ogs_sbi_server_t *server_from_stream(ogs_sbi_stream_t *stream); const ogs_sbi_server_actions_t ogs_nghttp2_server_actions = { server_init, @@ -45,7 +47,9 @@ server_start, server_stop, + server_send_rspmem_persistent, server_send_response, + server_from_stream, }; @@ -284,7 +288,7 @@ return response->http.content_length; } -static bool server_send_response( +static bool server_send_rspmem_persistent( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) { ogs_sbi_session_t *sbi_sess = NULL; @@ -299,11 +303,17 @@ char srv_version128; char clen128; - ogs_assert(stream); + ogs_assert(response); + + stream = ogs_pool_cycle(&stream_pool, stream); + if (!stream) { + ogs_error("stream has already been removed"); + return true; + } + sbi_sess = stream->session; ogs_assert(sbi_sess); ogs_assert(sbi_sess->session); - ogs_assert(response); sock = sbi_sess->sock; ogs_assert(sock); @@ -375,12 +385,25 @@ session_remove(sbi_sess); } - ogs_sbi_response_free(response); ogs_free(nva); return true; } +static bool server_send_response( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) +{ + bool rc; + + ogs_assert(response); + + rc = server_send_rspmem_persistent(stream, response); + + ogs_sbi_response_free(response); + + return rc; +} + static ogs_sbi_server_t *server_from_stream(ogs_sbi_stream_t *stream) { ogs_sbi_session_t *sbi_sess = NULL; @@ -412,6 +435,8 @@ stream->session = sbi_sess; + ogs_list_add(&sbi_sess->stream_list, stream); + return stream; } @@ -477,6 +502,7 @@ ogs_list_remove(&server->session_list, sbi_sess); stream_remove_all(sbi_sess); + nghttp2_session_del(sbi_sess->session); ogs_assert(sbi_sess->poll.read); ogs_pollset_remove(sbi_sess->poll.read);
View file
open5gs_2.4.8.tar.xz/lib/sbi/nnrf-build.c -> open5gs_2.4.9.tar.xz/lib/sbi/nnrf-build.c
Changed
@@ -20,9 +20,9 @@ #include "ogs-sbi.h" #include "ogs-app.h" -OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile( - ogs_sbi_nf_instance_t *nf_instance) +OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; ogs_sbi_nf_service_t *nf_service = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; @@ -39,7 +39,9 @@ char *ipstr = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); + ogs_assert(nf_instance->id); NFProfile = ogs_calloc(1, sizeof(*NFProfile)); ogs_expect_or_return_val(NFProfile, NULL); @@ -331,15 +333,19 @@ ogs_free(NFProfile); } -ogs_sbi_request_t *ogs_nnrf_nfm_build_update(ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *ogs_nnrf_nfm_build_update(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; OpenAPI_list_t *PatchItemList; OpenAPI_patch_item_t item; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PATCH; @@ -347,7 +353,8 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; + message.http.content_type = (char *)OGS_SBI_CONTENT_PATCH_TYPE; PatchItemList = OpenAPI_list_create(); @@ -372,13 +379,16 @@ return request; } -ogs_sbi_request_t *ogs_nnrf_nfm_build_de_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *ogs_nnrf_nfm_build_de_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_DELETE; @@ -470,8 +480,29 @@ return request; } +ogs_sbi_request_t *ogs_nnrf_nfm_build_profile_retrieve(char *nf_instance_id) +{ + ogs_sbi_message_t message; + ogs_sbi_request_t *request = NULL; + + ogs_assert(nf_instance_id); + + memset(&message, 0, sizeof(message)); + message.h.method = (char *)OGS_SBI_HTTP_METHOD_GET; + message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NNRF_NFM; + message.h.api.version = (char *)OGS_SBI_API_V1; + message.h.resource.component0 = + (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; + message.h.resource.component1 = nf_instance_id; + + request = ogs_sbi_build_request(&message); + + return request; +} + ogs_sbi_request_t *ogs_nnrf_disc_build_discover( - OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type) + OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option) { ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; @@ -489,6 +520,8 @@ message.param.target_nf_type = target_nf_type; message.param.requester_nf_type = requester_nf_type; + message.param.discovery_option = discovery_option; + request = ogs_sbi_build_request(&message); return request;
View file
open5gs_2.4.8.tar.xz/lib/sbi/nnrf-build.h -> open5gs_2.4.9.tar.xz/lib/sbi/nnrf-build.h
Changed
@@ -24,22 +24,21 @@ extern "C" { #endif -OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile( - ogs_sbi_nf_instance_t *nf_instance); +OpenAPI_nf_profile_t *ogs_nnrf_nfm_build_nf_profile(void); void ogs_sbi_nnrf_free_nf_profile(OpenAPI_nf_profile_t *NFProfile); -ogs_sbi_request_t *ogs_nnrf_nfm_build_update( - ogs_sbi_nf_instance_t *nf_instance); -ogs_sbi_request_t *ogs_nnrf_nfm_build_de_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *ogs_nnrf_nfm_build_update(void); +ogs_sbi_request_t *ogs_nnrf_nfm_build_de_register(void); ogs_sbi_request_t *ogs_nnrf_nfm_build_status_subscribe( ogs_sbi_subscription_t *subscription); ogs_sbi_request_t *ogs_nnrf_nfm_build_status_unsubscribe( ogs_sbi_subscription_t *subscription); +ogs_sbi_request_t *ogs_nnrf_nfm_build_profile_retrieve(char *nf_instance_id); ogs_sbi_request_t *ogs_nnrf_disc_build_discover( - OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type); + OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/lib/sbi/ogs-sbi.h -> open5gs_2.4.9.tar.xz/lib/sbi/ogs-sbi.h
Changed
@@ -42,6 +42,7 @@ #include "model/confirmation_data_response.h" #include "model/auth_event.h" #include "model/amf3_gpp_access_registration.h" +#include "model/amf3_gpp_access_registration_modification.h" #include "model/access_and_mobility_subscription_data.h" #include "model/smf_selection_subscription_data.h" #include "model/ue_context_in_smf_data.h" @@ -72,6 +73,7 @@ #include "model/policy_update.h" #include "model/sm_policy_notification.h" #include "model/termination_notification.h" +#include "model/deregistration_data.h" #include "custom/links.h" #include "custom/ue_authentication_ctx.h"
View file
open5gs_2.4.8.tar.xz/lib/sbi/path.c -> open5gs_2.4.9.tar.xz/lib/sbi/path.c
Changed
@@ -20,7 +20,7 @@ #include "ogs-sbi.h" #include "ogs-app.h" -bool ogs_sbi_send(ogs_sbi_nf_instance_t *nf_instance, +bool ogs_sbi_send_request(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_client_cb_f client_cb, ogs_sbi_xact_t *xact) { ogs_sbi_request_t *request = NULL; @@ -39,7 +39,8 @@ client = ogs_sbi_client_find_by_service_name(nf_instance, request->h.service.name, request->h.api.version); if (!client) { - ogs_error("%s Cannot find client %s:%s", + ogs_error("%s:%s Cannot find client %s:%s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, request->h.service.name, request->h.api.version); return false; @@ -50,12 +51,16 @@ addr = ogs_sbi_getaddr_from_uri(request->h.uri); if (!addr) { - ogs_error("%s Invalid URL %s", nf_instance->id, request->h.uri); + ogs_error("%s:%s Invalid URL %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id, request->h.uri); return false; } client = ogs_sbi_client_find(addr); if (!client) { - ogs_error("%s Cannot find client %s:%d", nf_instance->id, + ogs_error("%s:%s Cannot find client %s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id, OGS_ADDR(addr, buf), OGS_PORT(addr)); ogs_freeaddrinfo(addr); return false; @@ -63,62 +68,79 @@ ogs_freeaddrinfo(addr); } + /* ogs_sbi_xact_remove() will call ogs_sbi_request_free() + * As such, we'll use ogs_sbi_client_send_reqmem_persistent() */ ogs_expect_or_return_val(true == - ogs_sbi_client_send_request( + ogs_sbi_scp_send_reqmem_persistent( client, client_cb, request, xact), false); - /* Prevent ogs_sbi_request_free() in ogs_sbi_xact_remove() */ - xact->request = NULL; - return true; } -bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact, - ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb) +bool ogs_sbi_discover_and_send( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_client_cb_f client_cb, void *data) { ogs_sbi_nf_instance_t *nf_instance = NULL; - ogs_assert(xact); - ogs_assert(xact->sbi_object); - ogs_assert(xact->target_nf_type); - ogs_assert(nf_state_registered); + ogs_assert(sbi_object); + ogs_assert(target_nf_type); + ogs_assert(requester_nf_type); ogs_assert(client_cb); /* Target NF-Instance */ - nf_instance = OGS_SBI_NF_INSTANCE(xact->sbi_object, xact->target_nf_type); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); if (!nf_instance) { - ogs_assert(xact->target_nf_type != OpenAPI_nf_type_NRF); - ogs_sbi_select_first_nf( - xact->sbi_object, xact->target_nf_type, nf_state_registered); - nf_instance = OGS_SBI_NF_INSTANCE( - xact->sbi_object, xact->target_nf_type); + ogs_assert(target_nf_type != OpenAPI_nf_type_NRF); + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); } if (nf_instance) { - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } /* NRF NF-Instance */ - nf_instance = OGS_SBI_NF_INSTANCE(xact->sbi_object, OpenAPI_nf_type_NRF); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, OpenAPI_nf_type_NRF); if (!nf_instance) { - ogs_sbi_select_nrf(xact->sbi_object, nf_state_registered); - nf_instance = OGS_SBI_NF_INSTANCE( - xact->sbi_object, OpenAPI_nf_type_NRF); + ogs_sbi_select_nf(sbi_object, OpenAPI_nf_type_NRF, NULL); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, OpenAPI_nf_type_NRF); } if (nf_instance) { ogs_warn("Try to discover %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); + OpenAPI_nf_type_ToString(target_nf_type)); return ogs_nnrf_disc_send_nf_discover( - nf_instance, xact->target_nf_type, xact); + nf_instance, + target_nf_type, requester_nf_type, discovery_option, + data); } - ogs_error("Cannot discover %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); + ogs_error("Cannot discover %s", OpenAPI_nf_type_ToString(target_nf_type)); return false; } +bool ogs_nnrf_nfm_send_nf_register( + ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_request_t *(*build)(void)) +{ + ogs_sbi_request_t *request = NULL; + ogs_sbi_client_t *client = NULL; + + ogs_assert(nf_instance); + client = nf_instance->client; + ogs_assert(client); + ogs_assert(build); + + request = (*build)(); + ogs_expect_or_return_val(request, false); + + return ogs_sbi_scp_send_request(client, client->cb, request, nf_instance); +} + bool ogs_nnrf_nfm_send_nf_update(ogs_sbi_nf_instance_t *nf_instance) { ogs_sbi_request_t *request = NULL; @@ -128,11 +150,10 @@ client = nf_instance->client; ogs_assert(client); - request = ogs_nnrf_nfm_build_update(nf_instance); + request = ogs_nnrf_nfm_build_update(); ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); + return ogs_sbi_scp_send_request(client, client->cb, request, nf_instance); } bool ogs_nnrf_nfm_send_nf_de_register(ogs_sbi_nf_instance_t *nf_instance) @@ -144,11 +165,28 @@ client = nf_instance->client; ogs_assert(client); - request = ogs_nnrf_nfm_build_de_register(nf_instance); + request = ogs_nnrf_nfm_build_de_register(); + ogs_expect_or_return_val(request, false); + + return ogs_sbi_scp_send_request(client, client->cb, request, nf_instance); +} + +bool ogs_nnrf_nfm_send_nf_profile_retrieve(ogs_sbi_nf_instance_t *nf_instance, + char *nf_instance_id, void *data) +{ + ogs_sbi_request_t *request = NULL; + ogs_sbi_client_t *client = NULL; + + ogs_assert(nf_instance); + client = nf_instance->client; + ogs_assert(client); + ogs_assert(nf_instance_id); + + request = ogs_nnrf_nfm_build_profile_retrieve(nf_instance_id); ogs_expect_or_return_val(request, false); return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); + client, client->cb, request, data); } bool ogs_nnrf_nfm_send_nf_status_subscribe(ogs_sbi_client_t *client, @@ -174,7 +212,7 @@ request = ogs_nnrf_nfm_build_status_subscribe(subscription); ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request( + return ogs_sbi_scp_send_request( client, client->cb, request, subscription); } @@ -185,31 +223,38 @@ ogs_sbi_client_t *client = NULL; ogs_assert(subscription); - client = subscription->client; - ogs_assert(client); request = ogs_nnrf_nfm_build_status_unsubscribe(subscription); ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request( + client = subscription->client; + ogs_assert(client); + + return ogs_sbi_scp_send_request( client, client->cb, request, subscription); } -bool ogs_nnrf_disc_send_nf_discover(ogs_sbi_nf_instance_t *nf_instance, - OpenAPI_nf_type_e target_nf_type, void *data) +bool ogs_nnrf_disc_send_nf_discover( + ogs_sbi_nf_instance_t *nf_instance, + OpenAPI_nf_type_e target_nf_type, + OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + void *data) { ogs_sbi_client_t *client = NULL; ogs_sbi_request_t *request = NULL; ogs_assert(nf_instance); - ogs_assert(nf_instance->nf_type); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(target_nf_type); + ogs_assert(requester_nf_type); request = ogs_nnrf_disc_build_discover( - target_nf_type, nf_instance->nf_type); + target_nf_type, requester_nf_type, discovery_option); ogs_expect_or_return_val(request, false); + client = nf_instance->client; + ogs_assert(client); + return ogs_sbi_client_send_request(client, client->cb, request, data); }
View file
open5gs_2.4.8.tar.xz/lib/sbi/path.h -> open5gs_2.4.9.tar.xz/lib/sbi/path.h
Changed
@@ -26,13 +26,21 @@ extern "C" { #endif -bool ogs_sbi_send(ogs_sbi_nf_instance_t *nf_instance, +bool ogs_sbi_send_request(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_client_cb_f client_cb, ogs_sbi_xact_t *xact); -bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact, - ogs_fsm_handler_t nf_state_registered, ogs_sbi_client_cb_f client_cb); +bool ogs_sbi_discover_and_send( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_client_cb_f client_cb, void *data); +bool ogs_nnrf_nfm_send_nf_register( + ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_request_t *(*build)(void)); bool ogs_nnrf_nfm_send_nf_update(ogs_sbi_nf_instance_t *nf_instance); bool ogs_nnrf_nfm_send_nf_de_register(ogs_sbi_nf_instance_t *nf_instance); +bool ogs_nnrf_nfm_send_nf_profile_retrieve(ogs_sbi_nf_instance_t *nf_instance, + char *nf_instance_id, void *data); bool ogs_nnrf_nfm_send_nf_status_subscribe(ogs_sbi_client_t *client, OpenAPI_nf_type_e req_nf_type, char *req_nf_instance_id, @@ -40,8 +48,12 @@ bool ogs_nnrf_nfm_send_nf_status_unsubscribe( ogs_sbi_subscription_t *subscription); -bool ogs_nnrf_disc_send_nf_discover(ogs_sbi_nf_instance_t *nf_instance, - OpenAPI_nf_type_e target_nf_type, void *data); +bool ogs_nnrf_disc_send_nf_discover( + ogs_sbi_nf_instance_t *nf_instance, + OpenAPI_nf_type_e target_nf_type, + OpenAPI_nf_type_e requester_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + void *data); #define ogs_sbi_send_http_status_no_content(__sTREAM) \ ogs_sbi_send_response(__sTREAM, OGS_SBI_HTTP_STATUS_NO_CONTENT)
View file
open5gs_2.4.8.tar.xz/lib/sbi/server.c -> open5gs_2.4.9.tar.xz/lib/sbi/server.c
Changed
@@ -133,6 +133,12 @@ ogs_sbi_server_actions.stop(server); } +bool ogs_sbi_server_send_rspmem_persistent( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) +{ + return ogs_sbi_server_actions.send_rspmem_persistent(stream, response); +} + bool ogs_sbi_server_send_response( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response) {
View file
open5gs_2.4.8.tar.xz/lib/sbi/server.h -> open5gs_2.4.9.tar.xz/lib/sbi/server.h
Changed
@@ -53,6 +53,8 @@ int (*cb)(ogs_sbi_request_t *request, void *data)); void (*stop)(ogs_sbi_server_t *server); + bool (*send_rspmem_persistent)( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); bool (*send_response)( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); @@ -74,6 +76,8 @@ int (*cb)(ogs_sbi_request_t *request, void *data)); void ogs_sbi_server_stop_all(void); +bool ogs_sbi_server_send_rspmem_persistent( + ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); bool ogs_sbi_server_send_response( ogs_sbi_stream_t *stream, ogs_sbi_response_t *response); bool ogs_sbi_server_send_error(ogs_sbi_stream_t *stream,
View file
open5gs_2.4.8.tar.xz/meson.build -> open5gs_2.4.9.tar.xz/meson.build
Changed
@@ -16,7 +16,7 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. project('open5gs', 'c', 'cpp', - version : '2.4.8', + version : '2.4.9', license : 'AGPL-3.0-or-later', meson_version : '>= 0.43.0', default_options : @@ -24,7 +24,7 @@ , ) -libogslib_version = '2.4.8' +libogslib_version = '2.4.9' prefix = get_option('prefix') bindir = join_paths(prefix, get_option('bindir')) @@ -42,6 +42,12 @@ python3_exe = join_paths(python3.path()) mkdir_p = 'import os; os.makedirs("@0@", exist_ok=True) if not os.environ.get("DESTDIR") else False;' install_conf = 'import os; import shutil; shutil.copy("@0@", "@1@") if not os.environ.get("DESTDIR") and not os.path.isfile(os.path.join("@1@", os.path.split("@0@")1)) else False;' +cppcheck = find_program('cppcheck', required: false) +clangtidy = find_program('run-clang-tidy', required: false) # requires clang-tools package +if clangtidy.found() != true + clangtidy = find_program('clang-tidy', required: false) +endif + meson.add_install_script(python3_exe, '-c', mkdir_p.format(join_paths(localstatedir, 'log', 'open5gs'))) @@ -131,3 +137,24 @@ ' debugging support: ' + get_option('buildtype'), '', )) + + +if cppcheck.found() + run_target('analyze-cppcheck', + command : 'misc/static_code_analyze.sh', + cppcheck.path(), + meson.build_root(), + meson.source_root() + + ) +endif + +if clangtidy.found() + run_target('analyze-clang-tidy', + command : 'misc/static_code_analyze.sh', + clangtidy.path(), + meson.build_root(), + meson.source_root() + + ) +endif
View file
open5gs_2.4.8.tar.xz/misc/db/open5gs-dbctl -> open5gs_2.4.9.tar.xz/misc/db/open5gs-dbctl
Changed
@@ -21,6 +21,10 @@ echo " add_ue_with_slice {imsi key opc apn sst sd}: adds a user to the database with a specific apn, sst and sd" echo " update_apn {imsi apn slice_num}: adds an APN to the slice number slice_num of an existent UE" echo " update_slice {imsi apn sst sd}: adds an slice to an existent UE" + echo " showall: shows the list of subscriber in the db" + echo " showpretty: shows the list of subscriber in the db in a pretty json tree format" + echo " showfiltered: shows {imsi key opc apn ip} information of subscriber" + } @@ -673,5 +677,20 @@ echo "open5gs-dbctl: incorrect number of args, format is \"open5gs-dbctl update_slice imsi apn sst sd\"" exit 1 fi +if "$1" = "showall" ; then + mongo --eval "db.subscribers.find()" $DB_URI + exit $? +fi +if "$1" = "showpretty" ; then + mongo --eval "db.subscribers.find().pretty()" $DB_URI + exit $? +fi +if "$1" = "showfiltered" ; then + mongo --eval "db.subscribers.find({},{'_id':0,'imsi':1,'security.k':1, 'security.opc':1,'slice.session.name':1,'slice.session.ue.addr':1})" $DB_URI + exit $? +fi + echo "open5gs-dbctl: incorrect number of args, format is \"open5gs-dbctl add imsi key opc\"" + exit 1 +fi display_help
View file
open5gs_2.4.8.tar.xz/misc/ipv6_netconf.sh -> open5gs_2.4.9.tar.xz/misc/ipv6_netconf.sh
Changed
@@ -31,6 +31,7 @@ ip addr del fd69:f21d:873c:fa::18 dev lo 2> /dev/null ip addr del fd69:f21d:873c:fa::19 dev lo 2> /dev/null ip addr del fd69:f21d:873c:fa::20 dev lo 2> /dev/null + ip addr del fd69:f21d:873c:fb::10 dev lo 2> /dev/null ip addr add fd69:f21d:873c:fa::1 dev lo ip addr add fd69:f21d:873c:fa::2 dev lo ip addr add fd69:f21d:873c:fa::3 dev lo @@ -51,11 +52,8 @@ ip addr add fd69:f21d:873c:fa::18 dev lo ip addr add fd69:f21d:873c:fa::19 dev lo ip addr add fd69:f21d:873c:fa::20 dev lo + ip addr add fd69:f21d:873c:fb::10 dev lo else - ifconfig lo0 alias 127.0.0.2 netmask 255.255.255.255 - ifconfig lo0 alias 127.0.0.3 netmask 255.255.255.255 - ifconfig lo0 alias 127.0.0.4 netmask 255.255.255.255 - ifconfig lo0 alias 127.0.0.5 netmask 255.255.255.255 sysctl -w net.inet.ip.forwarding=1 sysctl -w net.inet6.ip6.forwarding=1 ifconfig lo0 alias 127.0.0.2 netmask 255.255.255.255 @@ -77,6 +75,7 @@ ifconfig lo0 alias 127.0.0.18 netmask 255.255.255.255 ifconfig lo0 alias 127.0.0.19 netmask 255.255.255.255 ifconfig lo0 alias 127.0.0.20 netmask 255.255.255.255 + ifconfig lo0 alias 127.0.1.10 netmask 255.255.255.255 ifconfig lo0 inet6 delete fd69:f21d:873c:fa::1 prefixlen 128 2> /dev/null ifconfig lo0 inet6 delete fd69:f21d:873c:fa::2 prefixlen 128 2> /dev/null ifconfig lo0 inet6 delete fd69:f21d:873c:fa::3 prefixlen 128 2> /dev/null @@ -97,6 +96,7 @@ ifconfig lo0 inet6 delete fd69:f21d:873c:fa::18 prefixlen 128 2> /dev/null ifconfig lo0 inet6 delete fd69:f21d:873c:fa::19 prefixlen 128 2> /dev/null ifconfig lo0 inet6 delete fd69:f21d:873c:fa::20 prefixlen 128 2> /dev/null + ifconfig lo0 inet6 delete fd69:f21d:873c:fb::10 prefixlen 128 2> /dev/null ifconfig lo0 inet6 add fd69:f21d:873c:fa::1 prefixlen 128 ifconfig lo0 inet6 add fd69:f21d:873c:fa::2 prefixlen 128 ifconfig lo0 inet6 add fd69:f21d:873c:fa::3 prefixlen 128 @@ -117,6 +117,7 @@ ifconfig lo0 inet6 add fd69:f21d:873c:fa::18 prefixlen 128 ifconfig lo0 inet6 add fd69:f21d:873c:fa::19 prefixlen 128 ifconfig lo0 inet6 add fd69:f21d:873c:fa::20 prefixlen 128 + ifconfig lo0 inet6 add fd69:f21d:873c:fb::10 prefixlen 128 if "$SYSTEM" = "Darwin" ; then if ! test -f /etc/pf.anchors/org.open5gs; then sudo sh -c "echo 'nat on {en0} from 10.45.0.0/16 to any -> {en0}' > /etc/pf.anchors/org.open5gs"
View file
open5gs_2.4.8.tar.xz/misc/netconf.sh -> open5gs_2.4.9.tar.xz/misc/netconf.sh
Changed
@@ -37,6 +37,7 @@ ifconfig lo0 alias 127.0.0.18 netmask 255.255.255.255 ifconfig lo0 alias 127.0.0.19 netmask 255.255.255.255 ifconfig lo0 alias 127.0.0.20 netmask 255.255.255.255 + ifconfig lo0 alias 127.0.1.10 netmask 255.255.255.255 if "$SYSTEM" = "Darwin" ; then if ! test -f /etc/pf.anchors/org.open5gs; then sudo sh -c "echo 'nat on {en0} from 10.45.0.0/16 to any -> {en0}' > /etc/pf.anchors/org.open5gs"
View file
open5gs_2.4.9.tar.xz/misc/static_code_analyze.sh
Added
@@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +ANALYZE_TOOL="${1}" && shift +BUILD_DIR="${1}" && shift +SOURCES_DIR="${1}" && shift + +SOURCES=$(find ${SOURCES_DIR}/src ${SOURCES_DIR}/lib -not -path *asn1c* -not -path *ipfw* -name *.c) +#SOURCES=$(find ${SOURCES_DIR}/src ${SOURCES_DIR}/lib ${SOURCES_DIR}/subprojects -name *.c) + +if ${ANALYZE_TOOL} == *"clang-tidy"* ; +then + if ${ANALYZE_TOOL} == *"run-clang-tidy"* ; then + OPTS="${OPTS} -j $(nproc)" + fi + + OPTS="${OPTS} -quiet" + OPTS="${OPTS} -p=${BUILD_DIR}" + + ${ANALYZE_TOOL} ${OPTS} ${SOURCES} 2>/dev/null + +elif ${ANALYZE_TOOL} == *"cppcheck"* ; +then + OPTS="${OPTS} -j $(nproc)" +# OPTS="${OPTS} --quiet" + OPTS="${OPTS} --verbose" + OPTS="${OPTS} --enable=all" + OPTS="${OPTS} --verbose" + OPTS="${OPTS} --suppress=variableScope" + OPTS="${OPTS} --suppress=preprocessorErrorDirective" + OPTS="${OPTS} --suppress=unusedVariable" + OPTS="${OPTS} --output-file=cppchecklog.log" + OPTS="${OPTS} --cppcheck-build-dir=${BUILD_DIR}/cppcheck" + OPTS="${OPTS} --project=${BUILD_DIR}/compile_commands.json" + + ${ANALYZE_TOOL} ${OPTS} ${SOURCES} + +else + echo "Unknown static code analysis tool: ${ANALYZE_TOOL}" + exit 1 +fi
View file
open5gs_2.4.8.tar.xz/src/amf/amf-sm.c -> open5gs_2.4.9.tar.xz/src/amf/amf-sm.c
Changed
@@ -209,11 +209,10 @@ stream, &sbi_message); break; - /* TODO */ -#if 0 CASE(OGS_SBI_RESOURCE_NAME_DEREG_NOTIFY) + amf_namf_callback_handle_dereg_notify(stream, &sbi_message); break; -#endif + CASE(OGS_SBI_RESOURCE_NAME_AM_POLICY_NOTIFY) ogs_assert(true == ogs_sbi_send_http_status_no_content(stream)); break; @@ -358,6 +357,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + amf_ue = (amf_ue_t *)sbi_xact->sbi_object; ogs_assert(amf_ue); @@ -381,6 +388,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + state = sbi_xact->state; ogs_sbi_xact_remove(sbi_xact); @@ -490,6 +505,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + sess = (amf_sess_t *)sbi_xact->sbi_object; ogs_assert(sess); @@ -498,7 +521,10 @@ ogs_sbi_xact_remove(sbi_xact); sess = amf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } amf_ue = sess->amf_ue; ogs_assert(amf_ue); @@ -537,7 +563,8 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, amf_nf_state_exception)) - ogs_error("%s State machine exception %d", + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, e->timer_id); break; @@ -545,9 +572,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - amf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id); @@ -572,8 +601,14 @@ case OGS_SBI_OBJ_UE_TYPE: amf_ue = (amf_ue_t *)sbi_object; ogs_assert(amf_ue); + amf_ue = amf_ue_cycle(amf_ue); + if (!amf_ue) { + ogs_error("UE(amf_ue) Context has already been removed"); + break; + } + ogs_error("%s Cannot receive SBI message", amf_ue->suci); - ogs_assert(OGS_OK == + ogs_expect(OGS_OK == nas_5gs_send_gmm_reject_from_sbi(amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); break; @@ -581,15 +616,21 @@ case OGS_SBI_OBJ_SESS_TYPE: sess = (amf_sess_t *)sbi_object; ogs_assert(sess); + sess = amf_sess_cycle(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } + ogs_error("%d:%d Cannot receive SBI message", sess->psi, sess->pti); if (sess->payload_container_type) { - ogs_assert(OGS_OK == + ogs_expect(OGS_OK == nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); } else { - ogs_assert(OGS_OK == + ogs_expect(OGS_OK == ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_transport, NGAP_CauseTransport_transport_resource_unavailable) @@ -808,7 +849,7 @@ /* De-associate NG with NAS/EMM */ ran_ue_deassociate(amf_ue->ran_ue); - ogs_assert(OGS_OK == + ogs_expect(OGS_OK == ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0));
View file
open5gs_2.4.8.tar.xz/src/amf/context.c -> open5gs_2.4.9.tar.xz/src/amf/context.c
Changed
@@ -114,8 +114,6 @@ static int amf_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_AMF; - self.relative_capacity = 0xff; self.ngap_port = OGS_NGAP_SCTP_PORT; @@ -799,6 +797,7 @@ } network_full_name->length = size*2+1; network_full_name->coding_scheme = 1; + network_full_name->ext = 1; } else if (!strcmp(network_name_key, "short")) { ogs_nas_network_name_t *network_short_name = &self.short_name; @@ -815,6 +814,7 @@ } network_short_name->length = size*2+1; network_short_name->coding_scheme = 1; + network_short_name->ext = 1; } } } else if (!strcmp(amf_key, "amf_name")) { @@ -955,6 +955,11 @@ return SOCK_STREAM; } +amf_gnb_t *amf_gnb_cycle(amf_gnb_t *gnb) +{ + return ogs_pool_cycle(&amf_gnb_pool, gnb); +} + /** ran_ue_context handling function */ ran_ue_t *ran_ue_add(amf_gnb_t *gnb, uint32_t ran_ue_ngap_id) { @@ -1475,7 +1480,7 @@ mobile_identity_header->type); } break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: deregistration_request = &message->gmm.deregistration_request_from_ue; ogs_assert(deregistration_request); mobile_identity = &deregistration_request->mobile_identity; @@ -1775,45 +1780,46 @@ return ogs_pool_cycle(&amf_sess_pool, sess); } -void amf_ue_select_nf(amf_ue_t *amf_ue, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(amf_ue); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&amf_ue->sbi, amf_nf_state_registered); - else - ogs_sbi_select_first_nf(&amf_ue->sbi, nf_type, amf_nf_state_registered); -} - -void amf_sess_select_nf(amf_sess_t *sess, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(sess); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&sess->sbi, amf_nf_state_registered); - else if (nf_type == OpenAPI_nf_type_SMF) - amf_sess_select_smf(sess); - else - ogs_sbi_select_first_nf(&sess->sbi, nf_type, amf_nf_state_registered); -} - static bool check_smf_info(amf_sess_t *sess, ogs_list_t *nf_info_list); -void amf_sess_select_smf(amf_sess_t *sess) +void amf_sbi_select_nf( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option) { ogs_sbi_nf_instance_t *nf_instance = NULL; + amf_sess_t *sess = NULL; - ogs_assert(sess); + ogs_assert(ogs_sbi_self()->nf_state_registered); + ogs_assert(sbi_object); + ogs_assert(target_nf_type); + + switch(sbi_object->type) { + case OGS_SBI_OBJ_UE_TYPE: + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + break; + case OGS_SBI_OBJ_SESS_TYPE: + sess = (amf_sess_t *)sbi_object; + ogs_assert(sess); + + ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { + if (ogs_sbi_discovery_param_is_matched( + nf_instance, target_nf_type, discovery_option) == false) + continue; + + if (target_nf_type == OpenAPI_nf_type_SMF) { + if (check_smf_info(sess, &nf_instance->nf_info_list) == false) + continue; + } - ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - if (OGS_FSM_CHECK(&nf_instance->sm, amf_nf_state_registered) && - nf_instance->nf_type == OpenAPI_nf_type_SMF && - check_smf_info(sess, &nf_instance->nf_info_list) == true) { - OGS_SBI_SETUP_NF(&sess->sbi, OpenAPI_nf_type_SMF, nf_instance); + OGS_SBI_SETUP_NF(sbi_object, target_nf_type, nf_instance); break; } + break; + default: + ogs_fatal("(NF discover search result) Not implemented %d", + sbi_object->type); + ogs_assert_if_reached(); } } @@ -2062,7 +2068,9 @@ ogs_assert(amf_ue); + ogs_assert(amf_ue->num_of_slice <= OGS_MAX_NUM_OF_SLICE); for (i = 0; i < amf_ue->num_of_slice; i++) { + ogs_assert(amf_ue->slicei.num_of_session <= OGS_MAX_NUM_OF_SESS); for (j = 0; j < amf_ue->slicei.num_of_session; j++) { ogs_assert(amf_ue->slicei.sessionj.name); ogs_free(amf_ue->slicei.sessionj.name);
View file
open5gs_2.4.8.tar.xz/src/amf/context.h -> open5gs_2.4.9.tar.xz/src/amf/context.h
Changed
@@ -48,8 +48,6 @@ typedef uint32_t amf_m_tmsi_t; typedef struct amf_context_s { - OpenAPI_nf_type_e nf_type; - /* Served GUAMI */ uint8_t num_of_served_guami; ogs_guami_t served_guamiMAX_NUM_OF_SERVED_GUAMI; @@ -410,6 +408,9 @@ long cause; } handover; + /* Network Initiated De-Registration */ + bool network_initiated_de_reg; + ogs_list_t sess_list; }; @@ -636,6 +637,7 @@ amf_gnb_t *amf_gnb_find_by_gnb_id(uint32_t gnb_id); int amf_gnb_set_gnb_id(amf_gnb_t *gnb, uint32_t gnb_id); int amf_gnb_sock_type(ogs_sock_t *sock); +amf_gnb_t *amf_gnb_cycle(amf_gnb_t *gnb); ran_ue_t *ran_ue_add(amf_gnb_t *gnb, uint32_t ran_ue_ngap_id); void ran_ue_remove(ran_ue_t *ran_ue); @@ -750,10 +752,10 @@ amf_ue_t *amf_ue_cycle(amf_ue_t *amf_ue); amf_sess_t *amf_sess_cycle(amf_sess_t *sess); -void amf_ue_select_nf(amf_ue_t *amf_ue, OpenAPI_nf_type_e nf_type); -void amf_sess_select_nf(amf_sess_t *sess, OpenAPI_nf_type_e nf_type); - -void amf_sess_select_smf(amf_sess_t *sess); +void amf_sbi_select_nf( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option); #define AMF_SESSION_SYNC_DONE(__aMF, __sTATE) \ (amf_sess_xact_state_count(__aMF, __sTATE) == 0)
View file
open5gs_2.4.8.tar.xz/src/amf/event.c -> open5gs_2.4.9.tar.xz/src/amf/event.c
Changed
@@ -21,23 +21,28 @@ #include "context.h" static OGS_POOL(pool, amf_event_t); +static ogs_thread_mutex_t amf_event_alloc_mutex; void amf_event_init(void) { ogs_pool_init(&pool, ogs_app()->pool.event); + ogs_thread_mutex_init(&amf_event_alloc_mutex); } void amf_event_final(void) { ogs_pool_final(&pool); + ogs_thread_mutex_destroy(&amf_event_alloc_mutex); } amf_event_t *amf_event_new(amf_event_e id) { amf_event_t *e = NULL; + ogs_thread_mutex_lock(&amf_event_alloc_mutex); ogs_pool_alloc(&pool, &e); - if (!e) return NULL; + ogs_thread_mutex_unlock(&amf_event_alloc_mutex); + ogs_assert(e); memset(e, 0, sizeof(*e)); e->id = id; @@ -48,7 +53,9 @@ void amf_event_free(amf_event_t *e) { ogs_assert(e); + ogs_thread_mutex_lock(&amf_event_alloc_mutex); ogs_pool_free(&pool, e); + ogs_thread_mutex_unlock(&amf_event_alloc_mutex); } const char *amf_event_get_name(amf_event_t *e) @@ -119,7 +126,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_free(e->ngap.addr); if (e->pkbuf) ogs_pkbuf_free(e->pkbuf);
View file
open5gs_2.4.8.tar.xz/src/amf/gmm-build.c -> open5gs_2.4.9.tar.xz/src/amf/gmm-build.c
Changed
@@ -271,7 +271,36 @@ message.gmm.h.extended_protocol_discriminator = OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; - message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_ACCEPT; + message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_ACCEPT_FROM_UE; + + return nas_5gs_security_encode(amf_ue, &message); +} + +ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue) +{ + ogs_nas_5gs_message_t message; + ogs_nas_5gs_deregistration_request_to_ue_t *dereg_req = + &message.gmm.deregistration_request_to_ue; + + ogs_assert(amf_ue); + + memset(&message, 0, sizeof(message)); + message.h.security_header_type = + OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; + message.h.extended_protocol_discriminator = + OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; + + message.gmm.h.extended_protocol_discriminator = + OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; + message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE; + + dereg_req->de_registration_type.switch_off = 1; + dereg_req->de_registration_type.re_registration_required = 0; + dereg_req->de_registration_type.access_type = OGS_ACCESS_TYPE_3GPP; + + dereg_req->presencemask |= + OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT; + dereg_req->gmm_cause = OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED; return nas_5gs_security_encode(amf_ue, &message); }
View file
open5gs_2.4.8.tar.xz/src/amf/gmm-build.h -> open5gs_2.4.9.tar.xz/src/amf/gmm-build.h
Changed
@@ -34,6 +34,7 @@ amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause); ogs_pkbuf_t *gmm_build_de_registration_accept(amf_ue_t *amf_ue); +ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue); ogs_pkbuf_t *gmm_build_identity_request(amf_ue_t *amf_ue); ogs_pkbuf_t *gmm_build_security_mode_command(amf_ue_t *amf_ue);
View file
open5gs_2.4.8.tar.xz/src/amf/gmm-handler.c -> open5gs_2.4.9.tar.xz/src/amf/gmm-handler.c
Changed
@@ -28,11 +28,11 @@ #undef OGS_LOG_DOMAIN #define OGS_LOG_DOMAIN __gmm_log_domain -static int gmm_handle_nas_message_container( +static ogs_nas_5gmm_cause_t gmm_handle_nas_message_container( amf_ue_t *amf_ue, uint8_t message_type, ogs_nas_message_container_t *nas_message_container); -int gmm_handle_registration_request(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_registration_request(amf_ue_t *amf_ue, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_5gs_registration_request_t *registration_request) { @@ -112,28 +112,19 @@ ~OGS_REGISTRATION_CLEARTEXT_PRESENT) { ogs_error("Non cleartext IEs is included 0x%llx", (long long)registration_request->presencemask); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } if (!h.integrity_protected && (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) { ogs_error("NAS container present without Integrity-protected"); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } if (!mobile_identity->length || !mobile_identity->buffer) { ogs_error("No Mobile Identity"); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } mobile_identity_header = @@ -152,11 +143,7 @@ OGS_NAS_5GS_ECIES_SCHEME_PROFILE_B) { ogs_error("Invalid ProtectionSchemeID(%d) in SUCI", mobile_identity_suci->protection_scheme_id); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE) - ); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } amf_ue_set_suci(amf_ue, mobile_identity); ogs_info("%s SUCI", amf_ue->suci); @@ -166,7 +153,7 @@ (ogs_nas_5gs_mobile_identity_guti_t *)mobile_identity->buffer; if (!mobile_identity_guti) { ogs_error("No mobile identity"); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } ogs_nas_5gs_mobile_identity_guti_to_nas_guti( @@ -262,13 +249,9 @@ /* Check TAI */ served_tai_index = amf_find_served_tai(&amf_ue->nr_tai); if (served_tai_index < 0) { - /* Send Registration Reject */ - ogs_warn("Cannot find Served TAIPLMN_ID:%06x,TAC:%d", + ogs_error("Cannot find Served TAIPLMN_ID:%06x,TAC:%d", ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED; } ogs_debug(" SERVED_TAI_INDEX%d", served_tai_index); @@ -285,18 +268,15 @@ ogs_error("UE:0x%x:0x%x, NEA0 can be used in Encrypt0x%x, " "but Integrity0x%x cannot be bypassed with NIA0", ue_security_capability->nr_ea, ue_security_capability->nr_ia, - amf_selected_enc_algorithm(amf_ue), + amf_selected_enc_algorithm(amf_ue), amf_selected_int_algorithm(amf_ue)); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH; } - return OGS_OK; + return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } -int gmm_handle_registration_update(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_registration_update(amf_ue_t *amf_ue, ogs_nas_5gs_registration_request_t *registration_request) { amf_sess_t *sess = NULL; @@ -376,7 +356,7 @@ amf_ue->requested_nssai.s_nssaii.sst, amf_ue->requested_nssai.s_nssaii.sd.v); } - return OGS_ERROR; + return OGS_5GMM_CAUSE_NO_NETWORK_SLICES_AVAILABLE; } } @@ -442,10 +422,10 @@ } } - return OGS_OK; + return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } -int gmm_handle_service_request(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_service_request(amf_ue_t *amf_ue, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_5gs_service_request_t *service_request) { @@ -483,20 +463,14 @@ service_request->presencemask & ~OGS_SERVICE_CLEARTEXT_PRESENT) { ogs_error("Non cleartext IEs is included 0x%llx", (long long)service_request->presencemask); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } if (!h.integrity_protected && (service_request->presencemask & OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) { ogs_error("NAS container present without Integrity-protected"); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } amf_ue->nas.message_type = OGS_NAS_5GS_SERVICE_REQUEST; @@ -550,13 +524,9 @@ /* Check TAI */ served_tai_index = amf_find_served_tai(&amf_ue->nr_tai); if (served_tai_index < 0) { - /* Send Registration Reject */ - ogs_warn("Cannot find Served TAIPLMN_ID:%06x,TAC:%d", + ogs_error("Cannot find Served TAIPLMN_ID:%06x,TAC:%d", ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, - OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); - return OGS_ERROR; + return OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED; } ogs_debug(" SERVED_TAI_INDEX%d", served_tai_index); @@ -565,10 +535,10 @@ ogs_amf_id_hexdump(&amf_ue->current.guti.amf_id), amf_ue->current.guti.m_tmsi); - return OGS_OK; + return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } -int gmm_handle_service_update(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue, ogs_nas_5gs_service_request_t *service_request) { amf_sess_t *sess = NULL; @@ -663,7 +633,7 @@ ogs_assert(OGS_OK == nas_5gs_send_service_accept(amf_ue)); - return OGS_OK; + return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } int gmm_handle_deregistration_request(amf_ue_t *amf_ue, @@ -679,7 +649,7 @@ /* Set 5GS De-registration Type */ memcpy(&amf_ue->nas.de_registration, de_registration_type, sizeof(ogs_nas_de_registration_type_t)); - amf_ue->nas.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST; + amf_ue->nas.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE; amf_ue->nas.ue.tsc = de_registration_type->tsc; amf_ue->nas.ue.ksi = de_registration_type->ksi; @@ -750,8 +720,8 @@ authentication_response_parameter->length); ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate_confirmation)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate_confirmation, amf_ue, NULL)); return OGS_OK; } @@ -800,7 +770,7 @@ return OGS_OK; } -int gmm_handle_security_mode_complete(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_security_mode_complete(amf_ue_t *amf_ue, ogs_nas_5gs_security_mode_complete_t *security_mode_complete) { ogs_nas_5gs_mobile_identity_t *imeisv = NULL; @@ -829,7 +799,7 @@ OGS_NAS_5GS_SECURITY_MODE_COMPLETE_NAS_MESSAGE_CONTAINER_PRESENT) == 0) { ogs_error("No NAS Message Container in Security mode complete message"); - return OGS_ERROR; + return OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE; } if (security_mode_complete->presencemask & @@ -886,7 +856,7 @@ &security_mode_complete->nas_message_container); } - return OGS_OK; + return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, @@ -1000,6 +970,11 @@ for (i = 0; i < amf_ue->num_of_slice; i++) { + if (i >= OGS_MAX_NUM_OF_SLICE) { + ogs_warn("Ignore max slice count overflow %d>=%d", + amf_ue->num_of_slice, OGS_MAX_NUM_OF_SLICE); + break; + } if (ul_nas_transport->presencemask & OGS_NAS_5GS_UL_NAS_TRANSPORT_S_NSSAI_PRESENT) { ogs_nas_s_nssai_ie_t ie; @@ -1015,6 +990,12 @@ } } for (j = 0; j < amf_ue->allowed_nssai.num_of_s_nssai; j++) { + if (j >= OGS_MAX_NUM_OF_SLICE) { + ogs_warn("Ignore max slice count overflow %d>=%d", + amf_ue->allowed_nssai.num_of_s_nssai, + OGS_MAX_NUM_OF_SLICE); + break; + } if (amf_ue->slicei.s_nssai.sst == amf_ue->allowed_nssai.s_nssaij.sst && amf_ue->slicei.s_nssai.sd.v == @@ -1025,6 +1006,13 @@ for (k = 0; k < amf_ue->slicei.num_of_session; k++) { + if (k >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session " + "count overflow %d>=%d", + amf_ue->slicei.num_of_session, + OGS_MAX_NUM_OF_SESS); + break; + } if (!strcmp(dnn->value, amf_ue->slicei.sessionk.name)) { @@ -1079,20 +1067,22 @@ nf_instance = OGS_SBI_NF_INSTANCE( &sess->sbi, OpenAPI_nf_type_SMF); if (!nf_instance) { - amf_sess_select_smf(sess); + amf_sbi_select_nf(&sess->sbi, OpenAPI_nf_type_SMF, NULL); nf_instance = OGS_SBI_NF_INSTANCE( &sess->sbi, OpenAPI_nf_type_SMF); } if (nf_instance) { ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL, - amf_nsmf_pdusession_build_create_sm_context)); + amf_sess_sbi_discover_and_send( + OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_create_sm_context, + sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL)); } else { ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_NSSF, - sess, 0, NULL, amf_nnssf_nsselection_build_get)); + amf_sess_sbi_discover_and_send( + OpenAPI_nf_type_NSSF, NULL, + amf_nnssf_nsselection_build_get, sess, 0, NULL)); } } else { @@ -1102,9 +1092,10 @@ param.cause = OpenAPI_cause_REL_DUE_TO_DUPLICATE_SESSION_ID; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, sess, AMF_UPDATE_SM_CONTEXT_DUPLICATED_PDU_SESSION_ID, - ¶m, amf_nsmf_pdusession_build_update_sm_context)); + ¶m)); } } else { @@ -1127,15 +1118,15 @@ param.ue_timezone = true; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_N1_RELEASED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_N1_RELEASED, ¶m)); } else { ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m)); } switch (gsm_header->message_type) { @@ -1194,11 +1185,11 @@ return OGS_OK; } -static int gmm_handle_nas_message_container( +static ogs_nas_5gmm_cause_t gmm_handle_nas_message_container( amf_ue_t *amf_ue, uint8_t message_type, ogs_nas_message_container_t *nas_message_container) { - int rv = OGS_ERROR; + int gmm_cause; ogs_pkbuf_t *nasbuf = NULL; ogs_nas_5gs_message_t nas_message; @@ -1209,7 +1200,7 @@ if (!nas_message_container->buffer || !nas_message_container->length) { ogs_error("No NAS message container %p:%d", nas_message_container->buffer,nas_message_container->length); - return OGS_ERROR; + return OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE; } nasbuf = ogs_pkbuf_alloc(NULL, nas_message_container->length); @@ -1251,25 +1242,26 @@ if (ogs_nas_5gmm_decode(&nas_message, nasbuf) != OGS_OK) { ogs_error("ogs_nas_5gmm_decode() failed"); ogs_pkbuf_free(nasbuf); - return OGS_ERROR; + return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; } + gmm_cause = OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE; + switch (nas_message.gmm.h.message_type) { case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_debug("Registration request in NAS message container"); - rv = gmm_handle_registration_update( + gmm_cause = gmm_handle_registration_update( amf_ue, &nas_message.gmm.registration_request); break; case OGS_NAS_5GS_SERVICE_REQUEST: ogs_debug("Service request in NAS message container"); - rv = gmm_handle_service_update( + gmm_cause = gmm_handle_service_update( amf_ue, &nas_message.gmm.service_request); break; default: ogs_error("Unknown message %d", nas_message.gmm.h.message_type); - rv = OGS_ERROR; } ogs_pkbuf_free(nasbuf); - return rv; + return gmm_cause; }
View file
open5gs_2.4.8.tar.xz/src/amf/gmm-handler.h -> open5gs_2.4.9.tar.xz/src/amf/gmm-handler.h
Changed
@@ -26,16 +26,16 @@ extern "C" { #endif -int gmm_handle_registration_request(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_registration_request(amf_ue_t *amf_ue, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_5gs_registration_request_t *registration_request); -int gmm_handle_registration_update(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_registration_update(amf_ue_t *amf_ue, ogs_nas_5gs_registration_request_t *registration_request); -int gmm_handle_service_request(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_service_request(amf_ue_t *amf_ue, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_5gs_service_request_t *service_request); -int gmm_handle_service_update(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue, ogs_nas_5gs_service_request_t *service_request); int gmm_handle_deregistration_request(amf_ue_t *amf_ue, @@ -47,7 +47,7 @@ int gmm_handle_identity_response(amf_ue_t *amf_ue, ogs_nas_5gs_identity_response_t *identity_response); -int gmm_handle_security_mode_complete(amf_ue_t *amf_ue, +ogs_nas_5gmm_cause_t gmm_handle_security_mode_complete(amf_ue_t *amf_ue, ogs_nas_5gs_security_mode_complete_t *security_mode_complete); int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue,
View file
open5gs_2.4.8.tar.xz/src/amf/gmm-sm.c -> open5gs_2.4.9.tar.xz/src/amf/gmm-sm.c
Changed
@@ -91,6 +91,7 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) { int rv, xact_count = 0; + ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -102,7 +103,7 @@ ogs_sbi_message_t *sbi_message = NULL; ogs_assert(e); - + if (e->sess) { sess = e->sess; amf_ue = sess->amf_ue; @@ -132,11 +133,14 @@ switch (nas_message->gmm.h.message_type) { case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_info("Registration request"); - rv = gmm_handle_registration_request( + gmm_cause = gmm_handle_registration_request( amf_ue, h, e->ngap.code, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_registration_request() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("gmm_handle_registration_request() failed %d", + gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -150,10 +154,13 @@ if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) { - rv = gmm_handle_registration_update( + gmm_cause = gmm_handle_registration_update( amf_ue, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_registration_update() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_registration_update() " + "failed %d", amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -170,8 +177,9 @@ if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) { ogs_assert(true == amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_PCF, amf_ue, NULL, - amf_npcf_am_policy_control_build_create)); + OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_create, + amf_ue, NULL)); OGS_FSM_TRAN(s, &gmm_state_initial_context_setup); break; } @@ -192,9 +200,8 @@ amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); if (amf_sess_xact_count(amf_ue) == xact_count) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); } OGS_FSM_TRAN(s, &gmm_state_authentication); @@ -204,10 +211,13 @@ case OGS_NAS_5GS_SERVICE_REQUEST: ogs_info("Service request"); - rv = gmm_handle_service_request( + gmm_cause = gmm_handle_service_request( amf_ue, h, e->ngap.code, &nas_message->gmm.service_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_service_request() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_service_request() failed %d", + amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_service_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -232,10 +242,13 @@ break; } - rv = gmm_handle_service_update( + gmm_cause = gmm_handle_service_update( amf_ue, &nas_message->gmm.service_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_service_update() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_service_update() failed %d", + amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_service_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); } @@ -264,9 +277,8 @@ amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); if (amf_sess_xact_count(amf_ue) == xact_count) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); } OGS_FSM_TRAN(s, &gmm_state_authentication); @@ -278,7 +290,7 @@ OGS_FSM_TRAN(s, &gmm_state_exception); break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: ogs_info("%s Deregistration request", amf_ue->supi); gmm_handle_deregistration_request( @@ -286,6 +298,21 @@ OGS_FSM_TRAN(s, &gmm_state_de_registered); break; + case OGS_NAS_5GS_DEREGISTRATION_ACCEPT_TO_UE: + ogs_info("%s Deregistration accept", amf_ue->supi); + CLEAR_AMF_UE_TIMER(amf_ue->t3522); + + /* De-associate NG with NAS/EMM */ + ran_ue_deassociate(amf_ue->ran_ue); + + ogs_assert(OGS_OK == + ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, + NGAP_Cause_PR_misc, NGAP_CauseMisc_om_intervention, + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + + OGS_FSM_TRAN(s, &gmm_state_de_registered); + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMPLETE: ogs_debug("%s Configuration update complete", amf_ue->supi); @@ -414,6 +441,20 @@ } break; + case AMF_TIMER_T3522: + if (amf_ue->t3522.retry_count >= + amf_timer_cfg(AMF_TIMER_T3522)->max_count) { + ogs_warn("Retransmission of Deregistration-Request failed. " + "Stop retransmission"); + CLEAR_AMF_UE_TIMER(amf_ue->t3522); + OGS_FSM_TRAN(&amf_ue->t3522, &gmm_state_exception); + } else { + amf_ue->t3522.retry_count++; + ogs_assert(OGS_OK == + nas_5gs_send_de_registration_request(amf_ue)); + } + break; + default: ogs_error("Unknown timer%s:%d", amf_timer_get_name(e->timer_id), e->timer_id); @@ -432,8 +473,10 @@ CASE(OGS_SBI_RESOURCE_NAME_POLICIES) SWITCH(sbi_message->h.method) CASE(OGS_SBI_HTTP_METHOD_DELETE) - ogs_assert(OGS_OK == - nas_5gs_send_de_registration_accept(amf_ue)); + + if (!amf_ue->network_initiated_de_reg) + ogs_assert(OGS_OK == + nas_5gs_send_de_registration_accept(amf_ue)); PCF_AM_POLICY_CLEAR(amf_ue); break; @@ -464,6 +507,8 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) { int rv; + ogs_nas_5gmm_cause_t gmm_cause; + amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -479,7 +524,7 @@ ogs_assert(s); ogs_assert(e); - + amf_sm_debug(e); if (e->sess) { @@ -539,9 +584,8 @@ case OGS_5GMM_CAUSE_NGKSI_ALREADY_IN_USE: ogs_warn("Authentication failure(ngKSI already in use)"); ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); return; case OGS_5GMM_CAUSE_SYNCH_FAILURE: @@ -552,9 +596,9 @@ break; } ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, - authentication_failure_parameter->auts, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, + amf_ue, authentication_failure_parameter->auts)); return; default: @@ -571,19 +615,21 @@ break; case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_warn("Registration request"); - rv = gmm_handle_registration_request( + gmm_cause = gmm_handle_registration_request( amf_ue, h, e->ngap.code, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("%s gmm_handle_registration_request() failed", - amf_ue->suci); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_registration_request() failed %d", + amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); break; case OGS_NAS_5GS_5GMM_STATUS: @@ -592,7 +638,7 @@ OGS_FSM_TRAN(s, &gmm_state_exception); break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: ogs_warn("%s Deregistration request", amf_ue->supi); gmm_handle_deregistration_request( @@ -713,6 +759,7 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) { int rv; + ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; ogs_nas_5gs_message_t *nas_message = NULL; ogs_nas_security_header_type_t h; @@ -766,13 +813,14 @@ break; } - rv = gmm_handle_security_mode_complete( + gmm_cause = gmm_handle_security_mode_complete( amf_ue, &nas_message->gmm.security_mode_complete); - if (rv != OGS_OK) { - ogs_error("%s Cannot handle NAS message", amf_ue->suci); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_security_mode_complete() " + "failed %d in type %d", + amf_ue->suci, gmm_cause, amf_ue->nas.message_type); ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject(amf_ue, - OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED)); + nas_5gs_send_gmm_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -784,8 +832,8 @@ amf_ue->nhcc = 1; ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue, NULL, - amf_nudm_uecm_build_registration)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + amf_nudm_uecm_build_registration, amf_ue, NULL)); if (amf_ue->nas.message_type == OGS_NAS_5GS_REGISTRATION_REQUEST) { OGS_FSM_TRAN(s, &gmm_state_initial_context_setup); @@ -806,18 +854,21 @@ break; case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_warn("Registration request"); - rv = gmm_handle_registration_request( + gmm_cause = gmm_handle_registration_request( amf_ue, h, e->ngap.code, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("%s Cannot handle NAS message", amf_ue->suci); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_registration_request() failed %d", + amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); OGS_FSM_TRAN(s, &gmm_state_authentication); break; @@ -837,7 +888,7 @@ OGS_FSM_TRAN(s, &gmm_state_exception); break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: ogs_warn("%s Deregistration request", amf_ue->supi); gmm_handle_deregistration_request( @@ -885,6 +936,8 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) { int rv, xact_count = 0; + ogs_nas_5gmm_cause_t gmm_cause; + amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; ogs_nas_5gs_message_t *nas_message = NULL; @@ -941,9 +994,9 @@ CASE(OGS_SBI_HTTP_METHOD_PUT) ogs_assert(true == amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_UDM, amf_ue, - (char *)OGS_SBI_RESOURCE_NAME_AM_DATA, - amf_nudm_sdm_build_get)); + OpenAPI_nf_type_UDM, NULL, + amf_nudm_sdm_build_get, + amf_ue, (char *)OGS_SBI_RESOURCE_NAME_AM_DATA)); break; DEFAULT @@ -1125,11 +1178,14 @@ case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_warn("Registration request"); - rv = gmm_handle_registration_request( + gmm_cause = gmm_handle_registration_request( amf_ue, h, e->ngap.code, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("%s Cannot handle NAS message", amf_ue->suci); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_registration_request() failed %d", + amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1138,9 +1194,8 @@ amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); if (amf_sess_xact_count(amf_ue) == xact_count) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); } OGS_FSM_TRAN(s, &gmm_state_authentication); break; @@ -1160,7 +1215,7 @@ OGS_FSM_TRAN(s, &gmm_state_exception); break; - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: ogs_warn("%s Deregistration request", amf_ue->supi); gmm_handle_deregistration_request( @@ -1205,7 +1260,8 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) { - int rv, xact_count = 0; + int xact_count = 0; + ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -1258,11 +1314,14 @@ switch (nas_message->gmm.h.message_type) { case OGS_NAS_5GS_REGISTRATION_REQUEST: ogs_info("Registration request"); - rv = gmm_handle_registration_request( + gmm_cause = gmm_handle_registration_request( amf_ue, h, e->ngap.code, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_registration_request() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("gmm_handle_registration_request() failed %d", + gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1278,10 +1337,13 @@ if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) { - rv = gmm_handle_registration_update( + gmm_cause = gmm_handle_registration_update( amf_ue, &nas_message->gmm.registration_request); - if (rv != OGS_OK) { - ogs_error("gmm_handle_registration_update() failed"); + if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { + ogs_error("%s gmm_handle_registration_update() " + "failed %d", amf_ue->suci, gmm_cause); + ogs_assert(OGS_OK == + nas_5gs_send_registration_reject(amf_ue, gmm_cause)); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1296,8 +1358,9 @@ if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) { ogs_assert(true == amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_PCF, amf_ue, NULL, - amf_npcf_am_policy_control_build_create)); + OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_create, + amf_ue, NULL)); OGS_FSM_TRAN(s, &gmm_state_initial_context_setup); break; } @@ -1318,9 +1381,8 @@ amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); if (amf_sess_xact_count(amf_ue) == xact_count) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); } OGS_FSM_TRAN(s, &gmm_state_authentication);
View file
open5gs_2.4.8.tar.xz/src/amf/init.c -> open5gs_2.4.9.tar.xz/src/amf/init.c
Changed
@@ -30,11 +30,12 @@ int rv; ogs_metrics_context_init(); + ogs_sbi_context_init(); + amf_context_init(); amf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("amf", "nrf"); + rv = ogs_sbi_context_parse_config("amf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = ogs_metrics_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/amf/namf-handler.c -> open5gs_2.4.9.tar.xz/src/amf/namf-handler.c
Changed
@@ -508,3 +508,91 @@ return OGS_OK; } + +int amf_namf_callback_handle_dereg_notify( + ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) +{ + int status = OGS_SBI_HTTP_STATUS_NO_CONTENT; + + amf_ue_t *amf_ue = NULL; + + ogs_sbi_message_t sendmsg; + ogs_sbi_response_t *response = NULL; + + OpenAPI_deregistration_data_t *DeregistrationData; + + ogs_assert(stream); + ogs_assert(recvmsg); + + if (!recvmsg->h.resource.component0) { + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; + ogs_error("No SUPI"); + goto cleanup; + } + + amf_ue = amf_ue_find_by_supi(recvmsg->h.resource.component0); + if (!amf_ue) { + status = OGS_SBI_HTTP_STATUS_NOT_FOUND; + ogs_error("Cannot find SUPI %s", recvmsg->h.resource.component0); + goto cleanup; + } + + DeregistrationData = recvmsg->DeregistrationData; + if (!DeregistrationData) { + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; + ogs_error("%s No DeregistrationData", amf_ue->supi); + goto cleanup; + } + + if (DeregistrationData->access_type != OpenAPI_access_type_3GPP_ACCESS) + { + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; + ogs_error("%s Deregistration access type not 3GPP", amf_ue->supi); + goto cleanup; + } + + ogs_info("Deregistration notify reason: %s:%s:%s", + amf_ue->supi, + OpenAPI_deregistration_reason_ToString(DeregistrationData->dereg_reason), + OpenAPI_access_type_ToString(DeregistrationData->access_type)); + + /* + * TODO: do not start deregistration if UE has emergency sessions + * 4.2.2.3.3 + * If the UE has established PDU Session associated with emergency service, the AMF shall not initiate + * Deregistration procedure. In this case, the AMF performs network requested PDU Session Release for any PDU + * session associated with non-emergency service as described in clause 4.3.4. + */ + + + if (CM_CONNECTED(amf_ue)) + { + amf_ue->network_initiated_de_reg = true; + + ogs_assert(OGS_OK == + nas_5gs_send_de_registration_request(amf_ue)); + + amf_sbi_send_release_all_sessions( + amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); + + if (ogs_list_count(&amf_ue->sess_list) == 0) + ogs_assert(true == + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_delete, amf_ue, NULL)); + + OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_de_registered); + } + else if (CM_IDLE(amf_ue)) { + /* TODO: need to page UE */ + /*ngap_send_paging(amf_ue);*/ + } + +cleanup: + memset(&sendmsg, 0, sizeof(sendmsg)); + + response = ogs_sbi_build_response(&sendmsg, status); + ogs_assert(response); + ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + + return OGS_OK; +}
View file
open5gs_2.4.8.tar.xz/src/amf/namf-handler.h -> open5gs_2.4.9.tar.xz/src/amf/namf-handler.h
Changed
@@ -30,6 +30,8 @@ ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); int amf_namf_callback_handle_sm_context_status( ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); +int amf_namf_callback_handle_dereg_notify( + ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/amf/nas-path.c -> open5gs_2.4.9.tar.xz/src/amf/nas-path.c
Changed
@@ -24,13 +24,16 @@ int nas_5gs_send_to_gnb(amf_ue_t *amf_ue, ogs_pkbuf_t *pkbuf) { - ran_ue_t *ran_ue = NULL; + ogs_assert(pkbuf); - ogs_assert(amf_ue); - ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); + amf_ue = amf_ue_cycle(amf_ue); + if (!amf_ue) { + ogs_warn("UE(amf-ue) context has already been removed"); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } - return ngap_send_to_ran_ue(ran_ue, pkbuf); + return ngap_send_to_ran_ue(amf_ue->ran_ue, pkbuf); } int nas_5gs_send_to_downlink_nas_transport(amf_ue_t *amf_ue, ogs_pkbuf_t *pkbuf) @@ -40,23 +43,29 @@ ran_ue_t *ran_ue = NULL; ogs_assert(pkbuf); - ogs_assert(amf_ue); + + amf_ue = amf_ue_cycle(amf_ue); + if (!amf_ue) { + ogs_warn("UE(amf-ue) context has already been removed"); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } + ran_ue = ran_ue_cycle(amf_ue->ran_ue); if (!ran_ue) { ogs_warn("NG context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; - } else { - ngapbuf = ngap_build_downlink_nas_transport( - ran_ue, pkbuf, false, false); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + } - rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect(rv == OGS_OK); + ngapbuf = ngap_build_downlink_nas_transport( + ran_ue, pkbuf, false, false); + ogs_expect_or_return_val(ngapbuf, OGS_ERROR); - return rv; - } + rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); + ogs_expect(rv == OGS_OK); + + return rv; } int nas_5gs_send_registration_accept(amf_ue_t *amf_ue) @@ -275,6 +284,38 @@ return rv; } + +int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue) +{ + int rv; + + ran_ue_t *ran_ue = NULL; + ogs_pkbuf_t *gmmbuf = NULL; + + ogs_assert(amf_ue); + ran_ue = ran_ue_cycle(amf_ue->ran_ue); + ogs_expect_or_return_val(ran_ue, OGS_ERROR); + + ogs_debug("%s De-registration request", amf_ue->supi); + + if (amf_ue->t3522.pkbuf) { + gmmbuf = amf_ue->t3522.pkbuf; + ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + } else { + gmmbuf = gmm_build_de_registration_request(amf_ue); + ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + } + + amf_ue->t3522.pkbuf = ogs_pkbuf_copy(gmmbuf); + ogs_expect_or_return_val(amf_ue->t3522.pkbuf, OGS_ERROR); + ogs_timer_start(amf_ue->t3522.timer, + amf_timer_cfg(AMF_TIMER_T3522)->duration); + + rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); + ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + + return rv; +} int nas_5gs_send_identity_request(amf_ue_t *amf_ue) {
View file
open5gs_2.4.8.tar.xz/src/amf/nas-path.h -> open5gs_2.4.9.tar.xz/src/amf/nas-path.h
Changed
@@ -41,6 +41,7 @@ amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause); int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue); +int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue); int nas_5gs_send_identity_request(amf_ue_t *amf_ue);
View file
open5gs_2.4.8.tar.xz/src/amf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/amf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + amf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - amf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + amf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - amf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + amf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = amf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + amf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = amf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &amf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &amf_nf_state_registered); } } void amf_nf_state_final(ogs_fsm_t *s, amf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); amf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void amf_nf_state_will_register(ogs_fsm_t *s, amf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == amf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, amf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case AMF_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &amf_nf_state_registered); } else { ogs_error("%s HTTP Response Status Code %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &amf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,17 +173,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == amf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, amf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, amf_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +208,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -212,26 +231,36 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - amf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_AUSF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_AUSF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - amf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UDM)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDM)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - amf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_PCF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_PCF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - amf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_SMF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_SMF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - amf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_NSSF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_NSSF)); } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -265,7 +294,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &amf_nf_state_exception); } @@ -273,13 +303,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -294,26 +325,31 @@ break; case AMF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &amf_nf_state_will_register); break; case AMF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &amf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &amf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", amf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("Unknown event %s", amf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + amf_event_get_name(e)); break; } } @@ -328,11 +364,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -340,7 +377,10 @@ break; default: - ogs_error("Unknown event %s", amf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + amf_event_get_name(e)); break; } } @@ -358,18 +398,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case AMF_EVT_SBI_TIMER: @@ -380,15 +423,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &amf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", amf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -413,8 +458,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, amf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + amf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/amf/ngap-build.c -> open5gs_2.4.9.tar.xz/src/amf/ngap-build.c
Changed
@@ -313,9 +313,10 @@ NGAP_AllowedNSSAI_t *AllowedNSSAI = NULL; ogs_assert(gmmbuf); + ran_ue = ran_ue_cycle(ran_ue); ogs_assert(ran_ue); - - amf_ue = ran_ue->amf_ue; + amf_ue = amf_ue_cycle(ran_ue->amf_ue); + ogs_assert(amf_ue); ogs_debug("DownlinkNASTransport"); @@ -468,6 +469,7 @@ NGAP_MaskedIMEISV_t *MaskedIMEISV = NULL; NGAP_NAS_PDU_t *NAS_PDU = NULL; + amf_ue = amf_ue_cycle(amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -787,7 +789,7 @@ NGAP_MaskedIMEISV_t *MaskedIMEISV = NULL; ogs_assert(sess); - amf_ue = sess->amf_ue; + amf_ue = amf_ue_cycle(sess->amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1076,6 +1078,7 @@ NGAP_UE_NGAP_IDs_t *UE_NGAP_IDs = NULL; NGAP_Cause_t *Cause = NULL; + ran_ue = ran_ue_cycle(ran_ue); ogs_assert(ran_ue); ogs_debug("UEContextReleaseCommand"); @@ -1151,6 +1154,7 @@ NGAP_PDUSessionResourceSetupListSUReq_t *PDUSessionList = NULL; NGAP_PDUSessionResourceSetupItemSUReq_t *PDUSessionItem = NULL; + amf_ue = amf_ue_cycle(amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1317,7 +1321,7 @@ ogs_assert(n2smbuf); ogs_assert(sess); - amf_ue = sess->amf_ue; + amf_ue = amf_ue_cycle(sess->amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1459,7 +1463,7 @@ ogs_assert(n2smbuf); ogs_assert(sess); - amf_ue = sess->amf_ue; + amf_ue = amf_ue_cycle(sess->amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1558,7 +1562,7 @@ ogs_assert(n2smbuf); ogs_assert(sess); - amf_ue = sess->amf_ue; + amf_ue = amf_ue_cycle(sess->amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1663,6 +1667,7 @@ NGAP_TAIListForPagingItem_t *TAIItem = NULL; NGAP_TAI_t *tAI = NULL; + amf_ue = amf_ue_cycle(amf_ue); ogs_assert(amf_ue); ogs_debug("Paging"); @@ -1785,6 +1790,7 @@ NGAP_PDUSessionResourceSwitchedList_t *PDUSessionResourceSwitchedList; NGAP_AllowedNSSAI_t *AllowedNSSAI = NULL; + amf_ue = amf_ue_cycle(amf_ue); ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); ogs_assert(ran_ue); @@ -1951,8 +1957,9 @@ *SourceToTarget_TransparentContainer = NULL; NGAP_GUAMI_t *GUAMI = NULL; + target_ue = ran_ue_cycle(target_ue); ogs_assert(target_ue); - amf_ue = target_ue->amf_ue; + amf_ue = amf_ue_cycle(target_ue->amf_ue); ogs_assert(amf_ue); ogs_debug("HandoverRequest"); @@ -2249,6 +2256,7 @@ NGAP_RAN_UE_NGAP_ID_t *RAN_UE_NGAP_ID = NULL; NGAP_Cause_t *Cause = NULL; + source_ue = ran_ue_cycle(source_ue); ogs_assert(source_ue); ogs_assert(cause); @@ -2332,8 +2340,9 @@ NGAP_TargetToSource_TransparentContainer_t *TargetToSource_TransparentContainer = NULL; + source_ue = ran_ue_cycle(source_ue); ogs_assert(source_ue); - amf_ue = source_ue->amf_ue; + amf_ue = amf_ue_cycle(source_ue->amf_ue); ogs_assert(amf_ue); ogs_debug("HandoverCommand"); @@ -2449,6 +2458,7 @@ NGAP_AMF_UE_NGAP_ID_t *AMF_UE_NGAP_ID = NULL; NGAP_RAN_UE_NGAP_ID_t *RAN_UE_NGAP_ID = NULL; + source_ue = ran_ue_cycle(source_ue); ogs_assert(source_ue); ogs_debug("HandoverCancelAcknowledge"); @@ -2513,6 +2523,7 @@ NGAP_RANStatusTransfer_TransparentContainer_t *RANStatusTransfer_TransparentContainer = NULL; + target_ue = ran_ue_cycle(target_ue); ogs_assert(target_ue); ogs_assert(transfer);
View file
open5gs_2.4.8.tar.xz/src/amf/ngap-handler.c -> open5gs_2.4.9.tar.xz/src/amf/ngap-handler.c
Changed
@@ -904,9 +904,9 @@ ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size); ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -1643,9 +1643,9 @@ ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size); ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_ACTIVATED, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -1762,9 +1762,9 @@ amf_ue->deactivation.cause = NGAP_CauseNas_normal_release; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_SETUP_FAIL, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_SETUP_FAIL, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -1942,9 +1942,9 @@ ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size); ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_MODIFIED, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -2117,9 +2117,9 @@ ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size); ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_N2_RELEASED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_N2_RELEASED, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -2539,9 +2539,9 @@ ogs_pkbuf_put_data(param.n2smbuf, transfer->buf, transfer->size); ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -2855,9 +2855,9 @@ param.TargetID = TargetID; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQUIRED, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQUIRED, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -3079,9 +3079,9 @@ param.hoState = OpenAPI_ho_state_PREPARED; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQ_ACK, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQ_ACK, ¶m)); ogs_pkbuf_free(param.n2smbuf); } @@ -3324,9 +3324,9 @@ param.ngApCause.value = (int)Cause->choice.radioNetwork; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_CANCEL, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_CANCEL, ¶m)); } } @@ -3604,9 +3604,9 @@ param.hoState = OpenAPI_ho_state_COMPLETED; ogs_assert(true == - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_NOTIFY, ¶m, - amf_nsmf_pdusession_build_update_sm_context)); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, + sess, AMF_UPDATE_SM_CONTEXT_HANDOVER_NOTIFY, ¶m)); } } @@ -4022,7 +4022,8 @@ * where PartOfNG_interface was requested * REMOVED */ ogs_assert(gnb->ng_reset_ack); - ngap_send_to_gnb(gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING); + ogs_expect(OGS_OK == + ngap_send_to_gnb(gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING)); /* Clear NG-Reset Ack Buffer */ gnb->ng_reset_ack = NULL;
View file
open5gs_2.4.8.tar.xz/src/amf/ngap-path.c -> open5gs_2.4.9.tar.xz/src/amf/ngap-path.c
Changed
@@ -50,8 +50,15 @@ { char bufOGS_ADDRSTRLEN; - ogs_assert(gnb); ogs_assert(pkbuf); + + gnb = amf_gnb_cycle(gnb); + if (!gnb) { + ogs_warn("gNB has already been removed"); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } + ogs_assert(gnb->sctp.sock); if (gnb->sctp.sock->fd == INVALID_SOCKET) { ogs_fatal("gNB SCTP socket has already been destroyed"); @@ -76,13 +83,16 @@ int ngap_send_to_ran_ue(ran_ue_t *ran_ue, ogs_pkbuf_t *pkbuf) { - amf_gnb_t *gnb = NULL; + ogs_assert(pkbuf); - ogs_assert(ran_ue); - gnb = ran_ue->gnb; - ogs_assert(gnb); + ran_ue = ran_ue_cycle(ran_ue); + if (!ran_ue) { + ogs_warn("NG context has already been removed"); + ogs_pkbuf_free(pkbuf); + return OGS_ERROR; + } - return ngap_send_to_gnb(gnb, pkbuf, ran_ue->gnb_ostream_id); + return ngap_send_to_gnb(ran_ue->gnb, pkbuf, ran_ue->gnb_ostream_id); } int ngap_delayed_send_to_ran_ue( @@ -128,7 +138,7 @@ e->pkbuf = esmbuf; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); amf_event_free(e); } @@ -214,7 +224,7 @@ e->pkbuf = nasbuf; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ngap_send_to_nas() failed:%d", (int)rv); + ogs_error("ngap_send_to_nas() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); amf_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/amf/ngap-path.h -> open5gs_2.4.9.tar.xz/src/amf/ngap-path.h
Changed
@@ -56,10 +56,10 @@ int ngap_send_ran_ue_context_release_command( ran_ue_t *ran_ue, NGAP_Cause_PR group, long cause, - uint8_t action, ogs_time_t delay); + uint8_t action, ogs_time_t duration); int ngap_send_amf_ue_context_release_command( amf_ue_t *amf_ue, NGAP_Cause_PR group, long cause, - uint8_t action, ogs_time_t delay); + uint8_t action, ogs_time_t duration); int ngap_send_paging(amf_ue_t *amf_ue); int ngap_send_pdu_resource_setup_request(
View file
open5gs_2.4.8.tar.xz/src/amf/ngap-sctp.c -> open5gs_2.4.9.tar.xz/src/amf/ngap-sctp.c
Changed
@@ -238,8 +238,14 @@ ngap_event_push(AMF_EVT_NGAP_MESSAGE, sock, addr, pkbuf, 0, 0); return; } else { - ogs_fatal("Invalid flag(0x%x)", flags); - ogs_assert_if_reached(); + if (ogs_socket_errno != OGS_EAGAIN) { + ogs_fatal("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); + ogs_assert_if_reached(); + } else { + ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); + } } ogs_pkbuf_free(pkbuf);
View file
open5gs_2.4.8.tar.xz/src/amf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/amf/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *amf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *amf_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/amf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/amf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *amf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *amf_nnrf_nfm_build_register(void); ogs_sbi_request_t *amf_nnrf_disc_build_discover( char *nrf_id,
View file
open5gs_2.4.8.tar.xz/src/amf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/amf/nnrf-handler.c
Changed
@@ -173,9 +173,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); amf_nf_fsm_init(nf_instance); @@ -254,16 +255,19 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; - amf_ue_t *amf_ue = NULL; - amf_sess_t *sess = NULL; - ogs_sbi_nf_instance_t *nf_instance = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; OpenAPI_search_result_t *SearchResult = NULL; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -271,53 +275,19 @@ return; } - amf_nnrf_handle_nf_discover_search_result(sbi_object, SearchResult); + amf_nnrf_handle_nf_discover_search_result( + sbi_object, target_nf_type, discovery_option, SearchResult); - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE && - sbi_object->type < OGS_SBI_OBJ_TOP); - switch(sbi_object->type) { - case OGS_SBI_OBJ_UE_TYPE: - amf_ue = (amf_ue_t *)sbi_object; - ogs_assert(amf_ue); - ogs_error("%s (NF discover) No %s", amf_ue->suci, - OpenAPI_nf_type_ToString(xact->target_nf_type)); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi(amf_ue, - OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); - break; - case OGS_SBI_OBJ_SESS_TYPE: - sess = (amf_sess_t *)sbi_object; - ogs_assert(sess); - ogs_error("%d:%d (NF discover) No %s", sess->psi, sess->pti, - OpenAPI_nf_type_ToString(xact->target_nf_type)); - if (sess->payload_container_type) { - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); - } else { - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_transport, - NGAP_CauseTransport_transport_resource_unavailable)); - } - break; - default: - ogs_fatal("(NF discover) Not implemented %s:%d", - OpenAPI_nf_type_ToString(xact->target_nf_type), - sbi_object->type); - ogs_assert_if_reached(); - } - } else { - ogs_assert(true == amf_sbi_send(nf_instance, xact)); - } + amf_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == amf_sbi_send_request(sbi_object, target_nf_type, xact)); } void amf_nnrf_handle_nf_discover_search_result( - ogs_sbi_object_t *sbi_object, OpenAPI_search_result_t *SearchResult) + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + OpenAPI_search_result_t *SearchResult) { bool handled; @@ -336,8 +306,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); amf_nf_fsm_init(nf_instance); @@ -353,9 +324,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - amf_ue_t *amf_ue = NULL; - amf_sess_t *sess = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -372,23 +340,6 @@ continue; } - switch(sbi_object->type) { - case OGS_SBI_OBJ_UE_TYPE: - amf_ue = (amf_ue_t *)sbi_object; - ogs_assert(amf_ue); - amf_ue_select_nf(amf_ue, nf_instance->nf_type); - break; - case OGS_SBI_OBJ_SESS_TYPE: - sess = (amf_sess_t *)sbi_object; - ogs_assert(sess); - amf_sess_select_nf(sess, nf_instance->nf_type); - break; - default: - ogs_fatal("(NF discover search result) Not implemented %d", - sbi_object->type); - ogs_assert_if_reached(); - } - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) {
View file
open5gs_2.4.8.tar.xz/src/amf/nnrf-handler.h -> open5gs_2.4.9.tar.xz/src/amf/nnrf-handler.h
Changed
@@ -37,7 +37,10 @@ void amf_nnrf_handle_nf_discover( ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg); void amf_nnrf_handle_nf_discover_search_result( - ogs_sbi_object_t *sbi_object, OpenAPI_search_result_t *SearchResult); + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + OpenAPI_search_result_t *SearchResult); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/amf/nnssf-build.c -> open5gs_2.4.9.tar.xz/src/amf/nnssf-build.c
Changed
@@ -34,8 +34,9 @@ message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NETWORK_SLICE_INFORMATION; - message.param.nf_id = ogs_sbi_self()->nf_instance_id; - message.param.nf_type = amf_self()->nf_type; + ogs_assert(ogs_sbi_self()->nf_instance); + message.param.nf_id = ogs_sbi_self()->nf_instance->id; + message.param.nf_type = ogs_sbi_self()->nf_instance->nf_type; message.param.slice_info_request_for_pdu_session_presence = true; message.param.roaming_indication = OpenAPI_roaming_indication_NON_ROAMING;
View file
open5gs_2.4.8.tar.xz/src/amf/nnssf-handler.h -> open5gs_2.4.9.tar.xz/src/amf/nnssf-handler.h
Changed
@@ -27,7 +27,7 @@ #include "context.h" int amf_nnssf_nsselection_handle_get( - amf_sess_t *sess, ogs_sbi_message_t *message); + amf_sess_t *sess, ogs_sbi_message_t *recvmsg); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/amf/npcf-handler.h -> open5gs_2.4.9.tar.xz/src/amf/npcf-handler.h
Changed
@@ -27,7 +27,7 @@ #include "context.h" int amf_npcf_am_policy_control_handle_create( - amf_ue_t *amf_ue, ogs_sbi_message_t *message); + amf_ue_t *amf_ue, ogs_sbi_message_t *recvmsg); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/amf/nsmf-build.c -> open5gs_2.4.9.tar.xz/src/amf/nsmf-build.c
Changed
@@ -51,7 +51,8 @@ memset(&SmContextCreateData, 0, sizeof(SmContextCreateData)); - SmContextCreateData.serving_nf_id = ogs_sbi_self()->nf_instance_id; + ogs_assert(ogs_sbi_self()->nf_instance); + SmContextCreateData.serving_nf_id = ogs_sbi_self()->nf_instance->id; SmContextCreateData.serving_network = ogs_sbi_build_plmn_id_nid(&amf_ue->nr_tai.plmn_id);
View file
open5gs_2.4.8.tar.xz/src/amf/nsmf-handler.c -> open5gs_2.4.9.tar.xz/src/amf/nsmf-handler.c
Changed
@@ -231,8 +231,9 @@ if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) { ogs_assert(true == amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_PCF, amf_ue, NULL, - amf_npcf_am_policy_control_build_create)); + OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_create, + amf_ue, NULL)); } else { CLEAR_AMF_UE_TIMER(amf_ue->t3550); ogs_assert(OGS_OK == @@ -562,9 +563,9 @@ ogs_warn("%s:%d Receive Update SM context" "(DUPLICATED_PDU_SESSION_ID)", amf_ue->supi, sess->psi); - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL, - amf_nsmf_pdusession_build_create_sm_context); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_create_sm_context, + sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL); } else if (state == AMF_UPDATE_SM_CONTEXT_PATH_SWITCH_REQUEST) { @@ -667,8 +668,9 @@ * where PartOfNG_interface was requested * REMOVED */ ogs_assert(gnb->ng_reset_ack); - ngap_send_to_gnb( - gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING); + ogs_expect(OGS_OK == + ngap_send_to_gnb(gnb, + gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING)); /* Clear NG-Reset Ack Buffer */ gnb->ng_reset_ack = NULL; @@ -814,9 +816,8 @@ if (!PCF_AM_POLICY_ASSOCIATED(amf_ue)) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_PCF, amf_ue, NULL, - amf_npcf_am_policy_control_build_create)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_create, amf_ue, NULL)); } else { CLEAR_AMF_UE_TIMER(amf_ue->t3550); ogs_assert(OGS_OK == @@ -867,9 +868,8 @@ if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_authentication)) { ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_AUSF, amf_ue, NULL, - amf_nausf_auth_build_authenticate)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_AUSF, NULL, + amf_nausf_auth_build_authenticate, amf_ue, NULL)); } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_de_registered)) { @@ -885,9 +885,9 @@ */ ogs_assert(true == - amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_PCF, amf_ue, - NULL, amf_npcf_am_policy_control_build_delete)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_delete, + amf_ue, NULL)); } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered)) { /*
View file
open5gs_2.4.8.tar.xz/src/amf/nsmf-handler.h -> open5gs_2.4.9.tar.xz/src/amf/nsmf-handler.h
Changed
@@ -27,7 +27,7 @@ #include "context.h" int amf_nsmf_pdusession_handle_create_sm_context( - amf_sess_t *sess, ogs_sbi_message_t *message); + amf_sess_t *sess, ogs_sbi_message_t *recvmsg); int amf_nsmf_pdusession_handle_update_sm_context( amf_sess_t *sess, int state, ogs_sbi_message_t *recvmsg); int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state);
View file
open5gs_2.4.8.tar.xz/src/amf/nudm-build.c -> open5gs_2.4.9.tar.xz/src/amf/nudm-build.c
Changed
@@ -44,7 +44,8 @@ memset(&Amf3GppAccessRegistration, 0, sizeof(Amf3GppAccessRegistration)); - Amf3GppAccessRegistration.amf_instance_id = ogs_sbi_self()->nf_instance_id; + ogs_assert(ogs_sbi_self()->nf_instance); + Amf3GppAccessRegistration.amf_instance_id = ogs_sbi_self()->nf_instance->id; server = ogs_list_first(&ogs_sbi_self()->server_list); ogs_assert(server); @@ -73,6 +74,48 @@ return request; } + +ogs_sbi_request_t *amf_nudm_uecm_build_registration_delete( + amf_ue_t *amf_ue, void *data) +{ + ogs_sbi_message_t message; + ogs_sbi_request_t *request = NULL; + + OpenAPI_amf3_gpp_access_registration_modification_t + Amf3GppAccessRegistrationModification; + + ogs_assert(amf_ue); + ogs_assert(amf_ue->supi); + + memset(&message, 0, sizeof(message)); + message.h.method = (char *)OGS_SBI_HTTP_METHOD_PATCH; + message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDM_UECM; + message.h.api.version = (char *)OGS_SBI_API_V1; + message.h.resource.component0 = amf_ue->supi; + message.h.resource.component1 = + (char *)OGS_SBI_RESOURCE_NAME_REGISTRATIONS; + message.h.resource.component2 = + (char *)OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS; + + memset(&Amf3GppAccessRegistrationModification, 0, + sizeof(Amf3GppAccessRegistrationModification)); + + Amf3GppAccessRegistrationModification.guami = + ogs_sbi_build_guami(amf_ue->guami); + Amf3GppAccessRegistrationModification.is_purge_flag = true; + Amf3GppAccessRegistrationModification.purge_flag = 1; + + message.Amf3GppAccessRegistrationModification = + &Amf3GppAccessRegistrationModification; + + request = ogs_sbi_build_request(&message); + ogs_assert(request); + + if (Amf3GppAccessRegistrationModification.guami) + ogs_sbi_free_guami(Amf3GppAccessRegistrationModification.guami); + + return request; +} ogs_sbi_request_t *amf_nudm_sdm_build_get(amf_ue_t *amf_ue, void *data) {
View file
open5gs_2.4.8.tar.xz/src/amf/nudm-build.h -> open5gs_2.4.9.tar.xz/src/amf/nudm-build.h
Changed
@@ -28,6 +28,8 @@ ogs_sbi_request_t *amf_nudm_uecm_build_registration( amf_ue_t *amf_ue, void *data); +ogs_sbi_request_t *amf_nudm_uecm_build_registration_delete( + amf_ue_t *amf_ue, void *data); ogs_sbi_request_t *amf_nudm_sdm_build_get(amf_ue_t *amf_ue, void *data); #ifdef __cplusplus
View file
open5gs_2.4.8.tar.xz/src/amf/nudm-handler.c -> open5gs_2.4.9.tar.xz/src/amf/nudm-handler.c
Changed
@@ -140,9 +140,9 @@ } ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue, - (char *)OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA, - amf_nudm_sdm_build_get)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + amf_nudm_sdm_build_get, + amf_ue, (char *)OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)); break; CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA) @@ -212,15 +212,15 @@ } } ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, amf_ue, - (char *)OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA, - amf_nudm_sdm_build_get)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + amf_nudm_sdm_build_get, + amf_ue, (char *)OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)); break; CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA) ogs_assert(true == - amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, amf_ue, - NULL, amf_npcf_am_policy_control_build_create)); + amf_ue_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + amf_npcf_am_policy_control_build_create, amf_ue, NULL)); break; DEFAULT
View file
open5gs_2.4.8.tar.xz/src/amf/nudm-handler.h -> open5gs_2.4.9.tar.xz/src/amf/nudm-handler.h
Changed
@@ -27,7 +27,7 @@ #include "context.h" int amf_nudm_sdm_handle_provisioned( - amf_ue_t *amf_ue, ogs_sbi_message_t *message); + amf_ue_t *amf_ue, ogs_sbi_message_t *recvmsg); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/amf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/amf/sbi-path.c
Changed
@@ -19,6 +19,7 @@ #include "sbi-path.h" #include "nas-path.h" +#include "ngap-path.h" #include "nnrf-handler.h" static int server_cb(ogs_sbi_request_t *request, void *data) @@ -37,7 +38,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); amf_event_free(e); return OGS_ERROR; } @@ -45,11 +47,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { amf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = amf_event_new(AMF_EVT_SBI_CLIENT); @@ -59,7 +68,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); amf_event_free(e); return OGS_ERROR; } @@ -70,34 +80,39 @@ int amf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ - ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_AMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_SMF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NAMF_COMM); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); + + /* Initialize SCP NF Instance */ + nf_instance = ogs_sbi_self()->scp_instance; + if (nf_instance) { ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, amf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_SMF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NAMF_COMM); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); + /* Client callback is only used when NF sends to SCP */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + } + + /* Initialize NRF NF Instance */ + nf_instance = ogs_sbi_self()->nrf_instance; + if (nf_instance) { + ogs_sbi_client_t *client = NULL; /* Client callback is only used when NF sends to NRF */ client = nf_instance->client; @@ -109,48 +124,103 @@ amf_nf_fsm_init(nf_instance); } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = amf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)amf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void amf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool amf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool amf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; + ogs_sbi_nf_instance_t *nf_instance = NULL; - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(sbi_object); + ogs_assert(target_nf_type); + ogs_assert(data); - request = amf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + amf_ue_t *amf_ue = NULL; + amf_sess_t *sess = NULL; + + ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE && + sbi_object->type < OGS_SBI_OBJ_TOP); + switch(sbi_object->type) { + case OGS_SBI_OBJ_UE_TYPE: + amf_ue = (amf_ue_t *)sbi_object; + ogs_assert(amf_ue); + ogs_error("%s (NF discover) No %s", amf_ue->suci, + OpenAPI_nf_type_ToString(target_nf_type)); + ogs_assert(OGS_OK == + nas_5gs_send_gmm_reject_from_sbi(amf_ue, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); + break; + case OGS_SBI_OBJ_SESS_TYPE: + sess = (amf_sess_t *)sbi_object; + ogs_assert(sess); + ogs_error("%d:%d (NF discover) No %s", sess->psi, sess->pti, + OpenAPI_nf_type_ToString(target_nf_type)); + if (sess->payload_container_type) { + ogs_assert(OGS_OK == + nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, + AMF_NAS_BACKOFF_TIME)); + } else { + ogs_assert(OGS_OK == + ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_transport, + NGAP_CauseTransport_transport_resource_unavailable)); + } + break; + default: + ogs_fatal("(NF discover) Not implemented %s:%d", + OpenAPI_nf_type_ToString(target_nf_type), + sbi_object->type); + ogs_assert_if_reached(); + } - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + return false; + } -bool amf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } bool amf_ue_sbi_discover_and_send( - OpenAPI_nf_type_e target_nf_type, amf_ue_t *amf_ue, void *data, - ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data)) + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data), + amf_ue_t *amf_ue, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(amf_ue); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &amf_ue->sbi, - (ogs_sbi_build_f)build, amf_ue, data, - amf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &amf_ue->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, amf_ue, data); if (!xact) { ogs_error("amf_ue_sbi_discover_and_send() failed"); ogs_assert(OGS_OK == @@ -159,8 +229,10 @@ return false; } - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &amf_ue->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("amf_ue_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); ogs_assert(OGS_OK == @@ -172,19 +244,26 @@ return true; } -bool amf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - amf_sess_t *sess, int state, void *data, - ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data)) +bool amf_sess_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data), + amf_sess_t *sess, int state, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(sess); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi, - (ogs_sbi_build_f)build, sess, data, - amf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &sess->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, sess, data); if (!xact) { ogs_error("amf_sess_sbi_discover_and_send() failed"); ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, @@ -194,8 +273,10 @@ xact->state = state; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &sess->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("amf_sess_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, @@ -205,13 +286,21 @@ return true; } -static int client_discover_cb(ogs_sbi_response_t *response, void *data) +static int client_discover_cb( + int status, ogs_sbi_response_t *response, void *data) { int rv; ogs_sbi_message_t message; amf_sess_t *sess = data; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_discover_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); ogs_assert(sess); ogs_assert(sess->sbi.type == OGS_SBI_OBJ_SESS_TYPE); @@ -242,7 +331,9 @@ } amf_nnrf_handle_nf_discover_search_result( - &sess->sbi, message.SearchResult); + &sess->sbi, OpenAPI_nf_type_SMF, NULL, message.SearchResult); + + amf_sbi_select_nf(&sess->sbi, OpenAPI_nf_type_SMF, NULL); if (!OGS_SBI_NF_INSTANCE(&sess->sbi, OpenAPI_nf_type_SMF)) { ogs_error("Cannot discover %s", @@ -255,9 +346,9 @@ goto cleanup; } - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL, - amf_nsmf_pdusession_build_create_sm_context); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_create_sm_context, + sess, AMF_CREATE_SM_CONTEXT_NO_STATE, NULL); cleanup: ogs_sbi_message_free(&message); @@ -277,8 +368,10 @@ client = sess->nssf.nrf.client; ogs_assert(client); + ogs_assert(ogs_sbi_self()->nf_instance); request = amf_nnrf_disc_build_discover( - sess->nssf.nrf.id, target_nf_type, amf_self()->nf_type); + sess->nssf.nrf.id, target_nf_type, + ogs_sbi_self()->nf_instance->nf_type); ogs_expect_or_return_val(request, false); return ogs_sbi_client_send_request( @@ -294,9 +387,8 @@ memset(¶m, 0, sizeof(param)); param.upCnxState = OpenAPI_up_cnx_state_ACTIVATING; - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, state, ¶m, - amf_nsmf_pdusession_build_update_sm_context); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, sess, state, ¶m); } void amf_sbi_send_deactivate_session( @@ -313,8 +405,8 @@ param.ue_location = true; param.ue_timezone = true; - amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, - sess, state, ¶m, amf_nsmf_pdusession_build_update_sm_context); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_update_sm_context, sess, state, ¶m); } void amf_sbi_send_deactivate_all_sessions( @@ -375,9 +467,8 @@ { ogs_assert(sess); - amf_sess_sbi_discover_and_send( - OpenAPI_nf_type_SMF, sess, state, NULL, - amf_nsmf_pdusession_build_release_sm_context); + amf_sess_sbi_discover_and_send(OpenAPI_nf_type_SMF, NULL, + amf_nsmf_pdusession_build_release_sm_context, sess, state, NULL); /* Prevent to invoke SMF for this session */ CLEAR_SM_CONTEXT_REF(sess); @@ -395,12 +486,19 @@ } } -static int client_notify_cb(ogs_sbi_response_t *response, void *data) +static int client_notify_cb( + int status, ogs_sbi_response_t *response, void *data) { int rv; - ogs_sbi_message_t message; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_notify_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); rv = ogs_sbi_parse_response(&message, response);
View file
open5gs_2.4.8.tar.xz/src/amf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/amf/sbi-path.h
Changed
@@ -34,12 +34,15 @@ int amf_sbi_open(void); void amf_sbi_close(void); -bool amf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool amf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); -bool amf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - amf_ue_t *amf_ue, void *data, - ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data)); +bool amf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool amf_ue_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data), + amf_ue_t *amf_ue, void *data); #define AMF_CREATE_SM_CONTEXT_NO_STATE 0 #define AMF_UPDATE_SM_CONTEXT_ACTIVATED 11 @@ -63,9 +66,11 @@ #define AMF_REMOVE_S1_CONTEXT_BY_LO_CONNREFUSED 51 #define AMF_REMOVE_S1_CONTEXT_BY_RESET_ALL 52 #define AMF_REMOVE_S1_CONTEXT_BY_RESET_PARTIAL 53 -bool amf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - amf_sess_t *sess, int state, void *data, - ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data)); +bool amf_sess_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data), + amf_sess_t *sess, int state, void *data); bool amf_sess_sbi_discover_by_nsi( OpenAPI_nf_type_e target_nf_type, amf_sess_t *sess);
View file
open5gs_2.4.8.tar.xz/src/amf/timer.c -> open5gs_2.4.9.tar.xz/src/amf/timer.c
Changed
@@ -109,7 +109,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_timer_delete(e->timer); amf_event_free(e); } @@ -153,7 +153,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, amf_timer_get_name(e->timer_id)); amf_event_free(e); } @@ -203,7 +203,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); amf_event_free(e); } } @@ -250,7 +250,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); amf_event_free(e); } }
View file
open5gs_2.4.8.tar.xz/src/ausf/ausf-sm.c -> open5gs_2.4.9.tar.xz/src/ausf/ausf-sm.c
Changed
@@ -279,6 +279,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + ausf_ue = (ausf_ue_t *)sbi_xact->sbi_object; ogs_assert(ausf_ue); @@ -287,8 +295,10 @@ ogs_sbi_xact_remove(sbi_xact); ausf_ue = ausf_ue_cycle(ausf_ue); - ogs_assert(ausf_ue); - ogs_assert(OGS_FSM_STATE(&ausf_ue->sm)); + if (!ausf_ue) { + ogs_error("UE(ausf-ue) Context has already been removed"); + break; + } e->ausf_ue = ausf_ue; e->sbi.message = &message; @@ -323,7 +333,8 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, ausf_nf_state_exception)) - ogs_error("%s State machine exception %d", + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, e->timer_id); break; @@ -331,9 +342,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - ausf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/ausf/context.c -> open5gs_2.4.9.tar.xz/src/ausf/context.c
Changed
@@ -70,8 +70,6 @@ static int ausf_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_AUSF; - return OGS_OK; } @@ -224,15 +222,3 @@ { return ogs_pool_cycle(&ausf_ue_pool, ausf_ue); } - -void ausf_ue_select_nf(ausf_ue_t *ausf_ue, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(ausf_ue); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&ausf_ue->sbi, ausf_nf_state_registered); - else - ogs_sbi_select_first_nf( - &ausf_ue->sbi, nf_type, ausf_nf_state_registered); -}
View file
open5gs_2.4.8.tar.xz/src/ausf/context.h -> open5gs_2.4.9.tar.xz/src/ausf/context.h
Changed
@@ -39,8 +39,6 @@ #define OGS_LOG_DOMAIN __ausf_log_domain typedef struct ausf_context_s { - OpenAPI_nf_type_e nf_type; - ogs_list_t ausf_ue_list; ogs_hash_t *suci_hash; ogs_hash_t *supi_hash; @@ -99,8 +97,6 @@ ausf_ue_t *ausf_ue_cycle(ausf_ue_t *ausf_ue); -void ausf_ue_select_nf(ausf_ue_t *ausf_ue, OpenAPI_nf_type_e nf_type); - #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/src/ausf/init.c -> open5gs_2.4.9.tar.xz/src/ausf/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + ausf_context_init(); ausf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("ausf", "nrf"); + rv = ogs_sbi_context_parse_config("ausf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = ausf_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/ausf/nausf-handler.c -> open5gs_2.4.9.tar.xz/src/ausf/nausf-handler.c
Changed
@@ -55,9 +55,9 @@ ogs_assert(ausf_ue->serving_network_name); ogs_assert(true == - ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, ausf_ue, stream, - AuthenticationInfo->resynchronization_info, - ausf_nudm_ueau_build_get)); + ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + ausf_nudm_ueau_build_get, + ausf_ue, stream, AuthenticationInfo->resynchronization_info)); return true; } @@ -104,8 +104,9 @@ } ogs_assert(true == - ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, ausf_ue, stream, NULL, - ausf_nudm_ueau_build_result_confirmation_inform)); + ausf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + ausf_nudm_ueau_build_result_confirmation_inform, + ausf_ue, stream, NULL)); return true; }
View file
open5gs_2.4.8.tar.xz/src/ausf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/ausf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + ausf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - ausf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + ausf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - ausf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + ausf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = ausf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + ausf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = ausf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &ausf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &ausf_nf_state_registered); } } void ausf_nf_state_final(ogs_fsm_t *s, ausf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); ausf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void ausf_nf_state_will_register(ogs_fsm_t *s, ausf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == ausf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, ausf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case AUSF_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &ausf_nf_state_registered); } else { ogs_error("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &ausf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,17 +173,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == ausf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, ausf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, ausf_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +208,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -212,14 +231,16 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - ausf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UDM)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDM)); } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -253,7 +274,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &ausf_nf_state_exception); } @@ -261,13 +283,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -282,27 +305,31 @@ break; case AUSF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &ausf_nf_state_will_register); break; case AUSF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &ausf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &ausf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", ausf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, ausf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + ausf_event_get_name(e)); break; } } @@ -317,11 +344,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -329,8 +357,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, ausf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + ausf_event_get_name(e)); break; } } @@ -348,18 +378,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case AUSF_EVT_SBI_TIMER: @@ -370,15 +403,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &ausf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", ausf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -403,8 +438,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, ausf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + ausf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/ausf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/ausf/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *ausf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *ausf_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/ausf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/ausf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *ausf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *ausf_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/ausf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/ausf/nnrf-handler.c
Changed
@@ -170,9 +170,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); ausf_nf_fsm_init(nf_instance); @@ -251,16 +252,22 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -277,8 +284,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); ausf_nf_fsm_init(nf_instance); @@ -294,8 +302,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ausf_ue_t *ausf_ue = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -312,10 +318,6 @@ continue; } - ausf_ue = (ausf_ue_t *)sbi_object; - ogs_assert(ausf_ue); - ausf_ue_select_nf(ausf_ue, nf_instance->nf_type); - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) { @@ -334,12 +336,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_error("(NF discover) No %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); - } else { - ogs_assert(true == ausf_sbi_send(nf_instance, xact)); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == ausf_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/src/ausf/nudm-build.c -> open5gs_2.4.9.tar.xz/src/ausf/nudm-build.c
Changed
@@ -43,8 +43,9 @@ AuthenticationInfoRequest.serving_network_name = ausf_ue->serving_network_name; + ogs_assert(ogs_sbi_self()->nf_instance); AuthenticationInfoRequest.ausf_instance_id = - ogs_sbi_self()->nf_instance_id; + ogs_sbi_self()->nf_instance->id; if (data) { OpenAPI_resynchronization_info_t *recvinfo = data; @@ -88,7 +89,8 @@ AuthEvent->time_stamp = ogs_sbi_localtime_string(ogs_time_now()); ogs_expect_or_return_val(AuthEvent->time_stamp, NULL); - AuthEvent->nf_instance_id = ogs_sbi_self()->nf_instance_id; + ogs_assert(ogs_sbi_self()->nf_instance); + AuthEvent->nf_instance_id = ogs_sbi_self()->nf_instance->id; if (ausf_ue->auth_result == OpenAPI_auth_result_AUTHENTICATION_SUCCESS) AuthEvent->success = true; else
View file
open5gs_2.4.8.tar.xz/src/ausf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/ausf/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); ausf_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { ausf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = ausf_event_new(AUSF_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); ausf_event_free(e); return OGS_ERROR; } @@ -68,89 +77,97 @@ int ausf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_AUSF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AMF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NAUSF_AUTH); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); + + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, ausf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AMF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NAUSF_AUTH); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - ausf_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + ausf_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = ausf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)ausf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void ausf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool ausf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool ausf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); - - request = ausf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); + ogs_sbi_nf_instance_t *nf_instance = NULL; - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + return false; + } -bool ausf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } -bool ausf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data)) +bool ausf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data), + ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(ausf_ue); ogs_assert(stream); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &ausf_ue->sbi, - (ogs_sbi_build_f)build, ausf_ue, data, - ausf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &ausf_ue->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, ausf_ue, data); if (!xact) { ogs_error("ausf_sbi_discover_and_send() failed"); ogs_assert(true == @@ -162,8 +179,10 @@ xact->assoc_stream = stream; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)ausf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &ausf_ue->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("ausf_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); ogs_assert(true ==
View file
open5gs_2.4.8.tar.xz/src/ausf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/ausf/sbi-path.h
Changed
@@ -30,12 +30,15 @@ int ausf_sbi_open(void); void ausf_sbi_close(void); -bool ausf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool ausf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); -bool ausf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data)); +bool ausf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool ausf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(ausf_ue_t *ausf_ue, void *data), + ausf_ue_t *ausf_ue, ogs_sbi_stream_t *stream, void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/ausf/timer.c -> open5gs_2.4.9.tar.xz/src/ausf/timer.c
Changed
@@ -79,7 +79,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, ausf_timer_get_name(e->timer_id)); ausf_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/bsf/bsf-sm.c -> open5gs_2.4.9.tar.xz/src/bsf/bsf-sm.c
Changed
@@ -317,16 +317,20 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, bsf_nf_state_exception)) - ogs_error("State machine exception %d", e->timer_id); + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id, e->timer_id); break; case BSF_TIMER_SUBSCRIPTION_VALIDITY: subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - bsf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("Subscription validity expired %s", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/bsf/context.c -> open5gs_2.4.9.tar.xz/src/bsf/context.c
Changed
@@ -72,8 +72,6 @@ static int bsf_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_BSF; - return OGS_OK; } @@ -325,14 +323,3 @@ return ogs_hash_get(self.ipv6prefix_hash, &ipv6prefix, (ipv6prefix.len >> 3) + 1); } - -void bsf_sess_select_nf(bsf_sess_t *sess, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(sess); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&sess->sbi, bsf_nf_state_registered); - else - ogs_sbi_select_first_nf(&sess->sbi, nf_type, bsf_nf_state_registered); -}
View file
open5gs_2.4.8.tar.xz/src/bsf/context.h -> open5gs_2.4.9.tar.xz/src/bsf/context.h
Changed
@@ -36,8 +36,6 @@ #define OGS_LOG_DOMAIN __bsf_log_domain typedef struct bsf_context_s { - OpenAPI_nf_type_e nf_type; - ogs_hash_t *ipv4addr_hash; ogs_hash_t *ipv6prefix_hash; @@ -116,8 +114,6 @@ bsf_sess_t *bsf_sess_find_by_ipv4addr(char *ipv4addr_string); bsf_sess_t *bsf_sess_find_by_ipv6prefix(char *ipv6prefix_string); -void bsf_sess_select_nf(bsf_sess_t *sess, OpenAPI_nf_type_e nf_type); - #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/src/bsf/init.c -> open5gs_2.4.9.tar.xz/src/bsf/init.c
Changed
@@ -29,11 +29,12 @@ { int rv; + ogs_sbi_context_init(); + bsf_context_init(); bsf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("bsf", "nrf"); + rv = ogs_sbi_context_parse_config("bsf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = bsf_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/bsf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/bsf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + bsf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - bsf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + bsf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - bsf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + bsf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = bsf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + bsf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = bsf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &bsf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &bsf_nf_state_registered); } } void bsf_nf_state_final(ogs_fsm_t *s, bsf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); bsf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void bsf_nf_state_will_register(ogs_fsm_t *s, bsf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == bsf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, bsf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case BSF_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &bsf_nf_state_registered); } else { ogs_error("%s HTTP Response Status Code %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &bsf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,24 +173,26 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == bsf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, bsf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, bsf_timer_get_name(e->timer_id), e->timer_id); } break; default: ogs_error("%s Unknown event %s", - nf_instance->id, bsf_event_get_name(e)); + ogs_sbi_self()->nf_instance->id, bsf_event_get_name(e)); break; } } @@ -192,12 +209,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -215,8 +234,8 @@ break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -250,7 +269,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &bsf_nf_state_exception); } @@ -258,13 +278,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -279,27 +300,31 @@ break; case BSF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &bsf_nf_state_will_register); break; case BSF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &bsf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &bsf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", bsf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, bsf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + bsf_event_get_name(e)); break; } } @@ -314,11 +339,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -326,8 +352,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, bsf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + bsf_event_get_name(e)); break; } } @@ -345,18 +373,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case BSF_EVT_SBI_TIMER: @@ -367,15 +398,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &bsf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", bsf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -400,8 +433,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, bsf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + bsf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/bsf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/bsf/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *bsf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *bsf_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/bsf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/bsf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *bsf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *bsf_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/bsf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/bsf/nnrf-handler.c
Changed
@@ -171,9 +171,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); bsf_nf_fsm_init(nf_instance); @@ -252,16 +253,22 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -278,8 +285,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); bsf_nf_fsm_init(nf_instance); @@ -295,8 +303,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - bsf_sess_t *sess = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -313,10 +319,6 @@ continue; } - sess = (bsf_sess_t *)sbi_object; - ogs_assert(sess); - bsf_sess_select_nf(sess, nf_instance->nf_type); - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) { @@ -335,12 +337,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_error("(NF discover) No %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); - } else { - bsf_sbi_send(nf_instance, xact); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == bsf_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/src/bsf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/bsf/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); bsf_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { bsf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = bsf_event_new(BSF_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); bsf_event_free(e); return OGS_ERROR; } @@ -68,90 +77,96 @@ int bsf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_BSF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_PCF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NBSF_MANAGEMENT); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_PCF); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, bsf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_PCF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NBSF_MANAGEMENT); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_PCF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - bsf_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + bsf_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = bsf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)bsf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void bsf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool bsf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool bsf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); - - request = bsf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); + ogs_sbi_nf_instance_t *nf_instance = NULL; - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + return false; + } -bool bsf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } -bool bsf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data)) +bool bsf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data), + bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; - ogs_assert(target_nf_type); + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(sess); ogs_assert(stream); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi, - (ogs_sbi_build_f)build, sess, data, - bsf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &sess->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, sess, data); if (!xact) { ogs_error("bsf_sbi_discover_and_send() failed"); ogs_assert(true == @@ -163,8 +178,10 @@ xact->assoc_stream = stream; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)bsf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &sess->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("bsf_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); ogs_assert(true ==
View file
open5gs_2.4.8.tar.xz/src/bsf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/bsf/sbi-path.h
Changed
@@ -29,13 +29,15 @@ int bsf_sbi_open(void); void bsf_sbi_close(void); -bool bsf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool bsf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); - -bool bsf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data)); +bool bsf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool bsf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(bsf_sess_t *sess, void *data), + bsf_sess_t *sess, ogs_sbi_stream_t *stream, void *data); void bsf_sbi_send_response(ogs_sbi_stream_t *stream, int status);
View file
open5gs_2.4.8.tar.xz/src/bsf/timer.c -> open5gs_2.4.9.tar.xz/src/bsf/timer.c
Changed
@@ -81,7 +81,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, bsf_timer_get_name(e->timer_id)); bsf_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/hss/hss-s6a-path.c -> open5gs_2.4.9.tar.xz/src/hss/hss-s6a-path.c
Changed
@@ -566,7 +566,15 @@ struct avp *pdn_gw_allocation_type; struct avp *vplmn_dynamic_address_allowed; - ogs_session_t *session = &slice_data->sessioni; + ogs_session_t *session = NULL; + + if (i >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + + session = &slice_data->sessioni; ogs_assert(session); session->context_identifier = i+1;
View file
open5gs_2.4.8.tar.xz/src/hss/hss-swx-path.c -> open5gs_2.4.9.tar.xz/src/hss/hss-swx-path.c
Changed
@@ -592,7 +592,15 @@ struct avp *pdn_gw_allocation_type; struct avp *vplmn_dynamic_address_allowed; - ogs_session_t *session = &slice_data->sessioni; + ogs_session_t *session = NULL; + + if (i >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + + session = &slice_data->sessioni; ogs_assert(session); session->context_identifier = i+1;
View file
open5gs_2.4.8.tar.xz/src/meson.build -> open5gs_2.4.9.tar.xz/src/meson.build
Changed
@@ -36,6 +36,8 @@ subdir('pcrf') subdir('nrf') +subdir('scp') + subdir('udr') subdir('udm') subdir('pcf')
View file
open5gs_2.4.8.tar.xz/src/mme/emm-build.c -> open5gs_2.4.9.tar.xz/src/mme/emm-build.c
Changed
@@ -119,7 +119,8 @@ (eps_attach_result->result == OGS_NAS_ATTACH_TYPE_EPS_ATTACH)) { attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_EMM_CAUSE_PRESENT; - attach_accept->emm_cause = EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE; + attach_accept->emm_cause = + OGS_NAS_EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE; } } else { switch (eps_attach_result->result) {
View file
open5gs_2.4.8.tar.xz/src/mme/emm-handler.c -> open5gs_2.4.9.tar.xz/src/mme/emm-handler.c
Changed
@@ -126,8 +126,8 @@ ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX%d", served_tai_index); @@ -169,8 +169,8 @@ mme_selected_int_algorithm(mme_ue)); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return OGS_ERROR; } @@ -519,7 +519,7 @@ ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_assert(OGS_OK == nas_eps_send_tau_reject( - mme_ue, EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); + mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX%d", served_tai_index); @@ -637,7 +637,7 @@ ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_assert(OGS_OK == nas_eps_send_tau_reject( - mme_ue, EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); + mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX%d", served_tai_index);
View file
open5gs_2.4.8.tar.xz/src/mme/emm-sm.c -> open5gs_2.4.9.tar.xz/src/mme/emm-sm.c
Changed
@@ -133,7 +133,7 @@ ogs_info("Service request : Unknown UE"); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -142,7 +142,7 @@ ogs_warn("No Security Context : IMSI%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -151,7 +151,7 @@ ogs_warn("No Session Context : IMSI%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -160,7 +160,7 @@ ogs_warn("No active EPS bearers : IMSI%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); + OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -227,8 +227,8 @@ ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -259,7 +259,7 @@ ogs_info("TAU request : Unknown UE"); ogs_assert(OGS_OK == nas_eps_send_tau_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -268,7 +268,7 @@ ogs_warn("No PDN Connection : UE%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_tau_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, emm_state_exception); break; } @@ -277,7 +277,7 @@ ogs_warn("No active EPS bearers : IMSI%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_tau_reject(mme_ue, - EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); + OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -400,7 +400,7 @@ ogs_warn("Extended Service request : Unknown UE"); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -409,7 +409,7 @@ ogs_warn("No PDN Connection : UE%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, emm_state_exception); break; } @@ -418,7 +418,7 @@ ogs_warn("No Security Context : IMSI%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -430,7 +430,7 @@ ogs_warn("No P-TMSI : UE%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) ); mme_send_release_access_bearer_or_ue_context_release( enb_ue); @@ -457,7 +457,7 @@ mme_ue->nas_eps.service.value); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) ); OGS_FSM_TRAN(s, &emm_state_exception); break; @@ -474,7 +474,7 @@ ogs_warn("No P-TMSI : UE%s", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) ); break; } @@ -499,7 +499,7 @@ mme_ue->nas_eps.service.value); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) ); OGS_FSM_TRAN(s, &emm_state_exception); break; @@ -704,26 +704,26 @@ authentication_failure_parameter; ogs_debug("Authentication failure"); - ogs_debug(" IMSI%s EMM_CAUSE%d", mme_ue->imsi_bcd, + ogs_debug(" IMSI%s OGS_NAS_EMM_CAUSE%d", mme_ue->imsi_bcd, authentication_failure->emm_cause); CLEAR_MME_UE_TIMER(mme_ue->t3460); switch (authentication_failure->emm_cause) { - case EMM_CAUSE_MAC_FAILURE: + case OGS_NAS_EMM_CAUSE_MAC_FAILURE: ogs_warn("Authentication failure(MAC failure)"); break; - case EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE: + case OGS_NAS_EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE: ogs_error("Authentication failure" "(Non-EPS authentication unacceptable)"); break; - case EMM_CAUSE_SYNCH_FAILURE: + case OGS_NAS_EMM_CAUSE_SYNCH_FAILURE: ogs_info("Authentication failure(Synch failure)"); mme_s6a_send_air(mme_ue, authentication_failure_parameter); return; default: - ogs_error("Unknown EMM_CAUSE{%d in Authentication" + ogs_error("Unknown OGS_NAS_EMM_CAUSE{%d in Authentication" " failure", authentication_failure->emm_cause); break; @@ -837,7 +837,7 @@ ogs_debug("Service request"); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -856,8 +856,8 @@ ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -866,8 +866,8 @@ ogs_warn("%s No Security Context", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -917,7 +917,7 @@ ogs_debug("Tracking area update request"); ogs_assert(OGS_OK == nas_eps_send_tau_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; case OGS_NAS_EPS_EMM_STATUS: @@ -955,8 +955,8 @@ ogs_expect(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); } else { rv = nas_eps_send_security_mode_command(mme_ue); if (rv == OGS_OK) { @@ -1008,7 +1008,7 @@ ogs_debug("Service request"); ogs_assert(OGS_OK == nas_eps_send_service_reject(mme_ue, - EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1025,8 +1025,8 @@ ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1035,8 +1035,8 @@ ogs_warn("%s No Security Context", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1072,8 +1072,8 @@ ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1082,8 +1082,8 @@ ogs_warn("%s No Security Context", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1242,8 +1242,8 @@ ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_FSM_TRAN(s, &emm_state_exception); break; }
View file
open5gs_2.4.8.tar.xz/src/mme/esm-build.c -> open5gs_2.4.9.tar.xz/src/mme/esm-build.c
Changed
@@ -174,13 +174,13 @@ if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) { pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4; activate_default_eps_bearer_context_request->esm_cause = - ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; + OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; activate_default_eps_bearer_context_request->presencemask |= OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; } else if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) { pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6; activate_default_eps_bearer_context_request->esm_cause = - ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; + OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; activate_default_eps_bearer_context_request->presencemask |= OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; } @@ -188,7 +188,7 @@ if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) { pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6; activate_default_eps_bearer_context_request->esm_cause = - ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; + OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; activate_default_eps_bearer_context_request->presencemask |= OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; } @@ -196,7 +196,7 @@ if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) { pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4; activate_default_eps_bearer_context_request->esm_cause = - ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; + OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; activate_default_eps_bearer_context_request->presencemask |= OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; }
View file
open5gs_2.4.8.tar.xz/src/mme/esm-handler.c -> open5gs_2.4.9.tar.xz/src/mme/esm-handler.c
Changed
@@ -67,7 +67,7 @@ /* Invalid APN */ ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( - sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); + sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); ogs_warn("Invalid APN%s", req->access_point_name.apn); return OGS_ERROR; } @@ -82,7 +82,7 @@ sess->request_type.type, sess->session->session_type); ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( - sess, ESM_CAUSE_UNKNOWN_PDN_TYPE, create_action)); + sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, create_action)); return OGS_ERROR; } } else { @@ -139,7 +139,7 @@ ogs_error("No APN"); ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( - sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); + sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); return OGS_ERROR; } @@ -185,7 +185,7 @@ sess->request_type.type, sess->session->session_type); ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( - sess, ESM_CAUSE_UNKNOWN_PDN_TYPE, + sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, OGS_GTP_CREATE_IN_ATTACH_REQUEST)); return OGS_ERROR; } @@ -219,7 +219,7 @@ ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( - sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, + sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, OGS_GTP_CREATE_IN_ATTACH_REQUEST)); return OGS_ERROR; } @@ -241,7 +241,7 @@ ogs_assert(OGS_OK == nas_eps_send_bearer_resource_allocation_reject( - mme_ue, sess->pti, ESM_CAUSE_NETWORK_FAILURE)); + mme_ue, sess->pti, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); return OGS_OK; }
View file
open5gs_2.4.8.tar.xz/src/mme/esm-handler.h -> open5gs_2.4.9.tar.xz/src/mme/esm-handler.h
Changed
@@ -27,10 +27,10 @@ #endif int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, - ogs_nas_eps_pdn_connectivity_request_t *pdn_connectivity_request, + ogs_nas_eps_pdn_connectivity_request_t *req, int create_action); int esm_handle_information_response(mme_sess_t *sess, - ogs_nas_eps_esm_information_response_t *bearer_information_response); + ogs_nas_eps_esm_information_response_t *rsp); int esm_handle_bearer_resource_allocation_request( mme_bearer_t *bearer, ogs_nas_eps_message_t *message); int esm_handle_bearer_resource_modification_request(
View file
open5gs_2.4.8.tar.xz/src/mme/esm-sm.c -> open5gs_2.4.9.tar.xz/src/mme/esm-sm.c
Changed
@@ -35,13 +35,13 @@ static uint8_t gtp_cause_from_esm(uint8_t esm_cause) { switch (esm_cause) { - case ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: + case OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; - case ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION: + case OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION: return OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION; - case ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS: + case OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS: return OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER; - case ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS: + case OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS: return OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER; default: break; @@ -139,8 +139,8 @@ ogs_error("%s No Integrity Protected", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); ogs_assert(mme_ue->enb_ue); ogs_assert(OGS_OK == s1ap_send_ue_context_release_command(mme_ue->enb_ue, @@ -154,8 +154,8 @@ ogs_warn("%s No Security Context", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); ogs_assert(mme_ue->enb_ue); ogs_assert(OGS_OK == s1ap_send_ue_context_release_command(mme_ue->enb_ue, @@ -232,7 +232,7 @@ ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject(sess, - ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED, + OGS_NAS_ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED, e->create_action)); } else { rv = nas_eps_send_esm_information_request(bearer);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-context.c -> open5gs_2.4.9.tar.xz/src/mme/mme-context.c
Changed
@@ -946,6 +946,7 @@ } network_full_name->length = size*2+1; network_full_name->coding_scheme = 1; + network_full_name->ext = 1; } else if (!strcmp(network_name_key, "short")) { ogs_nas_network_name_t *network_short_name = &self.short_name; @@ -962,6 +963,7 @@ } network_short_name->length = size*2+1; network_short_name->coding_scheme = 1; + network_short_name->ext = 1; } } } else if (!strcmp(mme_key, "sgsap")) { @@ -3111,8 +3113,8 @@ ogs_error("No Bearer : EBI%d", ebi); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return NULL; } @@ -3123,8 +3125,8 @@ ogs_error("Both PTI%d and EBI%d are 0", pti, ebi); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return NULL; } @@ -3141,8 +3143,8 @@ linked_eps_bearer_identity->eps_bearer_identity); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return NULL; } } else if (message->esm.h.message_type == @@ -3160,7 +3162,8 @@ linked_eps_bearer_identity->eps_bearer_identity); ogs_assert(OGS_OK == nas_eps_send_bearer_resource_allocation_reject( - mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); + mme_ue, pti, + OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); return NULL; } @@ -3179,7 +3182,8 @@ linked_eps_bearer_identity->eps_bearer_identity); ogs_assert(OGS_OK == nas_eps_send_bearer_resource_modification_reject( - mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); + mme_ue, pti, + OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); return NULL; } } @@ -3203,7 +3207,7 @@ ogs_assert(OGS_OK == nas_eps_send_pdn_connectivity_reject( sess, - ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED, + OGS_NAS_ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED, create_action)); ogs_warn("APN duplicated %s", pdn_connectivity_request->access_point_name.apn); @@ -3226,8 +3230,8 @@ message->esm.h.message_type, pti); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); return NULL; } } @@ -3279,6 +3283,7 @@ ogs_assert(mme_ue); + ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS); for (i = 0; i < mme_ue->num_of_session; i++) { if (mme_ue->sessioni.name) ogs_free(mme_ue->sessioni.name); @@ -3295,6 +3300,7 @@ ogs_assert(mme_ue); ogs_assert(apn); + ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS); for (i = 0; i < mme_ue->num_of_session; i++) { session = &mme_ue->sessioni; ogs_assert(session->name); @@ -3312,6 +3318,7 @@ ogs_assert(mme_ue); + ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS); for (i = 0; i < mme_ue->num_of_session; i++) { session = &mme_ue->sessioni; if (session->context_identifier == mme_ue->context_identifier)
View file
open5gs_2.4.8.tar.xz/src/mme/mme-context.h -> open5gs_2.4.9.tar.xz/src/mme/mme-context.h
Changed
@@ -422,6 +422,8 @@ /* HSS Info */ ogs_bitrate_t ambr; /* UE-AMBR */ uint32_t network_access_mode; /* Permitted EPS Attach Type */ + uint8_t charging_characteristicsOGS_CHRGCHARS_LEN; /* Subscription Level Charging Characteristics */ + bool charging_characteristics_presence; uint32_t context_identifier; /* default APN */ @@ -704,7 +706,7 @@ ogs_sockaddr_t *mme_pgw_addr_find_by_apn( ogs_list_t *list, int family, char *apn); -mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *addr, ogs_sockopt_t *option); +mme_vlr_t *mme_vlr_add(ogs_sockaddr_t *sa_list, ogs_sockopt_t *option); void mme_vlr_remove(mme_vlr_t *vlr); void mme_vlr_remove_all(void); void mme_vlr_close(mme_vlr_t *vlr);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-event.c -> open5gs_2.4.9.tar.xz/src/mme/mme-event.c
Changed
@@ -125,7 +125,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_free(e->addr); if (e->pkbuf) ogs_pkbuf_free(e->pkbuf);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.4.9.tar.xz/src/mme/mme-fd-path.c
Changed
@@ -593,6 +593,8 @@ { int ret; + char bufOGS_CHRGCHARS_LEN; + struct sess_state *sess_data = NULL; struct timespec ts; struct session *session; @@ -791,10 +793,30 @@ ogs_assert(ret == 0); mme_ue->network_access_mode = hdr->avp_value->i32; } else { - ogs_error("no_Network-Access-Mode"); - error++; + mme_ue->network_access_mode = 0; + ogs_warn("no subscribed Network-Access-Mode, defaulting to PACKET_AND_CIRCUIT (0)"); } + /* AVP: '3GPP-Charging-Characteristics'(13) + * For GGSN, it contains the charging characteristics for + * this PDP Context received in the Create PDP Context + * Request Message (only available in R99 and later releases). + * For PGW, it contains the charging characteristics for the + * IP-CAN bearer. + * Reference: 3GPP TS 29.061 16.4.7.2 13 + */ + ret = fd_avp_search_avp(avp, ogs_diam_s6a_3gpp_charging_characteristics, &avpch1); + ogs_assert(ret == 0); + if (avpch1) { + ret = fd_msg_avp_hdr(avpch1, &hdr); + memcpy(mme_ue->charging_characteristics, + OGS_HEX(hdr->avp_value->os.data, (int)hdr->avp_value->os.len, buf), OGS_CHRGCHARS_LEN); + mme_ue->charging_characteristics_presence = true; + } else { + memcpy(mme_ue->charging_characteristics, (uint8_t *)"\x00\x00", OGS_CHRGCHARS_LEN); + mme_ue->charging_characteristics_presence = false; + } + /* AVP: 'AMBR'(1435) * The Amber AVP contains the Max-Requested-Bandwidth-UL and * Max-Requested-Bandwidth-DL AVPs. @@ -913,8 +935,14 @@ */ case OGS_DIAM_S6A_AVP_CODE_APN_CONFIGURATION: { - ogs_session_t *session = - &slice_data->sessionslice_data->num_of_session; + ogs_session_t *session = NULL; + + if (slice_data->num_of_session >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + session = &slice_data->sessionslice_data->num_of_session; ogs_assert(session); /* AVP: 'Service-Selection'(493) @@ -978,6 +1006,27 @@ error++; } + /* AVP: '3GPP-Charging-Characteristics'(13) + * For GGSN, it contains the charging characteristics for + * this PDP Context received in the Create PDP Context + * Request Message (only available in R99 and later releases). + * For PGW, it contains the charging characteristics for the + * IP-CAN bearer. + * Reference: 3GPP TS 29.061 16.4.7.2 13 + */ + ret = fd_avp_search_avp(avpch2, ogs_diam_s6a_3gpp_charging_characteristics, + &avpch3); + ogs_assert(ret == 0); + if (avpch3) { + ret = fd_msg_avp_hdr(avpch3, &hdr); + memcpy(session->charging_characteristics, + OGS_HEX(hdr->avp_value->os.data, (int)hdr->avp_value->os.len, buf), OGS_CHRGCHARS_LEN); + session->charging_characteristics_presence = true; + } else { + memcpy(session->charging_characteristics, (uint8_t *)"\x00\x00", OGS_CHRGCHARS_LEN); + session->charging_characteristics_presence = false; + } + /* AVP: 'Served-Party-IP-Address'(848) * The Served-Party-IP-Address AVP holds the IP address of * either the calling or called party, depending on whether
View file
open5gs_2.4.8.tar.xz/src/mme/mme-gtp-path.c -> open5gs_2.4.9.tar.xz/src/mme/mme-gtp-path.c
Changed
@@ -228,6 +228,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, sess); ogs_expect_or_return_val(xact, OGS_ERROR); xact->create_action = create_action; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -260,6 +261,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); ogs_expect_or_return_val(xact, OGS_ERROR); xact->modify_action = modify_action; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -292,6 +294,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, s11buf, timeout, sess); ogs_expect_or_return_val(xact, OGS_ERROR); xact->delete_action = action; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -470,6 +473,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); ogs_expect_or_return_val(xact, OGS_ERROR); xact->release_action = action; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -586,6 +590,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); ogs_expect_or_return_val(xact, OGS_ERROR); + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -618,6 +623,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); ogs_expect_or_return_val(xact, OGS_ERROR); xact->delete_indirect_action = action; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -652,6 +658,7 @@ xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, bearer); ogs_expect_or_return_val(xact, OGS_ERROR); xact->xid |= OGS_GTP_CMD_XACT_ID; + xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-s11-build.c -> open5gs_2.4.9.tar.xz/src/mme/mme-s11-build.c
Changed
@@ -330,9 +330,15 @@ req->ue_time_zone.data = &ue_timezone; req->ue_time_zone.len = sizeof(ue_timezone); - req->charging_characteristics.presence = 1; - req->charging_characteristics.data = (uint8_t *)"\x54\x00"; - req->charging_characteristics.len = 2; + if (session->charging_characteristics_presence == true) { + req->charging_characteristics.presence = 1; + req->charging_characteristics.data = session->charging_characteristics; + req->charging_characteristics.len = OGS_CHRGCHARS_LEN; + } else if (mme_ue->charging_characteristics_presence == true) { + req->charging_characteristics.presence = 1; + req->charging_characteristics.data = mme_ue->charging_characteristics; + req->charging_characteristics.len = OGS_CHRGCHARS_LEN; + } gtp_message.h.type = type; return ogs_gtp2_build_msg(>p_message);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-s11-build.h -> open5gs_2.4.9.tar.xz/src/mme/mme-s11-build.h
Changed
@@ -27,7 +27,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request( uint8_t type, mme_sess_t *sess, int create_action); ogs_pkbuf_t *mme_s11_build_modify_bearer_request( - uint8_t type, mme_ue_t *mme_ue, int uli_presense); + uint8_t type, mme_ue_t *mme_ue, int uli_presence); ogs_pkbuf_t *mme_s11_build_delete_session_request( uint8_t type, mme_sess_t *sess, int action); ogs_pkbuf_t *mme_s11_build_create_bearer_response(
View file
open5gs_2.4.8.tar.xz/src/mme/mme-s11-handler.c -> open5gs_2.4.9.tar.xz/src/mme/mme-s11-handler.c
Changed
@@ -36,17 +36,17 @@ { switch (gtp_cause) { case OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND: - return ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; + return OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; case OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED: - return ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED; + return OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED; case OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: - return ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; + return OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; case OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION: - return ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION; + return OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION; case OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER: - return ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS; + return OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS; case OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER: - return ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS; + return OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS; default: break; } @@ -56,7 +56,7 @@ * OGS_GTP2_CAUSE_MANDATORY_IE_MISSING * ... */ - return ESM_CAUSE_NETWORK_FAILURE; + return OGS_NAS_ESM_CAUSE_NETWORK_FAILURE; } void mme_s11_handle_echo_request( @@ -140,7 +140,7 @@ if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("%s Attach reject", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -200,7 +200,7 @@ if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("%s Attach reject", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -224,7 +224,7 @@ if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("%s Attach reject", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -244,7 +244,7 @@ if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("%s Attach reject", mme_ue->imsi_bcd); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -611,8 +611,8 @@ ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); } } @@ -951,7 +951,8 @@ /* MME received Bearer Resource Modification Request */ ogs_assert(OGS_OK == nas_eps_send_bearer_resource_modification_reject( - mme_ue, sess->pti, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED)); + mme_ue, sess->pti, + OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED)); } ogs_assert(OGS_OK == @@ -1111,7 +1112,7 @@ * Check MME-UE Context ***********************/ if (!mme_ue_from_teid) { - ogs_error("No Context in TEID"); + ogs_error("No Context in TEID ACTION:%d", action); } /******************** @@ -1123,7 +1124,7 @@ cause_value = cause->value; if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) - ogs_error("GTP Failed CAUSE:%d", cause_value); + ogs_error("GTP Failed CAUSE:%d, ACTION:%d", cause_value, action); } /********************
View file
open5gs_2.4.8.tar.xz/src/mme/mme-s11-handler.h -> open5gs_2.4.9.tar.xz/src/mme/mme-s11-handler.h
Changed
@@ -41,13 +41,13 @@ ogs_gtp2_delete_session_response_t *rsp); void mme_s11_handle_create_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, - ogs_gtp2_create_bearer_request_t *rsp); + ogs_gtp2_create_bearer_request_t *req); void mme_s11_handle_update_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, - ogs_gtp2_update_bearer_request_t *rsp); + ogs_gtp2_update_bearer_request_t *req); void mme_s11_handle_delete_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, - ogs_gtp2_delete_bearer_request_t *rsp); + ogs_gtp2_delete_bearer_request_t *req); void mme_s11_handle_release_access_bearers_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
View file
open5gs_2.4.8.tar.xz/src/mme/mme-s6a-handler.c -> open5gs_2.4.9.tar.xz/src/mme/mme-s6a-handler.c
Changed
@@ -67,10 +67,13 @@ mme_session_remove_all(mme_ue); - mme_ue->num_of_session = slice_data->num_of_session; - mme_ue->context_identifier = slice_data->context_identifier; - for (i = 0; i < slice_data->num_of_session; i++) { + if (i >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + mme_ue->sessioni.name = ogs_strdup(slice_data->sessioni.name); ogs_assert(mme_ue->sessioni.name); @@ -88,5 +91,13 @@ memcpy(&mme_ue->sessioni.smf_ip, &slice_data->sessioni.smf_ip, sizeof(mme_ue->sessioni.smf_ip)); + + memcpy(&mme_ue->sessioni.charging_characteristics, &slice_data->sessioni.charging_characteristics, + sizeof(mme_ue->sessioni.charging_characteristics)); + mme_ue->sessioni.charging_characteristics_presence = + slice_data->sessioni.charging_characteristics_presence; } + + mme_ue->num_of_session = i; + mme_ue->context_identifier = slice_data->context_identifier; }
View file
open5gs_2.4.8.tar.xz/src/mme/mme-sm.c -> open5gs_2.4.9.tar.xz/src/mme/mme-sm.c
Changed
@@ -45,18 +45,19 @@ switch (*dia_exp_err) { case OGS_DIAM_S6A_ERROR_USER_UNKNOWN: /* 5001 */ ogs_info("%s User Unknown in HSS DB", mme_ue->imsi_bcd); - return EMM_CAUSE_PLMN_NOT_ALLOWED; + return OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED; case OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION: /* 5420 */ /* FIXME: Error diagnostic? */ - return EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; + return OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; case OGS_DIAM_S6A_ERROR_RAT_NOT_ALLOWED: /* 5421 */ - return EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA; + return OGS_NAS_EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA; case OGS_DIAM_S6A_ERROR_ROAMING_NOT_ALLOWED: /* 5004 */ - return EMM_CAUSE_PLMN_NOT_ALLOWED; - //return EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN; (ODB_HPLMN_APN) - //return EMM_CAUSE_ESM_FAILURE; (ODB_ALL_APN) + return OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED; + /* return OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN; + * (ODB_HPLMN_APN) */ + /* return OGS_NAS_EMM_CAUSE_ESM_FAILURE; (ODB_ALL_APN) */ case OGS_DIAM_S6A_AUTHENTICATION_DATA_UNAVAILABLE: /* 4181 */ - return EMM_CAUSE_NETWORK_FAILURE; + return OGS_NAS_EMM_CAUSE_NETWORK_FAILURE; } } if (dia_err) { @@ -64,21 +65,21 @@ case ER_DIAMETER_AUTHORIZATION_REJECTED: /* 5003 */ case ER_DIAMETER_UNABLE_TO_DELIVER: /* 3002 */ case ER_DIAMETER_REALM_NOT_SERVED: /* 3003 */ - return EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; + return OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; case ER_DIAMETER_UNABLE_TO_COMPLY: /* 5012 */ case ER_DIAMETER_INVALID_AVP_VALUE: /* 5004 */ case ER_DIAMETER_AVP_UNSUPPORTED: /* 5001 */ case ER_DIAMETER_MISSING_AVP: /* 5005 */ case ER_DIAMETER_RESOURCES_EXCEEDED: /* 5006 */ case ER_DIAMETER_AVP_OCCURS_TOO_MANY_TIMES: /* 5009 */ - return EMM_CAUSE_NETWORK_FAILURE; + return OGS_NAS_EMM_CAUSE_NETWORK_FAILURE; } } ogs_error("Unexpected Diameter Result Code %d/%d, defaulting to severe " "network failure", dia_err ? *dia_err : -1, dia_exp_err ? *dia_exp_err : -1); - return EMM_CAUSE_SEVERE_NETWORK_FAILURE; + return OGS_NAS_EMM_CAUSE_SEVERE_NETWORK_FAILURE; } void mme_state_initial(ogs_fsm_t *s, mme_event_t *e) @@ -191,7 +192,7 @@ else enb->max_num_of_ostreams = max_num_of_ostreams; - ogs_info("eNB-N2%s max_num_of_ostreams : %d", + ogs_info("eNB-S1%s max_num_of_ostreams : %d", OGS_ADDR(enb->sctp.addr, buf), enb->max_num_of_ostreams); break; @@ -455,11 +456,11 @@ uint8_t emm_cause = emm_cause_from_diameter( mme_ue, s6a_message->err, s6a_message->exp_err); - ogs_info("%s Attach reject EMM_CAUSE:%d", + ogs_info("%s Attach reject OGS_NAS_EMM_CAUSE:%d", mme_ue->imsi_bcd, emm_cause); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - emm_cause, ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); ogs_assert(OGS_OK == s1ap_send_ue_context_release_command(enb_ue, @@ -486,8 +487,8 @@ ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); } } else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST) { ogs_assert(OGS_OK == @@ -562,6 +563,13 @@ if (gtp_message.h.teid_presence && gtp_message.h.teid != 0) { /* Cause is not "Context not found" */ mme_ue = mme_ue_find_by_teid(gtp_message.h.teid); + } else if (xact->local_teid) { /* rx no TEID or TEID=0 */ + /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the TEID we + * locally stored in xact when sending the original request: */ + mme_ue = mme_ue_find_by_teid(xact->local_teid); } switch (gtp_message.h.type) { @@ -572,14 +580,17 @@ mme_s11_handle_echo_response(xact, >p_message.echo_response); break; case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_create_session_response( xact, mme_ue, >p_message.create_session_response); break; case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_modify_bearer_response( xact, mme_ue, >p_message.modify_bearer_response); break; case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_delete_session_response( xact, mme_ue, >p_message.delete_session_response); break; @@ -596,6 +607,7 @@ xact, mme_ue, >p_message.delete_bearer_request); break; case OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_release_access_bearers_response( xact, mme_ue, >p_message.release_access_bearers_response); break; @@ -604,16 +616,19 @@ xact, mme_ue, >p_message.downlink_data_notification); break; case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_create_indirect_data_forwarding_tunnel_response( xact, mme_ue, >p_message.create_indirect_data_forwarding_tunnel_response); break; case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( xact, mme_ue, >p_message.delete_indirect_data_forwarding_tunnel_response); break; case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); mme_s11_handle_bearer_resource_failure_indication( xact, mme_ue, >p_message.bearer_resource_failure_indication);
View file
open5gs_2.4.8.tar.xz/src/mme/mme-timer.c -> open5gs_2.4.9.tar.xz/src/mme/mme-timer.c
Changed
@@ -111,7 +111,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_timer_delete(e->timer); mme_event_free(e); } @@ -131,7 +131,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); mme_event_free(e); } } @@ -174,7 +174,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); mme_event_free(e); } } @@ -196,7 +196,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); mme_event_free(e); } } @@ -217,7 +217,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); mme_event_free(e); } } @@ -238,7 +238,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); mme_event_free(e); } }
View file
open5gs_2.4.8.tar.xz/src/mme/nas-path.c -> open5gs_2.4.9.tar.xz/src/mme/nas-path.c
Changed
@@ -134,7 +134,7 @@ mme_sess_t *sess = NULL; ogs_pkbuf_t *esmbuf = NULL, *emmbuf = NULL; - ogs_assert(mme_ue); + ogs_expect_or_return_val(mme_ue, OGS_ERROR); ogs_debug("%s Attach reject", mme_ue->imsi_bcd); ogs_debug(" Cause%d", emm_cause); @@ -301,7 +301,7 @@ /* During the UE-attach process, we'll send Attach-Reject * with pyggybacking PDN-connectivity-Reject */ rv = nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, esm_cause); + OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, esm_cause); ogs_expect(rv == OGS_OK); } else { esmbuf = esm_build_pdn_connectivity_reject( @@ -450,7 +450,7 @@ ogs_assert(mme_ue); esmbuf = esm_build_deactivate_bearer_context_request( - bearer, ESM_CAUSE_REGULAR_DEACTIVATION); + bearer, OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ogs_expect_or_return_val(esmbuf, OGS_ERROR); s1apbuf = s1ap_build_e_rab_release_command(bearer, esmbuf,
View file
open5gs_2.4.8.tar.xz/src/mme/s1ap-path.c -> open5gs_2.4.9.tar.xz/src/mme/s1ap-path.c
Changed
@@ -133,7 +133,7 @@ e->create_action = create_action; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); mme_event_free(e); } @@ -221,7 +221,7 @@ e->pkbuf = nasbuf; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("s1ap_send_to_nas() failed:%d", (int)rv); + ogs_error("s1ap_send_to_nas() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); mme_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/mme/s1ap-sctp.c -> open5gs_2.4.9.tar.xz/src/mme/s1ap-sctp.c
Changed
@@ -240,8 +240,14 @@ s1ap_event_push(MME_EVT_S1AP_MESSAGE, sock, addr, pkbuf, 0, 0); return; } else { - ogs_fatal("Invalid flag(0x%x)", flags); - ogs_assert_if_reached(); + if (ogs_socket_errno != OGS_EAGAIN) { + ogs_fatal("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); + ogs_assert_if_reached(); + } else { + ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); + } } ogs_pkbuf_free(pkbuf);
View file
open5gs_2.4.8.tar.xz/src/mme/sgsap-handler.c -> open5gs_2.4.9.tar.xz/src/mme/sgsap-handler.c
Changed
@@ -48,8 +48,10 @@ ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - if (!root) + if (!root) { + ogs_error("!root"); goto error; + } iter = root; while (iter) { @@ -73,20 +75,29 @@ ogs_tlv_free_all(root); - if (!nas_mobile_identity_imsi || !lai) + if (!nas_mobile_identity_imsi || !lai) { + ogs_error("!nas_mobile_identity_imsi || !lai"); goto error; - if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN"); goto error; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else + } else { + ogs_error("nas_mobile_identity_imsi->type == " + "OGS_NAS_MOBILE_IDENTITY_IMSI"); goto error; + } - if (!mme_ue) + if (!mme_ue) { + ogs_error("!mme_ue"); goto error; + } ogs_debug(" IMSI%s", mme_ue->imsi_bcd); if (lai) { @@ -113,8 +124,8 @@ error: ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); mme_send_delete_session_or_mme_ue_context_release(mme_ue); } @@ -138,8 +149,10 @@ ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - if (!root) + if (!root) { + ogs_error("!root"); goto error; + } iter = root; while (iter) { @@ -163,17 +176,24 @@ ogs_tlv_free_all(root); - if (!nas_mobile_identity_imsi || !emm_cause) + if (!nas_mobile_identity_imsi || !emm_cause) { + ogs_error("!nas_mobile_identity_imsi || !emm_cause"); goto error; - if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN"); goto error; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else + } else { + ogs_error("nas_mobile_identity_imsi->type == " + "OGS_NAS_MOBILE_IDENTITY_IMSI"); goto error; + } ogs_expect_or_return(mme_ue); @@ -185,7 +205,7 @@ ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - emm_cause, ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); mme_send_delete_session_or_mme_ue_context_release(mme_ue); return;
View file
open5gs_2.4.8.tar.xz/src/nrf/init.c -> open5gs_2.4.9.tar.xz/src/nrf/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + nrf_context_init(); nrf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("nrf", NULL); + rv = ogs_sbi_context_parse_config("nrf", NULL, "scp"); if (rv != OGS_OK) return rv; rv = nrf_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/nrf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/nrf/nnrf-build.c
Changed
@@ -20,7 +20,7 @@ #include "nnrf-build.h" ogs_sbi_request_t *nrf_nnrf_nfm_build_nf_status_notify( - ogs_sbi_client_t *client, ogs_sbi_subscription_t *subscription, + ogs_sbi_subscription_t *subscription, OpenAPI_notification_event_type_e event, ogs_sbi_nf_instance_t *nf_instance) { @@ -32,10 +32,10 @@ OpenAPI_notification_data_t *NotificationData = NULL; - ogs_assert(client); ogs_assert(subscription); ogs_assert(event); ogs_assert(nf_instance); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_POST;
View file
open5gs_2.4.8.tar.xz/src/nrf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/nrf/nnrf-build.h
Changed
@@ -28,7 +28,7 @@ #endif ogs_sbi_request_t *nrf_nnrf_nfm_build_nf_status_notify( - ogs_sbi_client_t *client, ogs_sbi_subscription_t *subscription, + ogs_sbi_subscription_t *subscription, OpenAPI_notification_event_type_e event, ogs_sbi_nf_instance_t *nf_instance);
View file
open5gs_2.4.8.tar.xz/src/nrf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/nrf/nnrf-handler.c
Changed
@@ -400,6 +400,7 @@ ogs_sbi_message_t sendmsg; ogs_sbi_response_t *response = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_discovery_option_t *discovery_option = NULL; OpenAPI_search_result_t *SearchResult = NULL; int i; @@ -437,12 +438,36 @@ SearchResult->nf_instances = OpenAPI_list_create(); ogs_assert(SearchResult->nf_instances); + if (recvmsg->param.discovery_option) + discovery_option = recvmsg->param.discovery_option; + + if (discovery_option) { + if (discovery_option->target_nf_instance_id) { + ogs_debug("target-nf-instance-id%s", + discovery_option->target_nf_instance_id); + } + if (discovery_option->requester_nf_instance_id) { + ogs_debug("requester-nf-instance-id%s", + discovery_option->requester_nf_instance_id); + } + if (discovery_option->num_of_service_names) { + for (i = 0; i < discovery_option->num_of_service_names; i++) + ogs_debug("%d service-names%s", i, + discovery_option->service_namesi); + } + } + i = 0; ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { if (nf_instance->nf_type != recvmsg->param.target_nf_type) continue; - if (nf_instance->nf_type == recvmsg->param.requester_nf_type) - continue; + + if (discovery_option) { + if (discovery_option->target_nf_instance_id && + strcmp(nf_instance->id, + discovery_option->target_nf_instance_id) != 0) + continue; + } if (!recvmsg->param.limit || (recvmsg->param.limit && i < recvmsg->param.limit)) {
View file
open5gs_2.4.8.tar.xz/src/nrf/nrf-sm.c -> open5gs_2.4.9.tar.xz/src/nrf/nrf-sm.c
Changed
@@ -105,7 +105,8 @@ if (!nf_instance) { SWITCH(message.h.method) CASE(OGS_SBI_HTTP_METHOD_PUT) - if (ogs_sbi_nf_instance_maximum_number_is_reached()) { + if (ogs_sbi_nf_instance_maximum_number_is_reached()) + { ogs_warn("Can't add instance %s " "due to insufficient space", message.h.resource.component1); @@ -118,9 +119,11 @@ message.h.resource.component1)); break; } - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); + nrf_nf_fsm_init(nf_instance); break; DEFAULT
View file
open5gs_2.4.8.tar.xz/src/nrf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/nrf/sbi-path.c
Changed
@@ -35,7 +35,11 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + if (rv != OGS_DONE) + ogs_error("ogs_queue_push() failed:%d", (int)rv); + else + ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); nrf_event_free(e); return OGS_ERROR; } @@ -43,12 +47,19 @@ return OGS_OK; } -static int client_notify_cb(ogs_sbi_response_t *response, void *data) +static int client_notify_cb( + int status, ogs_sbi_response_t *response, void *data) { int rv; - ogs_sbi_message_t message; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_notify_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); rv = ogs_sbi_parse_response(&message, response); @@ -69,6 +80,26 @@ int nrf_sbi_open(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + + /* Initialize SCP NF Instance */ + nf_instance = ogs_sbi_self()->scp_instance; + if (nf_instance) { + ogs_sbi_client_t *client = NULL; + + /* Client callback is only used when NF sends to SCP */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_notify_cb; + } + + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = nrf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)nrf_nf_state_registered; + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) return OGS_ERROR; @@ -77,6 +108,7 @@ void nrf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } @@ -92,10 +124,10 @@ ogs_assert(client); request = nrf_nnrf_nfm_build_nf_status_notify( - client, subscription, event, nf_instance); + subscription, event, nf_instance); ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request(client, client_notify_cb, request, NULL); + return ogs_sbi_scp_send_request(client, client_notify_cb, request, NULL); } bool nrf_nnrf_nfm_send_nf_status_notify_all(
View file
open5gs_2.4.8.tar.xz/src/nrf/timer.c -> open5gs_2.4.9.tar.xz/src/nrf/timer.c
Changed
@@ -68,7 +68,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); nrf_event_free(e); } } @@ -82,3 +82,8 @@ { timer_send_event(NRF_TIMER_SUBSCRIPTION_VALIDITY, data); } + +void nrf_timer_sbi_client_wait_expire(void *data) +{ + timer_send_event(NRF_TIMER_SBI_CLIENT_WAIT, data); +}
View file
open5gs_2.4.8.tar.xz/src/nrf/timer.h -> open5gs_2.4.9.tar.xz/src/nrf/timer.h
Changed
@@ -32,6 +32,7 @@ NRF_TIMER_NF_INSTANCE_NO_HEARTBEAT, NRF_TIMER_SUBSCRIPTION_VALIDITY, + NRF_TIMER_SBI_CLIENT_WAIT, MAX_NUM_OF_NRF_TIMER, @@ -48,6 +49,7 @@ void nrf_timer_nf_instance_no_heartbeat(void *data); void nrf_timer_subscription_validity(void *data); +void nrf_timer_sbi_client_wait_expire(void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/nssf/context.c -> open5gs_2.4.9.tar.xz/src/nssf/context.c
Changed
@@ -59,8 +59,6 @@ static int nssf_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_NSSF; - return OGS_OK; }
View file
open5gs_2.4.8.tar.xz/src/nssf/context.h -> open5gs_2.4.9.tar.xz/src/nssf/context.h
Changed
@@ -38,8 +38,6 @@ #define OGS_LOG_DOMAIN __nssf_log_domain typedef struct nssf_context_s { - OpenAPI_nf_type_e nf_type; - ogs_list_t nsi_list; /* NSI List */ } nssf_context_t;
View file
open5gs_2.4.8.tar.xz/src/nssf/init.c -> open5gs_2.4.9.tar.xz/src/nssf/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + nssf_context_init(); nssf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("nssf", "nrf"); + rv = ogs_sbi_context_parse_config("nssf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = nssf_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/nssf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/nssf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + nssf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - nssf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + nssf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - nssf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + nssf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = nssf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + nssf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = nssf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &nssf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &nssf_nf_state_registered); } } void nssf_nf_state_final(ogs_fsm_t *s, nssf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); nssf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void nssf_nf_state_will_register(ogs_fsm_t *s, nssf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == nssf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, nssf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case NSSF_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &nssf_nf_state_registered); } else { ogs_error("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &nssf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,17 +173,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == nssf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, nssf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, nssf_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +208,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -214,8 +233,8 @@ break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -249,7 +268,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &nssf_nf_state_exception); } @@ -257,13 +277,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -278,27 +299,31 @@ break; case NSSF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &nssf_nf_state_will_register); break; case NSSF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &nssf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &nssf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", nssf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, nssf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + nssf_event_get_name(e)); break; } } @@ -313,11 +338,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -325,8 +351,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, nssf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + nssf_event_get_name(e)); break; } } @@ -344,18 +372,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case NSSF_EVT_SBI_TIMER: @@ -366,15 +397,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &nssf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", nssf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -399,8 +432,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, nssf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + nssf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/nssf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/nssf/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *nssf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *nssf_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/nssf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/nssf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *nssf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *nssf_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/nssf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/nssf/nnrf-handler.c
Changed
@@ -170,9 +170,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); nssf_nf_fsm_init(nf_instance);
View file
open5gs_2.4.8.tar.xz/src/nssf/nssf-sm.c -> open5gs_2.4.9.tar.xz/src/nssf/nssf-sm.c
Changed
@@ -234,7 +234,8 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, nssf_nf_state_exception)) - ogs_error("%s State machine exception %d", + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, e->timer_id); break; @@ -242,9 +243,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - nssf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/nssf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/nssf/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); nssf_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { nssf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = nssf_event_new(NSSF_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); nssf_event_free(e); return OGS_ERROR; } @@ -68,66 +77,55 @@ int nssf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_NSSF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AMF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NNSSF_NSSELECTION); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V2, + (char*)OGS_SBI_API_V2_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, nssf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AMF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NNSSF_NSSELECTION); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V2, - (char*)OGS_SBI_API_V2_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - nssf_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + nssf_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = nssf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)nssf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void nssf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } - -bool nssf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) -{ - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); - - request = nssf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); - - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -}
View file
open5gs_2.4.8.tar.xz/src/nssf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/nssf/sbi-path.h
Changed
@@ -29,8 +29,6 @@ int nssf_sbi_open(void); void nssf_sbi_close(void); -bool nssf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/src/nssf/timer.c -> open5gs_2.4.9.tar.xz/src/nssf/timer.c
Changed
@@ -64,7 +64,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, nssf_timer_get_name(e->timer_id)); nssf_event_free(e); } @@ -94,3 +94,8 @@ { sbi_timer_send_event(NSSF_TIMER_SUBSCRIPTION_VALIDITY, data); } + +void nssf_timer_sbi_client_wait_expire(void *data) +{ + sbi_timer_send_event(NSSF_TIMER_SBI_CLIENT_WAIT, data); +}
View file
open5gs_2.4.8.tar.xz/src/nssf/timer.h -> open5gs_2.4.9.tar.xz/src/nssf/timer.h
Changed
@@ -35,6 +35,7 @@ NSSF_TIMER_NF_INSTANCE_NO_HEARTBEAT, NSSF_TIMER_NF_INSTANCE_VALIDITY, NSSF_TIMER_SUBSCRIPTION_VALIDITY, + NSSF_TIMER_SBI_CLIENT_WAIT, MAX_NUM_OF_NSSF_TIMER, @@ -47,6 +48,7 @@ void nssf_timer_nf_instance_no_heartbeat(void *data); void nssf_timer_nf_instance_validity(void *data); void nssf_timer_subscription_validity(void *data); +void nssf_timer_sbi_client_wait_expire(void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/pcf/context.c -> open5gs_2.4.9.tar.xz/src/pcf/context.c
Changed
@@ -85,8 +85,6 @@ static int pcf_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_PCF; - return OGS_OK; } @@ -501,28 +499,6 @@ return ogs_pool_cycle(&pcf_sess_pool, sess); } -void pcf_ue_select_nf(pcf_ue_t *pcf_ue, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(pcf_ue); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&pcf_ue->sbi, pcf_nf_state_registered); - else - ogs_sbi_select_first_nf(&pcf_ue->sbi, nf_type, pcf_nf_state_registered); -} - -void pcf_sess_select_nf(pcf_sess_t *sess, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(sess); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&sess->sbi, pcf_nf_state_registered); - else - ogs_sbi_select_first_nf(&sess->sbi, nf_type, pcf_nf_state_registered); -} - pcf_app_t *pcf_app_add(pcf_sess_t *sess) { pcf_app_t *app = NULL;
View file
open5gs_2.4.8.tar.xz/src/pcf/context.h -> open5gs_2.4.9.tar.xz/src/pcf/context.h
Changed
@@ -40,8 +40,6 @@ #define OGS_LOG_DOMAIN __pcf_log_domain typedef struct pcf_context_s { - OpenAPI_nf_type_e nf_type; - ogs_list_t pcf_ue_list; ogs_hash_t *supi_hash; @@ -186,9 +184,6 @@ pcf_ue_t *pcf_ue_cycle(pcf_ue_t *pcf_ue); pcf_sess_t *pcf_sess_cycle(pcf_sess_t *sess); -void pcf_ue_select_nf(pcf_ue_t *pcf_ue, OpenAPI_nf_type_e nf_type); -void pcf_sess_select_nf(pcf_sess_t *sess, OpenAPI_nf_type_e nf_type); - pcf_app_t *pcf_app_add(pcf_sess_t *sess); int pcf_app_remove(pcf_app_t *app); void pcf_app_remove_all(pcf_sess_t *sess);
View file
open5gs_2.4.8.tar.xz/src/pcf/init.c -> open5gs_2.4.9.tar.xz/src/pcf/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + pcf_context_init(); pcf_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("pcf", "nrf"); + rv = ogs_sbi_context_parse_config("pcf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = pcf_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/pcf/nbsf-build.c -> open5gs_2.4.9.tar.xz/src/pcf/nbsf-build.c
Changed
@@ -63,7 +63,7 @@ ogs_expect_or_return_val(sess->dnn, NULL); PcfBinding.dnn = sess->dnn; - nf_instance = ogs_sbi_nf_instance_find(ogs_sbi_self()->nf_instance_id); + nf_instance = ogs_sbi_self()->nf_instance; ogs_expect_or_return_val(nf_instance, NULL); nf_service = ogs_list_first(&nf_instance->nf_service_list); ogs_expect_or_return_val(nf_service, NULL);
View file
open5gs_2.4.8.tar.xz/src/pcf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/pcf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + pcf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - pcf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + pcf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - pcf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + pcf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = pcf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + pcf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = pcf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &pcf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &pcf_nf_state_registered); } } void pcf_nf_state_final(ogs_fsm_t *s, pcf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); pcf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void pcf_nf_state_will_register(ogs_fsm_t *s, pcf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == pcf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, pcf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case PCF_EVT_SBI_CLIENT: @@ -133,20 +146,23 @@ OGS_FSM_TRAN(s, &pcf_nf_state_registered); } else { ogs_error("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &pcf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, + message->h.service.name); END break; @@ -158,17 +174,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == pcf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, pcf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, pcf_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +209,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -212,17 +232,21 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - pcf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_BSF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_BSF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - pcf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UDR)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDR)); } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -256,7 +280,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &pcf_nf_state_exception); } @@ -264,13 +289,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -285,27 +311,31 @@ break; case PCF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &pcf_nf_state_will_register); break; case PCF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &pcf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &pcf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", pcf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, pcf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + pcf_event_get_name(e)); break; } } @@ -320,11 +350,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -332,8 +363,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, pcf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + pcf_event_get_name(e)); break; } } @@ -351,18 +384,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case PCF_EVT_SBI_TIMER: @@ -373,15 +409,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &pcf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", pcf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -406,8 +444,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, pcf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + pcf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/pcf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/pcf/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *pcf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *pcf_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/pcf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/pcf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *pcf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *pcf_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/pcf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/pcf/nnrf-handler.c
Changed
@@ -171,9 +171,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); pcf_nf_fsm_init(nf_instance); @@ -252,18 +253,23 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; - pcf_ue_t *pcf_ue = NULL; - pcf_sess_t *sess = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; + ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -280,8 +286,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); pcf_nf_fsm_init(nf_instance); @@ -297,9 +304,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - pcf_ue_t *pcf_ue = NULL; - pcf_sess_t *sess = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -316,23 +320,6 @@ continue; } - switch(sbi_object->type) { - case OGS_SBI_OBJ_UE_TYPE: - pcf_ue = (pcf_ue_t *)sbi_object; - ogs_assert(pcf_ue); - pcf_ue_select_nf(pcf_ue, nf_instance->nf_type); - break; - case OGS_SBI_OBJ_SESS_TYPE: - sess = (pcf_sess_t *)sbi_object; - ogs_assert(sess); - pcf_sess_select_nf(sess, nf_instance->nf_type); - break; - default: - ogs_fatal("(NF discover search result) Not implemented %d", - sbi_object->type); - ogs_assert_if_reached(); - } - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) { @@ -351,31 +338,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE && - sbi_object->type < OGS_SBI_OBJ_TOP); - switch(sbi_object->type) { - case OGS_SBI_OBJ_UE_TYPE: - pcf_ue = (pcf_ue_t *)sbi_object; - ogs_assert(pcf_ue); - ogs_error("%s (NF discover) No %s", pcf_ue->supi, - OpenAPI_nf_type_ToString(xact->target_nf_type)); - break; - case OGS_SBI_OBJ_SESS_TYPE: - sess = (pcf_sess_t *)sbi_object; - ogs_assert(sess); - ogs_error("%d (NF discover) No %s", sess->psi, - OpenAPI_nf_type_ToString(xact->target_nf_type)); - break; - default: - ogs_fatal("(NF discover) Not implemented %s:%d", - OpenAPI_nf_type_ToString(xact->target_nf_type), - sbi_object->type); - ogs_assert_if_reached(); - } - } else { - ogs_assert(true == pcf_sbi_send(nf_instance, xact)); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == pcf_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/src/pcf/npcf-handler.c -> open5gs_2.4.9.tar.xz/src/pcf/npcf-handler.c
Changed
@@ -148,8 +148,8 @@ pcf_ue->subscribed_ue_ambr, PolicyAssociationRequest->ue_ambr); ogs_assert(true == - pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDR, pcf_ue, stream, NULL, - pcf_nudr_dr_build_query_am_data)); + pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + pcf_nudr_dr_build_query_am_data, pcf_ue, stream, NULL)); return true; } @@ -298,8 +298,8 @@ sess->subscribed_default_qos, SmPolicyContextData->subs_def_qos); ogs_assert(true == - pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_UDR, sess, stream, NULL, - pcf_nudr_dr_build_query_sm_data)); + pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + pcf_nudr_dr_build_query_sm_data, sess, stream, NULL)); return true; @@ -352,9 +352,8 @@ ogs_assert(true == ogs_sbi_server_send_response(stream, response)); } else { ogs_assert(true == - pcf_sess_sbi_discover_and_send( - OpenAPI_nf_type_BSF, sess, stream, NULL, - pcf_nbsf_management_build_de_register)); + pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, NULL, + pcf_nbsf_management_build_de_register, sess, stream, NULL)); } return true;
View file
open5gs_2.4.8.tar.xz/src/pcf/nudr-handler.c -> open5gs_2.4.9.tar.xz/src/pcf/nudr-handler.c
Changed
@@ -194,9 +194,8 @@ } ogs_assert(true == - pcf_sess_sbi_discover_and_send( - OpenAPI_nf_type_BSF, sess, stream, NULL, - pcf_nbsf_management_build_register)); + pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, NULL, + pcf_nbsf_management_build_register, sess, stream, NULL)); return true;
View file
open5gs_2.4.8.tar.xz/src/pcf/pcf-sm.c -> open5gs_2.4.9.tar.xz/src/pcf/pcf-sm.c
Changed
@@ -395,6 +395,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + pcf_ue = (pcf_ue_t *)sbi_xact->sbi_object; ogs_assert(pcf_ue); @@ -403,7 +411,11 @@ ogs_sbi_xact_remove(sbi_xact); pcf_ue = pcf_ue_cycle(pcf_ue); - ogs_assert(pcf_ue); + if (!pcf_ue) { + ogs_error("UE(pcf_ue) Context " + "has already been removed"); + break; + } e->pcf_ue = pcf_ue; e->sbi.message = &message; @@ -419,6 +431,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + sess = (pcf_sess_t *)sbi_xact->sbi_object; ogs_assert(sess); @@ -427,7 +447,10 @@ ogs_sbi_xact_remove(sbi_xact); sess = pcf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } pcf_ue = sess->pcf_ue; ogs_assert(pcf_ue); @@ -467,6 +490,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + sess = (pcf_sess_t *)sbi_xact->sbi_object; ogs_assert(sess); @@ -475,7 +506,10 @@ ogs_sbi_xact_remove(sbi_xact); sess = pcf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } pcf_ue = sess->pcf_ue; ogs_assert(pcf_ue); @@ -527,7 +561,8 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, pcf_nf_state_exception)) - ogs_error("%s State machine exception %d", + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, e->timer_id); break; @@ -535,9 +570,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - pcf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id); @@ -565,12 +602,22 @@ case OGS_SBI_OBJ_UE_TYPE: pcf_ue = (pcf_ue_t *)sbi_object; ogs_assert(pcf_ue); + pcf_ue = pcf_ue_cycle(pcf_ue); + if (!pcf_ue) { + ogs_error("UE(pcf_ue) has already been removed"); + break; + } ogs_error("%s Cannot receive SBI message", pcf_ue->supi); break; case OGS_SBI_OBJ_SESS_TYPE: sess = (pcf_sess_t *)sbi_object; ogs_assert(sess); + sess = pcf_sess_cycle(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } ogs_error("%d Cannot receive SBI message", sess->psi); break;
View file
open5gs_2.4.8.tar.xz/src/pcf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/pcf/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); pcf_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { pcf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = pcf_event_new(PCF_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); pcf_event_free(e); return OGS_ERROR; } @@ -68,111 +77,142 @@ int pcf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_PCF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_SMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_NEF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NPCF_AM_POLICY_CONTROL); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_NEF); + + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NPCF_SMPOLICYCONTROL); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_NEF); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AF); + + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, pcf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AMF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_SMF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_NEF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NPCF_AM_POLICY_CONTROL); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_NEF); - - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NPCF_SMPOLICYCONTROL); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_NEF); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - pcf_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + pcf_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = pcf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)pcf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void pcf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool pcf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool pcf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_sbi_nf_instance_t *nf_instance = NULL; - request = pcf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + pcf_ue_t *pcf_ue = NULL; + pcf_sess_t *sess = NULL; + + ogs_assert(sbi_object->type > OGS_SBI_OBJ_BASE && + sbi_object->type < OGS_SBI_OBJ_TOP); + switch(sbi_object->type) { + case OGS_SBI_OBJ_UE_TYPE: + pcf_ue = (pcf_ue_t *)sbi_object; + ogs_assert(pcf_ue); + ogs_error("%s (NF discover) No %s", pcf_ue->supi, + OpenAPI_nf_type_ToString(target_nf_type)); + break; + case OGS_SBI_OBJ_SESS_TYPE: + sess = (pcf_sess_t *)sbi_object; + ogs_assert(sess); + ogs_error("%d (NF discover) No %s", sess->psi, + OpenAPI_nf_type_ToString(target_nf_type)); + break; + default: + ogs_fatal("(NF discover) Not implemented %s:%d", + OpenAPI_nf_type_ToString(target_nf_type), + sbi_object->type); + ogs_assert_if_reached(); + } - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + return false; + } -bool pcf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } -static bool pcf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - ogs_sbi_object_t *sbi_object, ogs_sbi_stream_t *stream, - ogs_sbi_build_f build, void *context, void *data) +static bool pcf_sbi_discover_and_send( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_build_f build, + void *context, ogs_sbi_stream_t *stream, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(sbi_object); ogs_assert(stream); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, sbi_object, - build, context, data, - pcf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + sbi_object, target_nf_type, discovery_option, + build, context, data); ogs_expect_or_return_val(xact, false); xact->assoc_stream = stream; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)pcf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + sbi_object, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("ogs_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); return false; @@ -181,12 +221,15 @@ return true; } -bool pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data)) +bool pcf_ue_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data), + pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data) { - if (pcf_sbi_discover_and_send(target_nf_type, &pcf_ue->sbi, stream, - (ogs_sbi_build_f)build, pcf_ue, data) != true) { + if (pcf_sbi_discover_and_send( + &pcf_ue->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, pcf_ue, stream, data) != true) { ogs_error("pcf_ue_sbi_discover_and_send() failed"); ogs_assert(true == ogs_sbi_server_send_error(stream, @@ -198,12 +241,15 @@ return true; } -bool pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data)) +bool pcf_sess_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data), + pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data) { - if (pcf_sbi_discover_and_send(target_nf_type, &sess->sbi, stream, - (ogs_sbi_build_f)build, sess, data) != true) { + if (pcf_sbi_discover_and_send( + &sess->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, sess, stream, data) != true) { ogs_error("pcf_sess_sbi_discover_and_send() failed"); ogs_assert(true == ogs_sbi_server_send_error(stream, @@ -215,12 +261,19 @@ return true; } -static int client_notify_cb(ogs_sbi_response_t *response, void *data) +static int client_notify_cb( + int status, ogs_sbi_response_t *response, void *data) { int rv; - ogs_sbi_message_t message; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_notify_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); rv = ogs_sbi_parse_response(&message, response); @@ -240,12 +293,13 @@ return OGS_OK; } -static int client_delete_notify_cb(ogs_sbi_response_t *response, void *data) +static int client_delete_notify_cb( + int status, ogs_sbi_response_t *response, void *data) { pcf_app_t *app_session = data; ogs_assert(app_session); - client_notify_cb(response, data); + client_notify_cb(status, response, data); pcf_app_remove(app_session);
View file
open5gs_2.4.8.tar.xz/src/pcf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/pcf/sbi-path.h
Changed
@@ -34,15 +34,20 @@ int pcf_sbi_open(void); void pcf_sbi_close(void); -bool pcf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool pcf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); -bool pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data)); -bool pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data)); +bool pcf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool pcf_ue_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(pcf_ue_t *pcf_ue, void *data), + pcf_ue_t *pcf_ue, ogs_sbi_stream_t *stream, void *data); +bool pcf_sess_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(pcf_sess_t *sess, void *data), + pcf_sess_t *sess, ogs_sbi_stream_t *stream, void *data); bool pcf_sbi_send_am_policy_control_notify(pcf_ue_t *pcf_ue); bool pcf_sbi_send_smpolicycontrol_update_notify(
View file
open5gs_2.4.8.tar.xz/src/pcf/timer.c -> open5gs_2.4.9.tar.xz/src/pcf/timer.c
Changed
@@ -79,7 +79,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, pcf_timer_get_name(e->timer_id)); pcf_event_free(e); }
View file
open5gs_2.4.9.tar.xz/src/scp
Added
+(directory)
View file
open5gs_2.4.9.tar.xz/src/scp/app.c
Added
@@ -0,0 +1,40 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "ogs-app.h" + +int app_initialize(const char *const argv) +{ + int rv; + + rv = scp_initialize(); + if (rv != OGS_OK) { + ogs_error("Failed to intialize SCP"); + return rv; + } + ogs_info("SCP initialize...done"); + + return OGS_OK; +} + +void app_terminate(void) +{ + scp_terminate(); + ogs_info("SCP terminate...done"); +}
View file
open5gs_2.4.9.tar.xz/src/scp/context.c
Added
@@ -0,0 +1,155 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "context.h" + +static scp_context_t self; + +int __scp_log_domain; + +static OGS_POOL(scp_conn_pool, scp_conn_t); + +static int context_initialized = 0; + +static int max_num_of_scp_conn = 0; + +void scp_context_init(void) +{ + ogs_assert(context_initialized == 0); + + /* Initialize SCP context */ + memset(&self, 0, sizeof(scp_context_t)); + + ogs_log_install_domain(&__scp_log_domain, "scp", ogs_core()->log.level); + +#define MAX_NUM_OF_SCP_CONN 8 + max_num_of_scp_conn = ogs_app()->max.ue * MAX_NUM_OF_SCP_CONN; + + ogs_pool_init(&scp_conn_pool, max_num_of_scp_conn); + + context_initialized = 1; +} + +void scp_context_final(void) +{ + ogs_assert(context_initialized == 1); + + scp_conn_remove_all(); + + ogs_pool_final(&scp_conn_pool); + + context_initialized = 0; +} + +scp_context_t *scp_self(void) +{ + return &self; +} + +static int scp_context_prepare(void) +{ + return OGS_OK; +} + +static int scp_context_validation(void) +{ + return OGS_OK; +} + +int scp_context_parse_config(void) +{ + int rv; + yaml_document_t *document = NULL; + ogs_yaml_iter_t root_iter; + + document = ogs_app()->document; + ogs_assert(document); + + rv = scp_context_prepare(); + if (rv != OGS_OK) return rv; + + ogs_yaml_iter_init(&root_iter, document); + while (ogs_yaml_iter_next(&root_iter)) { + const char *root_key = ogs_yaml_iter_key(&root_iter); + ogs_assert(root_key); + if (!strcmp(root_key, "scp")) { + ogs_yaml_iter_t scp_iter; + ogs_yaml_iter_recurse(&root_iter, &scp_iter); + while (ogs_yaml_iter_next(&scp_iter)) { + const char *scp_key = ogs_yaml_iter_key(&scp_iter); + ogs_assert(scp_key); + if (!strcmp(scp_key, "sbi")) { + /* handle config in sbi library */ + } else + ogs_warn("unknown key `%s`", scp_key); + } + } + } + + rv = scp_context_validation(); + if (rv != OGS_OK) return rv; + + return OGS_OK; +} + +scp_conn_t *scp_conn_add(ogs_sbi_stream_t *stream) +{ + scp_conn_t *conn = NULL; + + ogs_assert(stream); + + ogs_pool_alloc(&scp_conn_pool, &conn); + if (!conn) { + ogs_error("Maximum number of connection%d reached", + max_num_of_scp_conn); + return NULL; + } + memset(conn, 0, sizeof *conn); + + conn->stream = stream; + + ogs_list_add(&self.conn_list, conn); + + return conn; +} + +void scp_conn_remove(scp_conn_t *conn) +{ + ogs_assert(conn); + + ogs_list_remove(&self.conn_list, conn); + + if (conn->client) + ogs_sbi_client_remove(conn->client); + + ogs_pool_free(&scp_conn_pool, conn); +} + +void scp_conn_remove_all(void) +{ + scp_conn_t *conn = NULL, *next_conn = NULL; + + ogs_list_for_each_safe(&self.conn_list, next_conn, conn) + scp_conn_remove(conn); +} + +scp_conn_t *scp_conn_find(uint32_t index) +{ + return ogs_pool_find(&scp_conn_pool, index); +}
View file
open5gs_2.4.9.tar.xz/src/scp/context.h
Added
@@ -0,0 +1,86 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_CONTEXT_H +#define SCP_CONTEXT_H + +#include "ogs-sbi.h" +#include "ogs-app.h" + +#include "timer.h" +#include "scp-sm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern int __scp_log_domain; + +#undef OGS_LOG_DOMAIN +#define OGS_LOG_DOMAIN __scp_log_domain + +typedef struct scp_context_s { + ogs_list_t conn_list; +} scp_context_t; + +#define SCP_NF_INSTANCE_CLEAR(_cAUSE, _nFInstance) \ + do { \ + ogs_assert(_nFInstance); \ + if ((_nFInstance)->reference_count == 1) { \ + ogs_info("%s (%s) NF removed", (_nFInstance)->id, (_cAUSE)); \ + scp_nf_fsm_fini((_nFInstance)); \ + } else { \ + /* There is an assocation with other context */ \ + ogs_info("%s:%d (%s) NF suspended", \ + _nFInstance->id, _nFInstance->reference_count, (_cAUSE)); \ + OGS_FSM_TRAN(&_nFInstance->sm, scp_nf_state_de_registered); \ + ogs_fsm_dispatch(&_nFInstance->sm, NULL); \ + } \ + ogs_sbi_nf_instance_remove(_nFInstance); \ + } while(0) + +typedef struct scp_conn_s scp_conn_t; + +typedef struct scp_conn_s { + ogs_sbi_object_t sbi; + + ogs_sbi_client_t *client; + + ogs_sbi_stream_t *stream; + ogs_sbi_request_t *request; + +} scp_conn_t; + +void scp_context_init(void); +void scp_context_final(void); +scp_context_t *scp_self(void); + +int scp_context_parse_config(void); + +scp_conn_t *scp_conn_add(ogs_sbi_stream_t *stream); +void scp_conn_remove(scp_conn_t *sess); +void scp_conn_remove_all(void); + +scp_conn_t *scp_conn_find(uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_CONTEXT_H */
View file
open5gs_2.4.9.tar.xz/src/scp/event.c
Added
@@ -0,0 +1,77 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "event.h" +#include "context.h" + +static OGS_POOL(pool, scp_event_t); + +void scp_event_init(void) +{ + ogs_pool_init(&pool, ogs_app()->pool.event); +} + +void scp_event_final(void) +{ + ogs_pool_final(&pool); +} + +scp_event_t *scp_event_new(scp_event_e id) +{ + scp_event_t *e = NULL; + + ogs_pool_alloc(&pool, &e); + ogs_assert(e); + memset(e, 0, sizeof(*e)); + + e->id = id; + + return e; +} + +void scp_event_free(scp_event_t *e) +{ + ogs_assert(e); + ogs_pool_free(&pool, e); +} + +const char *scp_event_get_name(scp_event_t *e) +{ + if (e == NULL) + return OGS_FSM_NAME_INIT_SIG; + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + return OGS_FSM_NAME_ENTRY_SIG; + case OGS_FSM_EXIT_SIG: + return OGS_FSM_NAME_EXIT_SIG; + + case SCP_EVT_SBI_SERVER: + return "SCP_EVT_SBI_SERVER"; + case SCP_EVT_SBI_CLIENT: + return "SCP_EVT_SBI_CLIENT"; + case SCP_EVT_SBI_TIMER: + return "SCP_EVT_SBI_TIMER"; + + default: + break; + } + + return "UNKNOWN_EVENT"; +}
View file
open5gs_2.4.9.tar.xz/src/scp/event.h
Added
@@ -0,0 +1,76 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_EVENT_H +#define SCP_EVENT_H + +#include "ogs-core.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct scp_sess_s scp_sess_t; +typedef struct ogs_sbi_request_s ogs_sbi_request_t; +typedef struct ogs_sbi_response_s ogs_sbi_response_t; +typedef struct ogs_sbi_message_s ogs_sbi_message_t; +typedef struct ogs_sbi_nf_instance_s ogs_sbi_nf_instance_t; + +typedef enum { + SCP_EVT_BASE = OGS_FSM_USER_SIG, + + SCP_EVT_SBI_SERVER, + SCP_EVT_SBI_CLIENT, + SCP_EVT_SBI_TIMER, + + SCP_EVT_TOP, + +} scp_event_e; + +typedef struct scp_event_s { + int id; + ogs_pkbuf_t *pkbuf; + int timer_id; + + struct { + ogs_sbi_request_t *request; + ogs_sbi_response_t *response; + void *data; + int state; + + ogs_sbi_message_t *message; + } sbi; + + ogs_sbi_nf_instance_t *nf_instance; + scp_sess_t *sess; +} scp_event_t; + +void scp_event_init(void); +void scp_event_final(void); + +scp_event_t *scp_event_new(scp_event_e id); +void scp_event_free(scp_event_t *e); + +const char *scp_event_get_name(scp_event_t *e); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_EVENT_H */
View file
open5gs_2.4.9.tar.xz/src/scp/init.c
Added
@@ -0,0 +1,143 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "context.h" +#include "sbi-path.h" + +static ogs_thread_t *thread; +static void scp_main(void *data); + +static int initialized = 0; + +int scp_initialize() +{ + int rv; + + ogs_sbi_context_init(); + + scp_context_init(); + scp_event_init(); + + rv = ogs_sbi_context_parse_config("scp", "nrf", "next_scp"); + if (rv != OGS_OK) return rv; + + rv = scp_context_parse_config(); + if (rv != OGS_OK) return rv; + + rv = ogs_log_config_domain( + ogs_app()->logger.domain, ogs_app()->logger.level); + if (rv != OGS_OK) return rv; + + rv = scp_sbi_open(); + if (rv != 0) return OGS_ERROR; + + thread = ogs_thread_create(scp_main, NULL); + if (!thread) return OGS_ERROR; + + initialized = 1; + + return OGS_OK; +} + +static ogs_timer_t *t_termination_holding = NULL; + +static void event_termination(void) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + + /* Sending NF Instance De-registeration to NRF */ + ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) + scp_nf_fsm_fini(nf_instance); + + /* Starting holding timer */ + t_termination_holding = ogs_timer_add(ogs_app()->timer_mgr, NULL, NULL); + ogs_assert(t_termination_holding); +#define TERMINATION_HOLDING_TIME ogs_time_from_msec(300) + ogs_timer_start(t_termination_holding, TERMINATION_HOLDING_TIME); + + /* Sending termination event to the queue */ + ogs_queue_term(ogs_app()->queue); + ogs_pollset_notify(ogs_app()->pollset); +} + +void scp_terminate(void) +{ + if (!initialized) return; + + /* Daemon terminating */ + event_termination(); + ogs_thread_destroy(thread); + ogs_timer_delete(t_termination_holding); + + scp_sbi_close(); + + scp_context_final(); + + ogs_sbi_context_final(); + + scp_event_final(); /* Destroy event */ +} + +static void scp_main(void *data) +{ + ogs_fsm_t scp_sm; + int rv; + + ogs_fsm_create(&scp_sm, scp_state_initial, scp_state_final); + ogs_fsm_init(&scp_sm, 0); + + for ( ;; ) { + ogs_pollset_poll(ogs_app()->pollset, + ogs_timer_mgr_next(ogs_app()->timer_mgr)); + + /* + * After ogs_pollset_poll(), ogs_timer_mgr_expire() must be called. + * + * The reason is why ogs_timer_mgr_next() can get the corrent value + * when ogs_timer_stop() is called internally in ogs_timer_mgr_expire(). + * + * You should not use event-queue before ogs_timer_mgr_expire(). + * In this case, ogs_timer_mgr_expire() does not work + * because 'if rv == OGS_DONE' statement is exiting and + * not calling ogs_timer_mgr_expire(). + */ + ogs_timer_mgr_expire(ogs_app()->timer_mgr); + + for ( ;; ) { + scp_event_t *e = NULL; + + rv = ogs_queue_trypop(ogs_app()->queue, (void**)&e); + ogs_assert(rv != OGS_ERROR); + + if (rv == OGS_DONE) + goto done; + + if (rv == OGS_RETRY) + break; + + ogs_assert(e); + ogs_fsm_dispatch(&scp_sm, e); + scp_event_free(e); + } + } +done: + + ogs_fsm_fini(&scp_sm, 0); + ogs_fsm_delete(&scp_sm); +}
View file
open5gs_2.4.9.tar.xz/src/scp/meson.build
Added
@@ -0,0 +1,59 @@ +# Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + +# This file is part of Open5GS. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +libscp_sources = files(''' + context.c + event.c + timer.c + + nnrf-build.c + nnrf-handler.c + nf-sm.c + + nscp-handler.c + + sbi-path.c + scp-sm.c + + init.c +'''.split()) + +libscp = static_library('scp', + sources : libscp_sources, + dependencies : libapp_dep, + libcrypt_dep, + libsbi_dep, + install : false) + +libscp_dep = declare_dependency( + link_with : libscp, + dependencies : libapp_dep, + libcrypt_dep, + libsbi_dep) + +scp_sources = files(''' + app.c + ../main.c +'''.split()) + +executable('open5gs-scpd', + sources : scp_sources, + c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/scp.yaml"'.format(open5gs_sysconfdir), + include_directories : srcinc, + dependencies : libscp_dep, + install_rpath : libdir, + install : true)
View file
open5gs_2.4.9.tar.xz/src/scp/nf-sm.c
Added
@@ -0,0 +1,483 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "context.h" + +#include "sbi-path.h" +#include "nnrf-handler.h" + +void scp_nf_fsm_init(ogs_sbi_nf_instance_t *nf_instance) +{ + scp_event_t e; + + ogs_assert(nf_instance); + + memset(&e, 0, sizeof(e)); + e.sbi.data = nf_instance; + + ogs_fsm_create(&nf_instance->sm, + scp_nf_state_initial, scp_nf_state_final); + ogs_fsm_init(&nf_instance->sm, &e); +} + +void scp_nf_fsm_fini(ogs_sbi_nf_instance_t *nf_instance) +{ + scp_event_t e; + + ogs_assert(nf_instance); + + memset(&e, 0, sizeof(e)); + e.sbi.data = nf_instance; + + ogs_fsm_fini(&nf_instance->sm, &e); + ogs_fsm_delete(&nf_instance->sm); +} + +void scp_nf_state_initial(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + scp_timer_nf_instance_registration_interval, nf_instance); + ogs_assert(nf_instance->t_registration_interval); + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + scp_timer_nf_instance_heartbeat_interval, nf_instance); + ogs_assert(nf_instance->t_heartbeat_interval); + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + scp_timer_nf_instance_no_heartbeat, nf_instance); + ogs_assert(nf_instance->t_no_heartbeat); + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + scp_timer_nf_instance_validity, nf_instance); + ogs_assert(nf_instance->t_validity); + + if (NF_INSTANCE_IS_NRF(nf_instance)) { + OGS_FSM_TRAN(s, &scp_nf_state_will_register); + } else { + ogs_assert(nf_instance->id); + OGS_FSM_TRAN(s, &scp_nf_state_registered); + } +} + +void scp_nf_state_final(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); +} + +void scp_nf_state_will_register(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_client_t *client = NULL; + ogs_sbi_message_t *message = NULL; + ogs_sockaddr_t *addr = NULL; + + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); + + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, scp_nnrf_nfm_build_register)); + break; + + case OGS_FSM_EXIT_SIG: + ogs_timer_stop(nf_instance->t_registration_interval); + break; + + case SCP_EVT_SBI_CLIENT: + message = e->sbi.message; + ogs_assert(message); + + SWITCH(message->h.service.name) + CASE(OGS_SBI_SERVICE_NAME_NNRF_NFM) + + SWITCH(message->h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES) + + if (message->res_status == OGS_SBI_HTTP_STATUS_OK || + message->res_status == OGS_SBI_HTTP_STATUS_CREATED) { + scp_nnrf_handle_nf_register(nf_instance, message); + OGS_FSM_TRAN(s, &scp_nf_state_registered); + } else { + ogs_error("%s HTTP Response Status Code %d", + ogs_sbi_self()->nf_instance->id, + message->res_status); + OGS_FSM_TRAN(s, &scp_nf_state_exception); + } + break; + + DEFAULT + ogs_error("%s Invalid resource name %s", + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); + END + break; + + DEFAULT + ogs_error("%s Invalid API name %s", + ogs_sbi_self()->nf_instance->id, message->h.service.name); + END + break; + + case SCP_EVT_SBI_TIMER: + switch(e->timer_id) { + case SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL: + client = nf_instance->client; + ogs_assert(client); + addr = client->node.addr; + ogs_assert(addr); + + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); + + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); + + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, scp_nnrf_nfm_build_register)); + break; + + default: + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, + scp_timer_get_name(e->timer_id), e->timer_id); + } + break; + + default: + ogs_error("%s Unknown event %s", + ogs_sbi_self()->nf_instance->id, scp_event_get_name(e)); + break; + } +} + +void scp_nf_state_registered(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_client_t *client = NULL; + ogs_sbi_message_t *message = NULL; + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF registered Heartbeat:%ds", + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); + + client = nf_instance->client; + ogs_assert(client); + + if (nf_instance->time.heartbeat_interval) { + ogs_timer_start(nf_instance->t_heartbeat_interval, + ogs_time_from_sec(nf_instance->time.heartbeat_interval)); + ogs_timer_start(nf_instance->t_no_heartbeat, + ogs_time_from_sec( + nf_instance->time.heartbeat_interval + + ogs_app()->time.nf_instance.no_heartbeat_margin)); + } + + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_AMF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_AUSF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_BSF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_NSSF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_PCF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_SMF)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDM)); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(client, + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDR)); + } + + break; + + case OGS_FSM_EXIT_SIG: + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); + + if (nf_instance->time.heartbeat_interval) { + ogs_timer_stop(nf_instance->t_heartbeat_interval); + ogs_timer_stop(nf_instance->t_no_heartbeat); + } + + if (!OGS_FSM_CHECK(&nf_instance->sm, scp_nf_state_exception)) { + ogs_assert(true == + ogs_nnrf_nfm_send_nf_de_register(nf_instance)); + } + } + break; + + case SCP_EVT_SBI_CLIENT: + message = e->sbi.message; + ogs_assert(message); + + SWITCH(message->h.service.name) + CASE(OGS_SBI_SERVICE_NAME_NNRF_NFM) + + SWITCH(message->h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES) + + if (message->res_status == OGS_SBI_HTTP_STATUS_NO_CONTENT || + message->res_status == OGS_SBI_HTTP_STATUS_OK) { + if (nf_instance->time.heartbeat_interval) + ogs_timer_start(nf_instance->t_no_heartbeat, + ogs_time_from_sec( + nf_instance->time.heartbeat_interval + + ogs_app()->time.nf_instance. + no_heartbeat_margin)); + } else { + ogs_warn("%s HTTP response error %d", + ogs_sbi_self()->nf_instance->id, + message->res_status); + OGS_FSM_TRAN(s, &scp_nf_state_exception); + } + + break; + + DEFAULT + ogs_error("%s Invalid resource name %s", + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); + END + break; + + DEFAULT + ogs_error("%s Invalid API name %s", + ogs_sbi_self()->nf_instance->id, message->h.service.name); + END + break; + + case SCP_EVT_SBI_TIMER: + switch(e->timer_id) { + case SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL: + if (nf_instance->time.heartbeat_interval) + ogs_timer_start(nf_instance->t_heartbeat_interval, + ogs_time_from_sec(nf_instance->time.heartbeat_interval)); + + ogs_assert(true == ogs_nnrf_nfm_send_nf_update(nf_instance)); + break; + + case SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT: + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); + OGS_FSM_TRAN(s, &scp_nf_state_will_register); + break; + + case SCP_TIMER_NF_INSTANCE_VALIDITY: + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &scp_nf_state_de_registered); + break; + + default: + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + scp_timer_get_name(e->timer_id), e->timer_id); + } + break; + + default: + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + scp_event_get_name(e)); + break; + } +} + +void scp_nf_state_de_registered(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); + } + break; + + case OGS_FSM_EXIT_SIG: + break; + + default: + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + scp_event_get_name(e)); + break; + } +} + +void scp_nf_state_exception(ogs_fsm_t *s, scp_event_t *e) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_client_t *client = NULL; + ogs_sbi_message_t *message = NULL; + ogs_sockaddr_t *addr = NULL; + ogs_assert(s); + ogs_assert(e); + + scp_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi. + nf_register_interval_in_exception); + } + break; + + case OGS_FSM_EXIT_SIG: + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_timer_stop(nf_instance->t_registration_interval); + } + break; + + case SCP_EVT_SBI_TIMER: + switch(e->timer_id) { + case SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL: + client = nf_instance->client; + ogs_assert(client); + addr = client->node.addr; + ogs_assert(addr); + + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); + + OGS_FSM_TRAN(s, &scp_nf_state_will_register); + break; + + default: + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + scp_timer_get_name(e->timer_id), e->timer_id); + } + break; + + case SCP_EVT_SBI_CLIENT: + message = e->sbi.message; + ogs_assert(message); + + SWITCH(message->h.service.name) + CASE(OGS_SBI_SERVICE_NAME_NNRF_NFM) + + SWITCH(message->h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES) + break; + DEFAULT + ogs_error("Invalid resource name %s", + message->h.resource.component0); + END + break; + DEFAULT + ogs_error("Invalid API name %s", message->h.service.name); + END + break; + + default: + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + scp_event_get_name(e)); + break; + } +}
View file
open5gs_2.4.9.tar.xz/src/scp/nnrf-build.c
Added
@@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "nnrf-build.h" + +ogs_sbi_request_t *scp_nnrf_nfm_build_register(void) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + + ogs_sbi_message_t message; + ogs_sbi_request_t *request = NULL; + + OpenAPI_nf_profile_t *NFProfile = NULL; + + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + ogs_assert(nf_instance->id); + + memset(&message, 0, sizeof(message)); + message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; + message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NNRF_NFM; + message.h.api.version = (char *)OGS_SBI_API_V1; + message.h.resource.component0 = + (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; + message.h.resource.component1 = nf_instance->id; + + message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; + + NFProfile = ogs_nnrf_nfm_build_nf_profile(); + ogs_expect_or_return_val(NFProfile, NULL); + + message.NFProfile = NFProfile; + + request = ogs_sbi_build_request(&message); + + ogs_sbi_nnrf_free_nf_profile(NFProfile); + + return request; +}
View file
open5gs_2.4.9.tar.xz/src/scp/nnrf-build.h
Added
@@ -0,0 +1,35 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_NNRF_BUILD_H +#define SCP_NNRF_BUILD_H + +#include "context.h" + +#ifdef __cplusplus +extern "C" { +#endif + +ogs_sbi_request_t *scp_nnrf_nfm_build_register(void); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_NNRF_BUILD_H */
View file
open5gs_2.4.9.tar.xz/src/scp/nnrf-handler.c
Added
@@ -0,0 +1,349 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "sbi-path.h" +#include "nnrf-handler.h" + +void scp_nnrf_handle_nf_register( + ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_message_t *recvmsg) +{ + OpenAPI_nf_profile_t *NFProfile = NULL; + ogs_sbi_client_t *client = NULL; + + ogs_assert(recvmsg); + ogs_assert(nf_instance); + client = nf_instance->client; + ogs_assert(client); + + NFProfile = recvmsg->NFProfile; + if (!NFProfile) { + ogs_error("No NFProfile"); + return; + } + + /* TIME : Update heartbeat from NRF */ + if (NFProfile->is_heart_beat_timer == true) + nf_instance->time.heartbeat_interval = NFProfile->heart_beat_timer; +} + +void scp_nnrf_handle_nf_status_subscribe( + ogs_sbi_subscription_t *subscription, ogs_sbi_message_t *recvmsg) +{ + OpenAPI_subscription_data_t *SubscriptionData = NULL; + ogs_sbi_client_t *client = NULL; + + ogs_assert(recvmsg); + ogs_assert(subscription); + client = subscription->client; + ogs_assert(client); + + SubscriptionData = recvmsg->SubscriptionData; + if (!SubscriptionData) { + ogs_error("No SubscriptionData"); + return; + } + + if (!SubscriptionData->subscription_id) { + ogs_error("No SubscriptionId"); + return; + } + ogs_sbi_subscription_set_id( + subscription, SubscriptionData->subscription_id); + + if (SubscriptionData->validity_time) { +#define VALIDITY_MINIMUM (10LL * OGS_USEC_PER_SEC) /* 10 seconds */ + ogs_time_t time, duration; + if (ogs_sbi_time_from_string( + &time, SubscriptionData->validity_time) == true) { + duration = time - ogs_time_now(); + if (duration < VALIDITY_MINIMUM) { + duration = VALIDITY_MINIMUM; + ogs_warn("%s Forced to %lld seconds", subscription->id, + (long long)ogs_time_sec(VALIDITY_MINIMUM)); + } + subscription->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + scp_timer_subscription_validity, subscription); + ogs_assert(subscription->t_validity); + ogs_timer_start(subscription->t_validity, duration); + } else { + ogs_error("Cannot parse validitiyTime %s", + SubscriptionData->validity_time); + } + } +} + +bool scp_nnrf_handle_nf_status_notify( + ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) +{ + int rv; + bool handled; + + ogs_sbi_response_t *response = NULL; + OpenAPI_notification_data_t *NotificationData = NULL; + ogs_sbi_nf_instance_t *nf_instance = NULL; + + ogs_sbi_message_t message; + ogs_sbi_header_t header; + + ogs_assert(stream); + ogs_assert(recvmsg); + + NotificationData = recvmsg->NotificationData; + if (!NotificationData) { + ogs_error("No NotificationData"); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "No NotificationData", NULL)); + return false; + } + + if (!NotificationData->nf_instance_uri) { + ogs_error("No nfInstanceUri"); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "No nfInstanceUri", NULL)); + return false; + } + + memset(&header, 0, sizeof(header)); + header.uri = NotificationData->nf_instance_uri; + + rv = ogs_sbi_parse_header(&message, &header); + if (rv != OGS_OK) { + ogs_error("Cannot parse nfInstanceUri %s", header.uri); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "Cannot parse nfInstanceUri", header.uri)); + return false; + } + + if (!message.h.resource.component1) { + ogs_error("No nfInstanceId %s", header.uri); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "Cannot parse nfInstanceUri", header.uri)); + ogs_sbi_header_free(&header); + return false; + } + + if (NF_INSTANCE_IS_SELF(message.h.resource.component1)) { + ogs_warn("%s The notification is not allowed", + message.h.resource.component1); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_FORBIDDEN, + recvmsg, "The notification is not allowed", + message.h.resource.component1)); + ogs_sbi_header_free(&header); + return false; + } + + if (NotificationData->event == + OpenAPI_notification_event_type_NF_REGISTERED) { + + OpenAPI_nf_profile_t *NFProfile = NULL; + + NFProfile = NotificationData->nf_profile; + if (!NFProfile) { + ogs_error("No NFProfile"); + ogs_assert(true == + ogs_sbi_server_send_error( + stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "No NFProfile", NULL)); + ogs_sbi_header_free(&header); + return false; + } + + nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); + if (!nf_instance) { + nf_instance = ogs_sbi_nf_instance_add(); + ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); + + scp_nf_fsm_init(nf_instance); + + ogs_info("%s (NRF-notify) NF registered", nf_instance->id); + + } else { + nf_instance->reference_count++; + + OGS_FSM_TRAN(&nf_instance->sm, scp_nf_state_registered); + ogs_fsm_dispatch(&nf_instance->sm, NULL); + + ogs_warn("%s (NRF-notify) NF has already been added", + message.h.resource.component1); + + } + + handled = ogs_sbi_nnrf_handle_nf_profile( + nf_instance, NFProfile, stream, recvmsg); + if (!handled) { + SCP_NF_INSTANCE_CLEAR("NRF-notify", nf_instance); + ogs_sbi_header_free(&header); + return false; + } + + ogs_info("%s (NRF-notify) NF Profile updated", nf_instance->id); + + handled = ogs_sbi_client_associate(nf_instance); + if (!handled) { + ogs_error("%s Cannot associate NF EndPoint", nf_instance->id); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "Cannot find NF EndPoint", nf_instance->id)); + SCP_NF_INSTANCE_CLEAR("NRF-notify", nf_instance); + ogs_sbi_header_free(&header); + return false; + } + + } else if (NotificationData->event == + OpenAPI_notification_event_type_NF_DEREGISTERED) { + nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); + if (nf_instance) { + SCP_NF_INSTANCE_CLEAR("NRF-notify", nf_instance); + } else { + ogs_warn("%s (NRF-notify) Not found", + message.h.resource.component1); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_NOT_FOUND, + recvmsg, "Not found", message.h.resource.component1)); + ogs_sbi_header_free(&header); + return false; + } + } else { + char *eventstr = OpenAPI_notification_event_type_ToString( + NotificationData->event); + ogs_error("Not supported event %d:%s", + NotificationData->event, eventstr ? eventstr : "Unknown"); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "Not supported event", + eventstr ? eventstr : "Unknown")); + ogs_sbi_header_free(&header); + return false; + } + + response = ogs_sbi_build_response(recvmsg, OGS_SBI_HTTP_STATUS_NO_CONTENT); + ogs_assert(response); + ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + + ogs_sbi_header_free(&header); + return true; +} + +void scp_nnrf_handle_nf_discover( + ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) +{ + ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; + ogs_sbi_nf_instance_t *nf_instance = NULL; + + OpenAPI_search_result_t *SearchResult = NULL; + OpenAPI_lnode_t *node = NULL; + bool handled; + + ogs_assert(recvmsg); + ogs_assert(xact); + sbi_object = xact->sbi_object; + ogs_assert(sbi_object); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; + + SearchResult = recvmsg->SearchResult; + if (!SearchResult) { + ogs_error("No SearchResult"); + return; + } + + OpenAPI_list_for_each(SearchResult->nf_instances, node) { + OpenAPI_nf_profile_t *NFProfile = NULL; + + if (!node->data) continue; + + NFProfile = node->data; + + nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); + if (!nf_instance) { + nf_instance = ogs_sbi_nf_instance_add(); + ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); + + scp_nf_fsm_init(nf_instance); + + ogs_info("%s (NF-discover) NF registered", nf_instance->id); + } else { + nf_instance->reference_count++; + + OGS_FSM_TRAN(&nf_instance->sm, scp_nf_state_registered); + ogs_fsm_dispatch(&nf_instance->sm, NULL); + + ogs_warn("%s (NF-discover) NF has already been added", + NFProfile->nf_instance_id); + } + + if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { + handled = ogs_sbi_nnrf_handle_nf_profile( + nf_instance, NFProfile, NULL, NULL); + if (!handled) { + ogs_error("ogs_sbi_nnrf_handle_nf_profile() failed %s", + nf_instance->id); + SCP_NF_INSTANCE_CLEAR("NRF-discover", nf_instance); + continue; + } + + handled = ogs_sbi_client_associate(nf_instance); + if (!handled) { + ogs_error("%s Cannot assciate NF EndPoint", nf_instance->id); + SCP_NF_INSTANCE_CLEAR("NRF-discover", nf_instance); + continue; + } + + /* TIME : Update validity from NRF */ + if (SearchResult->is_validity_period && + SearchResult->validity_period) { + nf_instance->time.validity_duration = + SearchResult->validity_period; + + ogs_assert(nf_instance->t_validity); + ogs_timer_start(nf_instance->t_validity, + ogs_time_from_sec(nf_instance->time.validity_duration)); + + } else + ogs_warn("%s NF Instance validity-time should not 0", + nf_instance->id); + + ogs_info("%s (NF-discover) NF Profile updated", nf_instance->id); + } + } + + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + } else { + scp_sbi_send(nf_instance, xact); + } +}
View file
open5gs_2.4.9.tar.xz/src/scp/nnrf-handler.h
Added
@@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_NNRF_HANDLER_H +#define SCP_NNRF_HANDLER_H + +#include "context.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void scp_nnrf_handle_nf_register( + ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_message_t *recvmsg); +void scp_nnrf_handle_nf_status_subscribe( + ogs_sbi_subscription_t *subscription, ogs_sbi_message_t *recvmsg); + +bool scp_nnrf_handle_nf_status_notify( + ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); + +void scp_nnrf_handle_nf_discover( + ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_NNRF_HANDLER_H */
View file
open5gs_2.4.9.tar.xz/src/scp/nscp-handler.c
Added
@@ -0,0 +1,27 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "sbi-path.h" +#include "nscp-handler.h" + +bool scp_nscp_management_handle_pcf_binding( + scp_conn_t *conn, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) +{ + return true; +}
View file
open5gs_2.4.9.tar.xz/src/scp/nscp-handler.h
Added
@@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_NSCP_HANDLER_H +#define SCP_NSCP_HANDLER_H + +#include "context.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bool scp_nscp_management_handle_pcf_binding( + scp_conn_t *conn, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_NSCP_HANDLER_H */
View file
open5gs_2.4.9.tar.xz/src/scp/sbi-path.c
Added
@@ -0,0 +1,414 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "sbi-path.h" + +static int request_handler(ogs_sbi_request_t *request, void *data); +static int response_handler( + int status, ogs_sbi_response_t *response, void *data); + +static int client_cb(int status, ogs_sbi_response_t *response, void *data); + +int scp_sbi_open(void) +{ + ogs_sbi_nf_instance_t *nf_instance = NULL; + + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_SCP); + + /* Initialize SCP NF Instance */ + nf_instance = ogs_sbi_self()->scp_instance; + if (nf_instance) { + ogs_sbi_client_t *client = NULL; + + /* Client callback is only used when NF sends to SCP */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + } + + /* Initialize NRF NF Instance */ + nf_instance = ogs_sbi_self()->nrf_instance; + if (nf_instance) { + ogs_sbi_client_t *client = NULL; + + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + scp_nf_fsm_init(nf_instance); + } + + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = scp_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)scp_nf_state_registered; + + if (ogs_sbi_server_start_all(request_handler) != OGS_OK) + return OGS_ERROR; + + return OGS_OK; +} + +void scp_sbi_close(void) +{ + ogs_sbi_client_stop_all(); + ogs_sbi_server_stop_all(); +} + +static int request_handler(ogs_sbi_request_t *source, void *data) +{ + int rv; + ogs_hash_index_t *hi; + ogs_sbi_stream_t *stream = data; + + struct { + char *target_apiroot; + char *discovery; + char *accept; + char *content_type; + char *content_encoding; + } headers; + + ogs_assert(source); + ogs_assert(source->h.uri); + ogs_assert(stream); + + memset(&headers, 0, sizeof(headers)); + + /* Extract HTTP Header */ + for (hi = ogs_hash_first(source->http.headers); + hi; hi = ogs_hash_next(hi)) { + char *key = (char *)ogs_hash_this_key(hi); + char *val = ogs_hash_this_val(hi); + + if (!key || !val) { + ogs_error("No Key%s Value%s", key, val); + continue; + } + + /* + * <RFC 2616> + * Each header field consists of a name followed by a colon (":") + * and the field value. Field names are case-insensitive. + */ + if (!strcasecmp(key, OGS_SBI_CUSTOM_TARGET_APIROOT)) { + headers.target_apiroot = val; + } else if (!strncasecmp(key, + OGS_SBI_CUSTOM_DISCOVERY_COMMON, + strlen(OGS_SBI_CUSTOM_DISCOVERY_COMMON))) { + headers.discovery = val; + } else if (!strcasecmp(key, OGS_SBI_ACCEPT)) { + headers.accept = val; + } else if (!strcasecmp(key, OGS_SBI_CONTENT_TYPE)) { + headers.content_type = val; + } else if (!strcasecmp(key, OGS_SBI_ACCEPT_ENCODING)) { + headers.content_encoding = val; + } + } + + if (headers.target_apiroot) { + ogs_sbi_nf_instance_t *scp_instance = NULL; + ogs_sbi_client_t *client = NULL; + ogs_sbi_request_t target; + + scp_conn_t *conn = NULL; + + memset(&target, 0, sizeof(target)); + + conn = scp_conn_add(stream); + if (!conn) { + ogs_error("scp_conn_add() failed"); + ogs_sbi_request_free(source); + return OGS_ERROR; + } + + if (ogs_sbi_self()->discovery_config.delegated == + OGS_SBI_DISCOVERY_DELEGATED_AUTO) { + scp_instance = ogs_sbi_self()->scp_instance; + } else if (ogs_sbi_self()->discovery_config.delegated == + OGS_SBI_DISCOVERY_DELEGATED_YES) { + scp_instance = ogs_sbi_self()->scp_instance; + ogs_assert(scp_instance); + } + + /* HTTP Method */ + target.h.method = source->h.method; + + /* HTTP Headers + * + * To remove the followings, + * Scheme - https + * Authority - scp.open5gs.org + * + * We regenerate the HTTP Headers. + */ + target.http.headers = ogs_hash_make(); + ogs_assert(target.http.headers); + + if (headers.content_type) + ogs_sbi_header_set(target.http.headers, + OGS_SBI_CONTENT_TYPE, headers.content_type); + if (headers.accept) + ogs_sbi_header_set(target.http.headers, + OGS_SBI_ACCEPT, headers.accept); + if (headers.content_encoding) + ogs_sbi_header_set(target.http.headers, + OGS_SBI_ACCEPT_ENCODING, headers.content_encoding); + + /* HTTP Params */ + target.http.params = source->http.params; + + /* HTTP Content */ + target.http.content = source->http.content; + target.http.content_length = source->http.content_length; + + if (scp_instance) { + char *apiroot = NULL; + + if (headers.target_apiroot) + ogs_sbi_header_set(target.http.headers, + OGS_SBI_CUSTOM_TARGET_APIROOT, headers.target_apiroot); + + /* Client Instance */ + client = scp_instance->client; + ogs_assert(client); + + /* Client ApiRoot */ + apiroot = ogs_sbi_client_apiroot(client); + ogs_assert(apiroot); + + /* Setup New URI */ + target.h.uri = ogs_msprintf("%s%s", apiroot, source->h.uri); + ogs_assert(target.h.uri); + + ogs_free(apiroot); + + } else { + ogs_sockaddr_t *addr = NULL; + + /* Find or Add Client Instance */ + addr = ogs_sbi_getaddr_from_uri(headers.target_apiroot); + if (!addr) { + ogs_error("Invalid Target-apiRoot %s", + headers.target_apiroot); + ogs_sbi_http_hash_free(target.http.headers); + ogs_free(target.h.uri); + + ogs_sbi_request_free(source); + scp_conn_remove(conn); + return OGS_ERROR; + } + + client = ogs_sbi_client_find(addr); + if (!client) { + client = ogs_sbi_client_add(addr); + ogs_assert(client); + client->cb = client_cb; + } + OGS_SBI_SETUP_CLIENT(conn, client); + + ogs_freeaddrinfo(addr); + + /* Setup New URI */ + target.h.uri = ogs_msprintf("%s%s", + headers.target_apiroot, source->h.uri); + ogs_assert(target.h.uri); + } + + /* Send the HTTP Request with New URI and HTTP Headers */ + if (ogs_sbi_client_send_reqmem_persistent( + client, response_handler, &target, conn) != true) { + ogs_error("ogs_sbi_client_send_request() failed"); + ogs_sbi_http_hash_free(target.http.headers); + ogs_free(target.h.uri); + + ogs_sbi_request_free(source); + scp_conn_remove(conn); + return OGS_ERROR; + } + + ogs_sbi_http_hash_free(target.http.headers); + ogs_free(target.h.uri); + + } else if (headers.discovery) { + scp_event_t *e = NULL; + + e = scp_event_new(SCP_EVT_SBI_SERVER); + ogs_assert(e); + + e->sbi.request = source; + e->sbi.data = stream; + + rv = ogs_queue_push(ogs_app()->queue, e); + if (rv != OGS_OK) { + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(source); + scp_event_free(e); + return OGS_ERROR; + } + } else { + scp_event_t *e = NULL; + int rv; + + ogs_assert(source); + ogs_assert(data); + + e = scp_event_new(SCP_EVT_SBI_SERVER); + ogs_assert(e); + + e->sbi.request = source; + e->sbi.data = data; + + rv = ogs_queue_push(ogs_app()->queue, e); + if (rv != OGS_OK) { + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(source); + scp_event_free(e); + return OGS_ERROR; + } + } + + return OGS_OK; +} + +static int response_handler( + int status, ogs_sbi_response_t *response, void *data) +{ + scp_conn_t *conn = data; + ogs_sbi_stream_t *stream = NULL; + + ogs_assert(conn); + stream = conn->stream; + ogs_assert(stream); + + if (status != OGS_OK) { + + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "response_handler() failed %d", status); + + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR, NULL, + "response_handler() failed", NULL)); + + scp_conn_remove(conn); + + return OGS_ERROR; + } + + ogs_assert(response); + ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + scp_conn_remove(conn); + + return OGS_OK; +} + +static int client_cb(int status, ogs_sbi_response_t *response, void *data) +{ + scp_event_t *e = NULL; + int rv; + + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + + ogs_assert(response); + + e = scp_event_new(SCP_EVT_SBI_CLIENT); + ogs_assert(e); + e->sbi.response = response; + e->sbi.data = data; + + rv = ogs_queue_push(ogs_app()->queue, e); + if (rv != OGS_OK) { + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); + scp_event_free(e); + return OGS_ERROR; + } + + return OGS_OK; +} + + +bool scp_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) +{ + return ogs_sbi_send_request(nf_instance, client_cb, xact); +} + +bool scp_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data), + scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data) +{ + ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); + + ogs_assert(conn); + ogs_assert(stream); + ogs_assert(build); + + xact = ogs_sbi_xact_add( + &conn->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, conn, data); + if (!xact) { + ogs_error("scp_sbi_discover_and_send() failed"); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL, + "Cannot discover", NULL)); + return false; + } + + xact->assoc_stream = stream; + + if (ogs_sbi_discover_and_send( + &conn->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { + ogs_error("scp_sbi_discover_and_send() failed"); + ogs_sbi_xact_remove(xact); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL, + "Cannot discover", NULL)); + return false; + } + + return true; +}
View file
open5gs_2.4.9.tar.xz/src/scp/sbi-path.h
Added
@@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_SBI_PATH_H +#define SCP_SBI_PATH_H + +#include "nnrf-build.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int scp_sbi_open(void); +void scp_sbi_close(void); + +bool scp_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); + +bool scp_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(scp_conn_t *conn, void *data), + scp_conn_t *conn, ogs_sbi_stream_t *stream, void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_SBI_PATH_H */
View file
open5gs_2.4.9.tar.xz/src/scp/scp-sm.c
Added
@@ -0,0 +1,369 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "sbi-path.h" +#include "nnrf-handler.h" +#include "nscp-handler.h" + +void scp_state_initial(ogs_fsm_t *s, scp_event_t *e) +{ + scp_sm_debug(e); + + ogs_assert(s); + + OGS_FSM_TRAN(s, &scp_state_operational); +} + +void scp_state_final(ogs_fsm_t *s, scp_event_t *e) +{ + scp_sm_debug(e); + + ogs_assert(s); +} + +void scp_state_operational(ogs_fsm_t *s, scp_event_t *e) +{ + int rv; + + ogs_sbi_stream_t *stream = NULL; + ogs_sbi_request_t *request = NULL; + + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_subscription_t *subscription = NULL; + ogs_sbi_response_t *response = NULL; + ogs_sbi_message_t message; + ogs_sbi_xact_t *sbi_xact = NULL; + + scp_sm_debug(e); + + ogs_assert(s); + + switch (e->id) { + case OGS_FSM_ENTRY_SIG: + break; + + case OGS_FSM_EXIT_SIG: + break; + + case SCP_EVT_SBI_SERVER: + request = e->sbi.request; + ogs_assert(request); + stream = e->sbi.data; + ogs_assert(stream); + + rv = ogs_sbi_parse_request(&message, request); + if (rv != OGS_OK) { + /* 'sbi_message' buffer is released in ogs_sbi_parse_request() */ + ogs_error("cannot parse HTTP sbi_message"); + ogs_assert(true == + ogs_sbi_server_send_error( + stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + NULL, "cannot parse HTTP sbi_message", NULL)); + break; + } + + if (strcmp(message.h.api.version, OGS_SBI_API_V1) != 0) { + ogs_error("Not supported version %s", message.h.api.version); + ogs_assert(true == + ogs_sbi_server_send_error( + stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + &message, "Not supported version", NULL)); + ogs_sbi_message_free(&message); + break; + } + + SWITCH(message.h.service.name) + CASE(OGS_SBI_SERVICE_NAME_NNRF_NFM) + + SWITCH(message.h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_STATUS_NOTIFY) + SWITCH(message.h.method) + CASE(OGS_SBI_HTTP_METHOD_POST) + scp_nnrf_handle_nf_status_notify(stream, &message); + break; + + DEFAULT + ogs_error("Invalid HTTP method %s", message.h.method); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_FORBIDDEN, &message, + "Invalid HTTP method", message.h.method)); + END + break; + + DEFAULT + ogs_error("Invalid resource name %s", + message.h.resource.component0); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, &message, + "Invalid resource name", + message.h.resource.component0)); + END + break; + +#if 0 + CASE(OGS_SBI_SERVICE_NAME_NBSF_MANAGEMENT) + SWITCH(message.h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_PCF_BINDINGS) + if (message.h.resource.component1) { + sess = scp_sess_find_by_binding_id( + message.h.resource.component1); + } else { + SWITCH(message.h.method) + CASE(OGS_SBI_HTTP_METHOD_POST) + if (message.PcfBinding && + message.PcfBinding->snssai && + message.PcfBinding->dnn) { + ogs_s_nssai_t s_nssai; + + s_nssai.sst = message.PcfBinding->snssai->sst; + s_nssai.sd = ogs_s_nssai_sd_from_string( + message.PcfBinding->snssai->sd); + + sess = scp_sess_find_by_snssai_and_dnn( + &s_nssai, message.PcfBinding->dnn); + if (!sess) { + sess = scp_sess_add_by_snssai_and_dnn( + &s_nssai, message.PcfBinding->dnn); + ogs_assert(sess); + } + } + break; + CASE(OGS_SBI_HTTP_METHOD_GET) + if (!sess && message.param.ipv4addr) + sess = scp_sess_find_by_ipv4addr( + message.param.ipv4addr); + if (!sess && message.param.ipv6prefix) + sess = scp_sess_find_by_ipv6prefix( + message.param.ipv6prefix); + break; + DEFAULT + ogs_error("Invalid HTTP method %s", message.h.method); + END + } + + if (!sess) { + ogs_error("Not found %s", message.h.uri); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_NOT_FOUND, + &message, "Not found", message.h.uri)); + break; + } + + scp_nscp_management_handle_pcf_binding(sess, stream, &message); + break; + + DEFAULT + ogs_error("Invalid resource name %s", + message.h.resource.component0); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, &message, + "Invalid resource name", + message.h.resource.component0)); + END + break; +#endif + + DEFAULT + ogs_error("Invalid API name %s", message.h.service.name); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, &message, + "Invalid API name", message.h.service.name)); + END + + /* In lib/sbi/server.c, notify_completed() releases 'request' buffer. */ + ogs_sbi_message_free(&message); + break; + + case SCP_EVT_SBI_CLIENT: + ogs_assert(e); + + response = e->sbi.response; + ogs_assert(response); + rv = ogs_sbi_parse_response(&message, response); + if (rv != OGS_OK) { + ogs_error("cannot parse HTTP response"); + ogs_sbi_message_free(&message); + ogs_sbi_response_free(response); + break; + } + + if (strcmp(message.h.api.version, OGS_SBI_API_V1) != 0) { + ogs_error("Not supported version %s", message.h.api.version); + ogs_sbi_message_free(&message); + ogs_sbi_response_free(response); + break; + } + + SWITCH(message.h.service.name) + CASE(OGS_SBI_SERVICE_NAME_NNRF_NFM) + + SWITCH(message.h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES) + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(OGS_FSM_STATE(&nf_instance->sm)); + + e->sbi.message = &message; + ogs_fsm_dispatch(&nf_instance->sm, e); + break; + + CASE(OGS_SBI_RESOURCE_NAME_SUBSCRIPTIONS) + subscription = e->sbi.data; + ogs_assert(subscription); + + SWITCH(message.h.method) + CASE(OGS_SBI_HTTP_METHOD_POST) + if (message.res_status == OGS_SBI_HTTP_STATUS_CREATED || + message.res_status == OGS_SBI_HTTP_STATUS_OK) { + scp_nnrf_handle_nf_status_subscribe( + subscription, &message); + } else { + ogs_error("HTTP response error : %d", + message.res_status); + } + break; + + CASE(OGS_SBI_HTTP_METHOD_DELETE) + if (message.res_status == OGS_SBI_HTTP_STATUS_NO_CONTENT) { + ogs_sbi_subscription_remove(subscription); + } else { + ogs_error("HTTP response error : %d", + message.res_status); + } + break; + + DEFAULT + ogs_error("Invalid HTTP method %s", message.h.method); + ogs_assert_if_reached(); + END + break; + + DEFAULT + ogs_error("Invalid resource name %s", + message.h.resource.component0); + ogs_assert_if_reached(); + END + break; + + CASE(OGS_SBI_SERVICE_NAME_NNRF_DISC) + SWITCH(message.h.resource.component0) + CASE(OGS_SBI_RESOURCE_NAME_NF_INSTANCES) + sbi_xact = e->sbi.data; + ogs_assert(sbi_xact); + + SWITCH(message.h.method) + CASE(OGS_SBI_HTTP_METHOD_GET) + if (message.res_status == OGS_SBI_HTTP_STATUS_OK) + scp_nnrf_handle_nf_discover(sbi_xact, &message); + else + ogs_error("HTTP response error %d", + message.res_status); + break; + + DEFAULT + ogs_error("Invalid HTTP method %s", message.h.method); + ogs_assert_if_reached(); + END + break; + + DEFAULT + ogs_error("Invalid resource name %s", + message.h.resource.component0); + ogs_assert_if_reached(); + END + break; + + DEFAULT + ogs_error("Invalid service name %s", message.h.service.name); + ogs_assert_if_reached(); + END + + ogs_sbi_message_free(&message); + ogs_sbi_response_free(response); + break; + + case SCP_EVT_SBI_TIMER: + ogs_assert(e); + + switch(e->timer_id) { + case SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL: + case SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL: + case SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT: + case SCP_TIMER_NF_INSTANCE_VALIDITY: + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + ogs_assert(OGS_FSM_STATE(&nf_instance->sm)); + + ogs_fsm_dispatch(&nf_instance->sm, e); + if (OGS_FSM_CHECK(&nf_instance->sm, scp_nf_state_exception)) + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id, e->timer_id); + break; + + case SCP_TIMER_SUBSCRIPTION_VALIDITY: + subscription = e->sbi.data; + ogs_assert(subscription); + + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(true == + ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, + subscription->subscr_cond.nf_type)); + + ogs_info("Subscription validity expired %s", subscription->id); + ogs_sbi_subscription_remove(subscription); + break; + + case SCP_TIMER_SBI_CLIENT_WAIT: + sbi_xact = e->sbi.data; + ogs_assert(sbi_xact); + + stream = sbi_xact->assoc_stream; + /* Here, we should not use ogs_assert(stream) + * since 'namf-comm' service has no an associated stream. */ + + ogs_sbi_xact_remove(sbi_xact); + + ogs_error("Cannot receive SBI message"); + if (stream) { + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL, + "Cannot receive SBI message", NULL)); + } + break; + + default: + ogs_error("Unknown timer%s:%d", + scp_timer_get_name(e->timer_id), e->timer_id); + } + break; + + default: + ogs_error("No handler for event %s", scp_event_get_name(e)); + break; + } +}
View file
open5gs_2.4.9.tar.xz/src/scp/scp-sm.h
Added
@@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_SM_H +#define SCP_SM_H + +#include "event.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void scp_state_initial(ogs_fsm_t *s, scp_event_t *e); +void scp_state_final(ogs_fsm_t *s, scp_event_t *e); +void scp_state_operational(ogs_fsm_t *s, scp_event_t *e); +void scp_state_exception(ogs_fsm_t *s, scp_event_t *e); + +void scp_nf_fsm_init(ogs_sbi_nf_instance_t *nf_instance); +void scp_nf_fsm_fini(ogs_sbi_nf_instance_t *nf_instance); + +void scp_nf_state_initial(ogs_fsm_t *s, scp_event_t *e); +void scp_nf_state_final(ogs_fsm_t *s, scp_event_t *e); +void scp_nf_state_will_register(ogs_fsm_t *s, scp_event_t *e); +void scp_nf_state_registered(ogs_fsm_t *s, scp_event_t *e); +void scp_nf_state_de_registered(ogs_fsm_t *s, scp_event_t *e); +void scp_nf_state_exception(ogs_fsm_t *s, scp_event_t *e); + +#define scp_sm_debug(__pe) \ + ogs_debug("%s(): %s", __func__, scp_event_get_name(__pe)) + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_SM_H */
View file
open5gs_2.4.9.tar.xz/src/scp/timer.c
Added
@@ -0,0 +1,118 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "timer.h" +#include "event.h" +#include "context.h" + +const char *scp_timer_get_name(scp_timer_e id) +{ + switch (id) { + case SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL: + return "SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL"; + case SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL: + return "SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL"; + case SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT: + return "SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT"; + case SCP_TIMER_NF_INSTANCE_VALIDITY: + return "SCP_TIMER_NF_INSTANCE_VALIDITY"; + case SCP_TIMER_SUBSCRIPTION_VALIDITY: + return "SCP_TIMER_SUBSCRIPTION_VALIDITY"; + case SCP_TIMER_SBI_CLIENT_WAIT: + return "SCP_TIMER_SBI_CLIENT_WAIT"; + default: + break; + } + + return "UNKNOWN_TIMER"; +} + +static void timer_send_event(int timer_id, void *data) +{ + int rv; + scp_event_t *e = NULL; + ogs_assert(data); + + switch (timer_id) { + case SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL: + case SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL: + case SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT: + case SCP_TIMER_NF_INSTANCE_VALIDITY: + case SCP_TIMER_SUBSCRIPTION_VALIDITY: + e = scp_event_new(SCP_EVT_SBI_TIMER); + ogs_assert(e); + e->timer_id = timer_id; + e->sbi.data = data; + break; + case SCP_TIMER_SBI_CLIENT_WAIT: + e = scp_event_new(SCP_EVT_SBI_TIMER); + if (!e) { + ogs_sbi_xact_t *sbi_xact = data; + ogs_assert(sbi_xact); + + ogs_error("timer_send_event() failed"); + ogs_sbi_xact_remove(sbi_xact); + return; + } + e->timer_id = timer_id; + e->sbi.data = data; + break; + default: + ogs_fatal("Unknown timer id%d", timer_id); + ogs_assert_if_reached(); + break; + } + + rv = ogs_queue_push(ogs_app()->queue, e); + if (rv != OGS_OK) { + ogs_warn("ogs_queue_push() failed %d in %s", + (int)rv, scp_timer_get_name(e->timer_id)); + scp_event_free(e); + } +} + +void scp_timer_nf_instance_registration_interval(void *data) +{ + timer_send_event(SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL, data); +} + +void scp_timer_nf_instance_heartbeat_interval(void *data) +{ + timer_send_event(SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL, data); +} + +void scp_timer_nf_instance_no_heartbeat(void *data) +{ + timer_send_event(SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT, data); +} + +void scp_timer_nf_instance_validity(void *data) +{ + timer_send_event(SCP_TIMER_NF_INSTANCE_VALIDITY, data); +} + +void scp_timer_subscription_validity(void *data) +{ + timer_send_event(SCP_TIMER_SUBSCRIPTION_VALIDITY, data); +} + +void scp_timer_sbi_client_wait_expire(void *data) +{ + timer_send_event(SCP_TIMER_SBI_CLIENT_WAIT, data); +}
View file
open5gs_2.4.9.tar.xz/src/scp/timer.h
Added
@@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019-2022 by Sukchan Lee <acetcom@gmail.com> + * + * This file is part of Open5GS. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef SCP_TIMER_H +#define SCP_TIMER_H + +#include "ogs-core.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* forward declaration */ +typedef enum { + SCP_TIMER_BASE = 0, + + SCP_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL, + SCP_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL, + SCP_TIMER_NF_INSTANCE_NO_HEARTBEAT, + SCP_TIMER_NF_INSTANCE_VALIDITY, + SCP_TIMER_SUBSCRIPTION_VALIDITY, + SCP_TIMER_SBI_CLIENT_WAIT, + + MAX_NUM_OF_SCP_TIMER, + +} scp_timer_e; + +const char *scp_timer_get_name(scp_timer_e id); + +void scp_timer_nf_instance_registration_interval(void *data); +void scp_timer_nf_instance_heartbeat_interval(void *data); +void scp_timer_nf_instance_no_heartbeat(void *data); +void scp_timer_nf_instance_validity(void *data); +void scp_timer_subscription_validity(void *data); +void scp_timer_sbi_client_wait_expire(void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* SCP_TIMER_H */
View file
open5gs_2.4.8.tar.xz/src/sgwc/context.c -> open5gs_2.4.9.tar.xz/src/sgwc/context.c
Changed
@@ -702,16 +702,20 @@ pdr = ogs_pfcp_pdr_add(&sess->pfcp); ogs_assert(pdr); - pdr->src_if = src_if; - if (sess->session.name) { - pdr->apn = ogs_strdup(sess->session.name); - ogs_assert(pdr->apn); - } + ogs_assert(sess->session.name); + pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(pdr->apn); + + pdr->src_if = src_if; far = ogs_pfcp_far_add(&sess->pfcp); ogs_assert(far); + ogs_assert(sess->session.name); + far->apn = ogs_strdup(sess->session.name); + ogs_assert(far->apn); + far->dst_if = dst_if; ogs_pfcp_pdr_associate_far(pdr, far); @@ -721,6 +725,22 @@ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + + /* TS 129 244 V16.5.0 8.2.3 + * + * At least one of the V4 and V6 flags shall be set to "1", + * and both may be set to "1" for both scenarios: + * + * - when the CP function is providing F-TEID, i.e. + * both IPv4 address field and IPv6 address field may be present; + * or + * - when the UP function is requested to allocate the F-TEID, + * i.e. when CHOOSE bit is set to "1", + * and the IPv4 address and IPv6 address fields are not present. + */ + + pdr->f_teid.ipv4 = 1; + pdr->f_teid.ipv6 = 1; pdr->f_teid.ch = 1; pdr->f_teid_len = 1; } else {
View file
open5gs_2.4.8.tar.xz/src/sgwc/gtp-path.c -> open5gs_2.4.9.tar.xz/src/sgwc/gtp-path.c
Changed
@@ -27,6 +27,7 @@ ogs_pkbuf_t *pkbuf = NULL; ogs_sockaddr_t from; ogs_gtp_node_t *gnode = NULL; + char frombufOGS_ADDRSTRLEN; ogs_assert(fd != INVALID_SOCKET); @@ -83,7 +84,12 @@ gnode = ogs_gtp_node_find_by_addr(&sgwc_self()->mme_s11_list, &from); if (!gnode) { gnode = ogs_gtp_node_add_by_addr(&sgwc_self()->mme_s11_list, &from); - ogs_assert(gnode); + if (!gnode) { + ogs_error("Failed to create new gnode(%s:%u), mempool full, ignoring msg!", + OGS_ADDR(&from, frombuf), OGS_PORT(&from)); + ogs_pkbuf_free(pkbuf); + return; + } gnode->sock = data; } ogs_assert(e);
View file
open5gs_2.4.8.tar.xz/src/sgwc/pfcp-path.c -> open5gs_2.4.9.tar.xz/src/sgwc/pfcp-path.c
Changed
@@ -117,7 +117,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); sgwc_event_free(e); } @@ -212,6 +212,8 @@ ogs_assert(sess); ogs_assert(xact); + xact->local_seid = sess->sgwc_sxa_seid; + memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE; h.seid = sess->sgwu_sxa_seid; @@ -246,6 +248,7 @@ xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); } + xact->local_seid = sess->sgwc_sxa_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_ESTABLISHMENT_REQUEST_TYPE; @@ -281,6 +284,7 @@ xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); } + xact->local_seid = sess->sgwc_sxa_seid; ogs_list_for_each(&sess->bearer_list, bearer) ogs_list_add(&xact->bearer_to_modify_list, &bearer->to_modify_node); @@ -311,6 +315,7 @@ xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); } + xact->local_seid = sess->sgwc_sxa_seid; ogs_list_add(&xact->bearer_to_modify_list, &bearer->to_modify_node); @@ -348,6 +353,7 @@ xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); } + xact->local_seid = sess->sgwc_sxa_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_DELETION_REQUEST_TYPE; @@ -373,6 +379,7 @@ ogs_pfcp_header_t h; ogs_assert(xact); + xact->local_seid = sess->sgwc_sxa_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE;
View file
open5gs_2.4.8.tar.xz/src/sgwc/pfcp-sm.c -> open5gs_2.4.9.tar.xz/src/sgwc/pfcp-sm.c
Changed
@@ -183,8 +183,16 @@ xact = e->pfcp_xact; ogs_assert(xact); - if (message->h.seid_presence && message->h.seid != 0) + if (message->h.seid_presence && message->h.seid != 0) { sess = sgwc_sess_find_by_seid(message->h.seid); + } else if (xact->local_seid) { /* rx no SEID or SEID=0 */ + /* 3GPP TS 29.244 7.2.2.4.2: we receive SEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the SEID we + * locally stored in xact when sending the original request: */ + sess = sgwc_sess_find_by_seid(xact->local_seid); + } switch (message->h.type) { case OGS_PFCP_HEARTBEAT_REQUEST_TYPE: @@ -208,10 +216,7 @@ &message->pfcp_association_setup_response); break; case OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); sgwc_sxa_handle_session_establishment_response( sess, xact, e->gtp_message, @@ -219,10 +224,7 @@ break; case OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); sgwc_sxa_handle_session_modification_response( sess, xact, e->gtp_message, @@ -230,10 +232,7 @@ break; case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); sgwc_sxa_handle_session_deletion_response( sess, xact, e->gtp_message, @@ -241,10 +240,7 @@ break; case OGS_PFCP_SESSION_REPORT_REQUEST_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); sgwc_sxa_handle_session_report_request( sess, xact, &message->pfcp_session_report_request); @@ -320,7 +316,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); sgwc_event_free(e); } break;
View file
open5gs_2.4.8.tar.xz/src/sgwc/s11-handler.c -> open5gs_2.4.9.tar.xz/src/sgwc/s11-handler.c
Changed
@@ -480,6 +480,7 @@ current_xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); ogs_assert(current_xact->gtpbuf); } + current_xact->local_seid = sess->sgwc_sxa_seid; ogs_list_add(&pfcp_xact_list, ¤t_xact->tmpnode); } @@ -688,6 +689,7 @@ ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL, *enb_s1u_teid = NULL; ogs_gtp2_uli_t uli; + ogs_assert(sgwc_ue); ogs_assert(message); rsp = &message->create_bearer_response; ogs_assert(rsp); @@ -714,30 +716,10 @@ rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); - /************************ - * Check SGWC-UE Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sgwc_ue) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_assert(OGS_OK == - sgwc_pfcp_send_bearer_modification_request( - bearer, NULL, NULL, - OGS_PFCP_MODIFY_UL_ONLY|OGS_PFCP_MODIFY_REMOVE)); - ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0, - OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value); - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->bearer_contexts.presence == 0) { ogs_error("No Bearer"); @@ -872,6 +854,7 @@ sgwc_bearer_t *bearer = NULL; ogs_gtp2_update_bearer_response_t *rsp = NULL; + ogs_assert(sgwc_ue); ogs_assert(message); rsp = &message->update_bearer_response; ogs_assert(rsp); @@ -898,26 +881,10 @@ rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); - /************************ - * Check SGWC-UE Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sgwc_ue) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0, - OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value); - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->bearer_contexts.presence == 0) { ogs_error("No Bearer"); @@ -1004,6 +971,7 @@ sgwc_bearer_t *bearer = NULL; ogs_gtp2_delete_bearer_response_t *rsp = NULL; + ogs_assert(sgwc_ue); ogs_assert(message); rsp = &message->delete_bearer_response; ogs_assert(rsp); @@ -1035,11 +1003,6 @@ ************************/ cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sgwc_ue) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - if (rsp->linked_eps_bearer_id.presence) { /* * << Linked EPS Bearer ID >> @@ -1111,10 +1074,8 @@ ogs_error("No Cause"); } - if (sgwc_ue) { - ogs_debug(" MME_S11_TEID%d SGW_S11_TEID%d", - sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid); - } + ogs_debug(" MME_S11_TEID%d SGW_S11_TEID%d", + sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid); ogs_debug(" SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x", sess->sgw_s5c_teid, sess->pgw_s5c_teid); @@ -1513,6 +1474,7 @@ s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &message->h, pkbuf, gtp_bearer_timeout, bearer); ogs_expect_or_return(s5c_xact); + s5c_xact->local_teid = sess->sgw_s5c_teid; ogs_gtp_xact_associate(s11_xact, s5c_xact);
View file
open5gs_2.4.8.tar.xz/src/sgwc/s5c-handler.c -> open5gs_2.4.9.tar.xz/src/sgwc/s5c-handler.c
Changed
@@ -79,6 +79,9 @@ ogs_gtp_xact_t *s11_xact = NULL; ogs_gtp_node_t *pgw = NULL; + ogs_assert(sess); + sgwc_ue = sess->sgwc_ue; + ogs_assert(sgwc_ue); ogs_assert(gtpbuf); ogs_assert(message); rsp = &message->create_session_response; @@ -96,30 +99,10 @@ rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); - /************************ - * Check Session Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } else { - sgwc_ue = sess->sgwc_ue; - ogs_assert(sgwc_ue); - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) { ogs_error("No GTP TEID"); @@ -282,24 +265,29 @@ OGS_PFCP_MODIFY_UL_ONLY|OGS_PFCP_MODIFY_ACTIVATE)); } -void sgwc_s5c_handle_delete_session_response( +void sgwc_s5c_handle_modify_bearer_response( sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact, ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message) { int rv; ogs_gtp2_cause_t *cause = NULL; uint8_t cause_value; + int modify_action; sgwc_ue_t *sgwc_ue = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_gtp_xact_t *s11_xact = NULL; - ogs_gtp2_delete_session_response_t *rsp = NULL; + ogs_gtp2_modify_bearer_response_t *rsp = NULL; + ogs_assert(sess); + sgwc_ue = sess->sgwc_ue; + ogs_assert(sgwc_ue); ogs_assert(message); - rsp = &message->delete_session_response; + rsp = &message->modify_bearer_response; ogs_assert(rsp); - ogs_debug("Delete Session Response"); + ogs_debug("Modify Bearer Response"); /******************** * Check Transaction @@ -307,34 +295,15 @@ ogs_assert(s5c_xact); s11_xact = s5c_xact->assoc_xact; ogs_assert(s11_xact); + modify_action = s5c_xact->modify_action; rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); - /************************ - * Check Session Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } else { - sgwc_ue = sess->sgwc_ue; - ogs_assert(sgwc_ue); - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value); - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->cause.presence == 0) { ogs_error("No Cause"); @@ -342,9 +311,14 @@ } if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value); + if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); + else + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value); return; } @@ -358,52 +332,67 @@ cause_value = cause->value; if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { ogs_error("GTP Failed CAUSE:%d", cause_value); - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value); + if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); + else + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value); return; } /******************** * Check ALL Context ********************/ - ogs_assert(sess); ogs_assert(sgwc_ue); + ogs_assert(sess); - /* Remove a pgw session */ ogs_debug(" MME_S11_TEID%d SGW_S11_TEID%d", sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid); ogs_debug(" SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x", sess->sgw_s5c_teid, sess->pgw_s5c_teid); - /* - * 1. MME sends Delete Session Request to SGW/SMF. - * 2. SMF sends Delete Session Response to SGW/MME. - */ - ogs_assert(OGS_OK == - sgwc_pfcp_send_session_deletion_request(sess, s11_xact, gtpbuf)); + if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) { + ogs_assert(OGS_OK == + sgwc_gtp_send_create_session_response(sess, s11_xact)); + } else { + message->h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE; + message->h.teid = sgwc_ue->mme_s11_teid; + + pkbuf = ogs_gtp2_build_msg(message); + ogs_expect_or_return(pkbuf); + + rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); + ogs_expect_or_return(rv == OGS_OK); + + rv = ogs_gtp_xact_commit(s11_xact); + ogs_expect(rv == OGS_OK); + } } -void sgwc_s5c_handle_modify_bearer_response( +void sgwc_s5c_handle_delete_session_response( sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact, ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message) { int rv; ogs_gtp2_cause_t *cause = NULL; uint8_t cause_value; - int modify_action; sgwc_ue_t *sgwc_ue = NULL; - ogs_pkbuf_t *pkbuf = NULL; ogs_gtp_xact_t *s11_xact = NULL; - ogs_gtp2_modify_bearer_response_t *rsp = NULL; + ogs_gtp2_delete_session_response_t *rsp = NULL; + ogs_assert(sess); + sgwc_ue = sess->sgwc_ue; + ogs_assert(sgwc_ue); ogs_assert(message); - rsp = &message->modify_bearer_response; + rsp = &message->delete_session_response; ogs_assert(rsp); - ogs_debug("Modify Bearer Response"); + ogs_debug("Delete Session Response"); /******************** * Check Transaction @@ -411,40 +400,14 @@ ogs_assert(s5c_xact); s11_xact = s5c_xact->assoc_xact; ogs_assert(s11_xact); - modify_action = s5c_xact->modify_action; rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); - /************************ - * Check Session Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } else { - sgwc_ue = sess->sgwc_ue; - ogs_assert(sgwc_ue); - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); - else - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value); - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->cause.presence == 0) { ogs_error("No Cause"); @@ -452,14 +415,9 @@ } if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); - else - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value); + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value); return; } @@ -473,44 +431,30 @@ cause_value = cause->value; if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { ogs_error("GTP Failed CAUSE:%d", cause_value); - if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value); - else - ogs_gtp_send_error_message( - s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, - OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value); + ogs_gtp_send_error_message( + s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0, + OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value); return; } /******************** * Check ALL Context ********************/ - ogs_assert(sgwc_ue); ogs_assert(sess); + ogs_assert(sgwc_ue); + /* Remove a pgw session */ ogs_debug(" MME_S11_TEID%d SGW_S11_TEID%d", sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid); ogs_debug(" SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x", sess->sgw_s5c_teid, sess->pgw_s5c_teid); - if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) { - ogs_assert(OGS_OK == - sgwc_gtp_send_create_session_response(sess, s11_xact)); - } else { - message->h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE; - message->h.teid = sgwc_ue->mme_s11_teid; - - pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); - - rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); - - rv = ogs_gtp_xact_commit(s11_xact); - ogs_expect(rv == OGS_OK); - } + /* + * 1. MME sends Delete Session Request to SGW/SMF. + * 2. SMF sends Delete Session Response to SGW/MME. + */ + ogs_assert(OGS_OK == + sgwc_pfcp_send_session_deletion_request(sess, s11_xact, gtpbuf)); } void sgwc_s5c_handle_create_bearer_request( @@ -725,6 +669,7 @@ rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); ogs_expect_or_return(rv == OGS_OK); } + s11_xact->local_teid = sgwc_ue->sgw_s11_teid; rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -874,6 +819,7 @@ rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); ogs_expect_or_return(rv == OGS_OK); } + s11_xact->local_teid = sgwc_ue->sgw_s11_teid; rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -889,6 +835,9 @@ sgwc_ue_t *sgwc_ue = NULL; + ogs_assert(sess); + sgwc_ue = sess->sgwc_ue; + ogs_assert(sgwc_ue); ogs_assert(message); ind = &message->bearer_resource_failure_indication; ogs_assert(ind); @@ -902,17 +851,6 @@ s11_xact = s5c_xact->assoc_xact; ogs_assert(s11_xact); - /************************ - * Check Session Context - ************************/ - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } else { - sgwc_ue = sess->sgwc_ue; - ogs_assert(sgwc_ue); - } - /******************** * Check Cause Value ********************/
View file
open5gs_2.4.8.tar.xz/src/sgwc/sgwc-sm.c -> open5gs_2.4.9.tar.xz/src/sgwc/sgwc-sm.c
Changed
@@ -157,6 +157,13 @@ if (gtp_message.h.teid_presence && gtp_message.h.teid != 0) { /* Cause is not "Context not found" */ sgwc_ue = sgwc_ue_find_by_teid(gtp_message.h.teid); + } else if (gtp_xact->local_teid) { /* rx no TEID or TEID=0 */ + /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the TEID we + * locally stored in xact when sending the original request: */ + sgwc_ue = sgwc_ue_find_by_teid(gtp_xact->local_teid); } switch(gtp_message.h.type) { @@ -185,14 +192,17 @@ sgwc_ue, gtp_xact, recvbuf, >p_message); break; case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s11_handle_create_bearer_response( sgwc_ue, gtp_xact, recvbuf, >p_message); break; case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s11_handle_update_bearer_response( sgwc_ue, gtp_xact, recvbuf, >p_message); break; case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s11_handle_delete_bearer_response( sgwc_ue, gtp_xact, recvbuf, >p_message); break; @@ -245,6 +255,13 @@ if (gtp_message.h.teid_presence && gtp_message.h.teid != 0) { sess = sgwc_sess_find_by_teid(gtp_message.h.teid); + } else if (gtp_xact->local_teid) { /* rx no TEID or TEID=0 */ + /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the TEID we + * locally stored in xact when sending the original request: */ + sess = sgwc_sess_find_by_teid(gtp_xact->local_teid); } switch(gtp_message.h.type) { @@ -255,17 +272,20 @@ sgwc_handle_echo_response(gtp_xact, >p_message.echo_response); break; case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s5c_handle_create_session_response( sess, gtp_xact, recvbuf, >p_message); break; - case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE: - sgwc_s5c_handle_delete_session_response( - sess, gtp_xact, recvbuf, >p_message); - break; case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s5c_handle_modify_bearer_response( sess, gtp_xact, recvbuf, >p_message); break; + case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); + sgwc_s5c_handle_delete_session_response( + sess, gtp_xact, recvbuf, >p_message); + break; case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE: sgwc_s5c_handle_create_bearer_request( sess, gtp_xact, recvbuf, >p_message); @@ -279,6 +299,7 @@ sess, gtp_xact, recvbuf, >p_message); break; case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE: + if (!gtp_message.h.teid_presence) ogs_error("No TEID"); sgwc_s5c_handle_bearer_resource_failure_indication( sess, gtp_xact, recvbuf, >p_message); break;
View file
open5gs_2.4.8.tar.xz/src/sgwc/sxa-handler.c -> open5gs_2.4.9.tar.xz/src/sgwc/sxa-handler.c
Changed
@@ -157,6 +157,7 @@ ogs_debug("Session Establishment Response"); + ogs_assert(sess); ogs_assert(pfcp_xact); ogs_assert(pfcp_rsp); ogs_assert(recv_message); @@ -171,11 +172,6 @@ cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sess) { - ogs_warn("No Context"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - if (pfcp_rsp->up_f_seid.presence == 0) { ogs_error("No UP F-SEID"); cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING; @@ -382,6 +378,7 @@ s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &send_message.h, pkbuf, sess_timeout, sess); ogs_expect_or_return(s5c_xact); + s5c_xact->local_teid = sess->sgw_s5c_teid; s5c_xact->modify_action = OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST; @@ -419,6 +416,7 @@ s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &recv_message->h, pkbuf, sess_timeout, sess); ogs_expect_or_return(s5c_xact); + s5c_xact->local_teid = sess->sgw_s5c_teid; } ogs_gtp_xact_associate(s11_xact, s5c_xact); @@ -451,6 +449,7 @@ ogs_debug("Session Modification Response"); + ogs_assert(sess); ogs_assert(pfcp_xact); ogs_assert(pfcp_rsp); @@ -460,30 +459,12 @@ cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (flags & OGS_PFCP_MODIFY_SESSION) { - if (!sess) { - ogs_warn("No Context"); - - sess = pfcp_xact->data; - ogs_assert(sess); - - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } sgwc_ue = sess->sgwc_ue; ogs_assert(sgwc_ue); } else { bearer = pfcp_xact->data; ogs_assert(bearer); - - if (!sess) { - ogs_warn("No Context"); - - sess = bearer->sess; - ogs_assert(sess); - - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - sgwc_ue = bearer->sgwc_ue; ogs_assert(sgwc_ue); } @@ -752,6 +733,7 @@ s11_xact = ogs_gtp_xact_local_create(sgwc_ue->gnode, &recv_message->h, pkbuf, bearer_timeout, bearer); ogs_expect_or_return(s11_xact); + s11_xact->local_teid = sgwc_ue->sgw_s11_teid; ogs_gtp_xact_associate(s5c_xact, s11_xact); @@ -1041,6 +1023,7 @@ sess->gnode, &recv_message->h, pkbuf, sess_timeout, sess); ogs_expect_or_return(s5c_xact); + s5c_xact->local_teid = sess->sgw_s5c_teid; ogs_gtp_xact_associate(s11_xact, s5c_xact); @@ -1202,16 +1185,12 @@ ogs_debug("Session Deletion Response"); + ogs_assert(sess); ogs_assert(pfcp_xact); ogs_assert(pfcp_rsp); cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sess) { - ogs_warn("No Context"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - if (pfcp_rsp->cause.presence) { if (pfcp_rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) { ogs_warn("PFCP Cause%d : Not Accepted", pfcp_rsp->cause.u8); @@ -1320,16 +1299,12 @@ ogs_debug("Session Report Request"); + ogs_assert(sess); ogs_assert(pfcp_xact); ogs_assert(pfcp_req); cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sess) { - ogs_warn("No Context"); - cause_value = OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND; - } - if (pfcp_req->report_type.presence == 0) { ogs_error("No Report Type"); cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
View file
open5gs_2.4.8.tar.xz/src/sgwc/sxa-handler.h -> open5gs_2.4.9.tar.xz/src/sgwc/sxa-handler.h
Changed
@@ -28,11 +28,11 @@ void sgwc_sxa_handle_session_establishment_response( sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact, - ogs_gtp2_message_t *gtp_message, + ogs_gtp2_message_t *recv_message, ogs_pfcp_session_establishment_response_t *pfcp_rsp); void sgwc_sxa_handle_session_modification_response( sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact, - ogs_gtp2_message_t *gtp_message, + ogs_gtp2_message_t *recv_message, ogs_pfcp_session_modification_response_t *pfcp_rsp); void sgwc_sxa_handle_session_deletion_response( sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
View file
open5gs_2.4.8.tar.xz/src/sgwc/timer.c -> open5gs_2.4.9.tar.xz/src/sgwc/timer.c
Changed
@@ -57,7 +57,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, sgwc_timer_get_name(e->timer_id)); sgwc_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/sgwu/pfcp-path.c -> open5gs_2.4.9.tar.xz/src/sgwu/pfcp-path.c
Changed
@@ -117,7 +117,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); sgwu_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/sgwu/pfcp-sm.c -> open5gs_2.4.9.tar.xz/src/sgwu/pfcp-sm.c
Changed
@@ -295,7 +295,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); sgwu_event_free(e); } break;
View file
open5gs_2.4.8.tar.xz/src/sgwu/sxa-handler.c -> open5gs_2.4.9.tar.xz/src/sgwu/sxa-handler.c
Changed
@@ -120,6 +120,9 @@ &ogs_gtp_self()->gtpu_resource_list, pdr->apn, OGS_PFCP_INTERFACE_ACCESS); if (resource) { + ogs_assert( + (resource->info.v4 && pdr->f_teid.ipv4) || + (resource->info.v6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_user_plane_ip_resource_info_to_f_teid( &resource->info, &pdr->f_teid, &pdr->f_teid_len)); @@ -130,10 +133,15 @@ else pdr->f_teid.teid = pdr->index; } else { + ogs_assert( + (ogs_gtp_self()->gtpu_addr && pdr->f_teid.ipv4) || + (ogs_gtp_self()->gtpu_addr6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_sockaddr_to_f_teid( - ogs_gtp_self()->gtpu_addr, - ogs_gtp_self()->gtpu_addr6, + pdr->f_teid.ipv4 ? + ogs_gtp_self()->gtpu_addr : NULL, + pdr->f_teid.ipv6 ? + ogs_gtp_self()->gtpu_addr6 : NULL, &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } @@ -327,6 +335,9 @@ &ogs_gtp_self()->gtpu_resource_list, pdr->apn, OGS_PFCP_INTERFACE_ACCESS); if (resource) { + ogs_assert( + (resource->info.v4 && pdr->f_teid.ipv4) || + (resource->info.v6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_user_plane_ip_resource_info_to_f_teid( &resource->info, &pdr->f_teid, &pdr->f_teid_len)); @@ -337,10 +348,15 @@ else pdr->f_teid.teid = pdr->index; } else { + ogs_assert( + (ogs_gtp_self()->gtpu_addr && pdr->f_teid.ipv4) || + (ogs_gtp_self()->gtpu_addr6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_sockaddr_to_f_teid( - ogs_gtp_self()->gtpu_addr, - ogs_gtp_self()->gtpu_addr6, + pdr->f_teid.ipv4 ? + ogs_gtp_self()->gtpu_addr : NULL, + pdr->f_teid.ipv6 ? + ogs_gtp_self()->gtpu_addr6 : NULL, &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; }
View file
open5gs_2.4.8.tar.xz/src/sgwu/timer.c -> open5gs_2.4.9.tar.xz/src/sgwu/timer.c
Changed
@@ -45,7 +45,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); sgwu_event_free(e); } }
View file
open5gs_2.4.8.tar.xz/src/smf/binding.c -> open5gs_2.4.9.tar.xz/src/smf/binding.c
Changed
@@ -168,6 +168,22 @@ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + + /* TS 129 244 V16.5.0 8.2.3 + * + * At least one of the V4 and V6 flags shall be set to "1", + * and both may be set to "1" for both scenarios: + * + * - when the CP function is providing F-TEID, i.e. + * both IPv4 address field and IPv6 address field may be present; + * or + * - when the UP function is requested to allocate the F-TEID, + * i.e. when CHOOSE bit is set to "1", + * and the IPv4 address and IPv6 address fields are not present. + */ + + ul_pdr->f_teid.ipv4 = 1; + ul_pdr->f_teid.ipv6 = 1; ul_pdr->f_teid.ch = 1; ul_pdr->f_teid_len = 1; } else { @@ -353,6 +369,7 @@ xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, gtp_bearer_timeout, bearer); ogs_expect_or_return(xact); + xact->local_teid = sess->smf_n4_teid; if (ogs_list_count(&bearer->pf_to_add_list) > 0) xact->update_flags |= OGS_GTP_MODIFY_TFT_UPDATE; @@ -422,6 +439,7 @@ xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, gtp_bearer_timeout, bearer); ogs_expect_or_return_val(xact, OGS_ERROR); + xact->local_teid = sess->smf_n4_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -490,6 +508,22 @@ /* Set UPF-N3 TEID & ADDR to the UL PDR */ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + + /* TS 129 244 V16.5.0 8.2.3 + * + * At least one of the V4 and V6 flags shall be set to "1", + * and both may be set to "1" for both scenarios: + * + * - when the CP function is providing F-TEID, i.e. + * both IPv4 address field and IPv6 address field may be present; + * or + * - when the UP function is requested to allocate the F-TEID, + * i.e. when CHOOSE bit is set to "1", + * and the IPv4 address and IPv6 address fields are not present. + */ + + ul_pdr->f_teid.ipv4 = 1; + ul_pdr->f_teid.ipv6 = 1; ul_pdr->f_teid.ch = 1; ul_pdr->f_teid.chid = 1; ul_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID;
View file
open5gs_2.4.8.tar.xz/src/smf/context.c -> open5gs_2.4.9.tar.xz/src/smf/context.c
Changed
@@ -80,7 +80,7 @@ ogs_log_install_domain(&__smf_log_domain, "smf", ogs_core()->log.level); ogs_log_install_domain(&__gsm_log_domain, "gsm", ogs_core()->log.level); - ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.gtp_node); + ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.nf); ogs_pool_init(&smf_ue_pool, ogs_app()->max.ue); ogs_pool_init(&smf_sess_pool, ogs_app()->pool.sess); ogs_pool_init(&smf_bearer_pool, ogs_app()->pool.bearer); @@ -148,15 +148,18 @@ { self.diam_config->cnf_port = DIAMETER_PORT; self.diam_config->cnf_port_tls = DIAMETER_SECURE_PORT; - self.nf_type = OpenAPI_nf_type_SMF; return OGS_OK; } static int smf_context_validation(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; ogs_sbi_nf_info_t *nf_info = NULL; + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + if (self.dns0 == NULL && self.dns60 == NULL) { ogs_error("No smf.dns in '%s'", ogs_app()->file); return OGS_ERROR; @@ -170,7 +173,7 @@ return OGS_ERROR; } - ogs_list_for_each(&ogs_sbi_self()->nf_info_list, nf_info) { + ogs_list_for_each(&nf_instance->nf_info_list, nf_info) { int i; ogs_sbi_smf_info_t *smf_info = &nf_info->smf; ogs_assert(smf_info); @@ -479,8 +482,14 @@ } while (ogs_yaml_iter_type(&p_cscf_iter) == YAML_SEQUENCE_NODE); } else if (!strcmp(smf_key, "info")) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_yaml_iter_t info_array, info_iter; ogs_yaml_iter_recurse(&smf_iter, &info_array); + + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + do { ogs_sbi_nf_info_t *nf_info = NULL; ogs_sbi_smf_info_t *smf_info = NULL; @@ -501,7 +510,7 @@ ogs_assert_if_reached(); nf_info = ogs_sbi_nf_info_add( - &ogs_sbi_self()->nf_info_list, + &nf_instance->nf_info_list, OpenAPI_nf_type_SMF); ogs_assert(nf_info); @@ -1597,6 +1606,7 @@ OGS_TLV_CLEAR_DATA(&sess->gtp.user_location_information); OGS_TLV_CLEAR_DATA(&sess->gtp.ue_timezone); OGS_TLV_CLEAR_DATA(&sess->gtp.charging_characteristics); + OGS_TLV_CLEAR_DATA(&sess->gtp.v1.qos); OGS_NAS_CLEAR_DATA(&sess->nas.ue_pco); @@ -1648,6 +1658,8 @@ if (sess->pcf_id) ogs_free(sess->pcf_id); + if (sess->serving_nf_id) + ogs_free(sess->serving_nf_id); /* Free SBI object memory */ ogs_sbi_object_free(&sess->sbi); @@ -1813,23 +1825,21 @@ ogs_assert(dl_pdr); qos_flow->dl_pdr = dl_pdr; - dl_pdr->src_if = OGS_PFCP_INTERFACE_CORE; + ogs_assert(sess->session.name); + dl_pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(dl_pdr->apn); - if (sess->session.name) { - dl_pdr->apn = ogs_strdup(sess->session.name); - ogs_assert(dl_pdr->apn); - } + dl_pdr->src_if = OGS_PFCP_INTERFACE_CORE; ul_pdr = ogs_pfcp_pdr_add(&sess->pfcp); ogs_assert(ul_pdr); qos_flow->ul_pdr = ul_pdr; - ul_pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; + ogs_assert(sess->session.name); + ul_pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(ul_pdr->apn); - if (sess->session.name) { - ul_pdr->apn = ogs_strdup(sess->session.name); - ogs_assert(ul_pdr->apn); - } + ul_pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; ul_pdr->outer_header_removal_len = 2; if (sess->session.session_type == OGS_PDU_SESSION_TYPE_IPV4) { @@ -1851,6 +1861,10 @@ ogs_assert(dl_far); qos_flow->dl_far = dl_far; + ogs_assert(sess->session.name); + dl_far->apn = ogs_strdup(sess->session.name); + ogs_assert(dl_far->apn); + dl_far->dst_if = OGS_PFCP_INTERFACE_ACCESS; ogs_pfcp_pdr_associate_far(dl_pdr, dl_far); @@ -1862,6 +1876,10 @@ ogs_assert(ul_far); qos_flow->ul_far = ul_far; + ogs_assert(sess->session.name); + ul_far->apn = ogs_strdup(sess->session.name); + ogs_assert(ul_far->apn); + ul_far->dst_if = OGS_PFCP_INTERFACE_CORE; ogs_pfcp_pdr_associate_far(ul_pdr, ul_far); @@ -1916,6 +1934,10 @@ pdr = ogs_pfcp_pdr_add(&sess->pfcp); ogs_assert(pdr); + ogs_assert(sess->session.name); + pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(pdr->apn); + pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; pdr->outer_header_removal_len = 1; @@ -1934,6 +1956,10 @@ far = ogs_pfcp_far_add(&sess->pfcp); ogs_assert(far); + ogs_assert(sess->session.name); + far->apn = ogs_strdup(sess->session.name); + ogs_assert(far->apn); + far->dst_if = OGS_PFCP_INTERFACE_ACCESS; ogs_pfcp_pdr_associate_far(pdr, far); @@ -1948,6 +1974,22 @@ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + + /* TS 129 244 V16.5.0 8.2.3 + * + * At least one of the V4 and V6 flags shall be set to "1", + * and both may be set to "1" for both scenarios: + * + * - when the CP function is providing F-TEID, i.e. + * both IPv4 address field and IPv6 address field may be present; + * or + * - when the UP function is requested to allocate the F-TEID, + * i.e. when CHOOSE bit is set to "1", + * and the IPv4 address and IPv6 address fields are not present. + */ + + pdr->f_teid.ipv4 = 1; + pdr->f_teid.ipv6 = 1; pdr->f_teid.ch = 1; pdr->f_teid.chid = 1; pdr->f_teid.choose_id = OGS_PFCP_INDIRECT_DATA_FORWARDING_CHOOSE_ID; @@ -2062,6 +2104,10 @@ ogs_assert(cp2up_pdr); sess->cp2up_pdr = cp2up_pdr; + ogs_assert(sess->session.name); + cp2up_pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(cp2up_pdr->apn); + cp2up_pdr->src_if = OGS_PFCP_INTERFACE_CP_FUNCTION; cp2up_pdr->outer_header_removal_len = 1; @@ -2081,6 +2127,10 @@ ogs_assert(up2cp_pdr); sess->up2cp_pdr = up2cp_pdr; + ogs_assert(sess->session.name); + up2cp_pdr->apn = ogs_strdup(sess->session.name); + ogs_assert(up2cp_pdr->apn); + up2cp_pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; up2cp_pdr->outer_header_removal_len = 1; @@ -2110,6 +2160,10 @@ ogs_assert(up2cp_far); sess->up2cp_far = up2cp_far; + ogs_assert(sess->session.name); + up2cp_far->apn = ogs_strdup(sess->session.name); + ogs_assert(up2cp_far->apn); + up2cp_far->dst_if = OGS_PFCP_INTERFACE_CP_FUNCTION; ogs_pfcp_pdr_associate_far(up2cp_pdr, up2cp_far); @@ -2199,22 +2253,22 @@ ogs_assert(dl_pdr); bearer->dl_pdr = dl_pdr; - dl_pdr->src_if = OGS_PFCP_INTERFACE_CORE; - ogs_assert(sess->session.name); dl_pdr->apn = ogs_strdup(sess->session.name); ogs_assert(dl_pdr->apn); + dl_pdr->src_if = OGS_PFCP_INTERFACE_CORE; + ul_pdr = ogs_pfcp_pdr_add(&sess->pfcp); ogs_assert(ul_pdr); bearer->ul_pdr = ul_pdr; - ul_pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; - ogs_assert(sess->session.name); ul_pdr->apn = ogs_strdup(sess->session.name); ogs_assert(ul_pdr->apn); + ul_pdr->src_if = OGS_PFCP_INTERFACE_ACCESS; + ul_pdr->outer_header_removal_len = 1; if (sess->session.session_type == OGS_PDU_SESSION_TYPE_IPV4) { ul_pdr->outer_header_removal.description = @@ -2233,6 +2287,10 @@ ogs_assert(dl_far); bearer->dl_far = dl_far; + ogs_assert(sess->session.name); + dl_far->apn = ogs_strdup(sess->session.name); + ogs_assert(dl_far->apn); + dl_far->dst_if = OGS_PFCP_INTERFACE_ACCESS; ogs_pfcp_pdr_associate_far(dl_pdr, dl_far); @@ -2244,6 +2302,10 @@ ogs_assert(ul_far); bearer->ul_far = ul_far; + ogs_assert(sess->session.name); + ul_far->apn = ogs_strdup(sess->session.name); + ogs_assert(ul_far->apn); + ul_far->dst_if = OGS_PFCP_INTERFACE_CORE; ogs_pfcp_pdr_associate_far(ul_pdr, ul_far); @@ -2466,17 +2528,6 @@ return ogs_pool_cycle(&smf_bearer_pool, qos_flow); } -void smf_sess_select_nf(smf_sess_t *sess, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(sess); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&sess->sbi, smf_nf_state_registered); - else - ogs_sbi_select_first_nf(&sess->sbi, nf_type, smf_nf_state_registered); -} - smf_pf_t *smf_pf_add(smf_bearer_t *bearer) { smf_sess_t *sess = NULL;
View file
open5gs_2.4.8.tar.xz/src/smf/context.h -> open5gs_2.4.9.tar.xz/src/smf/context.h
Changed
@@ -69,8 +69,6 @@ const char* diam_conf_path; /* SMF Diameter conf path */ ogs_diam_config_t *diam_config; /* SMF Diameter config */ - OpenAPI_nf_type_e nf_type; - #define MAX_NUM_OF_DNS 2 const char *dnsMAX_NUM_OF_DNS; const char *dns6MAX_NUM_OF_DNS; @@ -302,6 +300,9 @@ /* PCF ID */ char *pcf_id; + /* Serving NF (AMF) Id */ + char *serving_nf_id; + /* Integrity protection maximum data rate */ struct { uint8_t mbr_dl; @@ -335,6 +336,9 @@ uint8_t selection_mode; /* OGS_GTP{1,2}_SELECTION_MODE_*, same in GTPv1C and 2C. */ struct { uint8_t nsapi; + ogs_gtp1_common_flags_t common_flags; + ogs_tlv_octet_t qos; /* Encoded GTPv1C "QoS Profile" IE */ + ogs_gtp1_qos_profile_decoded_t qos_pdec; bool peer_supports_apn_ambr; } v1; /* GTPv1C specific fields */ } gtp; /* Saved from S5-C/Gn */ @@ -498,8 +502,6 @@ smf_bearer_t *smf_qos_flow_cycle(smf_bearer_t *qos_flow); smf_bearer_t *smf_bearer_cycle(smf_bearer_t *bearer); -void smf_sess_select_nf(smf_sess_t *sess, OpenAPI_nf_type_e nf_type); - smf_pf_t *smf_pf_add(smf_bearer_t *bearer); int smf_pf_remove(smf_pf_t *pf); void smf_pf_remove_all(smf_bearer_t *bearer);
View file
open5gs_2.4.8.tar.xz/src/smf/gn-build.c -> open5gs_2.4.9.tar.xz/src/smf/gn-build.c
Changed
@@ -27,19 +27,10 @@ static void build_qos_profile_from_session(ogs_gtp1_qos_profile_decoded_t *qos_pdec, const smf_sess_t *sess, const smf_bearer_t *bearer) { - memset(qos_pdec, 0, sizeof(*qos_pdec)); + /* Initialize with defaults retrieved from MS/SGSN: */ + memcpy(qos_pdec, &sess->gtp.v1.qos_pdec, sizeof(*qos_pdec)); qos_pdec->qos_profile.arp = sess->session.qos.arp.priority_level; - qos_pdec->qos_profile.data.reliability_class = 3; /* Unacknowledged GTP and LLC; Acknowledged RLC, Protected data */ - qos_pdec->qos_profile.data.precedence_class = 2; /* Normal priority */ - qos_pdec->qos_profile.data.peak_throughput = 9; /* Up to 256 000 octet/s */ - qos_pdec->qos_profile.data.mean_throughput = 0x1f; /* Best effort */ - qos_pdec->qos_profile.data.delivery_erroneous_sdu = 2; /* Erroneous SDUs are delivered ('yes') */ - qos_pdec->qos_profile.data.delivery_order = 2; /* Without delivery order ('no') */ - qos_pdec->qos_profile.data.max_sdu_size = 0x96; /* 1500 octets */ - qos_pdec->qos_profile.data.residual_ber = 5; /* 1*10^-4, <= 2*10^-4 */ - qos_pdec->qos_profile.data.sdu_error_ratio = 4; /* 1*10^-4 */ - /* 3GPP TS 23.401 Annex E table Table E.3 */ /* Also take into account table 7 in 3GPP TS 23.107 9.1.2.2 */ @@ -102,6 +93,22 @@ qos_pdec->dec_mbr_kbps_ul = sess->session.ambr.uplink / 1000; qos_pdec->dec_gbr_kbps_dl = bearer->qos.gbr.downlink / 1000; qos_pdec->dec_gbr_kbps_ul = bearer->qos.gbr.uplink / 1000; + + /* Don't upgrade values if Common Flags "Upgrade QoS Supported" is 0: */ + if (!sess->gtp.v1.common_flags.upgrade_qos_supported) { + if (sess->gtp.v1.qos_pdec.dec_mbr_kbps_dl > 0) + qos_pdec->dec_mbr_kbps_dl = ogs_min(qos_pdec->dec_mbr_kbps_dl, + sess->gtp.v1.qos_pdec.dec_mbr_kbps_dl); + if (sess->gtp.v1.qos_pdec.dec_mbr_kbps_ul > 0) + qos_pdec->dec_mbr_kbps_ul = ogs_min(qos_pdec->dec_mbr_kbps_ul, + sess->gtp.v1.qos_pdec.dec_mbr_kbps_ul); + if (sess->gtp.v1.qos_pdec.dec_gbr_kbps_dl > 0) + qos_pdec->dec_gbr_kbps_dl = ogs_min(qos_pdec->dec_gbr_kbps_dl, + sess->gtp.v1.qos_pdec.dec_gbr_kbps_dl); + if (sess->gtp.v1.qos_pdec.dec_gbr_kbps_ul > 0) + qos_pdec->dec_gbr_kbps_ul = ogs_min(qos_pdec->dec_gbr_kbps_ul, + sess->gtp.v1.qos_pdec.dec_gbr_kbps_ul); + } } ogs_pkbuf_t *smf_gn_build_create_pdp_context_response( @@ -168,7 +175,7 @@ /* End User Address */ rv = ogs_gtp2_paa_to_ip(&sess->session.paa, &ip_eua); - rv = ogs_gtp1_ip_to_eua(sess->session.paa.session_type, &ip_eua, &eua, + rv = ogs_gtp1_ip_to_eua(sess->session.session_type, &ip_eua, &eua, &eua_len); rsp->end_user_address.presence = 1; rsp->end_user_address.data = &eua; @@ -246,12 +253,16 @@ rsp->ggsn_address_for_user_traffic.data = &pgw_gnu_gsnaddr; rsp->ggsn_address_for_user_traffic.len = gsn_len; - /* QoS Profile: if PCRF changes Bearer QoS, this should be included. */ + /* QoS Profile: if PCRF changes Bearer QoS, apply changes. */ if (sess->gtp.create_session_response_bearer_qos == true) { build_qos_profile_from_session(&qos_pdec, sess, bearer); rsp->quality_of_service_profile.presence = 1; ogs_gtp1_build_qos_profile(&rsp->quality_of_service_profile, &qos_pdec, qos_pdec_buf, OGS_GTP1_QOS_PROFILE_MAX_LEN); + } else { + /* Copy over received QoS Profile from originating Request: */ + memcpy(&rsp->quality_of_service_profile, &sess->gtp.v1.qos, + sizeof(rsp->quality_of_service_profile)); } /* TODO: Charging Gateway Address */ @@ -365,9 +376,14 @@ rsp->charging_id.presence = 1; rsp->charging_id.u32 = sess->charging.id; - /* Protocol Configuration Options (PCO) */ - if (sess->gtp.ue_pco.presence && - sess->gtp.ue_pco.len && sess->gtp.ue_pco.data) { + /* Protocol Configuration Options (PCO): + * If the "No QoS negotiation" bit of the Common Flags IE in the Update PDP + * Context Request message was set to 1, then the GGSN ... shall not + * include the Protocol Configuration Options (PCO) information element in + * the message) */ + if (!sess->gtp.v1.common_flags.no_qos_negotiation && + sess->gtp.ue_pco.presence && + sess->gtp.ue_pco.len && sess->gtp.ue_pco.data) { pco_len = smf_pco_build( pco_buf, sess->gtp.ue_pco.data, sess->gtp.ue_pco.len); ogs_assert(pco_len > 0); @@ -437,12 +453,18 @@ rsp->ggsn_address_for_user_traffic.data = &pgw_gnu_gsnaddr; rsp->ggsn_address_for_user_traffic.len = gsn_len; - /* QoS Profile: if PCRF changes Bearer QoS, this should be included. */ - if (sess->gtp.create_session_response_bearer_qos == true) { + /* QoS Profile: if SGSN supports QoS re-negotiation and PCRF changes Bearer + * QoS, apply changes: */ + if (!sess->gtp.v1.common_flags.no_qos_negotiation && + sess->gtp.create_session_response_bearer_qos == true) { build_qos_profile_from_session(&qos_pdec, sess, bearer); rsp->quality_of_service_profile.presence = 1; ogs_gtp1_build_qos_profile(&rsp->quality_of_service_profile, &qos_pdec, qos_pdec_buf, OGS_GTP1_QOS_PROFILE_MAX_LEN); + } else { + /* Copy over received QoS Profile from originating Request: */ + memcpy(&rsp->quality_of_service_profile, &sess->gtp.v1.qos, + sizeof(rsp->quality_of_service_profile)); } /* TODO: Charging Gateway Address */
View file
open5gs_2.4.8.tar.xz/src/smf/gn-handler.c -> open5gs_2.4.9.tar.xz/src/smf/gn-handler.c
Changed
@@ -62,7 +62,7 @@ smf_ue_t *smf_ue = NULL; ogs_eua_t *eua = NULL; smf_bearer_t *bearer = NULL; - ogs_gtp1_qos_profile_decoded_t qos_pdec; + ogs_gtp1_qos_profile_decoded_t *qos_pdec; uint8_t qci = 9; ogs_assert(sess); @@ -178,27 +178,33 @@ smf_ue->msisdn, smf_ue->msisdn_len, smf_ue->msisdn_bcd); } - /* Set some sane default if infomation not present in Qos Profile or APN-AMBR: */ + /* Common Flags 7.7.48 */ + if (req->common_flags.presence) { + sess->gtp.v1.common_flags = *(ogs_gtp1_common_flags_t*)req->common_flags.data; + } + + /* Set some sane default if information not present in QoS Profile or APN-AMBR: */ sess->session.ambr.downlink = 102400000; sess->session.ambr.uplink = 102400000; /* Set Bearer QoS */ - rv = ogs_gtp1_parse_qos_profile(&qos_pdec, - &req->quality_of_service_profile); + OGS_TLV_STORE_DATA(&sess->gtp.v1.qos, &req->quality_of_service_profile); + qos_pdec = &sess->gtp.v1.qos_pdec; + rv = ogs_gtp1_parse_qos_profile(qos_pdec, &req->quality_of_service_profile); if(rv < 0) return OGS_GTP1_CAUSE_MANDATORY_IE_INCORRECT; /* 3GPP TS 23.060 section 9.2.1A: "The QoS profiles of the PDP context and EPS bearer are mapped as specified in TS 23.401" * 3GPP TS 23.401 Annex E: "Mapping between EPS and Release 99 QoS parameters" */ - ogs_gtp1_qos_profile_to_qci(&qos_pdec, &qci); + ogs_gtp1_qos_profile_to_qci(qos_pdec, &qci); sess->session.qos.index = qci; - sess->session.qos.arp.priority_level = qos_pdec.qos_profile.arp; /* 3GPP TS 23.401 Annex E Table E.2 */ + sess->session.qos.arp.priority_level = qos_pdec->qos_profile.arp; /* 3GPP TS 23.401 Annex E Table E.2 */ sess->session.qos.arp.pre_emption_capability = 0; /* ignored as per 3GPP TS 23.401 Annex E */ sess->session.qos.arp.pre_emption_vulnerability = 0; /* ignored as per 3GPP TS 23.401 Annex E */ - if (qos_pdec.data_octet6_to_13_present) { - sess->session.ambr.downlink = qos_pdec.dec_mbr_kbps_dl * 1000; - sess->session.ambr.uplink = qos_pdec.dec_mbr_kbps_ul * 1000; + if (qos_pdec->data_octet6_to_13_present) { + sess->session.ambr.downlink = qos_pdec->dec_mbr_kbps_dl * 1000; + sess->session.ambr.uplink = qos_pdec->dec_mbr_kbps_ul * 1000; } /* APN-AMBR, 7.7.98 */ @@ -266,9 +272,9 @@ ogs_assert(rv == OGS_OK); ogs_debug(" SGW_S5U_TEID0x%x PGW_S5U_TEID0x%x", bearer->sgw_s5u_teid, bearer->pgw_s5u_teid); - if (qos_pdec.data_octet6_to_13_present) { - bearer->qos.gbr.downlink = qos_pdec.dec_gbr_kbps_dl * 1000; - bearer->qos.gbr.uplink = qos_pdec.dec_gbr_kbps_ul * 1000; + if (qos_pdec->data_octet6_to_13_present) { + bearer->qos.gbr.downlink = qos_pdec->dec_gbr_kbps_dl * 1000; + bearer->qos.gbr.uplink = qos_pdec->dec_gbr_kbps_ul * 1000; } else { /* Set some sane default if infomation not present in Qos Profile IE: */ bearer->qos.gbr.downlink = sess->session.ambr.downlink; @@ -324,6 +330,8 @@ ogs_pfcp_pdr_t *pdr = NULL; smf_bearer_t *bearer = NULL; smf_ue_t *smf_ue = NULL; + ogs_gtp1_qos_profile_decoded_t *qos_pdec; + uint8_t qci; ogs_debug("Update PDP Context Request"); @@ -382,6 +390,14 @@ } } + /* Common Flags 7.7.48 */ + if (req->common_flags.presence) { + sess->gtp.v1.common_flags = *(ogs_gtp1_common_flags_t*)req->common_flags.data; + } else { + /* Reset it to overwrite what was received during CreatePDPCtxReq time */ + sess->gtp.v1.common_flags = (ogs_gtp1_common_flags_t){0}; + } + /* Control Plane(DL) : SGW-S5C */ if (req->tunnel_endpoint_identifier_control_plane.presence) { sess->sgw_s5c_teid = req->tunnel_endpoint_identifier_control_plane.u32; @@ -401,9 +417,50 @@ ogs_assert(rv == OGS_OK); ogs_debug(" Updated SGW_S5U_TEID0x%x PGW_S5U_TEID0x%x", bearer->sgw_s5u_teid, bearer->pgw_s5u_teid); - /* FIXME: UPF needs to be updated through PFCP here, see: - * https://github.com/open5gs/open5gs/issues/1367 + + + /* Set Bearer QoS */ + OGS_TLV_STORE_DATA(&sess->gtp.v1.qos, &req->quality_of_service_profile); + qos_pdec = &sess->gtp.v1.qos_pdec; + rv = ogs_gtp1_parse_qos_profile(qos_pdec, &req->quality_of_service_profile); + if(rv < 0) { + ogs_gtp1_send_error_message(xact, sess->sgw_s5c_teid, + OGS_GTP1_UPDATE_PDP_CONTEXT_RESPONSE_TYPE, + OGS_GTP1_CAUSE_MANDATORY_IE_INCORRECT); + return; + } + + /* 3GPP TS 23.060 section 9.2.1A: "The QoS profiles of the PDP context and EPS bearer are mapped as specified in TS 23.401" + * 3GPP TS 23.401 Annex E: "Mapping between EPS and Release 99 QoS parameters" */ + ogs_gtp1_qos_profile_to_qci(qos_pdec, &qci); + sess->session.qos.index = qci; + sess->session.qos.arp.priority_level = qos_pdec->qos_profile.arp; /* 3GPP TS 23.401 Annex E Table E.2 */ + sess->session.qos.arp.pre_emption_capability = 0; /* ignored as per 3GPP TS 23.401 Annex E */ + sess->session.qos.arp.pre_emption_vulnerability = 0; /* ignored as per 3GPP TS 23.401 Annex E */ + if (qos_pdec->data_octet6_to_13_present) { + sess->session.ambr.downlink = qos_pdec->dec_mbr_kbps_dl * 1000; + sess->session.ambr.uplink = qos_pdec->dec_mbr_kbps_ul * 1000; + } + + /* APN-AMBR, 7.7.98 */ + if (req->apn_ambr.presence) { + /* "The APN-AMBR IE shall be included as the authorized APN-AMBR if the + * GGSN supports this IE and if the APN-AMBR IE has been included in the + * corresponding request message." */ + sess->gtp.v1.peer_supports_apn_ambr = true; + if (req->apn_ambr.len >= sizeof(ogs_gtp1_apn_ambr_t)) { + ogs_gtp1_apn_ambr_t *ambr = req->apn_ambr.data; + sess->session.ambr.uplink = be32toh(ambr->uplink) * 1000; + sess->session.ambr.downlink = be32toh(ambr->downlink) * 1000; + } + } + + /* PCO */ + if (req->protocol_configuration_options.presence) { + OGS_TLV_STORE_DATA(&sess->gtp.ue_pco, + &req->protocol_configuration_options); + } memset(&h, 0, sizeof(ogs_gtp2_header_t)); h.type = OGS_GTP1_UPDATE_PDP_CONTEXT_RESPONSE_TYPE;
View file
open5gs_2.4.8.tar.xz/src/smf/gsm-build.c -> open5gs_2.4.9.tar.xz/src/smf/gsm-build.c
Changed
@@ -145,7 +145,7 @@ /* PDU Address */ pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_PDU_ADDRESS_PRESENT; - pdu_address->pdn_type = sess->session.paa.session_type; + pdu_address->pdn_type = sess->session.session_type; if (pdu_address->pdn_type == OGS_PDU_SESSION_TYPE_IPV4) { pdu_address->addr = sess->session.paa.addr;
View file
open5gs_2.4.8.tar.xz/src/smf/gsm-handler.c -> open5gs_2.4.9.tar.xz/src/smf/gsm-handler.c
Changed
@@ -67,9 +67,9 @@ } ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_UDM, sess, stream, - 0, (char *)OGS_SBI_RESOURCE_NAME_SM_DATA, - smf_nudm_sdm_build_get)); + smf_sbi_discover_and_send(OpenAPI_nf_type_UDM, NULL, + smf_nudm_sdm_build_get, + sess, stream, 0, (char *)OGS_SBI_RESOURCE_NAME_SM_DATA)); return OGS_OK; }
View file
open5gs_2.4.8.tar.xz/src/smf/gsm-sm.c -> open5gs_2.4.9.tar.xz/src/smf/gsm-sm.c
Changed
@@ -996,9 +996,10 @@ NGAP_CauseNas_normal_release; ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream, - OGS_PFCP_DELETE_TRIGGER_UE_REQUESTED, ¶m, - smf_npcf_smpolicycontrol_build_delete)); + smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + smf_npcf_smpolicycontrol_build_delete, + sess, stream, + OGS_PFCP_DELETE_TRIGGER_UE_REQUESTED, ¶m)); } else { ogs_error("%s:%d No PolicyAssociationId", smf_ue->supi, sess->psi);
View file
open5gs_2.4.8.tar.xz/src/smf/gtp-path.c -> open5gs_2.4.9.tar.xz/src/smf/gtp-path.c
Changed
@@ -55,6 +55,7 @@ ogs_sockaddr_t from; ogs_gtp_node_t *gnode = NULL; uint8_t gtp_ver; + char frombufOGS_ADDRSTRLEN; ogs_assert(fd != INVALID_SOCKET); @@ -89,7 +90,12 @@ gnode = ogs_gtp_node_find_by_addr(&smf_self()->sgw_s5c_list, &from); if (!gnode) { gnode = ogs_gtp_node_add_by_addr(&smf_self()->sgw_s5c_list, &from); - ogs_assert(gnode); + if (!gnode) { + ogs_error("Failed to create new gnode(%s:%u), mempool full, ignoring msg!", + OGS_ADDR(&from, frombuf), OGS_PORT(&from)); + ogs_pkbuf_free(pkbuf); + return; + } gnode->sock = data; smf_gtp_node_new(gnode); smf_metrics_inst_global_inc(SMF_METR_GLOB_GAUGE_GTP_PEERS_ACTIVE); @@ -100,7 +106,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); smf_event_free(e); } @@ -536,6 +542,7 @@ xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, bearer_timeout, bearer); ogs_expect_or_return_val(xact, OGS_ERROR); + xact->local_teid = sess->smf_n4_teid; rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK);
View file
open5gs_2.4.8.tar.xz/src/smf/gx-handler.c -> open5gs_2.4.9.tar.xz/src/smf/gx-handler.c
Changed
@@ -157,6 +157,10 @@ &dl_pdr->ue_ip_addr, &dl_pdr->ue_ip_addr_len)); dl_pdr->ue_ip_addr.sd = OGS_PFCP_UE_IP_DST; + ogs_assert(OGS_OK == + ogs_pfcp_paa_to_ue_ip_addr(&sess->session.paa, + &ul_pdr->ue_ip_addr, &ul_pdr->ue_ip_addr_len)); + /* Set UE-to-CP Flow-Description and Outer-Header-Creation */ up2cp_pdr->flow_descriptionup2cp_pdr->num_of_flow++ = (char *)"permit out 58 from ff02::2/128 to assigned"; @@ -170,14 +174,20 @@ /* Set F-TEID */ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + ul_pdr->f_teid.ipv4 = 1; + ul_pdr->f_teid.ipv6 = 1; ul_pdr->f_teid.ch = 1; ul_pdr->f_teid.chid = 1; ul_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; ul_pdr->f_teid_len = 2; + cp2up_pdr->f_teid.ipv4 = 1; + cp2up_pdr->f_teid.ipv6 = 1; cp2up_pdr->f_teid.ch = 1; cp2up_pdr->f_teid_len = 1; + up2cp_pdr->f_teid.ipv4 = 1; + up2cp_pdr->f_teid.ipv6 = 1; up2cp_pdr->f_teid.ch = 1; up2cp_pdr->f_teid.chid = 1; up2cp_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID;
View file
open5gs_2.4.8.tar.xz/src/smf/gx-path.c -> open5gs_2.4.9.tar.xz/src/smf/gx-path.c
Changed
@@ -1005,7 +1005,7 @@ e->gtp_xact = xact; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_session_data_free(&gx_message->session_data); ogs_free(gx_message); smf_event_free(e); @@ -1248,7 +1248,7 @@ e->gx_message = gx_message; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_session_data_free(&gx_message->session_data); ogs_free(gx_message); smf_event_free(e);
View file
open5gs_2.4.8.tar.xz/src/smf/gy-handler.h -> open5gs_2.4.9.tar.xz/src/smf/gy-handler.h
Changed
@@ -32,7 +32,7 @@ ogs_gtp_xact_t *gtp_xact); void smf_gy_handle_cca_update_request( smf_sess_t *sess, ogs_diam_gy_message_t *gy_message, - ogs_pfcp_xact_t *gtp_xact); + ogs_pfcp_xact_t *pfcp_xact); uint32_t smf_gy_handle_cca_termination_request( smf_sess_t *sess, ogs_diam_gy_message_t *gy_message, ogs_gtp_xact_t *gtp_xact);
View file
open5gs_2.4.8.tar.xz/src/smf/gy-path.c -> open5gs_2.4.9.tar.xz/src/smf/gy-path.c
Changed
@@ -834,13 +834,15 @@ ogs_assert(ret == 0); /* Multiple-Services-Indicator */ - ret = fd_msg_avp_new(ogs_diam_gy_multiple_services_ind, 0, &avp); - ogs_assert(ret == 0); - val.i32 = OGS_DIAM_GY_MULTIPLE_SERVICES_NOT_SUPPORTED; - ret = fd_msg_avp_setvalue(avp, &val); - ogs_assert(ret == 0); - ret = fd_msg_avp_add(req, MSG_BRW_LAST_CHILD, avp); - ogs_assert(ret == 0); + if (cc_request_type == OGS_DIAM_GY_CC_REQUEST_TYPE_INITIAL_REQUEST) { + ret = fd_msg_avp_new(ogs_diam_gy_multiple_services_ind, 0, &avp); + ogs_assert(ret == 0); + val.i32 = OGS_DIAM_GY_MULTIPLE_SERVICES_NOT_SUPPORTED; + ret = fd_msg_avp_setvalue(avp, &val); + ogs_assert(ret == 0); + ret = fd_msg_avp_add(req, MSG_BRW_LAST_CHILD, avp); + ogs_assert(ret == 0); + } /* TS 32.299 7.1.9 Multiple-Services-Credit-Control AVP */ fill_multiple_services_credit_control_ccr(sess, cc_request_type, req); @@ -1102,7 +1104,7 @@ } rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_free(gy_message); smf_event_free(e); } else { @@ -1231,7 +1233,7 @@ e->gy_message = gy_message; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_free(gy_message); smf_event_free(e); } else {
View file
open5gs_2.4.8.tar.xz/src/smf/init.c -> open5gs_2.4.9.tar.xz/src/smf/init.c
Changed
@@ -36,10 +36,10 @@ ogs_metrics_context_init(); ogs_gtp_context_init(ogs_app()->pool.nf * OGS_MAX_NUM_OF_GTPU_RESOURCE); ogs_pfcp_context_init(); + ogs_sbi_context_init(); smf_context_init(); smf_event_init(); - ogs_sbi_context_init(); rv = ogs_gtp_xact_init(); if (rv != OGS_OK) return rv; @@ -53,7 +53,7 @@ rv = ogs_pfcp_context_parse_config("smf", "upf"); if (rv != OGS_OK) return rv; - rv = ogs_sbi_context_parse_config("smf", "nrf"); + rv = ogs_sbi_context_parse_config("smf", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = ogs_metrics_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/smf/metrics.c -> open5gs_2.4.9.tar.xz/src/smf/metrics.c
Changed
@@ -49,6 +49,11 @@ ogs_metrics_inst_t *smf_metrics_inst_global_SMF_METR_GLOB_MAX; smf_metrics_spec_def_t smf_metrics_spec_def_global_SMF_METR_GLOB_MAX = { /* Global Counters: */ +SMF_METR_GLOB_CTR_GTP_NEW_NODE_FAILED = { + .type = OGS_METRICS_METRIC_TYPE_COUNTER, + .name = "gtp_new_node_failed", + .description = "Unable to allocate new GTP (peer) Node", +}, SMF_METR_GLOB_CTR_GN_RX_PARSE_FAILED = { .type = OGS_METRICS_METRIC_TYPE_COUNTER, .name = "gn_rx_parse_failed",
View file
open5gs_2.4.8.tar.xz/src/smf/metrics.h -> open5gs_2.4.9.tar.xz/src/smf/metrics.h
Changed
@@ -9,7 +9,8 @@ /* GLOBAL */ typedef enum smf_metric_type_global_s { - SMF_METR_GLOB_CTR_GN_RX_PARSE_FAILED = 0, + SMF_METR_GLOB_CTR_GTP_NEW_NODE_FAILED = 0, + SMF_METR_GLOB_CTR_GN_RX_PARSE_FAILED, SMF_METR_GLOB_CTR_GN_RX_CREATEPDPCTXREQ, SMF_METR_GLOB_CTR_GN_RX_DELETEPDPCTXREQ, SMF_METR_GLOB_CTR_S5C_RX_PARSE_FAILED,
View file
open5gs_2.4.8.tar.xz/src/smf/n4-build.c -> open5gs_2.4.9.tar.xz/src/smf/n4-build.c
Changed
@@ -100,7 +100,7 @@ /* PDN Type */ req->pdn_type.presence = 1; - req->pdn_type.u8 = sess->session.paa.session_type; + req->pdn_type.u8 = sess->session.session_type; pfcp_message.h.type = type; pkbuf = ogs_pfcp_build_msg(&pfcp_message);
View file
open5gs_2.4.8.tar.xz/src/smf/n4-handler.c -> open5gs_2.4.9.tar.xz/src/smf/n4-handler.c
Changed
@@ -255,6 +255,7 @@ ogs_debug("Session Modification Response 5gc"); + ogs_assert(sess); ogs_assert(xact); ogs_assert(rsp); @@ -279,11 +280,6 @@ status = OGS_SBI_HTTP_STATUS_OK; - if (!sess) { - ogs_warn("No Context"); - status = OGS_SBI_HTTP_STATUS_NOT_FOUND; - } - if (rsp->cause.presence) { if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) { ogs_warn("PFCP Cause %d : Not Accepted", rsp->cause.u8); @@ -624,10 +620,7 @@ status = OGS_SBI_HTTP_STATUS_OK; - if (!sess) { - ogs_warn("No Context"); - status = OGS_SBI_HTTP_STATUS_NOT_FOUND; - } + ogs_assert(sess); if (rsp->cause.presence) { if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) { @@ -669,8 +662,6 @@ return status; } - ogs_assert(sess); - return status; } @@ -803,6 +794,7 @@ OGS_LIST(pdr_to_create_list); + ogs_assert(sess); ogs_assert(xact); ogs_assert(rsp); @@ -831,11 +823,6 @@ ogs_pfcp_xact_commit(xact); - if (!sess) { - ogs_error("No Context"); - return; - } - if (rsp->cause.presence) { if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) { ogs_error("PFCP Cause %d : Not Accepted", rsp->cause.u8); @@ -1111,6 +1098,7 @@ uint16_t pdr_id = 0; unsigned int i; + ogs_assert(sess); ogs_assert(pfcp_xact); ogs_assert(pfcp_req); @@ -1118,11 +1106,6 @@ cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sess) { - ogs_warn("No Context"); - cause_value = OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND; - } - if (pfcp_req->report_type.presence == 0) { ogs_error("No Report Type"); cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING; @@ -1135,7 +1118,6 @@ return; } - ogs_assert(sess); report_type.value = pfcp_req->report_type.u8; if (report_type.downlink_data_report) {
View file
open5gs_2.4.8.tar.xz/src/smf/n4-handler.h -> open5gs_2.4.9.tar.xz/src/smf/n4-handler.h
Changed
@@ -41,7 +41,7 @@ ogs_pfcp_session_establishment_response_t *rsp); void smf_epc_n4_handle_session_modification_response( smf_sess_t *sess, ogs_pfcp_xact_t *xact, - ogs_gtp2_message_t *gtp2_message, + ogs_gtp2_message_t *recv_message, ogs_pfcp_session_modification_response_t *rsp); uint8_t smf_epc_n4_handle_session_deletion_response( smf_sess_t *sess, ogs_pfcp_xact_t *xact,
View file
open5gs_2.4.8.tar.xz/src/smf/nf-sm.c -> open5gs_2.4.9.tar.xz/src/smf/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + smf_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - smf_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + smf_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - smf_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + smf_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = smf_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + smf_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = smf_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &smf_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &smf_nf_state_registered); } } void smf_nf_state_final(ogs_fsm_t *s, smf_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); smf_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void smf_nf_state_will_register(ogs_fsm_t *s, smf_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == smf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, smf_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case SMF_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &smf_nf_state_registered); } else { ogs_error("%s HTTP Response Status Code %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &smf_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,24 +173,26 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == smf_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, smf_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, smf_timer_get_name(e->timer_id), e->timer_id); } break; default: ogs_error("%s Unknown event %s", - nf_instance->id, smf_event_get_name(e)); + ogs_sbi_self()->nf_instance->id, smf_event_get_name(e)); break; } } @@ -192,12 +209,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -213,23 +232,30 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - smf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_AMF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_AMF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - smf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UDM)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDM)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - smf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_PCF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_PCF)); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - smf_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UPF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UPF)); } - break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -263,7 +289,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &smf_nf_state_exception); } @@ -271,13 +298,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -292,27 +320,31 @@ break; case SMF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &smf_nf_state_will_register); break; case SMF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &smf_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &smf_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", smf_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, smf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + smf_event_get_name(e)); break; } } @@ -327,11 +359,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -339,8 +372,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, smf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + smf_event_get_name(e)); break; } } @@ -358,18 +393,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case SMF_EVT_SBI_TIMER: @@ -380,15 +418,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &smf_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", smf_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -413,8 +453,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, smf_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + smf_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/smf/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/smf/nnrf-build.c
Changed
@@ -19,15 +19,14 @@ #include "nnrf-build.h" -ogs_sbi_request_t *smf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *smf_nnrf_nfm_build_register(void) { int i, j; + ogs_sbi_nf_instance_t *nf_instance = NULL; ogs_sbi_nf_info_t *nf_info = NULL; ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; @@ -51,9 +50,9 @@ OpenAPI_lnode_t *node = NULL, *node2 = NULL, *node3 = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -61,7 +60,7 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; @@ -69,7 +68,8 @@ ogs_assert(SmfInfoList); SmfInfoMapKey = 0; - ogs_list_for_each(&ogs_sbi_self()->nf_info_list, nf_info) { + + ogs_list_for_each(&nf_instance->nf_info_list, nf_info) { if (nf_info->nf_type != OpenAPI_nf_type_SMF) { ogs_fatal("Not implemented NF-type%s", OpenAPI_nf_type_ToString(nf_info->nf_type)); @@ -199,7 +199,7 @@ OpenAPI_list_add(SmfInfoList, SmfInfoMap); } - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); if (SmfInfoList->count == 1) {
View file
open5gs_2.4.8.tar.xz/src/smf/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/smf/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *smf_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *smf_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/smf/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/smf/nnrf-handler.c
Changed
@@ -171,9 +171,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); smf_nf_fsm_init(nf_instance); @@ -252,16 +253,22 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -278,8 +285,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); smf_nf_fsm_init(nf_instance); @@ -295,8 +303,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - smf_sess_t *sess = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -313,10 +319,6 @@ continue; } - sess = (smf_sess_t *)sbi_object; - ogs_assert(sess); - smf_sess_select_nf(sess, nf_instance->nf_type); - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) { @@ -335,12 +337,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_error("(NF discover) No %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); - } else { - ogs_assert(true == smf_sbi_send(nf_instance, xact)); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == smf_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/src/smf/npcf-handler.c -> open5gs_2.4.9.tar.xz/src/smf/npcf-handler.c
Changed
@@ -484,11 +484,16 @@ up2cp_far = sess->up2cp_far; ogs_assert(up2cp_far); + /* Set UE IP Address to the Default DL PDR */ ogs_assert(OGS_OK == ogs_pfcp_paa_to_ue_ip_addr(&sess->session.paa, &dl_pdr->ue_ip_addr, &dl_pdr->ue_ip_addr_len)); dl_pdr->ue_ip_addr.sd = OGS_PFCP_UE_IP_DST; + ogs_assert(OGS_OK == + ogs_pfcp_paa_to_ue_ip_addr(&sess->session.paa, + &ul_pdr->ue_ip_addr, &ul_pdr->ue_ip_addr_len)); + ogs_info("UE SUPI%s DNN%s IPv4%s IPv6%s", smf_ue->supi, sess->session.name, sess->ipv4 ? OGS_INET_NTOP(&sess->ipv4->addr, buf1) : "", @@ -507,14 +512,34 @@ /* Set UPF-N3 TEID & ADDR to the Default UL PDR */ ogs_assert(sess->pfcp_node); if (sess->pfcp_node->up_function_features.ftup) { + + /* TS 129 244 V16.5.0 8.2.3 + * + * At least one of the V4 and V6 flags shall be set to "1", + * and both may be set to "1" for both scenarios: + * + * - when the CP function is providing F-TEID, i.e. + * both IPv4 address field and IPv6 address field may be present; + * or + * - when the UP function is requested to allocate the F-TEID, + * i.e. when CHOOSE bit is set to "1", + * and the IPv4 address and IPv6 address fields are not present. + */ + + ul_pdr->f_teid.ipv4 = 1; + ul_pdr->f_teid.ipv6 = 1; ul_pdr->f_teid.ch = 1; ul_pdr->f_teid.chid = 1; ul_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; ul_pdr->f_teid_len = 2; + cp2up_pdr->f_teid.ipv4 = 1; + cp2up_pdr->f_teid.ipv6 = 1; cp2up_pdr->f_teid.ch = 1; cp2up_pdr->f_teid_len = 1; + up2cp_pdr->f_teid.ipv4 = 1; + up2cp_pdr->f_teid.ipv6 = 1; up2cp_pdr->f_teid.ch = 1; up2cp_pdr->f_teid.chid = 1; up2cp_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; @@ -658,9 +683,9 @@ memset(¶m, 0, sizeof(param)); ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, NULL, - OGS_PFCP_DELETE_TRIGGER_PCF_INITIATED, ¶m, - smf_npcf_smpolicycontrol_build_delete)); + smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + smf_npcf_smpolicycontrol_build_delete, + sess, NULL, OGS_PFCP_DELETE_TRIGGER_PCF_INITIATED, ¶m)); return true; }
View file
open5gs_2.4.8.tar.xz/src/smf/nsmf-handler.c -> open5gs_2.4.9.tar.xz/src/smf/nsmf-handler.c
Changed
@@ -197,6 +197,12 @@ ogs_assert(sess->pcf_id); } + if (SmContextCreateData->serving_nf_id) { + if (sess->serving_nf_id) ogs_free(sess->serving_nf_id); + sess->serving_nf_id = ogs_strdup(SmContextCreateData->serving_nf_id); + ogs_assert(sess->serving_nf_id); + } + /* * NOTE : The pkbuf created in the SBI message will be removed * from ogs_sbi_message_free(). @@ -584,9 +590,10 @@ param.ue_timezone = true; ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream, - OGS_PFCP_DELETE_TRIGGER_AMF_UPDATE_SM_CONTEXT, ¶m, - smf_npcf_smpolicycontrol_build_delete)); + smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + smf_npcf_smpolicycontrol_build_delete, + sess, stream, + OGS_PFCP_DELETE_TRIGGER_AMF_UPDATE_SM_CONTEXT, ¶m)); } } else { ogs_error("No PolicyAssociationId"); @@ -659,9 +666,10 @@ if (sess->policy_association_id) { ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream, - OGS_PFCP_DELETE_TRIGGER_AMF_RELEASE_SM_CONTEXT, ¶m, - smf_npcf_smpolicycontrol_build_delete)); + smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + smf_npcf_smpolicycontrol_build_delete, + sess, stream, + OGS_PFCP_DELETE_TRIGGER_AMF_RELEASE_SM_CONTEXT, ¶m)); } else { ogs_error("No PolicyAssociationId"); ogs_assert(true ==
View file
open5gs_2.4.8.tar.xz/src/smf/nudm-handler.c -> open5gs_2.4.9.tar.xz/src/smf/nudm-handler.c
Changed
@@ -288,8 +288,8 @@ ogs_free(sendmsg.http.location); ogs_assert(true == - smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, sess, stream, - 0, NULL, smf_npcf_smpolicycontrol_build_create)); + smf_sbi_discover_and_send(OpenAPI_nf_type_PCF, NULL, + smf_npcf_smpolicycontrol_build_create, sess, stream, 0, NULL)); return true;
View file
open5gs_2.4.8.tar.xz/src/smf/pfcp-path.c -> open5gs_2.4.9.tar.xz/src/smf/pfcp-path.c
Changed
@@ -157,7 +157,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); smf_event_free(e); } @@ -329,6 +329,8 @@ ogs_assert(sess); ogs_assert(xact); + xact->local_seid = sess->smf_n4_seid; + memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE; h.seid = sess->upf_n4_seid; @@ -366,6 +368,7 @@ ogs_expect_or_return_val(xact, OGS_ERROR); xact->assoc_stream = stream; + xact->local_seid = sess->smf_n4_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_ESTABLISHMENT_REQUEST_TYPE; @@ -399,6 +402,7 @@ ogs_expect_or_return_val(xact, OGS_ERROR); xact->assoc_stream = stream; + xact->local_seid = sess->smf_n4_seid; xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION; ogs_list_init(&sess->pdr_to_modify_list); @@ -425,6 +429,7 @@ ogs_expect_or_return_val(xact, OGS_ERROR); xact->assoc_stream = stream; + xact->local_seid = sess->smf_n4_seid; xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION; rv = smf_pfcp_send_modify_list( @@ -450,6 +455,7 @@ xact->assoc_stream = stream; xact->delete_trigger = trigger; + xact->local_seid = sess->smf_n4_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_DELETION_REQUEST_TYPE; @@ -482,6 +488,7 @@ xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; + xact->local_seid = sess->smf_n4_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_ESTABLISHMENT_REQUEST_TYPE; @@ -514,6 +521,7 @@ xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; + xact->local_seid = sess->smf_n4_seid; xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION; xact->gtp_pti = gtp_pti; @@ -552,6 +560,7 @@ xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; + xact->local_seid = sess->smf_n4_seid; xact->modify_flags = flags; xact->gtp_pti = gtp_pti; @@ -604,6 +613,7 @@ * - Delete Bearer Request/Response with DEDICATED BEARER. */ xact->assoc_xact = gtp_xact; + xact->local_seid = sess->smf_n4_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_DELETION_REQUEST_TYPE; @@ -683,6 +693,7 @@ ogs_pfcp_header_t h; ogs_assert(xact); + xact->local_seid = sess->smf_n4_seid; memset(&h, 0, sizeof(ogs_pfcp_header_t)); h.type = OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE;
View file
open5gs_2.4.8.tar.xz/src/smf/pfcp-sm.c -> open5gs_2.4.9.tar.xz/src/smf/pfcp-sm.c
Changed
@@ -185,8 +185,16 @@ xact = e->pfcp_xact; ogs_assert(xact); - if (message->h.seid_presence && message->h.seid != 0) - sess = smf_sess_find_by_seid(message->h.seid); + if (message->h.seid_presence && message->h.seid != 0) { + sess = smf_sess_find_by_seid(message->h.seid); + } else if (xact->local_seid) { /* rx no SEID or SEID=0 */ + /* 3GPP TS 29.244 7.2.2.4.2: we receive SEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the SEID we + * locally stored in xact when sending the original request: */ + sess = smf_sess_find_by_seid(xact->local_seid); + } if (sess) e->sess = sess; @@ -212,8 +220,8 @@ &message->pfcp_association_setup_response); break; case OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE: - if (!message->h.seid_presence) - ogs_error("No SEID"); + if (!message->h.seid_presence) ogs_error("No SEID"); + if (!sess) { ogs_gtp_xact_t *gtp_xact = xact->assoc_xact; ogs_assert(gtp_xact); @@ -225,16 +233,13 @@ ogs_gtp2_send_error_message(gtp_xact, 0, OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND); - return; + break; } ogs_fsm_dispatch(&sess->sm, e); break; case OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); if (xact->epc) smf_epc_n4_handle_session_modification_response( @@ -246,16 +251,28 @@ break; case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE: - if (!message->h.seid_presence) - ogs_error("No SEID"); + if (!message->h.seid_presence) ogs_error("No SEID"); + + if (!sess) { + ogs_gtp_xact_t *gtp_xact = xact->assoc_xact; + if (!gtp_xact) + break; + if (gtp_xact->gtp_version == 1) + ogs_gtp1_send_error_message(gtp_xact, 0, + OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE, + OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND); + else + ogs_gtp2_send_error_message(gtp_xact, 0, + OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, + OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND); + break; + } + ogs_fsm_dispatch(&sess->sm, e); break; case OGS_PFCP_SESSION_REPORT_REQUEST_TYPE: - if (!message->h.seid_presence) { - ogs_error("No SEID"); - break; - } + if (!message->h.seid_presence) ogs_error("No SEID"); smf_n4_handle_session_report_request( sess, xact, &message->pfcp_session_report_request); @@ -331,7 +348,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); smf_event_free(e); } break;
View file
open5gs_2.4.8.tar.xz/src/smf/s5c-handler.c -> open5gs_2.4.9.tar.xz/src/smf/s5c-handler.c
Changed
@@ -556,6 +556,7 @@ pfcp_xact->gtp_pti = OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED; pfcp_xact->gtp_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; + pfcp_xact->local_seid = sess->smf_n4_seid; ogs_assert(gtpbuf); pfcp_xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); @@ -591,10 +592,11 @@ int rv; uint8_t cause_value; ogs_gtp2_cause_t *cause = NULL; - ogs_gtp2_f_teid_t *sgw_s5u_teid, *pgw_s5u_teid; + ogs_gtp2_f_teid_t *sgw_s5u_teid = NULL, *pgw_s5u_teid = NULL; smf_bearer_t *bearer = NULL; ogs_pfcp_far_t *dl_far = NULL; + ogs_assert(sess); ogs_assert(rsp); ogs_debug("Create Bearer Response"); @@ -614,11 +616,6 @@ ************************/ cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { ogs_assert(OGS_OK == smf_epc_pfcp_send_one_bearer_modification_request( @@ -770,6 +767,7 @@ uint64_t pfcp_flags = 0; smf_bearer_t *bearer = NULL; + ogs_assert(sess); ogs_assert(rsp); ogs_debug("Update Bearer Response"); @@ -786,24 +784,10 @@ rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - /************************ - * Check Session Context - ************************/ - cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; - - if (!sess) { - ogs_error("No Context in TEID"); - cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND; - } - - if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) { - return; - } - /***************************************** * Check Mandatory/Conditional IE Missing *****************************************/ - ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED); + cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED; if (rsp->bearer_contexts.presence == 0) { ogs_error("No Bearer"); @@ -887,6 +871,7 @@ uint8_t cause_value; smf_bearer_t *bearer = NULL; + ogs_assert(sess); ogs_assert(rsp); ogs_debug("Delete Bearer Response"); @@ -901,18 +886,10 @@ rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); - /************************ - * Check Session Context - ************************/ - if (!sess) - ogs_error("No Context in TEID"); - /******************** * Check ALL Context ********************/ ogs_assert(bearer); - sess = bearer->sess; - ogs_assert(sess); if (rsp->linked_eps_bearer_id.presence) { /*
View file
open5gs_2.4.8.tar.xz/src/smf/s5c-handler.h -> open5gs_2.4.9.tar.xz/src/smf/s5c-handler.h
Changed
@@ -42,13 +42,13 @@ ogs_pkbuf_t *gtpbuf, ogs_gtp2_modify_bearer_request_t *req); void smf_s5c_handle_create_bearer_response( smf_sess_t *sess, ogs_gtp_xact_t *xact, - ogs_gtp2_create_bearer_response_t *req); + ogs_gtp2_create_bearer_response_t *rsp); void smf_s5c_handle_update_bearer_response( smf_sess_t *sess, ogs_gtp_xact_t *xact, - ogs_gtp2_update_bearer_response_t *req); + ogs_gtp2_update_bearer_response_t *rsp); bool smf_s5c_handle_delete_bearer_response( smf_sess_t *sess, ogs_gtp_xact_t *xact, - ogs_gtp2_delete_bearer_response_t *req); + ogs_gtp2_delete_bearer_response_t *rsp); void smf_s5c_handle_bearer_resource_command( smf_sess_t *sess, ogs_gtp_xact_t *xact, ogs_gtp2_bearer_resource_command_t *cmd);
View file
open5gs_2.4.8.tar.xz/src/smf/s6b-path.c -> open5gs_2.4.9.tar.xz/src/smf/s6b-path.c
Changed
@@ -712,7 +712,7 @@ e->s6b_message = s6b_message; rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_free(s6b_message); smf_event_free(e); } else {
View file
open5gs_2.4.8.tar.xz/src/smf/sbi-path.c -> open5gs_2.4.9.tar.xz/src/smf/sbi-path.c
Changed
@@ -37,7 +37,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); smf_event_free(e); return OGS_ERROR; } @@ -45,11 +46,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { smf_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = smf_event_new(SMF_EVT_SBI_CLIENT); @@ -59,7 +67,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); smf_event_free(e); return OGS_ERROR; } @@ -70,92 +79,100 @@ int smf_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_SMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AMF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NSMF_PDUSESSION); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); + + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, smf_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AMF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NSMF_PDUSESSION); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - smf_nf_fsm_init(nf_instance); - } + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + smf_nf_fsm_init(nf_instance); + } + } + + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = smf_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)smf_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; return OGS_OK; } void smf_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool smf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool smf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_sbi_nf_instance_t *nf_instance = NULL; - request = smf_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + return false; + } -bool smf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } -bool smf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data, - ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data)) +bool smf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data), + smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data) { - ogs_sbi_xact_t *xact = NULL; smf_ue_t *smf_ue = NULL; + ogs_sbi_xact_t *xact = NULL; - ogs_assert(target_nf_type); + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; ogs_assert(sess); smf_ue = sess->smf_ue; ogs_assert(smf_ue); + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); + ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi, - (ogs_sbi_build_f)build, sess, data, - smf_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &sess->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, sess, data); if (!xact) { ogs_error("smf_sbi_discover_and_send() failed"); ogs_assert(true == @@ -168,8 +185,10 @@ xact->state = state; xact->assoc_stream = stream; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)smf_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &sess->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("smf_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); @@ -187,8 +206,12 @@ void smf_namf_comm_send_n1_n2_message_transfer( smf_sess_t *sess, smf_n1_n2_message_transfer_param_t *param) { - ogs_sbi_xact_t *xact = NULL; smf_ue_t *smf_ue = NULL; + ogs_sbi_xact_t *xact = NULL; + + OpenAPI_nf_type_e target_nf_type = OpenAPI_nf_type_NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_assert(param); ogs_assert(param->state); @@ -198,9 +221,21 @@ smf_ue = sess->smf_ue; ogs_assert(smf_ue); - xact = ogs_sbi_xact_add(OpenAPI_nf_type_AMF, &sess->sbi, + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); + + target_nf_type = OpenAPI_nf_type_AMF; + + discovery_option = ogs_sbi_discovery_option_new(); + ogs_assert(discovery_option); + ogs_sbi_discovery_option_set_target_nf_instance_id( + discovery_option, sess->serving_nf_id); + + xact = ogs_sbi_xact_add( + &sess->sbi, target_nf_type, discovery_option, (ogs_sbi_build_f)smf_namf_comm_build_n1_n2_message_transfer, - sess, param, smf_timer_sbi_client_wait_expire); + sess, param); if (!xact) { ogs_error("smf_namf_comm_send_n1_n2_message_transfer() failed"); return; @@ -208,8 +243,13 @@ xact->state = param->state; - ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)smf_nf_state_registered, client_cb); + if (ogs_sbi_discover_and_send( + &sess->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { + ogs_error("smf_namf_comm_send_n1_n2_message_transfer() failed"); + ogs_sbi_xact_remove(xact); + } } void smf_sbi_send_sm_context_create_error( @@ -391,12 +431,19 @@ ogs_pkbuf_free(n2smbuf); } -static int client_notify_cb(ogs_sbi_response_t *response, void *data) +static int client_notify_cb( + int status, ogs_sbi_response_t *response, void *data) { int rv; - ogs_sbi_message_t message; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_notify_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); rv = ogs_sbi_parse_response(&message, response);
View file
open5gs_2.4.8.tar.xz/src/smf/sbi-path.h -> open5gs_2.4.9.tar.xz/src/smf/sbi-path.h
Changed
@@ -34,13 +34,15 @@ int smf_sbi_open(void); void smf_sbi_close(void); -bool smf_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool smf_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); - -bool smf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data, - ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data)); +bool smf_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool smf_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(smf_sess_t *sess, void *data), + smf_sess_t *sess, ogs_sbi_stream_t *stream, int state, void *data); void smf_namf_comm_send_n1_n2_message_transfer( smf_sess_t *sess, smf_n1_n2_message_transfer_param_t *param);
View file
open5gs_2.4.8.tar.xz/src/smf/smf-sm.c -> open5gs_2.4.9.tar.xz/src/smf/smf-sm.c
Changed
@@ -115,8 +115,15 @@ } e->gtp_xact = gtp_xact; - if (gtp2_message.h.teid != 0) { + if (gtp2_message.h.teid_presence && gtp2_message.h.teid != 0) { sess = smf_sess_find_by_teid(gtp2_message.h.teid); + } else if (gtp_xact->local_teid) { /* rx no TEID or TEID=0 */ + /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some + * conditions, such as cause "Session context not found". In those + * cases, we still want to identify the local session which + * originated the message, so try harder by using the TEID we + * locally stored in xact when sending the original request: */ + sess = smf_sess_find_by_teid(gtp_xact->local_teid); } switch(gtp2_message.h.type) { @@ -161,16 +168,20 @@ sess, gtp_xact, recvbuf, >p2_message.modify_bearer_request); break; case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE: + if (!gtp2_message.h.teid_presence) ogs_error("No TEID"); smf_s5c_handle_create_bearer_response( sess, gtp_xact, >p2_message.create_bearer_response); break; case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE: + if (!gtp2_message.h.teid_presence) ogs_error("No TEID"); smf_s5c_handle_update_bearer_response( sess, gtp_xact, >p2_message.update_bearer_response); break; case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE: + if (!gtp2_message.h.teid_presence) ogs_error("No TEID"); if (!sess) { /* TODO: NACK the message */ + ogs_error("TODO: NACK the message"); break; } e->sess = sess; @@ -728,6 +739,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + sess = (smf_sess_t *)sbi_xact->sbi_object; ogs_assert(sess); @@ -776,16 +795,20 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, smf_nf_state_exception)) - ogs_error("State machine exception %d", e->timer_id); + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id, e->timer_id); break; case SMF_TIMER_SUBSCRIPTION_VALIDITY: subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - smf_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("Subscription validity expired %s", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/smf/timer.c -> open5gs_2.4.9.tar.xz/src/smf/timer.c
Changed
@@ -92,7 +92,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, smf_timer_get_name(e->timer_id)); smf_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/udm/context.c -> open5gs_2.4.9.tar.xz/src/udm/context.c
Changed
@@ -70,8 +70,6 @@ static int udm_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_UDM; - return OGS_OK; } @@ -231,14 +229,3 @@ { return ogs_pool_cycle(&udm_ue_pool, udm_ue); } - -void udm_ue_select_nf(udm_ue_t *udm_ue, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(udm_ue); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&udm_ue->sbi, udm_nf_state_registered); - else - ogs_sbi_select_first_nf(&udm_ue->sbi, nf_type, udm_nf_state_registered); -}
View file
open5gs_2.4.8.tar.xz/src/udm/context.h -> open5gs_2.4.9.tar.xz/src/udm/context.h
Changed
@@ -39,8 +39,6 @@ #define OGS_LOG_DOMAIN __udm_log_domain typedef struct udm_context_s { - OpenAPI_nf_type_e nf_type; - ogs_list_t udm_ue_list; ogs_hash_t *suci_hash; ogs_hash_t *supi_hash; @@ -108,8 +106,6 @@ udm_ue_t *udm_ue_cycle(udm_ue_t *udm_ue); -void udm_ue_select_nf(udm_ue_t *udm_ue, OpenAPI_nf_type_e nf_type); - #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/src/udm/init.c -> open5gs_2.4.9.tar.xz/src/udm/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + udm_context_init(); udm_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("udm", "nrf"); + rv = ogs_sbi_context_parse_config("udm", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = udm_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/udm/nf-sm.c -> open5gs_2.4.9.tar.xz/src/udm/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + udm_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - udm_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + udm_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - udm_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + udm_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = udm_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + udm_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = udm_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &udm_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &udm_nf_state_registered); } } void udm_nf_state_final(ogs_fsm_t *s, udm_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); udm_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void udm_nf_state_will_register(ogs_fsm_t *s, udm_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == udm_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, udm_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case UDM_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &udm_nf_state_registered); } else { ogs_error("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &udm_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,17 +173,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == udm_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, udm_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, udm_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +208,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -212,14 +231,16 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - udm_self()->nf_type, nf_instance->id, OpenAPI_nf_type_UDR)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_UDR)); } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -253,7 +274,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &udm_nf_state_exception); } @@ -261,13 +283,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -282,27 +305,31 @@ break; case UDM_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &udm_nf_state_will_register); break; case UDM_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &udm_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &udm_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", udm_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udm_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udm_event_get_name(e)); break; } } @@ -317,11 +344,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -329,8 +357,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udm_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udm_event_get_name(e)); break; } } @@ -348,18 +378,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case UDM_EVT_SBI_TIMER: @@ -370,15 +403,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &udm_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", udm_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -403,8 +438,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udm_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udm_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/udm/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/udm/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *udm_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *udm_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/udm/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/udm/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *udm_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *udm_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/udm/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/udm/nnrf-handler.c
Changed
@@ -171,9 +171,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); udm_nf_fsm_init(nf_instance); @@ -252,16 +253,22 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -278,8 +285,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); udm_nf_fsm_init(nf_instance); @@ -295,8 +303,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - udm_ue_t *udm_ue = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -313,10 +319,6 @@ continue; } - udm_ue = (udm_ue_t *)sbi_object; - ogs_assert(udm_ue); - udm_ue_select_nf(udm_ue, nf_instance->nf_type); - /* TIME : Update validity from NRF */ if (SearchResult->is_validity_period && SearchResult->validity_period) { @@ -335,12 +337,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_error("(NF discover) No %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); - } else { - ogs_assert(true == udm_sbi_send(nf_instance, xact)); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == udm_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/src/udm/nudm-handler.c -> open5gs_2.4.9.tar.xz/src/udm/nudm-handler.c
Changed
@@ -73,9 +73,10 @@ ResynchronizationInfo = AuthenticationInfoRequest->resynchronization_info; if (!ResynchronizationInfo) { - ogs_assert(true == udm_sbi_discover_and_send( - OpenAPI_nf_type_UDR, udm_ue, stream, NULL, - udm_nudr_dr_build_authentication_subscription)); + ogs_assert(true == + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_authentication_subscription, + udm_ue, stream, NULL)); } else { uint8_t randOGS_RAND_LEN; @@ -162,9 +163,9 @@ ogs_uint64_to_buffer(sqn, OGS_SQN_LEN, udm_ue->sqn); ogs_assert(true == - udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, - udm_ue, stream, udm_ue->sqn, - udm_nudr_dr_build_authentication_subscription)); + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_authentication_subscription, + udm_ue, stream, udm_ue->sqn)); } return true; @@ -232,8 +233,9 @@ udm_ue->auth_event, message->AuthEvent); ogs_assert(true == - udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, udm_ue, stream, NULL, - udm_nudr_dr_build_update_authentication_status)); + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_update_authentication_status, + udm_ue, stream, NULL)); return true; } @@ -330,8 +332,116 @@ message->Amf3GppAccessRegistration); ogs_assert(true == - udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, udm_ue, stream, NULL, - udm_nudr_dr_build_update_amf_context)); + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_update_amf_context, udm_ue, stream, NULL)); + + return true; +} + +bool udm_nudm_uecm_handle_registration_update( + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *message) +{ + OpenAPI_amf3_gpp_access_registration_modification_t + *Amf3GppAccessRegistrationModification = NULL; + OpenAPI_guami_t *Guami = NULL; + ogs_guami_t recv_guami; + OpenAPI_list_t *PatchItemList = NULL; + OpenAPI_patch_item_t item; + + ogs_assert(udm_ue); + ogs_assert(stream); + ogs_assert(message); + + Amf3GppAccessRegistrationModification = message->Amf3GppAccessRegistrationModification; + if (!Amf3GppAccessRegistrationModification) { + ogs_error("%s No Amf3GppAccessRegistrationModification", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No Amf3GppAccessRegistrationModification", udm_ue->supi)); + return false; + } + + Guami = Amf3GppAccessRegistrationModification->guami; + if (!Guami) { + ogs_error("%s No Guami", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No Guami", udm_ue->supi)); + return false; + } + + if (!Guami->amf_id) { + ogs_error("%s No Guami.AmfId", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No Guami.AmfId", udm_ue->supi)); + return false; + } + + if (!Guami->plmn_id) { + ogs_error("%s No PlmnId", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No PlmnId", udm_ue->supi)); + return false; + } + + if (!Guami->plmn_id->mnc) { + ogs_error("%s No PlmnId.Mnc", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No PlmnId.Mnc", udm_ue->supi)); + return false; + } + + if (!Guami->plmn_id->mcc) { + ogs_error("%s No PlmnId.Mcc", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + message, "No PlmnId.Mcc", udm_ue->supi)); + return false; + } + + /* TS 29.503: 5.3.2.4.2 AMF deregistration for 3GPP access + * 2a. The UDM shall check whether the received GUAMI matches the stored + * GUAMI. If so, the UDM shall set the PurgeFlag. The UDM responds with + * "204 No Content". + * 2b. Otherwise the UDM responds with "403 Forbidden". */ + ogs_sbi_parse_guami(&recv_guami, Guami); + if (memcmp(&recv_guami, &udm_ue->guami, sizeof(recv_guami)) != 0) { + ogs_error("%s Guami mismatch", udm_ue->supi); + ogs_assert(true == + ogs_sbi_server_send_error(stream, OGS_SBI_HTTP_STATUS_FORBIDDEN, + message, "Guami mismatch", udm_ue->supi)); + } + + + if (Amf3GppAccessRegistrationModification->is_purge_flag) { + udm_ue->amf_3gpp_access_registration->is_purge_flag = + Amf3GppAccessRegistrationModification->is_purge_flag; + udm_ue->amf_3gpp_access_registration->purge_flag = + Amf3GppAccessRegistrationModification->purge_flag; + } + + PatchItemList = OpenAPI_list_create(); + ogs_assert(PatchItemList); + + + if (Amf3GppAccessRegistrationModification->is_purge_flag) { + memset(&item, 0, sizeof(item)); + item.op = OpenAPI_patch_operation_replace; + item.path = (char *)"PurgeFlag"; + item.value = OpenAPI_any_type_create_bool( + Amf3GppAccessRegistrationModification->purge_flag); + ogs_assert(item.value); + + OpenAPI_list_add(PatchItemList, &item); + } + + ogs_assert(true == + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_patch_amf_context, + udm_ue, stream, PatchItemList)); return true; }
View file
open5gs_2.4.8.tar.xz/src/udm/nudm-handler.h -> open5gs_2.4.9.tar.xz/src/udm/nudm-handler.h
Changed
@@ -33,6 +33,8 @@ bool udm_nudm_uecm_handle_registration( udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *message); +bool udm_nudm_uecm_handle_registration_update( + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *message); bool udm_nudm_sdm_handle_subscription_provisioned( udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg);
View file
open5gs_2.4.8.tar.xz/src/udm/nudr-build.c -> open5gs_2.4.9.tar.xz/src/udm/nudr-build.c
Changed
@@ -149,6 +149,50 @@ return request; } +ogs_sbi_request_t *udm_nudr_dr_build_patch_amf_context( + udm_ue_t *udm_ue, void *data) +{ + ogs_sbi_message_t message; + ogs_sbi_request_t *request = NULL; + + OpenAPI_patch_item_t *pitem = NULL; + OpenAPI_lnode_t *node = NULL; + + OpenAPI_list_t *PatchItemList = (OpenAPI_list_t *)data; + + ogs_assert(udm_ue); + ogs_assert(PatchItemList); + + memset(&message, 0, sizeof(message)); + message.http.content_type = (char *)OGS_SBI_CONTENT_PATCH_TYPE; + message.h.method = (char *)OGS_SBI_HTTP_METHOD_PATCH; + message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDR_DR; + message.h.api.version = (char *)OGS_SBI_API_V1; + message.h.resource.component0 = + (char *)OGS_SBI_RESOURCE_NAME_SUBSCRIPTION_DATA; + message.h.resource.component1 = (char *)udm_ue->supi; + message.h.resource.component2 = + (char *)OGS_SBI_RESOURCE_NAME_CONTEXT_DATA; + message.h.resource.component3 = + (char *)OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS; + + message.PatchItemList = PatchItemList; + + request = ogs_sbi_build_request(&message); + ogs_assert(request); + + if (PatchItemList) { + OpenAPI_list_for_each(PatchItemList, node) { + pitem = node->data; + if (pitem) + OpenAPI_any_type_free(pitem->value); + } + OpenAPI_list_free(PatchItemList); + } + + return request; +} + ogs_sbi_request_t *udm_nudr_dr_build_query_subscription_provisioned( udm_ue_t *udm_ue, void *data) {
View file
open5gs_2.4.8.tar.xz/src/udm/nudr-build.h -> open5gs_2.4.9.tar.xz/src/udm/nudr-build.h
Changed
@@ -34,6 +34,8 @@ udm_ue_t *udm_ue, void *data); ogs_sbi_request_t *udm_nudr_dr_build_update_amf_context( udm_ue_t *udm_ue, void *data); +ogs_sbi_request_t *udm_nudr_dr_build_patch_amf_context( + udm_ue_t *udm_ue, void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/udm/nudr-handler.c -> open5gs_2.4.9.tar.xz/src/udm/nudr-handler.c
Changed
@@ -406,6 +406,34 @@ return false; } + SWITCH(recvmsg->h.method) + CASE(OGS_SBI_HTTP_METHOD_PATCH) + SWITCH(recvmsg->h.resource.component3) + CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS) + memset(&sendmsg, 0, sizeof(sendmsg)); + + response = ogs_sbi_build_response( + &sendmsg, OGS_SBI_HTTP_STATUS_NO_CONTENT); + ogs_assert(response); + ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + return true; + + DEFAULT + strerror = ogs_msprintf("%s Invalid resource name %s", + udm_ue->supi, recvmsg->h.resource.component3); + ogs_assert(strerror); + + ogs_error("%s", strerror); + ogs_assert(true == + ogs_sbi_server_send_error( + stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, strerror, NULL)); + ogs_free(strerror); + return false; + END + END + + SWITCH(recvmsg->h.resource.component3) CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS) Amf3GppAccessRegistration = udm_ue->amf_3gpp_access_registration;
View file
open5gs_2.4.8.tar.xz/src/udm/sbi-path.c -> open5gs_2.4.9.tar.xz/src/udm/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); udm_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { udm_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = udm_event_new(UDM_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); udm_event_free(e); return OGS_ERROR; } @@ -68,105 +77,112 @@ int udm_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_UDM); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_SMF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_AUSF); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NUDM_UEAU); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AUSF); + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NUDM_UECM); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NUDM_SDM); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V2, + (char*)OGS_SBI_API_V2_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, udm_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AMF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_SMF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_AUSF); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NUDM_UEAU); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AUSF); - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NUDM_UECM); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NUDM_SDM); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V2, - (char*)OGS_SBI_API_V2_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_AMF); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_SMF); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - udm_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + udm_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = udm_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)udm_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void udm_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } -bool udm_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) +bool udm_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_sbi_nf_instance_t *nf_instance = NULL; - request = udm_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request( - client, client->cb, request, nf_instance); -} + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + return false; + } -bool udm_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) -{ - return ogs_sbi_send(nf_instance, client_cb, xact); + return ogs_sbi_send_request(nf_instance, client_cb, data); } -bool udm_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data)) +bool udm_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data), + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(udm_ue); ogs_assert(stream); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &udm_ue->sbi, - (ogs_sbi_build_f)build, udm_ue, data, - udm_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &udm_ue->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, udm_ue, data); if (!xact) { ogs_error("udm_sbi_discover_and_send() failed"); ogs_assert(true == @@ -178,8 +194,10 @@ xact->assoc_stream = stream; - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)udm_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &udm_ue->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("udm_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); ogs_assert(true ==
View file
open5gs_2.4.8.tar.xz/src/udm/sbi-path.h -> open5gs_2.4.9.tar.xz/src/udm/sbi-path.h
Changed
@@ -30,12 +30,15 @@ int udm_sbi_open(void); void udm_sbi_close(void); -bool udm_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - -bool udm_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); -bool udm_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data, - ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data)); +bool udm_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +bool udm_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(udm_ue_t *udm_ue, void *data), + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/udm/timer.c -> open5gs_2.4.9.tar.xz/src/udm/timer.c
Changed
@@ -79,7 +79,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, udm_timer_get_name(e->timer_id)); udm_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/udm/udm-sm.c -> open5gs_2.4.9.tar.xz/src/udm/udm-sm.c
Changed
@@ -313,6 +313,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + udm_ue = (udm_ue_t *)sbi_xact->sbi_object; ogs_assert(udm_ue); @@ -321,7 +329,10 @@ ogs_sbi_xact_remove(sbi_xact); udm_ue = udm_ue_cycle(udm_ue); - ogs_assert(udm_ue); + if (!udm_ue) { + ogs_error("UE(udm_ue) Context has already been removed"); + break; + } e->udm_ue = udm_ue; e->sbi.message = &message; @@ -364,7 +375,8 @@ ogs_fsm_dispatch(&nf_instance->sm, e); if (OGS_FSM_CHECK(&nf_instance->sm, udm_nf_state_exception)) - ogs_error("%s State machine exception %d", + ogs_error("%s:%s State machine exception %d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), nf_instance->id, e->timer_id); break; @@ -372,9 +384,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - udm_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/udm/ue-sm.c -> open5gs_2.4.9.tar.xz/src/udm/ue-sm.c
Changed
@@ -110,6 +110,21 @@ "Invalid HTTP method", message->h.method)); END break; + CASE(OGS_SBI_HTTP_METHOD_PATCH) + SWITCH(message->h.resource.component1) + CASE(OGS_SBI_RESOURCE_NAME_REGISTRATIONS) + udm_nudm_uecm_handle_registration_update(udm_ue, stream, message); + break; + + DEFAULT + ogs_error("%s Invalid resource name %s", + udm_ue->suci, message->h.resource.component1); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, message, + "Invalid HTTP method", message->h.method)); + END + break; DEFAULT ogs_error("%s Invalid HTTP method %s", udm_ue->suci, message->h.method); @@ -128,9 +143,9 @@ CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA) CASE(OGS_SBI_RESOURCE_NAME_SM_DATA) ogs_assert(true == - udm_sbi_discover_and_send( - OpenAPI_nf_type_UDR, udm_ue, stream, message, - udm_nudr_dr_build_query_subscription_provisioned)); + udm_sbi_discover_and_send(OpenAPI_nf_type_UDR, NULL, + udm_nudr_dr_build_query_subscription_provisioned, + udm_ue, stream, message)); break; CASE(OGS_SBI_RESOURCE_NAME_UE_CONTEXT_IN_SMF_DATA)
View file
open5gs_2.4.8.tar.xz/src/udr/context.c -> open5gs_2.4.9.tar.xz/src/udr/context.c
Changed
@@ -52,8 +52,6 @@ static int udr_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_UDR; - return OGS_OK; }
View file
open5gs_2.4.8.tar.xz/src/udr/context.h -> open5gs_2.4.9.tar.xz/src/udr/context.h
Changed
@@ -39,8 +39,6 @@ #define OGS_LOG_DOMAIN __udr_log_domain typedef struct udr_context_s { - OpenAPI_nf_type_e nf_type; - } udr_context_t; #define UDR_NF_INSTANCE_CLEAR(_cAUSE, _nFInstance) \
View file
open5gs_2.4.8.tar.xz/src/udr/init.c -> open5gs_2.4.9.tar.xz/src/udr/init.c
Changed
@@ -27,11 +27,12 @@ { int rv; + ogs_sbi_context_init(); + udr_context_init(); udr_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("udr", "nrf"); + rv = ogs_sbi_context_parse_config("udr", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = udr_context_parse_config();
View file
open5gs_2.4.8.tar.xz/src/udr/nf-sm.c -> open5gs_2.4.9.tar.xz/src/udr/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + udr_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - udr_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + udr_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - udr_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + udr_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = udr_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + udr_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = udr_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &udr_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &udr_nf_state_registered); } } void udr_nf_state_final(ogs_fsm_t *s, udr_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); udr_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void udr_nf_state_will_register(ogs_fsm_t *s, udr_event_t *e) @@ -102,19 +114,20 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == udr_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, udr_nnrf_nfm_build_register)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case UDR_EVT_SBI_CLIENT: @@ -133,20 +146,22 @@ OGS_FSM_TRAN(s, &udr_nf_state_registered); } else { ogs_error("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &udr_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,17 +173,19 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); - ogs_assert(true == udr_nnrf_nfm_send_nf_register(nf_instance)); + ogs_assert(true == ogs_nnrf_nfm_send_nf_register( + nf_instance, udr_nnrf_nfm_build_register)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, udr_timer_get_name(e->timer_id), e->timer_id); } break; @@ -191,12 +208,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -214,8 +233,8 @@ break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -249,7 +268,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &udr_nf_state_exception); } @@ -257,13 +277,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -278,27 +299,31 @@ break; case UDR_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &udr_nf_state_will_register); break; case UDR_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &udr_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &udr_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", udr_timer_get_name(e->timer_id), e->timer_id); - break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udr_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udr_event_get_name(e)); break; } } @@ -313,11 +338,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -325,8 +351,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udr_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udr_event_get_name(e)); break; } } @@ -344,18 +372,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case UDR_EVT_SBI_TIMER: @@ -366,15 +397,17 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &udr_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", udr_timer_get_name(e->timer_id), e->timer_id); - break; } break; @@ -399,8 +432,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, udr_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + udr_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/src/udr/nnrf-build.c -> open5gs_2.4.9.tar.xz/src/udr/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *udr_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *udr_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/src/udr/nnrf-build.h -> open5gs_2.4.9.tar.xz/src/udr/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *udr_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *udr_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/udr/nnrf-handler.c -> open5gs_2.4.9.tar.xz/src/udr/nnrf-handler.c
Changed
@@ -171,9 +171,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); udr_nf_fsm_init(nf_instance);
View file
open5gs_2.4.8.tar.xz/src/udr/nudr-handler.c -> open5gs_2.4.9.tar.xz/src/udr/nudr-handler.c
Changed
@@ -303,6 +303,30 @@ return true; + CASE(OGS_SBI_HTTP_METHOD_PATCH) + OpenAPI_list_t *PatchItemList; + + PatchItemList = recvmsg->PatchItemList; + if (!PatchItemList) { + ogs_error("%s No PatchItemList", supi); + ogs_assert(true == + ogs_sbi_server_send_error( + stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST, + recvmsg, "No PatchItemList", supi)); + return false; + } + + /* TODO: parse PatchItemList */ + + memset(&sendmsg, 0, sizeof(sendmsg)); + + response = ogs_sbi_build_response( + &sendmsg, OGS_SBI_HTTP_STATUS_NO_CONTENT); + ogs_assert(response); + ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + + return true; + DEFAULT ogs_error("Invalid HTTP method %s", recvmsg->h.method); ogs_assert(true == @@ -515,13 +539,26 @@ ogs_assert(SubscribedSnssaiInfoList); for (i = 0; i < subscription_data.num_of_slice; i++) { + if (i >= OGS_MAX_NUM_OF_SLICE) { + ogs_warn("Ignore max slice count overflow %d>=%d", + subscription_data.num_of_slice, OGS_MAX_NUM_OF_SLICE); + break; + } slice_data = &subscription_data.slicei; DnnInfoList = OpenAPI_list_create(); ogs_assert(DnnInfoList); for (j = 0; j < slice_data->num_of_session; j++) { - ogs_session_t *session = &slice_data->sessionj; + ogs_session_t *session = NULL; + + if (j >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + + session = &slice_data->sessionj; ogs_assert(session); ogs_assert(session->name); @@ -638,7 +675,15 @@ dnnConfigurationList = OpenAPI_list_create(); for (i = 0; i < slice_data->num_of_session; i++) { - ogs_session_t *session = &slice_data->sessioni; + ogs_session_t *session = NULL; + + if (i >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + + session = &slice_data->sessioni; ogs_assert(session); ogs_assert(session->name); @@ -1000,7 +1045,15 @@ slice_data = &subscription_data.slice0; for (i = 0; i < slice_data->num_of_session; i++) { - ogs_session_t *session = &slice_data->sessioni; + ogs_session_t *session = NULL; + + if (i >= OGS_MAX_NUM_OF_SESS) { + ogs_warn("Ignore max session count overflow %d>=%d", + slice_data->num_of_session, OGS_MAX_NUM_OF_SESS); + break; + } + + session = &slice_data->sessioni; ogs_assert(session); ogs_assert(session->name);
View file
open5gs_2.4.8.tar.xz/src/udr/sbi-path.c -> open5gs_2.4.9.tar.xz/src/udr/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); udr_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { udr_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = udr_event_new(UDR_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); udr_event_free(e); return OGS_ERROR; } @@ -68,67 +77,57 @@ int udr_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); + + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_UDR); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_PCF); + ogs_sbi_nf_instance_add_allowed_nf_type(nf_instance, OpenAPI_nf_type_UDM); + + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NUDR_DR); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_PCF); + ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_UDM); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ + /* Initialize NRF NF Instance */ ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, udr_self()->nf_type); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_PCF); - ogs_sbi_nf_instance_add_allowed_nf_type( - nf_instance, OpenAPI_nf_type_UDM); - - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NUDR_DR); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_PCF); - ogs_sbi_nf_service_add_allowed_nf_type(service, OpenAPI_nf_type_UDM); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - udr_nf_fsm_init(nf_instance); + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + udr_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = udr_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)udr_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + return OGS_OK; } void udr_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } - -bool udr_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance) -{ - ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; - - ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); - - request = udr_nnrf_nfm_build_register(nf_instance); - ogs_expect_or_return_val(request, false); - return ogs_sbi_client_send_request(client, client->cb, request, nf_instance); -}
View file
open5gs_2.4.8.tar.xz/src/udr/sbi-path.h -> open5gs_2.4.9.tar.xz/src/udr/sbi-path.h
Changed
@@ -29,8 +29,6 @@ int udr_sbi_open(void); void udr_sbi_close(void); -bool udr_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); - #ifdef __cplusplus } #endif
View file
open5gs_2.4.8.tar.xz/src/udr/timer.c -> open5gs_2.4.9.tar.xz/src/udr/timer.c
Changed
@@ -64,7 +64,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, udr_timer_get_name(e->timer_id)); udr_event_free(e); } @@ -94,3 +94,8 @@ { sbi_timer_send_event(UDR_TIMER_SUBSCRIPTION_VALIDITY, data); } + +void udr_timer_sbi_client_wait_expire(void *data) +{ + sbi_timer_send_event(UDR_TIMER_SBI_CLIENT_WAIT, data); +}
View file
open5gs_2.4.8.tar.xz/src/udr/timer.h -> open5gs_2.4.9.tar.xz/src/udr/timer.h
Changed
@@ -35,6 +35,7 @@ UDR_TIMER_NF_INSTANCE_NO_HEARTBEAT, UDR_TIMER_NF_INSTANCE_VALIDITY, UDR_TIMER_SUBSCRIPTION_VALIDITY, + UDR_TIMER_SBI_CLIENT_WAIT, MAX_NUM_OF_UDR_TIMER, @@ -47,6 +48,7 @@ void udr_timer_nf_instance_no_heartbeat(void *data); void udr_timer_nf_instance_validity(void *data); void udr_timer_subscription_validity(void *data); +void udr_timer_sbi_client_wait_expire(void *data); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/src/udr/udr-sm.c -> open5gs_2.4.9.tar.xz/src/udr/udr-sm.c
Changed
@@ -292,9 +292,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - udr_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("%s Subscription validity expired", subscription->id);
View file
open5gs_2.4.8.tar.xz/src/upf/n4-handler.c -> open5gs_2.4.9.tar.xz/src/upf/n4-handler.c
Changed
@@ -119,8 +119,9 @@ /* Setup UE IP address */ if (pdr->ue_ip_addr_len) { if (req->pdn_type.presence == 1) { - ogs_assert(OGS_PFCP_CAUSE_REQUEST_ACCEPTED == - upf_sess_set_ue_ip(sess, req->pdn_type.u8, pdr)); + cause_value = upf_sess_set_ue_ip(sess, req->pdn_type.u8, pdr); + if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) + goto cleanup; } else { ogs_error("No PDN Type"); } @@ -156,6 +157,9 @@ &ogs_gtp_self()->gtpu_resource_list, pdr->dnn, OGS_PFCP_INTERFACE_ACCESS); if (resource) { + ogs_assert( + (resource->info.v4 && pdr->f_teid.ipv4) || + (resource->info.v6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_user_plane_ip_resource_info_to_f_teid( &resource->info, &pdr->f_teid, &pdr->f_teid_len)); @@ -166,10 +170,15 @@ else pdr->f_teid.teid = pdr->index; } else { + ogs_assert( + (ogs_gtp_self()->gtpu_addr && pdr->f_teid.ipv4) || + (ogs_gtp_self()->gtpu_addr6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_sockaddr_to_f_teid( - ogs_gtp_self()->gtpu_addr, - ogs_gtp_self()->gtpu_addr6, + pdr->f_teid.ipv4 ? + ogs_gtp_self()->gtpu_addr : NULL, + pdr->f_teid.ipv6 ? + ogs_gtp_self()->gtpu_addr6 : NULL, &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } @@ -391,6 +400,9 @@ &ogs_gtp_self()->gtpu_resource_list, pdr->dnn, OGS_PFCP_INTERFACE_ACCESS); if (resource) { + ogs_assert( + (resource->info.v4 && pdr->f_teid.ipv4) || + (resource->info.v6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_user_plane_ip_resource_info_to_f_teid( &resource->info, &pdr->f_teid, &pdr->f_teid_len)); @@ -401,10 +413,15 @@ else pdr->f_teid.teid = pdr->index; } else { + ogs_assert( + (ogs_gtp_self()->gtpu_addr && pdr->f_teid.ipv4) || + (ogs_gtp_self()->gtpu_addr6 && pdr->f_teid.ipv6)); ogs_assert(OGS_OK == ogs_pfcp_sockaddr_to_f_teid( - ogs_gtp_self()->gtpu_addr, - ogs_gtp_self()->gtpu_addr6, + pdr->f_teid.ipv4 ? + ogs_gtp_self()->gtpu_addr : NULL, + pdr->f_teid.ipv6 ? + ogs_gtp_self()->gtpu_addr6 : NULL, &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } @@ -450,11 +467,7 @@ OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND, 0); return; } - - ogs_assert(sess); - upf_pfcp_send_session_deletion_response(xact, sess); - upf_sess_remove(sess); }
View file
open5gs_2.4.8.tar.xz/src/upf/pfcp-path.c -> open5gs_2.4.9.tar.xz/src/upf/pfcp-path.c
Changed
@@ -120,7 +120,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); ogs_pkbuf_free(e->pkbuf); upf_event_free(e); }
View file
open5gs_2.4.8.tar.xz/src/upf/pfcp-sm.c -> open5gs_2.4.9.tar.xz/src/upf/pfcp-sm.c
Changed
@@ -300,7 +300,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); upf_event_free(e); } break;
View file
open5gs_2.4.8.tar.xz/src/upf/timer.c -> open5gs_2.4.9.tar.xz/src/upf/timer.c
Changed
@@ -47,7 +47,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); upf_event_free(e); } }
View file
open5gs_2.4.8.tar.xz/tests/af/af-sm.c -> open5gs_2.4.9.tar.xz/tests/af/af-sm.c
Changed
@@ -294,6 +294,14 @@ sbi_xact = e->sbi.data; ogs_assert(sbi_xact); + sbi_xact = ogs_sbi_xact_cycle(sbi_xact); + if (!sbi_xact) { + /* CLIENT_WAIT timer could remove SBI transaction + * before receiving SBI message */ + ogs_error("SBI transaction has already been removed"); + break; + } + sess = (af_sess_t *)sbi_xact->sbi_object; ogs_assert(sess); @@ -406,9 +414,11 @@ subscription = e->sbi.data; ogs_assert(subscription); + ogs_assert(ogs_sbi_self()->nf_instance); ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(subscription->client, - af_self()->nf_type, subscription->req_nf_instance_id, + ogs_sbi_self()->nf_instance->nf_type, + subscription->req_nf_instance_id, subscription->subscr_cond.nf_type)); ogs_info("Subscription validity expired %s", subscription->id); @@ -445,8 +455,8 @@ switch(e->local_id) { case AF_LOCAL_DISCOVER_AND_SEND: - af_sbi_discover_and_send(e->local.target_nf_type, - e->sess, e->local.data, e->local.build); + af_sbi_discover_and_send(e->local.target_nf_type, NULL, + e->local.build, e->sess, e->local.data); break; case AF_LOCAL_SEND_TO_PCF: af_sbi_send_to_pcf(e->sess, e->local.data, e->local.build);
View file
open5gs_2.4.8.tar.xz/tests/af/context.c -> open5gs_2.4.9.tar.xz/tests/af/context.c
Changed
@@ -79,8 +79,6 @@ static int af_context_prepare(void) { - self.nf_type = OpenAPI_nf_type_AF; - return OGS_OK; } @@ -264,17 +262,6 @@ pcf_app_session_id, strlen(pcf_app_session_id)); } -void af_sess_select_nf(af_sess_t *sess, OpenAPI_nf_type_e nf_type) -{ - ogs_assert(sess); - ogs_assert(nf_type); - - if (nf_type == OpenAPI_nf_type_NRF) - ogs_sbi_select_nrf(&sess->sbi, af_nf_state_registered); - else - ogs_sbi_select_first_nf(&sess->sbi, nf_type, af_nf_state_registered); -} - static ogs_sbi_client_t *find_client_by_fqdn(char *fqdn, int port) { int rv;
View file
open5gs_2.4.8.tar.xz/tests/af/context.h -> open5gs_2.4.9.tar.xz/tests/af/context.h
Changed
@@ -38,8 +38,6 @@ #define OGS_LOG_DOMAIN __af_log_domain typedef struct af_context_s { - OpenAPI_nf_type_e nf_type; - ogs_hash_t *supi_hash; /* hash table (SUPI) */ ogs_hash_t *ipv4_hash; /* hash table (IPv4 Address) */ ogs_hash_t *ipv6_hash; /* hash table (IPv6 Address) */ @@ -115,8 +113,6 @@ af_sess_t *af_sess_find_by_af_app_session_id(char *af_app_session_id); af_sess_t *af_sess_find_by_pcf_app_session_id(char *pcf_app_session_id); -void af_sess_select_nf(af_sess_t *sess, OpenAPI_nf_type_e nf_type); - void af_sess_associate_pcf_client(af_sess_t *sess); #ifdef __cplusplus
View file
open5gs_2.4.8.tar.xz/tests/af/init.c -> open5gs_2.4.9.tar.xz/tests/af/init.c
Changed
@@ -29,11 +29,12 @@ { int rv; + ogs_sbi_context_init(); + af_context_init(); af_event_init(); - ogs_sbi_context_init(); - rv = ogs_sbi_context_parse_config("af", "nrf"); + rv = ogs_sbi_context_parse_config("af", "nrf", "scp"); if (rv != OGS_OK) return rv; rv = af_context_parse_config();
View file
open5gs_2.4.8.tar.xz/tests/af/local.c -> open5gs_2.4.9.tar.xz/tests/af/local.c
Changed
@@ -50,7 +50,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, af_timer_get_name(e->timer_id)); af_event_free(e); } else { @@ -76,7 +76,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, af_timer_get_name(e->timer_id)); af_event_free(e); } else {
View file
open5gs_2.4.8.tar.xz/tests/af/nf-sm.c -> open5gs_2.4.9.tar.xz/tests/af/nf-sm.c
Changed
@@ -60,32 +60,44 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); - ogs_assert(nf_instance->id); + nf_instance->t_registration_interval = ogs_timer_add(ogs_app()->timer_mgr, + af_timer_nf_instance_registration_interval, nf_instance); ogs_assert(nf_instance->t_registration_interval); - nf_instance->t_registration_interval->cb = - af_timer_nf_instance_registration_interval; + nf_instance->t_heartbeat_interval = ogs_timer_add(ogs_app()->timer_mgr, + af_timer_nf_instance_heartbeat_interval, nf_instance); ogs_assert(nf_instance->t_heartbeat_interval); - nf_instance->t_heartbeat_interval->cb = - af_timer_nf_instance_heartbeat_interval; + nf_instance->t_no_heartbeat = ogs_timer_add(ogs_app()->timer_mgr, + af_timer_nf_instance_no_heartbeat, nf_instance); ogs_assert(nf_instance->t_no_heartbeat); - nf_instance->t_no_heartbeat->cb = af_timer_nf_instance_no_heartbeat; + nf_instance->t_validity = ogs_timer_add(ogs_app()->timer_mgr, + af_timer_nf_instance_validity, nf_instance); ogs_assert(nf_instance->t_validity); - nf_instance->t_validity->cb = af_timer_nf_instance_validity; - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { OGS_FSM_TRAN(s, &af_nf_state_will_register); } else { + ogs_assert(nf_instance->id); OGS_FSM_TRAN(s, &af_nf_state_registered); } } void af_nf_state_final(ogs_fsm_t *s, af_event_t *e) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_assert(s); ogs_assert(e); af_sm_debug(e); + + nf_instance = e->sbi.data; + ogs_assert(nf_instance); + + ogs_timer_delete(nf_instance->t_registration_interval); + ogs_timer_delete(nf_instance->t_heartbeat_interval); + ogs_timer_delete(nf_instance->t_no_heartbeat); + ogs_timer_delete(nf_instance->t_validity); } void af_nf_state_will_register(ogs_fsm_t *s, af_event_t *e) @@ -102,19 +114,19 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); + ogs_assert(NF_INSTANCE_IS_NRF(nf_instance)); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); ogs_assert(true == af_nnrf_nfm_send_nf_register(nf_instance)); break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_stop(nf_instance->t_registration_interval); + ogs_timer_stop(nf_instance->t_registration_interval); break; case AF_EVT_SBI_CLIENT: @@ -133,20 +145,22 @@ OGS_FSM_TRAN(s, &af_nf_state_registered); } else { ogs_error("%s HTTP Response Status Code %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &af_nf_state_exception); } break; DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -158,24 +172,25 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); - if (NF_INSTANCE_IS_SELF(nf_instance->id)) - ogs_timer_start(nf_instance->t_registration_interval, - ogs_app()->time.message.sbi.nf_register_interval); + ogs_timer_start(nf_instance->t_registration_interval, + ogs_app()->time.message.sbi.nf_register_interval); ogs_assert(true == af_nnrf_nfm_send_nf_register(nf_instance)); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s Unknown timer%s:%d", + ogs_sbi_self()->nf_instance->id, af_timer_get_name(e->timer_id), e->timer_id); } break; default: ogs_error("%s Unknown event %s", - nf_instance->id, af_event_get_name(e)); + ogs_sbi_self()->nf_instance->id, af_event_get_name(e)); break; } } @@ -192,12 +207,14 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_info("%s NF registered Heartbeat:%ds", - nf_instance->id, nf_instance->time.heartbeat_interval); + ogs_sbi_self()->nf_instance->id, + nf_instance->time.heartbeat_interval); client = nf_instance->client; ogs_assert(client); @@ -213,14 +230,16 @@ ogs_assert(true == ogs_nnrf_nfm_send_nf_status_subscribe(client, - af_self()->nf_type, nf_instance->id, OpenAPI_nf_type_BSF)); + ogs_sbi_self()->nf_instance->nf_type, + ogs_sbi_self()->nf_instance->id, + OpenAPI_nf_type_BSF)); } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); if (nf_instance->time.heartbeat_interval) { ogs_timer_stop(nf_instance->t_heartbeat_interval); @@ -254,7 +273,8 @@ no_heartbeat_margin)); } else { ogs_warn("%s HTTP response error %d", - nf_instance->id, message->res_status); + ogs_sbi_self()->nf_instance->id, + message->res_status); OGS_FSM_TRAN(s, &af_nf_state_exception); } @@ -262,13 +282,14 @@ DEFAULT ogs_error("%s Invalid resource name %s", - nf_instance->id, message->h.resource.component0); + ogs_sbi_self()->nf_instance->id, + message->h.resource.component0); END break; DEFAULT ogs_error("%s Invalid API name %s", - nf_instance->id, message->h.service.name); + ogs_sbi_self()->nf_instance->id, message->h.service.name); END break; @@ -283,27 +304,32 @@ break; case AF_TIMER_NF_INSTANCE_NO_HEARTBEAT: - ogs_error("%s No heartbeat", nf_instance->id); + ogs_error("%s No heartbeat", ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &af_nf_state_will_register); break; case AF_TIMER_NF_INSTANCE_VALIDITY: - if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - ogs_info("%s NF expired", nf_instance->id); - OGS_FSM_TRAN(s, &af_nf_state_de_registered); - } + ogs_assert(!NF_INSTANCE_IS_NRF(nf_instance)); + ogs_assert(nf_instance->id); + + ogs_info("%s NF expired", nf_instance->id); + OGS_FSM_TRAN(s, &af_nf_state_de_registered); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", af_timer_get_name(e->timer_id), e->timer_id); break; } break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, af_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + af_event_get_name(e)); break; } } @@ -318,11 +344,12 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) { - ogs_info("%s NF de-registered", nf_instance->id); + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_info("%s NF de-registered", ogs_sbi_self()->nf_instance->id); } break; @@ -330,8 +357,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, af_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + af_event_get_name(e)); break; } } @@ -349,18 +378,21 @@ nf_instance = e->sbi.data; ogs_assert(nf_instance); + ogs_assert(ogs_sbi_self()->nf_instance); switch (e->id) { case OGS_FSM_ENTRY_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_start(nf_instance->t_registration_interval, ogs_app()->time.message.sbi. nf_register_interval_in_exception); + } break; case OGS_FSM_EXIT_SIG: - if (NF_INSTANCE_IS_SELF(nf_instance->id)) + if (NF_INSTANCE_IS_NRF(nf_instance)) { ogs_timer_stop(nf_instance->t_registration_interval); + } break; case AF_EVT_SBI_TIMER: @@ -371,13 +403,16 @@ addr = client->node.addr; ogs_assert(addr); - ogs_warn("%s Retry to registration with NRF", nf_instance->id); + ogs_warn("%s Retry to registration with NRF", + ogs_sbi_self()->nf_instance->id); OGS_FSM_TRAN(s, &af_nf_state_will_register); break; default: - ogs_error("%s Unknown timer%s:%d", nf_instance->id, + ogs_error("%s:%s Unknown timer%s:%d", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", af_timer_get_name(e->timer_id), e->timer_id); break; } @@ -404,8 +439,10 @@ break; default: - ogs_error("%s Unknown event %s", - nf_instance->id, af_event_get_name(e)); + ogs_error("%s:%s Unknown event %s", + OpenAPI_nf_type_ToString(nf_instance->nf_type), + nf_instance->id ? nf_instance->id : "Undefined", + af_event_get_name(e)); break; } }
View file
open5gs_2.4.8.tar.xz/tests/af/nnrf-build.c -> open5gs_2.4.9.tar.xz/tests/af/nnrf-build.c
Changed
@@ -19,18 +19,18 @@ #include "nnrf-build.h" -ogs_sbi_request_t *af_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance) +ogs_sbi_request_t *af_nnrf_nfm_build_register(void) { + ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_message_t message; ogs_sbi_request_t *request = NULL; - ogs_sbi_client_t *client = NULL; OpenAPI_nf_profile_t *NFProfile = NULL; + nf_instance = ogs_sbi_self()->nf_instance; ogs_assert(nf_instance); - client = nf_instance->client; - ogs_assert(client); + ogs_assert(nf_instance->id); memset(&message, 0, sizeof(message)); message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT; @@ -38,11 +38,11 @@ message.h.api.version = (char *)OGS_SBI_API_V1; message.h.resource.component0 = (char *)OGS_SBI_RESOURCE_NAME_NF_INSTANCES; - message.h.resource.component1 = ogs_sbi_self()->nf_instance_id; + message.h.resource.component1 = nf_instance->id; message.http.content_encoding = (char*)ogs_sbi_self()->content_encoding; - NFProfile = ogs_nnrf_nfm_build_nf_profile(nf_instance); + NFProfile = ogs_nnrf_nfm_build_nf_profile(); ogs_expect_or_return_val(NFProfile, NULL); message.NFProfile = NFProfile;
View file
open5gs_2.4.8.tar.xz/tests/af/nnrf-build.h -> open5gs_2.4.9.tar.xz/tests/af/nnrf-build.h
Changed
@@ -26,8 +26,7 @@ extern "C" { #endif -ogs_sbi_request_t *af_nnrf_nfm_build_register( - ogs_sbi_nf_instance_t *nf_instance); +ogs_sbi_request_t *af_nnrf_nfm_build_register(void); #ifdef __cplusplus }
View file
open5gs_2.4.8.tar.xz/tests/af/nnrf-handler.c -> open5gs_2.4.9.tar.xz/tests/af/nnrf-handler.c
Changed
@@ -175,9 +175,10 @@ nf_instance = ogs_sbi_nf_instance_find(message.h.resource.component1); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add( - message.h.resource.component1); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, + message.h.resource.component1); af_nf_fsm_init(nf_instance); @@ -256,16 +257,22 @@ ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { ogs_sbi_object_t *sbi_object = NULL; + OpenAPI_nf_type_e target_nf_type = 0; + ogs_sbi_discovery_option_t *discovery_option = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_lnode_t *node = NULL; bool handled; + ogs_assert(recvmsg); ogs_assert(xact); sbi_object = xact->sbi_object; ogs_assert(sbi_object); - ogs_assert(recvmsg); + target_nf_type = xact->target_nf_type; + ogs_assert(target_nf_type); + + discovery_option = xact->discovery_option; SearchResult = recvmsg->SearchResult; if (!SearchResult) { @@ -282,8 +289,9 @@ nf_instance = ogs_sbi_nf_instance_find(NFProfile->nf_instance_id); if (!nf_instance) { - nf_instance = ogs_sbi_nf_instance_add(NFProfile->nf_instance_id); + nf_instance = ogs_sbi_nf_instance_add(); ogs_assert(nf_instance); + ogs_sbi_nf_instance_set_id(nf_instance, NFProfile->nf_instance_id); af_nf_fsm_init(nf_instance); @@ -299,8 +307,6 @@ } if (NF_INSTANCE_IS_OTHERS(nf_instance->id)) { - af_sess_t *sess = NULL; - handled = ogs_sbi_nnrf_handle_nf_profile( nf_instance, NFProfile, NULL, NULL); if (!handled) { @@ -317,10 +323,6 @@ continue; } - sess = (af_sess_t *)sbi_object; - ogs_assert(sess); - af_sess_select_nf(sess, nf_instance->nf_type); - /* TIME : Update validity from NRF */ if (SearchResult->validity_period) { nf_instance->time.validity_duration = @@ -338,12 +340,7 @@ } } - ogs_assert(xact->target_nf_type); - nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, xact->target_nf_type); - if (!nf_instance) { - ogs_error("(NF discover) No %s", - OpenAPI_nf_type_ToString(xact->target_nf_type)); - } else { - af_sbi_send(nf_instance, xact); - } + ogs_sbi_select_nf(sbi_object, target_nf_type, discovery_option); + + ogs_expect(true == af_sbi_send_request(sbi_object, target_nf_type, xact)); }
View file
open5gs_2.4.8.tar.xz/tests/af/sbi-path.c -> open5gs_2.4.9.tar.xz/tests/af/sbi-path.c
Changed
@@ -35,7 +35,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_request_free(request); af_event_free(e); return OGS_ERROR; } @@ -43,11 +44,18 @@ return OGS_OK; } -static int client_cb(ogs_sbi_response_t *response, void *data) +static int client_cb(int status, ogs_sbi_response_t *response, void *data) { af_event_t *e = NULL; int rv; + if (status != OGS_OK) { + ogs_log_message( + status == OGS_DONE ? OGS_LOG_DEBUG : OGS_LOG_WARN, 0, + "client_cb() failed %d", status); + return OGS_ERROR; + } + ogs_assert(response); e = af_event_new(AF_EVT_SBI_CLIENT); @@ -57,7 +65,8 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed:%d", (int)rv); + ogs_error("ogs_queue_push() failed:%d", (int)rv); + ogs_sbi_response_free(response); af_event_free(e); return OGS_ERROR; } @@ -68,48 +77,55 @@ int af_sbi_open(void) { ogs_sbi_nf_instance_t *nf_instance = NULL; + ogs_sbi_nf_service_t *service = NULL; - if (ogs_sbi_server_start_all(server_cb) != OGS_OK) - return OGS_ERROR; + /* Add SELF NF instance */ + nf_instance = ogs_sbi_self()->nf_instance; + ogs_assert(nf_instance); - /* - * The connection between NF and NRF is a little special. - * - * NF and NRF share nf_instance. I get the NRF EndPoint(client) information - * the configuration file via lib/sbi/context.c. - * And, the NFService information will be transmitted to NRF. - * - * ogs_sbi_self()->nf_instance_id means NF's InstanceId. - */ - ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { - ogs_sbi_nf_service_t *service = NULL; - ogs_sbi_client_t *client = NULL; + /* Build NF instance information. It will be transmitted to NRF. */ + ogs_sbi_nf_instance_build_default(nf_instance, OpenAPI_nf_type_AF); - /* Build NF instance information. It will be transmitted to NRF. */ - ogs_sbi_nf_instance_build_default(nf_instance, af_self()->nf_type); + /* Build NF service information. It will be transmitted to NRF. */ + service = ogs_sbi_nf_service_build_default(nf_instance, + (char*)OGS_SBI_SERVICE_NAME_NAF_EVENTEXPOSURE); + ogs_assert(service); + ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, + (char*)OGS_SBI_API_V1_0_0, NULL); - /* Build NF service information. It will be transmitted to NRF. */ - service = ogs_sbi_nf_service_build_default(nf_instance, - (char*)OGS_SBI_SERVICE_NAME_NAF_EVENTEXPOSURE); - ogs_assert(service); - ogs_sbi_nf_service_add_version(service, (char*)OGS_SBI_API_V1, - (char*)OGS_SBI_API_V1_0_0, NULL); - - /* Client callback is only used when NF sends to NRF */ - client = nf_instance->client; - ogs_assert(client); - client->cb = client_cb; - - /* NFRegister is sent and the response is received - * by the above client callback. */ - af_nf_fsm_init(nf_instance); + /* Initialize NRF NF Instance */ + ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { + if (NF_INSTANCE_IS_NRF(nf_instance)) { + ogs_sbi_client_t *client = NULL; + + /* Client callback is only used when NF sends to NRF */ + client = nf_instance->client; + ogs_assert(client); + client->cb = client_cb; + + /* NFRegister is sent and the response is received + * by the above client callback. */ + af_nf_fsm_init(nf_instance); + } } + /* Timer expiration handler of client wait timer */ + ogs_sbi_self()->client_wait_expire = af_timer_sbi_client_wait_expire; + + /* NF register state in NF state machine */ + ogs_sbi_self()->nf_state_registered = + (ogs_fsm_handler_t)af_nf_state_registered; + + if (ogs_sbi_server_start_all(server_cb) != OGS_OK) + return OGS_ERROR; + + return OGS_OK; } void af_sbi_close(void) { + ogs_sbi_client_stop_all(); ogs_sbi_server_stop_all(); } @@ -122,38 +138,59 @@ client = nf_instance->client; ogs_assert(client); - request = af_nnrf_nfm_build_register(nf_instance); + request = af_nnrf_nfm_build_register(); ogs_expect_or_return_val(request, false); return ogs_sbi_client_send_request( client, client->cb, request, nf_instance); } -void af_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) +bool af_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data) { - ogs_sbi_send(nf_instance, client_cb, xact); + ogs_sbi_nf_instance_t *nf_instance = NULL; + + nf_instance = OGS_SBI_NF_INSTANCE(sbi_object, target_nf_type); + if (!nf_instance) { + ogs_error("(NF discover) No %s", + OpenAPI_nf_type_ToString(target_nf_type)); + return false; + } + + return ogs_sbi_send_request(nf_instance, client_cb, data); } -void af_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - af_sess_t *sess, void *data, - ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data)) +void af_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data), + af_sess_t *sess, void *data) { ogs_sbi_xact_t *xact = NULL; + OpenAPI_nf_type_e requester_nf_type = OpenAPI_nf_type_NULL; + + ogs_assert(ogs_sbi_self()->nf_instance); + requester_nf_type = ogs_sbi_self()->nf_instance->nf_type; + ogs_assert(requester_nf_type); ogs_assert(target_nf_type); ogs_assert(sess); ogs_assert(build); - xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi, - (ogs_sbi_build_f)build, sess, data, - af_timer_sbi_client_wait_expire); + xact = ogs_sbi_xact_add( + &sess->sbi, target_nf_type, discovery_option, + (ogs_sbi_build_f)build, sess, data); if (!xact) { ogs_error("af_sbi_discover_and_send() failed"); return; } - if (ogs_sbi_discover_and_send(xact, - (ogs_fsm_handler_t)af_nf_state_registered, client_cb) != true) { + if (ogs_sbi_discover_and_send( + &sess->sbi, + target_nf_type, requester_nf_type, discovery_option, + client_cb, xact) != true) { ogs_error("af_sbi_discover_and_send() failed"); return; }
View file
open5gs_2.4.8.tar.xz/tests/af/sbi-path.h -> open5gs_2.4.9.tar.xz/tests/af/sbi-path.h
Changed
@@ -33,11 +33,15 @@ bool af_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance); -void af_sbi_send(ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact); - -void af_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type, - af_sess_t *sess, void *data, - ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data)); +bool af_sbi_send_request( + ogs_sbi_object_t *sbi_object, + OpenAPI_nf_type_e target_nf_type, + void *data); +void af_sbi_discover_and_send( + OpenAPI_nf_type_e target_nf_type, + ogs_sbi_discovery_option_t *discovery_option, + ogs_sbi_request_t *(*build)(af_sess_t *sess, void *data), + af_sess_t *sess, void *data); void af_sbi_send_to_pcf( af_sess_t *sess, void *data,
View file
open5gs_2.4.8.tar.xz/tests/af/timer.c -> open5gs_2.4.9.tar.xz/tests/af/timer.c
Changed
@@ -79,7 +79,7 @@ rv = ogs_queue_push(ogs_app()->queue, e); if (rv != OGS_OK) { - ogs_warn("ogs_queue_push() failed %d in %s", + ogs_error("ogs_queue_push() failed %d in %s", (int)rv, af_timer_get_name(e->timer_id)); af_event_free(e); }
View file
open5gs_2.4.8.tar.xz/tests/app/5gc-init.c -> open5gs_2.4.9.tar.xz/tests/app/5gc-init.c
Changed
@@ -20,6 +20,7 @@ #include "test-app.h" static ogs_thread_t *nrf_thread = NULL; +static ogs_thread_t *scp_thread = NULL; static ogs_thread_t *upf_thread = NULL; static ogs_thread_t *smf_thread = NULL; static ogs_thread_t *amf_thread = NULL; @@ -52,6 +53,8 @@ if (ogs_app()->parameter.no_nrf == 0) nrf_thread = test_child_create("nrf", argv_out); + if (ogs_app()->parameter.no_scp == 0) + scp_thread = test_child_create("scp", argv_out); if (ogs_app()->parameter.no_upf == 0) upf_thread = test_child_create("upf", argv_out); @@ -98,6 +101,7 @@ if (udm_thread) ogs_thread_destroy(udm_thread); if (ausf_thread) ogs_thread_destroy(ausf_thread); + if (scp_thread) ogs_thread_destroy(scp_thread); if (nrf_thread) ogs_thread_destroy(nrf_thread); }
View file
open5gs_2.4.8.tar.xz/tests/app/app-init.c -> open5gs_2.4.9.tar.xz/tests/app/app-init.c
Changed
@@ -20,6 +20,7 @@ #include "test-app.h" static ogs_thread_t *nrf_thread = NULL; +static ogs_thread_t *scp_thread = NULL; static ogs_thread_t *pcrf_thread = NULL; static ogs_thread_t *hss_thread = NULL; static ogs_thread_t *upf_thread = NULL; @@ -57,6 +58,8 @@ if (ogs_app()->parameter.no_nrf == 0) nrf_thread = test_child_create("nrf", argv_out); + if (ogs_app()->parameter.no_scp == 0) + scp_thread = test_child_create("scp", argv_out); if (ogs_app()->parameter.no_hss == 0) hss_thread = test_child_create("hss", argv_out); if (ogs_app()->parameter.no_pcrf == 0) @@ -120,6 +123,8 @@ if (hss_thread) ogs_thread_destroy(hss_thread); if (pcrf_thread) ogs_thread_destroy(pcrf_thread); + + if (scp_thread) ogs_thread_destroy(scp_thread); if (nrf_thread) ogs_thread_destroy(nrf_thread); }
View file
open5gs_2.4.8.tar.xz/tests/attach/auth-test.c -> open5gs_2.4.9.tar.xz/tests/attach/auth-test.c
Changed
@@ -315,7 +315,7 @@ /* Send Authentication failure - SYNCH failure */ emmbuf = testemm_build_authentication_failure( - test_ue, EMM_CAUSE_SYNCH_FAILURE, 0x11223344); + test_ue, OGS_NAS_EMM_CAUSE_SYNCH_FAILURE, 0x11223344); ABTS_PTR_NOTNULL(tc, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -329,7 +329,7 @@ /* Send Authentication failure - MAC failure */ emmbuf = testemm_build_authentication_failure( - test_ue, EMM_CAUSE_MAC_FAILURE, 0); + test_ue, OGS_NAS_EMM_CAUSE_MAC_FAILURE, 0); ABTS_PTR_NOTNULL(tc, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -388,7 +388,7 @@ /* Send Authentication failure - MAC failure */ emmbuf = testemm_build_authentication_failure( - test_ue, EMM_CAUSE_MAC_FAILURE, 0); + test_ue, OGS_NAS_EMM_CAUSE_MAC_FAILURE, 0); ABTS_PTR_NOTNULL(tc, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
View file
open5gs_2.4.8.tar.xz/tests/attach/emm-status-test.c -> open5gs_2.4.9.tar.xz/tests/attach/emm-status-test.c
Changed
@@ -150,8 +150,8 @@ tests1ap_recv(test_ue, recvbuf); /* Send EMM Status */ - emmbuf = testemm_build_emm_status( - test_ue, ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE); + emmbuf = testemm_build_emm_status(test_ue, + OGS_NAS_ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE); ABTS_PTR_NOTNULL(tc, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
View file
open5gs_2.4.8.tar.xz/tests/common/emm-build.c -> open5gs_2.4.9.tar.xz/tests/common/emm-build.c
Changed
@@ -342,7 +342,7 @@ authentication_failure->emm_cause = emm_cause; - if (emm_cause == EMM_CAUSE_SYNCH_FAILURE) { + if (emm_cause == OGS_NAS_EMM_CAUSE_SYNCH_FAILURE) { authentication_failure->presencemask |= OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT;
View file
open5gs_2.4.8.tar.xz/tests/common/gmm-build.c -> open5gs_2.4.9.tar.xz/tests/common/gmm-build.c
Changed
@@ -408,7 +408,7 @@ } message.gmm.h.extended_protocol_discriminator = OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; - message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST; + message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE; de_registration_type->ksi = test_ue->nas.ksi; de_registration_type->switch_off = switch_off;
View file
open5gs_2.4.8.tar.xz/tests/common/nas-encoder.c -> open5gs_2.4.9.tar.xz/tests/common/nas-encoder.c
Changed
@@ -44,7 +44,7 @@ encoded += size; switch(message->gmm.h.message_type) { - case OGS_NAS_5GS_DEREGISTRATION_REQUEST: + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE: size = ogs_nas_5gs_encode_deregistration_request_from_ue( pkbuf, message); ogs_assert(size >= 0);
View file
open5gs_2.4.8.tar.xz/tests/common/nas-security.c -> open5gs_2.4.9.tar.xz/tests/common/nas-security.c
Changed
@@ -75,7 +75,7 @@ message->h.extended_protocol_discriminator; h.sequence_number = (test_ue->ul_count & 0xff); - if (message->gmm.h.message_type == OGS_NAS_5GS_DEREGISTRATION_REQUEST) + if (message->gmm.h.message_type == OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE) new = test_nas_5gs_plain_encode(message); else new = ogs_nas_5gs_plain_encode(message);
View file
open5gs_2.4.8.tar.xz/tests/common/sgsap-build.c -> open5gs_2.4.9.tar.xz/tests/common/sgsap-build.c
Changed
@@ -25,7 +25,7 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "0a01089910073746 000006040509f107 09260e05f49ee88e 64", + "0a01089999073746 000006040509f107 09260e05f49ee88e 64", "0a01087942120000 000030040527f412 c9580e05f437ab9c c5", "", @@ -49,7 +49,7 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "0b01089910073746 0000060f01030405 09f1070926", + "0b01089999073746 0000060f01030405 09f1070926", "", "", @@ -73,7 +73,7 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "1401089910073746 000006", + "1401089999073746 000006", "", "", @@ -97,15 +97,15 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "0101089910073746 000006021003766c 72076578616d706c 65036e6574200101" + "0101089999073746 000006021003766c 72076578616d706c 65036e6574200101" "040509f1070926", - "0101089910073746 000005021003766c 72076578616d706c 65036e6574200101" + "0101089999073746 000005021003766c 72076578616d706c 65036e6574200101" "040509f1070926", /* Paging-Reject */ - "0101089910073746 000006021003766c 72076578616d706c 65036e6574200102" + "0101089999073746 000006021003766c 72076578616d706c 65036e6574200102" "040509f1070926", /* Paging-Request with SMS */ /* Paging-Request for crash-test */ - "0101089910073746 000006021003766c 72076578616d706c 65036e6574200101" + "0101089999073746 000006021003766c 72076578616d706c 65036e6574200101" "040527f412c958", "", "", @@ -157,7 +157,7 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "1b01089910073746 000006", + "1b01089999073746 000006", "", "", @@ -181,7 +181,7 @@ { ogs_pkbuf_t *pkbuf = NULL; const char *payloadTEST_SGSAP_MAX_MESSAGE = { - "0701089910073746 0000061626090123 0100079144775810 0650001700048032" + "0701089999073746 0000061626090123 0100079144775810 0650001700048032" "2400009160404044 150009c8329bfd06 4d9b53", };
View file
open5gs_2.4.8.tar.xz/tests/core/tlv-test.c -> open5gs_2.4.9.tar.xz/tests/core/tlv-test.c
Changed
@@ -635,54 +635,53 @@ return; } -#if 0 /* Sample header for tlv_msg */ #define TLV_AUTHORIZATION_POLICY_SUPPORT_TYPE 21 #define TLV_AUTHORIZATION_POLICY_SUPPORT_LEN 1 -typedef tlv_uint8_t tlv_authorization_policy_support_t; -extern tlv_desc_t tlv_desc_authorization_policy_support; +typedef ogs_tlv_uint8_t tlv_authorization_policy_support_t; +extern ogs_tlv_desc_t tlv_desc_authorization_policy_support; #define TLV_CLIENT_SECURITY_HISTORY_TYPE 108 -#define TLV_CLIENT_SECURITY_HISTORY_LEN TLV_VARIABLE_LEN +#define TLV_CLIENT_SECURITY_HISTORY_LEN OGS_TLV_VARIABLE_LEN typedef struct _tlv_client_security_history_t { - tlv_presence_t presence; + ogs_tlv_presence_t presence; tlv_authorization_policy_support_t authorization_policy_support0; tlv_authorization_policy_support_t authorization_policy_support2; } tlv_client_security_history_t; -extern tlv_desc_t tlv_desc_client_security_history; +extern ogs_tlv_desc_t tlv_desc_client_security_history; #define TLV_CLIENT_INFO_TYPE 103 -#define TLV_CLIENT_INFO_LEN TLV_VARIABLE_LEN +#define TLV_CLIENT_INFO_LEN OGS_TLV_VARIABLE_LEN typedef struct _tlv_client_info_t { - tlv_presence_t presence; + ogs_tlv_presence_t presence; tlv_client_security_history_t client_security_history; } tlv_client_info_t; -extern tlv_desc_t tlv_desc_client_info; +extern ogs_tlv_desc_t tlv_desc_client_info; #define TLV_SERVER_NAME_TYPE 25 -#define TLV_SERVER_NAME_LEN TLV_VARIABLE_LEN -typedef tlv_octet_t tlv_server_name_t; -extern tlv_desc_t tlv_desc_server_name; +#define TLV_SERVER_NAME_LEN OGS_TLV_VARIABLE_LEN +typedef ogs_tlv_octet_t tlv_server_name_t; +extern ogs_tlv_desc_t tlv_desc_server_name; #define TLV_SERVER_INFO_TYPE 26 -#define TLV_SERVER_INFO_LEN TLV_VARIABLE_LEN +#define TLV_SERVER_INFO_LEN OGS_TLV_VARIABLE_LEN typedef struct _tlv_server_info_t { - tlv_presence_t presence; - tlv_server_name_t TLV_1_OR_MORE(server_name); + ogs_tlv_presence_t presence; + tlv_server_name_t OGS_TLV_1_OR_MORE(server_name); } tlv_server_info_t; -extern tlv_desc_t tlv_desc_server_info; +extern ogs_tlv_desc_t tlv_desc_server_info; typedef struct _tlv_attach_req { tlv_client_info_t client_info; tlv_server_info_t server_info; } tlv_attach_req; -extern tlv_desc_t tlv_desc_attach_req; +extern ogs_tlv_desc_t tlv_desc_attach_req; /* Sample source for tlv_msg */ -tlv_desc_t tlv_desc_authorization_policy_support0 = +ogs_tlv_desc_t tlv_desc_authorization_policy_support0 = { - TLV_UINT8, + OGS_TLV_UINT8, "Auth Policy0", TLV_AUTHORIZATION_POLICY_SUPPORT_TYPE, TLV_AUTHORIZATION_POLICY_SUPPORT_LEN, @@ -690,9 +689,9 @@ sizeof(tlv_authorization_policy_support_t), { NULL } }; -tlv_desc_t tlv_desc_authorization_policy_support2 = +ogs_tlv_desc_t tlv_desc_authorization_policy_support2 = { - TLV_UINT8, + OGS_TLV_UINT8, "Auth Policy2", TLV_AUTHORIZATION_POLICY_SUPPORT_TYPE, TLV_AUTHORIZATION_POLICY_SUPPORT_LEN, @@ -701,9 +700,9 @@ { NULL } }; -tlv_desc_t tlv_desc_client_security_history = +ogs_tlv_desc_t tlv_desc_client_security_history = { - TLV_COMPOUND, + OGS_TLV_COMPOUND, "Sec History", TLV_CLIENT_SECURITY_HISTORY_TYPE, TLV_CLIENT_SECURITY_HISTORY_LEN, @@ -716,9 +715,9 @@ } }; -tlv_desc_t tlv_desc_client_info = +ogs_tlv_desc_t tlv_desc_client_info = { - TLV_COMPOUND, + OGS_TLV_COMPOUND, "Client Info", TLV_CLIENT_INFO_TYPE, TLV_CLIENT_INFO_LEN, @@ -730,9 +729,9 @@ } }; -tlv_desc_t tlv_desc_server_name = +ogs_tlv_desc_t tlv_desc_server_name = { - TLV_VAR_STR, + OGS_TLV_VAR_STR, "Server Name", TLV_SERVER_NAME_TYPE, TLV_SERVER_NAME_LEN, @@ -741,22 +740,22 @@ { NULL } }; -tlv_desc_t tlv_desc_server_info = +ogs_tlv_desc_t tlv_desc_server_info = { - TLV_COMPOUND, + OGS_TLV_COMPOUND, "Server Info", TLV_SERVER_INFO_TYPE, TLV_SERVER_INFO_LEN, 0, sizeof(tlv_server_info_t), { - &tlv_desc_server_name, &tlv_desc_more2, + &tlv_desc_server_name, &ogs_tlv_desc_more16, NULL, } }; -tlv_desc_t tlv_desc_attach_req = { - TLV_MESSAGE, "Attach Req", 0, 0, 0, 0, { +ogs_tlv_desc_t tlv_desc_attach_req = { + OGS_TLV_MESSAGE, "Attach Req", 0, 0, 0, 0, { &tlv_desc_client_info, &tlv_desc_server_info, NULL, @@ -767,9 +766,11 @@ tlv_attach_req reqv; tlv_attach_req reqv2; - pkbuf_t *req = NULL; + ogs_pkbuf_t *req = NULL; char testbuf1024; + int i; + /* Initialize message value structure */ memset(&reqv, 0, sizeof(tlv_attach_req)); @@ -786,34 +787,44 @@ authorization_policy_support2.u8 = 0x9; reqv.server_info.presence = 1; - reqv.server_info.server_name0.presence = 1; - reqv.server_info.server_name0.data = - (uint8_t*)"\x11\x22\x33\x44\x55\x66"; - reqv.server_info.server_name0.len = 6; - - reqv.server_info.presence = 1; - reqv.server_info.server_name1.presence = 1; - reqv.server_info.server_name1.data = - (uint8_t*)"\xaa\xbb\xcc\xdd\xee\xff"; - reqv.server_info.server_name1.len = 6; + for (i = 0; i < 16; i++) { + reqv.server_info.server_namei.presence = 1; + reqv.server_info.server_namei.data = + (uint8_t*)"\x11\x22\x33\x44\x55\x66"; + reqv.server_info.server_namei.len = 6; + + req = ogs_tlv_build_msg( + &tlv_desc_attach_req, &reqv, OGS_TLV_MODE_T1_L2_I1); + ABTS_INT_EQUAL(tc, 32+i*10, req->len); + ogs_pkbuf_free(req); + } /* Build message */ - tlv_build_msg(&req, &tlv_desc_attach_req, &reqv, OGS_TLV_MODE_T1_L2_I1); + req = ogs_tlv_build_msg(&tlv_desc_attach_req, &reqv, OGS_TLV_MODE_T1_L2_I1); #define TEST_TLV_BUILD_MSG \ "67000e00 6c000a00 15000100 03150001" \ - "02091a00 14001900 06001122 33445566" \ - "19000600 aabbccdd eeff" - - ABTS_INT_EQUAL(tc, 42, req->len); - ABTS_TRUE(tc, memcmp(req->payload, - CORE_HEX(TEST_TLV_BUILD_MSG, strlen(TEST_TLV_BUILD_MSG), testbuf), + "02091a00 a0001900 06001122 33445566" \ + "19000600 11223344 55661900 06001122" \ + "33445566 19000600 11223344 55661900" \ + "06001122 33445566 19000600 11223344" \ + "55661900 06001122 33445566 19000600" \ + "11223344 55661900 06001122 33445566" \ + "19000600 11223344 55661900 06001122" \ + "33445566 19000600 11223344 55661900" \ + "06001122 33445566 19000600 11223344" \ + "55661900 06001122 33445566 19000600" \ + "11223344 5566" + + ABTS_INT_EQUAL(tc, 182, req->len); + ABTS_TRUE(tc, memcmp(req->data, + OGS_HEX(TEST_TLV_BUILD_MSG, strlen(TEST_TLV_BUILD_MSG), testbuf), req->len) == 0); /* Initialize message value structure */ memset(&reqv2, 0, sizeof(tlv_attach_req)); /* Parse message */ - tlv_parse_msg(&reqv2, &tlv_desc_attach_req, req, + ogs_tlv_parse_msg(&reqv2, &tlv_desc_attach_req, req, OGS_TLV_MODE_T1_L2_I1); ABTS_INT_EQUAL(tc, 1, reqv2.client_info.presence); @@ -830,19 +841,16 @@ ABTS_INT_EQUAL(tc, 0x9, reqv2.client_info. client_security_history.authorization_policy_support2.u8); - ABTS_INT_EQUAL(tc, 1, reqv2.server_info.presence); - ABTS_INT_EQUAL(tc, 1, reqv2.server_info.server_name0.presence); - ABTS_INT_EQUAL(tc, 1, reqv2.server_info.server_name1.presence); - ABTS_INT_EQUAL(tc, 6, reqv2.server_info.server_name0.len); - ABTS_TRUE(tc, memcmp(reqv2.server_info.server_name0.data, - (uint8_t*)"\x11\x22\x33\x44\x55\x66", 6) == 0); - ABTS_INT_EQUAL(tc, 6, reqv2.server_info.server_name1.len); - ABTS_TRUE(tc, memcmp(reqv2.server_info.server_name1.data, - (uint8_t*)"\xaa\xbb\xcc\xdd\xee\xff", 6) == 0); + for (i = 0; i < 16; i++) { + ABTS_INT_EQUAL(tc, 1, reqv2.server_info.presence); + ABTS_INT_EQUAL(tc, 1, reqv2.server_info.server_namei.presence); + ABTS_INT_EQUAL(tc, 6, reqv2.server_info.server_namei.len); + ABTS_TRUE(tc, memcmp(reqv2.server_info.server_namei.data, + (uint8_t*)"\x11\x22\x33\x44\x55\x66", 6) == 0); + } - pkbuf_free(req); + ogs_pkbuf_free(req); } -#endif abts_suite *test_tlv(abts_suite *suite) { @@ -866,9 +874,7 @@ abts_run_test(suite, test4_func, (void*)OGS_TLV_MODE_T1_L2_I1); abts_run_test(suite, test5_func, (void*)OGS_TLV_MODE_T1_L2_I1); -#if 0 abts_run_test(suite, test6_func, NULL); -#endif return suite; }
View file
open5gs_2.4.8.tar.xz/tests/registration/reset-test.c -> open5gs_2.4.9.tar.xz/tests/registration/reset-test.c
Changed
@@ -676,14 +676,6 @@ gmmbuf = testgmm_build_registration_request(test_ue, NULL, false, false); ABTS_PTR_NOTNULL(tc, gmmbuf); - test_ue->registration_request_param.gmm_capability = 1; - test_ue->registration_request_param.s1_ue_network_capability = 1; - test_ue->registration_request_param.requested_nssai = 1; - test_ue->registration_request_param.last_visited_registered_tai = 1; - test_ue->registration_request_param.ue_usage_setting = 1; - nasbuf = testgmm_build_registration_request(test_ue, NULL, false, false); - ABTS_PTR_NOTNULL(tc, nasbuf); - sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, NGAP_RRCEstablishmentCause_mo_Signalling, false, true); ABTS_PTR_NOTNULL(tc, sendbuf);
View file
open5gs_2.4.8.tar.xz/tests/unit/crash-test.c -> open5gs_2.4.9.tar.xz/tests/unit/crash-test.c
Changed
@@ -519,7 +519,7 @@ EUTRAN_CGI = &ie->value.choice.EUTRAN_CGI; - ogs_plmn_id_build(&plmn_id, 901, 70, 2); + ogs_plmn_id_build(&plmn_id, 999, 70, 2); ogs_s1ap_buffer_to_OCTET_STRING( &plmn_id, OGS_PLMN_ID_LEN, &EUTRAN_CGI->pLMNidentity);
View file
open5gs_2.4.8.tar.xz/tests/unit/nas-message-test.c -> open5gs_2.4.9.tar.xz/tests/unit/nas-message-test.c
Changed
@@ -175,7 +175,7 @@ memset(&message, 0, sizeof(message)); message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.emm.h.message_type = OGS_NAS_EPS_ATTACH_REJECT; - attach_reject->emm_cause = EMM_CAUSE_NETWORK_FAILURE; + attach_reject->emm_cause = OGS_NAS_EMM_CAUSE_NETWORK_FAILURE; pkbuf = ogs_nas_eps_plain_encode(&message); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len);
View file
open5gs_2.4.8.tar.xz/tests/volte/diameter-rx-path.c -> open5gs_2.4.9.tar.xz/tests/volte/diameter-rx-path.c
Changed
@@ -1269,7 +1269,7 @@ ogs_assert(sess->ue_ip.ipv4); ipstr = ogs_ipv4_to_string(sess->ue_ip.addr); ogs_assert(ipstr); - sip_uri = ogs_msprintf("sip:%s@ims.mnc0970.mcc901.3gppnetwork.org", ipstr); + sip_uri = ogs_msprintf("sip:%s@ims.mnc0970.mcc999.3gppnetwork.org", ipstr); ogs_assert(sip_uri); rv = ogs_ipsubnet(&ipsub, ipstr, NULL);
View file
open5gs_2.4.8.tar.xz/tests/volte/rx-test.c -> open5gs_2.4.9.tar.xz/tests/volte/rx-test.c
Changed
@@ -430,7 +430,7 @@ sess->pti = 10; esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
View file
open5gs_2.4.8.tar.xz/tests/volte/video-test.c -> open5gs_2.4.9.tar.xz/tests/volte/video-test.c
Changed
@@ -347,7 +347,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -509,7 +509,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -671,7 +671,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -833,7 +833,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -995,7 +995,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -1157,7 +1157,7 @@ ogs_assert(bearer); esmbuf = testesm_build_bearer_resource_modification_request( bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, - ESM_CAUSE_REGULAR_DEACTIVATION); + OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); ABTS_PTR_NOTNULL(tc, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.