diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f083ab24c..bef6278246 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,25 @@ set (OPENAIR_DIR ${CMAKE_SOURCE_DIR}) include("cmake_targets/macros.cmake") +############################## +### CCache: reduce compilation time +############################## +#use ccache if available +option(CCACHE_ACTIVE "CCache" ON) +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND AND CCACHE_ACTIVE) + if(${CMAKE_VERSION} VERSION_LESS "3.4.0") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") + message(STATUS "Found ccache in ${CCACHE_FOUND}. Using ccache. CMake < 3.4") + else() + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_FOUND}") + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_FOUND}") + message(STATUS "Found ccache in ${CCACHE_FOUND}. Using ccache. CMake >= 3.4") + endif() +else() + message(STATUS "Ccache not found. Consider installing it for faster compilation. Command: sudo apt/dnf install ccache") +endif() + # System packages that are required # We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/ # or cmake provide a generic interface to pkg-config that widely used @@ -170,6 +189,18 @@ if (SANITIZE_UNDEFINED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all") endif () +add_boolean_option(SANITIZE_MEMORY False "enable the memory sanitizer (MSan, requires clang, incompatible with ASan/UBSan)" ON) +if(SANITIZE_MEMORY) + if (SANITIZE_UNDEFINED OR SANITIZE_ADDRESS) + message(FATAL_ERROR "memory sanitizer cannot coexist with address sanitizer or undefined behavior sanitizer, please disable either MSan or ASan and UBSan") + endif() + if (NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" OR NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) + message(FATAL_ERROR "memory sanitizer requires clang, please set clang using CC=/usr/bin/clang CXX=/usr/bin/clang++ ./build_oai ...") + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fsanitize-recover=memory") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fsanitize-recover=memory") +endif() + add_definitions("-DASN_DISABLE_OER_SUPPORT -DHAVE_CONFIG_H -DHAVE_CONFIG_H_") ######################### @@ -388,7 +419,6 @@ add_library(x2ap target_link_libraries(x2ap PUBLIC asn1_x2ap) target_link_libraries(x2ap PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) - # F1AP ############## set(F1AP_DIR ${OPENAIR2_DIR}/F1AP) @@ -578,6 +608,15 @@ include_directories("${OPENAIR_DIR}") # Utilities ############### +# include T directory even if the T is off because T macros are in the code +# no matter what. Note: sone files are generated, so we have both source and +# binary directories +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common/utils/T + ${CMAKE_CURRENT_BINARY_DIR}/common/utils/T) + +# set the T_LIB name to T if the target exists, otherwise leave empty +set(T_LIB $) + add_library(HASHTABLE ${OPENAIR_DIR}/common/utils/hashtable/hashtable.c ${OPENAIR_DIR}/common/utils/hashtable/obj_hashtable.c @@ -595,6 +634,7 @@ add_library(UTIL ${OPENAIR_DIR}/common/utils/time_meas.c ${OPENAIR_DIR}/common/utils/time_stat.c ) +target_link_libraries(UTIL PUBLIC ${T_LIB}) set(SECURITY_SRC ${OPENAIR3_DIR}/SECU/secu_defs.c @@ -1127,8 +1167,6 @@ set(PHY_MEX_UE ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c ${OPENAIR_DIR}/common/utils/LOG/log.c - ${OPENAIR_DIR}/common/utils/T/T.c - ${OPENAIR_DIR}/common/utils/T/local_tracer.c ) add_library(PHY_MEX ${PHY_MEX_UE}) target_link_libraries(PHY_MEX PRIVATE asn1_lte_rrc_hdrs) @@ -1882,51 +1920,12 @@ add_library(oai_iqplayer MODULE ) set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}") -#include T directory even if the T is off because T macros are in the code -#no matter what -include_directories("${OPENAIR_DIR}/common/utils/T") - -if (${T_TRACER}) - set(T_SOURCE - ${OPENAIR_DIR}/common/utils/T/T_IDs.h - ${OPENAIR_DIR}/common/utils/T/T.c - ${OPENAIR_DIR}/common/utils/T/local_tracer.c) - set(T_LIB "rt") -endif (${T_TRACER}) - -#Some files in the T directory are generated. -#This rule and the following deal with it. -add_custom_command ( - OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h - COMMAND make check_vcd - WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T - DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt - ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c - ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.h - ) - -execute_process ( - COMMAND make check_vcd - WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T -) -#This rule is specifically needed to generate T files -#before anything else in a project that uses the T. -#See below, there are some 'add_dependencies' showing that. -#Basically we create a custom target and we make other -#targets depend on it. That forces cmake to generate -#T files before anything else. -add_custom_target ( - generate_T - DEPENDS ${OPENAIR_DIR}/common/utils/T/T_IDs.h -) - ################################# # add executables for operation ################################# add_library(minimal_lib ${OPENAIR_DIR}/common/utils/LOG/log.c ${OPENAIR_DIR}/common/utils/minimal_stub.c - ${T_SOURCE} ) target_link_libraries(minimal_lib pthread dl ${T_LIB}) @@ -1965,7 +1964,6 @@ add_executable(lte-softmodem ${OPENAIR_DIR}/common/utils/lte/ue_power.c ${OPENAIR_DIR}/common/utils/lte/prach_utils.c ${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c - ${T_SOURCE} ) add_dependencies(lte-softmodem oai_iqplayer) @@ -1992,7 +1990,6 @@ add_executable(oairu ${OPENAIR_DIR}/executables/softmodem-common.c ${OPENAIR_DIR}/openair1/SCHED/phy_procedures_lte_common.c ${OPENAIR_DIR}/executables/main_ru.c - ${T_SOURCE} ${OPENAIR_DIR}/common/utils/lte/prach_utils.c ) target_link_libraries(oairu PRIVATE @@ -2024,7 +2021,6 @@ add_executable(lte-uesoftmodem ${OPENAIR_DIR}/common/utils/lte/ue_power.c ${OPENAIR_DIR}/common/utils/lte/prach_utils.c ${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c - ${T_SOURCE} ) if (NOT ${NOS1}) @@ -2067,7 +2063,6 @@ add_executable(nr-softmodem ${OPENAIR_DIR}/common/utils/nr/nr_common.c ${PHY_INTERFACE_DIR}/queue_t.c ${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c - ${T_SOURCE} ) target_link_libraries(nr-softmodem PRIVATE @@ -2104,13 +2099,12 @@ add_executable(nr-cuup ${OPENAIR2_DIR}/E1AP/e1ap_setup.c ${NR_PDCP_SRC} ${NR_SDAP_SRC} - ${T_SOURCE} ) target_link_libraries(nr-cuup PRIVATE CONFIG_LIB ITTI SCTP_CLIENT GTPV1U e1ap e1_pdcp_if f1ap SIMU_ETH - z sctp dl pthread shlib_loader) + z sctp dl pthread shlib_loader ${T_LIB}) target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) # nr-uesoftmodem is UE implementation @@ -2131,7 +2125,6 @@ add_executable(nr-uesoftmodem ${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c ${OPENAIR1_DIR}/PHY/TOOLS/phy_scope_interface.c - ${T_SOURCE} ) target_link_libraries(nr-uesoftmodem PRIVATE @@ -2168,7 +2161,6 @@ target_link_libraries(nr-uesoftmodem PRIVATE add_executable(dlsim_tm4 ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/dlsim_tm4.c ${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope_tm4.c - ${T_SOURCE} ) target_link_libraries (dlsim_tm4 -Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY ITTI -Wl,--end-group @@ -2187,29 +2179,26 @@ target_link_libraries(rftest PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) add_executable(polartest ${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/polartest.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(polartest PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE CONFIG_LIB -Wl,--end-group - m pthread dl + m pthread dl ${T_LIB} ) add_executable(smallblocktest ${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/smallblocktest.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(smallblocktest PRIVATE -Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON -Wl,--end-group - m pthread dl shlib_loader + m pthread dl shlib_loader ${T_LIB} ) add_executable(ldpctest ${PHY_NR_CODINGIF} ${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/ldpctest.c - ${T_SOURCE} ) add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc ldpc_parityCheck) @@ -2218,14 +2207,13 @@ if (ENABLE_LDPC_CUDA) endif() target_link_libraries(ldpctest PRIVATE -Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON -Wl,--end-group - m pthread dl shlib_loader + m pthread dl shlib_loader ${T_LIB} ) add_executable(nr_dlschsim ${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(nr_dlschsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group @@ -2237,7 +2225,6 @@ add_executable(nr_pbchsim ${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(nr_pbchsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group @@ -2251,7 +2238,6 @@ add_executable(nr_pucchsim ${OPENAIR1_DIR}/SIMULATION/NR_PHY/pucchsim.c ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(nr_pucchsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group @@ -2269,7 +2255,6 @@ add_executable(nr_dlsim ${NFAPI_USER_DIR}/nfapi.c ${NFAPI_USER_DIR}/gnb_ind_vars.c ${PHY_INTERFACE_DIR}/queue_t.c - ${T_SOURCE} ) target_link_libraries(nr_dlsim PRIVATE -Wl,--start-group UTIL SIMU SIMU_ETH PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON nr_rrc CONFIG_LIB L2_NR HASHTABLE x2ap SECURITY ngap -lz -Wl,--end-group @@ -2281,7 +2266,6 @@ add_executable(nr_prachsim ${OPENAIR1_DIR}/SIMULATION/NR_PHY/prachsim.c ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c - ${T_SOURCE} ) target_link_libraries(nr_prachsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB CONFIG_LIB -lz -Wl,--end-group @@ -2293,7 +2277,6 @@ add_executable(nr_ulschsim ${OPENAIR1_DIR}/SIMULATION/NR_PHY/nr_dummy_functions.c ${OPENAIR_DIR}/common/utils/nr/nr_common.c ${PHY_INTERFACE_DIR}/queue_t.c - ${T_SOURCE} ) target_link_libraries(nr_ulschsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group @@ -2311,7 +2294,6 @@ add_executable(nr_ulsim ${NFAPI_USER_DIR}/nfapi.c ${NFAPI_USER_DIR}/gnb_ind_vars.c ${PHY_INTERFACE_DIR}/queue_t.c - ${T_SOURCE} ) if (ENABLE_LDPC_T1) @@ -2331,7 +2313,6 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr ${OPENAIR_DIR}/common/utils/lte/ue_power.c ${OPENAIR_DIR}/common/utils/lte/prach_utils.c ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c - ${T_SOURCE} ${NFAPI_USER_DIR}/nfapi.c ) target_link_libraries (${myExe} PRIVATE @@ -2380,6 +2361,7 @@ if (${T_TRACER}) oai_eth_transpro oai_mobipass coding HASHTABLE UTIL OMG_SUMO SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB + MISC_NFAPI_LTE_LIB MISC_NFAPI_NR_LIB PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_NR MAC_UE_NR ngap CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU SIMU_ETH OPENAIR0_LIB diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index d81522a9b3..cb66d4f862 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -155,6 +155,10 @@ Options: Enable the address sanitizer on all targets --sanitize-undefined | -fsanitize=undefined Enable the undefined behavior sanitizer on all targets +--sanitize-memory | -fsanitize=memory + Enable the memory sanitizer on all targets. Requires clang, and is + incompatible with ASan/UBSan. To build, issue: + CC=/usr/bin/clang CXX=/usr/bin/clang++ ./build_oai ... --sanitize-memory -h | --help Print this help" } @@ -269,11 +273,16 @@ function main() { shift;; -w | --hardware) case "$2" in - "USRP" | "BLADERF" | "LMSSDR" | "IRIS" | "SIMU") + "USRP" | "BLADERF" | "LMSSDR" | "IRIS") HW="OAI_"$2 TARGET_LIST="$TARGET_LIST oai_${2,,}devif" # ,, makes lowercase CMAKE_CMD="$CMAKE_CMD -DOAI_$2=ON" ;; + "SIMU") + HW="OAI_"$2 + TARGET_LIST="$TARGET_LIST rfsimulator" + CMAKE_CMD="$CMAKE_CMD -DOAI_$2=ON" + ;; "AW2SORI") HW="OAI_"$2 TARGET_LIST="$TARGET_LIST aw2sori_transpro" @@ -402,6 +411,11 @@ function main() { --sanitize-undefined | -fundefined=address) CMAKE_CMD="$CMAKE_CMD -DSANITIZE_UNDEFINED=True" shift;; + --sanitize-memory | -fsanitize=memory) + echo_warning "Note: memory sanitizer\n* requires clang (tested: v17)\n* is incompatible with address/undefined behavior sanitizer\n* requires cmake_targets/tools/memsan.patch" + sleep 2 + CMAKE_CMD="$CMAKE_CMD -DSANITIZE_MEMORY=ON -DSANITIZE_ADDRESS=OFF -DSANITIZE_UNDEFINED=OFF" + shift;; -h | --help) print_help exit 1;; diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index d12c63486b..88f84538ef 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -103,6 +103,7 @@ get_distribution_release() { check_supported_distribution() { local distribution=$(get_distribution_release) case "$distribution" in + "ubuntu23.10") return 0 ;; "ubuntu22.04") return 0 ;; "ubuntu21.04") return 0 ;; "ubuntu20.04") return 0 ;; @@ -618,6 +619,7 @@ check_install_oai_software() { libsctp-dev \ libssl-dev \ libtool \ + libxft-dev \ patch \ openssl \ zlib1g-dev \ @@ -647,6 +649,7 @@ check_install_oai_software() { lksctp-tools \ lksctp-tools-devel \ libtool \ + libXft-devel \ ninja-build \ make \ openssl \ diff --git a/cmake_targets/tools/memsan.patch b/cmake_targets/tools/memsan.patch new file mode 100644 index 0000000000..a8b8e9f992 --- /dev/null +++ b/cmake_targets/tools/memsan.patch @@ -0,0 +1,53 @@ +commit bf7f0c4f0f1bfce586667b50050640b67a7a747a +Author: Robert Schmidt +Date: Wed Jun 7 18:24:50 2023 +0200 + + Fix dlopen() linker errors in dfts, ldpc, ldpc_parityCheck, and params_libconfig + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c29105d503..3b9e7d1246 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -508,7 +508,7 @@ add_library(CONFIG_LIB + ) + target_link_libraries(CONFIG_LIB PRIVATE dl UTIL) + add_library(params_libconfig MODULE ${CONFIG_ROOTDIR}/libconfig/config_libconfig.c) +-target_link_libraries(params_libconfig config) ++target_link_libraries(params_libconfig config CONFIG_LIB minimal_lib) + # shared library loader + set (SHLIB_LOADER_SOURCES + ${OPENAIR_DIR}/common/utils/load_module_shlib.c +@@ -1018,16 +1018,19 @@ if (ENABLE_LDPC_CUDA) + endif() + endif() + +-add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} ) ++add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} ${OPENAIR1_DIR}/PHY/CODING/crc_byte.c) + target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS) ++target_link_libraries(ldpc PRIVATE UTIL) + + add_library(ldpc_parityCheck MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} ) + target_compile_definitions(ldpc_parityCheck PUBLIC NR_LDPC_ENABLE_PARITY_CHECK) + target_link_libraries(ldpc_parityCheck PRIVATE ldpc_gen_HEADERS) ++target_link_libraries(ldpc_parityCheck PRIVATE UTIL minimal_lib) + + add_library(coding MODULE ${PHY_TURBOSRC} ) + + add_library(dfts MODULE ${OPENAIR1_DIR}/PHY/TOOLS/oai_dfts.c ) ++target_link_libraries(dfts PRIVATE minimal_lib) + + + set(PHY_SRC_COMMON +diff --git a/common/utils/minimal_stub.c b/common/utils/minimal_stub.c +index be9c1b399d..7ad0df4d56 100644 +--- a/common/utils/minimal_stub.c ++++ b/common/utils/minimal_stub.c +@@ -1,6 +1,8 @@ ++#include + #ifndef T_TRACER + int T_stdout; + #endif ++int oai_exit = 0; + + void exit_function(const char *file, const char *function, const int line, const char *s, const int assert) + { diff --git a/common/utils/CMakeLists.txt b/common/utils/CMakeLists.txt index 2acf78c9c2..8d5989be38 100644 --- a/common/utils/CMakeLists.txt +++ b/common/utils/CMakeLists.txt @@ -8,3 +8,4 @@ if(ENABLE_WEBSRV) add_subdirectory(websrv) endif() +add_subdirectory(T) diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 499d29546e..ccd97f9779 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -51,7 +51,6 @@ #define _GNU_SOURCE #endif #include -#include "T.h" #include /*----------------------------------------------------------------------------*/ #include @@ -414,6 +413,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int #define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */ # if T_TRACER +#include "T.h" /* per component, level dependent macros */ # define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} } while (0) # define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} } while (0) diff --git a/common/utils/T/CMakeLists.txt b/common/utils/T/CMakeLists.txt new file mode 100644 index 0000000000..19aed0440e --- /dev/null +++ b/common/utils/T/CMakeLists.txt @@ -0,0 +1,50 @@ +add_executable(genids genids.c) +set_target_properties(genids PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) + +add_custom_command(OUTPUT T_IDs.h + COMMAND ./genids ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt T_IDs.h + DEPENDS genids + COMMENT "Generating T_IDs.h from T_messages.txt" +) +add_custom_command(OUTPUT T_messages.txt.h + COMMAND xxd -i T_messages.txt ${CMAKE_CURRENT_BINARY_DIR}/T_messages.txt.h + COMMENT "Generating T_messages.txt.h from T_messages.txt" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_executable(_check_vcd check_vcd.c tracer/database.c tracer/utils.c T_IDs.h T_messages.txt.h) +target_include_directories(_check_vcd PRIVATE + .. ../itti ../../../openair2/COMMON tracer + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +target_compile_options(_check_vcd PRIVATE -Wall) +target_link_libraries(_check_vcd PRIVATE m pthread) +set_target_properties(_check_vcd PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) + +add_custom_target(check_vcd + COMMAND _check_vcd ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt ${CMAKE_CURRENT_SOURCE_DIR}/../LOG/vcd_signal_dumper.h + DEPENDS _check_vcd + COMMENT "Checking validity of VCD files" +) + +# This rule is specifically needed to generate T files before anything else in +# a project that uses the T. +# See root CMakeLists.txt, there are some 'add_dependencies' showing that. +# Basically we create a custom target and we make other targets depend on it. +# That forces cmake to generate T files before anything else. +add_custom_target(generate_T DEPENDS T_IDs.h check_vcd) + +# even if T is off, we need the headers as many targets depend on it +# for this, create an INTERFACE (header-only) library T_headers. To ensure the +# headers have really been created, we make this headers library explicitly +# depend on the generated headers. +add_library(T_headers INTERFACE) +add_dependencies(T_headers T_IDs.h T_messages.txt.h) +target_include_directories(T_headers INTERFACE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) + +if(T_TRACER) + add_library(T STATIC T.c local_tracer.c T_IDs.h T_messages.txt.h) + target_link_libraries(T PUBLIC rt) + target_link_libraries(T PRIVATE CONFIG_LIB T_headers) + + add_subdirectory(tracer) +endif() diff --git a/common/utils/T/DOC/T.md b/common/utils/T/DOC/T.md new file mode 100644 index 0000000000..e1ba0bae34 --- /dev/null +++ b/common/utils/T/DOC/T.md @@ -0,0 +1,20 @@ +# T tracer + +The T tracer is sort of a *framework* to debug and monitor the softmodem. + +It is made of two main parts: + +* an events' collector integrated to the real-time processing, +* a separate set of programs to receive, record, display, replay and + analyse the events sent by the collector. + +## Documentation + +* [Basic usage](./T/basic.md) +* [Record](./T/record.md) +* [Replay](./T/replay.md) +* [Multiple tracers](./T/multi.md) +* [MAC PDUs and wireshark](./T/wireshark.md) +* [The *enb* tracer](./T/enb.md) +* [The *to_vcd* tracer](./T/to_vcd.md) +* [Tutorial: how to create a new trace](./T/howto_new_trace.md) diff --git a/common/utils/T/DOC/T/basic.md b/common/utils/T/DOC/T/basic.md new file mode 100644 index 0000000000..6bac0c5801 --- /dev/null +++ b/common/utils/T/DOC/T/basic.md @@ -0,0 +1,90 @@ +# Basic usage of the T + +## Compilation + +### softmodem side + +Simply call `build_oai` the usual way, for example `./build_oai --eNB -w USRP`. +The T tracer is compiled in by default. + +### tracer side + +Go to the directory `common/utils/T/tracer` and do `make`. This will locally +compile all tracer executables, and place them in `common/utils/T/tracer`. If +you wish to keep source and build separate, go to your existing build directory +(typically `cmake_targets/ran_build/build`), and do `make T_tools` (or `ninja +T_tools`). After that, the executables will be in +`/common/utils/T/tracer`. + +In case of failure with one of the following errors: + +```shell +/usr/bin/ld: cannot find -lXft +``` +or +```shell +-- Checking for module 'xft' +-- No package 'xft' found +CMake Error at /usr/share/cmake-3.16/Modules/FindPkgConfig.cmake:463 (message): + A required package was not found +``` +Run: + +```shell +sudo apt-get install libxft-dev +``` + +## Run the softmodem + +Run the softmodem with the option `--T_stdout 2` and it will wait for a +tracer to connect to it before processing. (This option is confusing +and may change in the future.) + +```shell +cd cmake_targets/ran_build/build +sudo ./lte-softmodem -O [configuration file] --T_stdout 2 +``` + +Additional options can be passed to the softmodem. + +The option `--T_nowait` lets the processing start immediately without +first waiting for a tracer. + +The option `--T_port [port]` changes the default port used by the +softmodem to wait for a tracer. The default port is 2021. + +The option `--T_dont_fork` allows one to use gdb to debug problems +with the softmodem. Note that you then may have some "zombie" +processes after crashes, in which case you can run +`sudo killall -9 lte-softmodem` to get rid of them (`lte-softmodem` +to be replaced by the program you trace, like `lte-softmodem-nos1` +or `oaisim`). + +The option `--T_stdout` also accepts values 0 (to disable output +on the terminal and only use the T tracer) and 1 (to disable +the T tracer and only output on the terminal). The default is +1. + +## Run a tracer + +Go into the directory `common/utils/T/tracer` (or +`cmake_targets/ran_build/build/common/utils/T/tracer`) and run for example the +`enb` tracer: + +```shell +./enb -d ../T_messages.txt +``` + +To trace a remote program, use the `-ip` option. For example, +if you want to trace a program running on `192.168.12.148` do: + +```shell +./enb -d ../T_messages.txt -ip 192.168.12.148 +``` + +A graphical user interface will appear with which you can interact to +control the monitoring. See [there](./enb.md) for more documentation +about the `enb` tracer. + +It is possible to run several tracers at the same time. See +[here](./multi.md). diff --git a/common/utils/T/DOC/T/enb.md b/common/utils/T/DOC/T/enb.md new file mode 100644 index 0000000000..5d78503bfd --- /dev/null +++ b/common/utils/T/DOC/T/enb.md @@ -0,0 +1,3 @@ + +![enb_trace](./enb_trace.png) +[source file of this image](./enb_trace.odp) diff --git a/common/utils/T/DOC/T/enb_trace.odp b/common/utils/T/DOC/T/enb_trace.odp new file mode 100644 index 0000000000..0bfa2e8069 Binary files /dev/null and b/common/utils/T/DOC/T/enb_trace.odp differ diff --git a/common/utils/T/DOC/T/enb_trace.png b/common/utils/T/DOC/T/enb_trace.png new file mode 100644 index 0000000000..338f3e7210 Binary files /dev/null and b/common/utils/T/DOC/T/enb_trace.png differ diff --git a/common/utils/T/DOC/T/example.raw b/common/utils/T/DOC/T/example.raw new file mode 100644 index 0000000000..2273e3d0d6 Binary files /dev/null and b/common/utils/T/DOC/T/example.raw differ diff --git a/common/utils/T/DOC/T/howto_new_trace.md b/common/utils/T/DOC/T/howto_new_trace.md new file mode 100644 index 0000000000..b8dafb4c49 --- /dev/null +++ b/common/utils/T/DOC/T/howto_new_trace.md @@ -0,0 +1,95 @@ +# T tracer - a simple tutorial + +There is a diff file with all modifications: +[howto_new_trace.patch](./howto_new_trace.patch). +We use tag 2023.w28 +To use the patch, clone the repository, +then in the top directory of openairinterface: +``` +git checkout 2023.w28 +patch -p1 < common/utils/T/DOC/T/howto_new_trace.patch +``` + +Then compile nr-softmodem as usual. + +## 1 - create a new trace + +As an example, let's add a new trace to dump LDPC decoding success. + +In the file `common/utils/T/T_messages.txt` +we add those two lines: + +``` +ID = LDPC_OK + FORMAT = int,segment : int,nb_segments : int,offset : buffer,data +``` + +- You create an ID for the new trace. +- You give the format as a list of variables with there types. + +Then, in the file `openair1/SCHED_NR/phy_procedures_nr_gNB.c`, +in function `nr_postDecode()`, we add, at the place where we want to trace: + +``` + T(T_LDPC_OK, + T_INT(rdata->segment_r), + T_INT(rdata->nbSegments), + T_INT(rdata->offset), + T_BUFFER(ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0))); +``` + +And that's all, the code is instrumented, a trace is created, +we now need a tracer to process the trace. + +## 2. create a tracer + +See `trace_ldpc.c` in the attached diff. Read it, there is documentation. +To compile, just do `make trace_ldpc` in `common/utils/T/tracer` +To use: `cd common/utils/T/tracer; ./trace_ldpc -d ../T_messages.txt` + +Your tracer can do whatever it wants with the data. + +The Makefile has been modified to compile it. See the diff. + +Use it as a basis for your own tracer. +You can also look at the other tracers, especially `textlog.c` +and `macpdu2wireshark.c` which are the most useful for me to +trace/debug the nr-softmodem. + +## 3. available types in a trace + +You trace the code with: + +``` + T(T_trace_name, T_xxx(variable1), T_xxx(variables2), ...); +``` + +`T_xxx` can be: + +- `T_INT(variable)` +- `T_FLOAT(variable)` (not tested much, may fail) +- `T_BUFFER(variable, length)` +- `T_STRING(variable)` +- `T_PRINTF(format, arg1, ... argn)` + +What is traced is obvious from the name. `T_INT` traces an int for example. + +corresponding type to put in `T_messages.txt` + +- `T_INT`: int +- `T_FLOAT`: float +- `T_BUFFER`: buffer +- `T_STRING`: string +- `T_PRINTF`: string + +And that's all. +You can add as many traces as you want, just add them in `T_messages.txt`, +put the `T()` macro in the code where you want to trace, and modify your +tracer to deal with it. + +An alternative to writing your own tracer could be to use `textlog` +with `-full` command line and process the text with some external +tools. + +It is also possible to record the events in a file using the tracer +`record` and then use `replay` to process the recorded file later. diff --git a/common/utils/T/DOC/T/howto_new_trace.patch b/common/utils/T/DOC/T/howto_new_trace.patch new file mode 100644 index 0000000000..47bbc66138 --- /dev/null +++ b/common/utils/T/DOC/T/howto_new_trace.patch @@ -0,0 +1,210 @@ +diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt +index c535f36f5e..1632131ceb 100644 +--- a/common/utils/T/T_messages.txt ++++ b/common/utils/T/T_messages.txt +@@ -4,6 +4,9 @@ ID = ENB_MASTER_TICK + GROUP = ALL:GENERAL:ENB + FORMAT = int,eNB_ID : int,frame : int,subframe + ++ID = LDPC_OK ++ FORMAT = int,segment : int,nb_segments : int,offset : buffer,data ++ + #PHY logs + ID = ENB_PHY_UL_TICK + DESC = eNodeB uplink tick - one tick per ms at start of uplink processing +diff --git a/common/utils/T/tracer/CMakeLists.txt b/common/utils/T/tracer/CMakeLists.txt +index 02e0e2dc9b..db438c42d3 100644 +--- a/common/utils/T/tracer/CMakeLists.txt ++++ b/common/utils/T/tracer/CMakeLists.txt +@@ -57,6 +57,10 @@ target_link_libraries(gnb PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) + target_link_libraries(gnb PRIVATE png) + ++add_executable(trace_ldpc trace_ldpc.c) ++target_link_libraries(trace_ldpc PRIVATE tracer_utils tracer_filter ++ tracer_logger tracer_view) ++ + add_subdirectory(filter) + add_subdirectory(gui) + add_subdirectory(logger) +@@ -66,4 +70,4 @@ add_custom_target(T_tools) + add_dependencies(T_tools + record replay extract_config textlog enb ue vcd macpdu2wireshark + extract_input_subframe extract_output_subframe to_vcd extract multi +- gnb) ++ gnb trace_ldpc) +diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile +index d3c959a689..d13ff1e996 100644 +--- a/common/utils/T/tracer/Makefile ++++ b/common/utils/T/tracer/Makefile +@@ -7,4 +7,4 @@ clean: + rm -rf tracer_build + rm record replay extract_config textlog enb ue vcd macpdu2wireshark \ + extract_input_subframe extract_output_subframe to_vcd extract multi \ +- gnb ++ gnb trace_ldpc +diff --git a/common/utils/T/tracer/trace_ldpc.c b/common/utils/T/tracer/trace_ldpc.c +new file mode 100644 +index 0000000000..00baf34774 +--- /dev/null ++++ b/common/utils/T/tracer/trace_ldpc.c +@@ -0,0 +1,143 @@ ++#include ++#include ++#include ++#include ++#include ++#include "database.h" ++#include "event.h" ++#include "handler.h" ++#include "logger/logger.h" ++#include "utils.h" ++#include "event_selector.h" ++#include "config.h" ++ ++/* this function sends the activated traces to the nr-softmodem */ ++void activate_traces(int socket, int number_of_events, int *is_on) ++{ ++ char t = 1; ++ if (socket_send(socket, &t, 1) == -1 || ++ socket_send(socket, &number_of_events, sizeof(int)) == -1 || ++ socket_send(socket, is_on, number_of_events * sizeof(int)) == -1) ++ abort(); ++} ++ ++void usage(void) ++{ ++ printf( ++"options:\n" ++" -d this option is mandatory\n" ++" -ip connect to given IP address (default %s)\n" ++" -p connect to given port (default %d)\n", ++ DEFAULT_REMOTE_IP, ++ DEFAULT_REMOTE_PORT ++ ); ++ exit(1); ++} ++ ++int main(int n, char **v) ++{ ++ char *database_filename = NULL; ++ void *database; ++ char *ip = DEFAULT_REMOTE_IP; ++ int port = DEFAULT_REMOTE_PORT; ++ int *is_on; ++ int number_of_events; ++ int i; ++ int socket; ++ int ldpc_ok_id; ++ database_event_format f; ++ int segment; ++ int nb_segments; ++ int offset; ++ int data; ++ ++ /* write on a socket fails if the other end is closed and we get SIGPIPE */ ++ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort(); ++ ++ /* parse command line options */ ++ for (i = 1; i < n; i++) { ++ if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); ++ if (!strcmp(v[i], "-d")) ++ { if (i > n-2) usage(); database_filename = v[++i]; continue; } ++ if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; } ++ if (!strcmp(v[i], "-p")) ++ { if (i > n-2) usage(); port = atoi(v[++i]); continue; } ++ usage(); ++ } ++ ++ if (database_filename == NULL) { ++ printf("ERROR: provide a database file (-d)\n"); ++ exit(1); ++ } ++ ++ /* load the database T_messages.txt */ ++ database = parse_database(database_filename); ++ load_config_file(database_filename); ++ ++ /* an array of int for all the events defined in the database is needed */ ++ number_of_events = number_of_ids(database); ++ is_on = calloc(number_of_events, sizeof(int)); ++ if (is_on == NULL) abort(); ++ ++ /* activate the LDPC_OK trace in this array */ ++ on_off(database, "LDPC_OK", is_on, 1); ++ ++ /* connect to the nr-softmodem */ ++ socket = connect_to(ip, port); ++ ++ /* activate the trace LDPC_OK in the nr-softmodem */ ++ activate_traces(socket, number_of_events, is_on); ++ ++ free(is_on); ++ ++ /* get the format of the LDPC_OK trace */ ++ ldpc_ok_id = event_id_from_name(database, "LDPC_OK"); ++ f = get_format(database, ldpc_ok_id); ++ ++/* this macro looks for a particular element and checks its type */ ++#define G(var_name, var_type, var) \ ++ if (!strcmp(f.name[i], var_name)) { \ ++ if (strcmp(f.type[i], var_type)) { printf("bad type for %s\n", var_name); exit(1); } \ ++ var = i; \ ++ continue; \ ++ } ++ ++ /* get the elements of the LDPC_OK trace ++ * the value is an index in the event, see below ++ */ ++ for (i = 0; i < f.count; i++) { ++ G("segment", "int", segment); ++ G("nb_segments", "int", nb_segments); ++ G("offset", "int", offset); ++ G("data", "buffer", data); ++ } ++ ++ /* a buffer needed to receive events from the nr-softmodem */ ++ OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL }; ++ ++ /* read events */ ++ while (1) { ++ event e; ++ e = get_event(socket, &ebuf, database); ++ if (e.type == -1) break; ++ if (e.type == ldpc_ok_id) { ++ /* this is how to access the elements of the LDPC_OK trace. ++ * we use e.e[] and then the correct suffix, here ++ * it's .i for the integer and .b for the buffer and .bsize ++ * for the buffer size ++ * see in event.h the structure event_arg ++ */ ++ unsigned char *buf = e.e[data].b; ++ printf("get LDPC_OK event segment %d nb_segments %d offset %d buffer length %d = [", ++ e.e[segment].i, ++ e.e[nb_segments].i, ++ e.e[offset].i, ++ e.e[data].bsize); ++ for (i = 0; i < e.e[data].bsize; i++) ++ printf(" %2.2x", buf[i]); ++ printf("]\n"); ++ } ++ } ++ ++ return 0; ++} +diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c +index f33106ecaa..129b3606b6 100644 +--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c ++++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c +@@ -255,6 +255,11 @@ static void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) + ulsch_harq->processedSegments, + rdata->nbSegments); + if (decodeSuccess) { ++ T(T_LDPC_OK, ++ T_INT(rdata->segment_r), ++ T_INT(rdata->nbSegments), ++ T_INT(rdata->offset), ++ T_BUFFER(ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F >> 3) - ((ulsch_harq->C > 1) ? 3 : 0))); + memcpy(ulsch_harq->b + rdata->offset, ulsch_harq->c[r], rdata->Kr_bytes - (ulsch_harq->F >> 3) - ((ulsch_harq->C > 1) ? 3 : 0)); + + } else { diff --git a/common/utils/T/DOC/T/multi.md b/common/utils/T/DOC/T/multi.md new file mode 100644 index 0000000000..db34103c38 --- /dev/null +++ b/common/utils/T/DOC/T/multi.md @@ -0,0 +1,57 @@ +# Multiple tracers + +To connect several tracers to the same process, first launch the `multi` +tracer. + +Run as: + +```shell +cd common/utils/T/tracer +./multi -d ../T_messages.txt +``` + +Then connect other tracers (`enb`, `textlog`, `to_vcd`, etc.) to the +`multi` tracer. + +For example (if you debug the `lte-softmodem`) in one terminal, run: + +```shell +cd common/utils/T/tracer +./enb -d ../T_messages.txt -p 2022 +``` + +That will launch the GUI tool to analyze the proper running of the +softmodem. + +And in another terminal, run: + +```shell +cd common/utils/T/tracer +./to_vcd -d ../T_messages.txt -p 2022 -vcd -o /tmp/openair_dump_eNB.vcd +``` + +That will dump the VCD traces generated by the softmodem to the +file `/tmp/openair_dump_eNB.vcd`. + +The `multi` tracer waits for other tracers to connect to the port 2022. +So you pass `-p 2022` to a tracer so that it connects to the `multi` +tracer. This port can be changed with the `-lp` option. + +For example to listen to port 4321, run `multi` as: + +```shell +./multi -d ../T_messages.txt -lp 4321 +``` + +Then you would pass `-p 4321` to any tracer for it to connect to `multi`. + +As a reminder, to trace `lte-softmodem`, you run it as: + +```shell +sudo ./lte-softmodem -O config_file.conf --T_stdout 0 +``` + +The important part is `--T_stdout 0`. + +The order to launch the various programs (`multi`, the softmodem, other +tracers) is not important. diff --git a/common/utils/T/DOC/T/record.md b/common/utils/T/DOC/T/record.md new file mode 100644 index 0000000000..c2e58e1e20 --- /dev/null +++ b/common/utils/T/DOC/T/record.md @@ -0,0 +1,34 @@ +# Record + +First, read the [basic usage](./basic.md) to compile things. + +To record, you use the `record` tracer. + +To send a trace to Eurecom, you run (unless we specifically ask you +to activate/deactivate specific traces): + +```shell +./record -d ../T_messages.txt -o record.raw -ON -off VCD -off HEAVY -off LEGACY_GROUP_TRACE -off LEGACY_GROUP_DEBUG +``` + +And then you run the program to trace (`lte-softmodem`, `oaisim`, whatever) +as explained in [basic usage](./basic.md). + +To stop the recording, you simply press `control+c` to end `record`. + +You send to Eurecom the file `record.raw`. The file `T_messages.txt` is not needed. + +To get a list of options, run: + +```shell +./record -h +``` + +The options `-ON`, `-OFF`, `-on` and `-off` are processed in order. +In the example above we first activate all the traces (`-ON`) and then +deactivate specific ones (more precisely, in this particular case: +the *groups* of traces `VCD`, `HEAVY`, `LEGACY_GROUP_TRACE` and +`LEGACY_GROUP_DEBUG`). + +You can then [replay](./replay.md) the recorded file or send it to others so they +can analyse things. diff --git a/common/utils/T/DOC/T/replay.md b/common/utils/T/DOC/T/replay.md new file mode 100644 index 0000000000..2390d177f6 --- /dev/null +++ b/common/utils/T/DOC/T/replay.md @@ -0,0 +1,39 @@ +# Replay + +First, read the [basic usage](./basic.md) to compile things. + +Then, read [record](./record.md) to know how to record a trace. + +To replay, you use the `replay` program. It will act +as a *tracee* (`lte-softmodem`, `oaisim`, etc.). + +Then you use your usual tracer, eg. `enb` or `textlog`. + +Since the T is constantly evolving you may need to extract +`T_messages.txt` contained in a trace to be able to process +the trace. + +## Example + +Download [example.raw](./example.raw). This example contains: +* MAC PDUs as sent and received by the eNodeB +* RRC info messages the eNodeB produced. + +First step is to extract `T_messages.txt` from this trace. + +```shell +./extract_config -i example.raw > extracted_T_messages.txt +``` + +Then you use `replay` to act as a regular *tracee*: + +```shell +./replay -i example.raw +``` + +And then, while `replay` is still running, you use the tracer +you want, for example the `textlog` tracer: + +```shell +./textlog -d extracted_T_messages.txt -no-gui -ON -full +``` diff --git a/common/utils/T/DOC/T/to_vcd.md b/common/utils/T/DOC/T/to_vcd.md new file mode 100644 index 0000000000..faec8bd47f --- /dev/null +++ b/common/utils/T/DOC/T/to_vcd.md @@ -0,0 +1,21 @@ +# to_vcd + +This tracer is used to dump a VCD trace of the softmodem. + +The basic usage is: + +```shell +cd common/utils/T/tracer +./to_vcd -d ../T_messages.txt -vcd -o /tmp/openair_dump_eNB.vcd +``` + +Apart from VCD specific traces, you can dump to VCD other T traces. +Use `-b` and `-l` options. For example, to only log DLSCH scheduler VCD traces, use: +```shell +./to_vcd -d ../T_messages.txt -o /tmp/openair_dump_eNB.vcd -b VCD_FUNCTION_SCHEDULE_DLSCH value mac_schedule_dlsch +``` + +For more help, run: +```shell +./to_vcd -h +``` diff --git a/common/utils/T/DOC/T/wireshark.md b/common/utils/T/DOC/T/wireshark.md new file mode 100644 index 0000000000..7ef7780bdd --- /dev/null +++ b/common/utils/T/DOC/T/wireshark.md @@ -0,0 +1,158 @@ +# MAC PDUs and wireshark + +First, read the [basic usage](./basic.md) to compile things. + +It is possible to use `wireshark` to analyse MAC PDUs for UEs, +MIBs, SIBs, and random accesses seen by the eNodeB. + +## Live usage + +Launch wireshark and listen on the local interface (lo). +Set the filter to `udp.port==9999` and read below +for configuration. + +Run the softmodem with the correct command line arguments +(see [basic usage](./basic.md)). + +Then run: + +```shell +./macpdu2wireshark -d ../T_messages.txt -live +``` + +For other options of `macpdu2wireshark`, run: + +```shell +./macpdu2wireshark -h +``` + +You can for example disable MIB and SIB logging, or log only +a given number of them. + +## Record and replay + +You need to record some specific traces. As of 2018-10-30 +you have to use the group: +* `WIRESHARK` + +That is, run: + +```shell +./record -d ../T_messages.txt -o /tmp/record.raw -on WIRESHARK +``` + +With a recorded trace you then use `macpdu2wireshark`. + +## Example + +Download [example.raw](example.raw). This example contains +MIBs, SIBs and a connection made by an UE followed by its +disconnection. + +First step is to extract `T_messages.txt` from this trace. + +```shell +./extract_config -i example.raw > extracted_T_messages.txt +``` + +Then you run `wireshark`, capture on `lo` and set the +filter to `udp.dstport==9999`. + +While `wireshark` is running, you do: + +```shell +./macpdu2wireshark -d extracted_T_messages.txt -i example.raw -no-mib -no-sib +``` + +In `wireshark` you should see something similar to the following: + +![wireshark window with dissected MAC PDUs](wireshark.png) + +## Configure wireshark for LTE + +To dissect the packets, you need to configure `wireshark`. + +In the menu, choose `Edit->Preferences`. + +In the preference window, unroll `Protocols`. + +Go to `UDP` and activate `Try heuristic sub-dissectors first`. + +Depending on your version of `wireshark`, you may need to go to `MAC-LTE` +and activate `Try Heuristic LTE-MAC over UDP framing` if this option +is present. + +For newer versions (after 2.0 as says wireshark's documentation), +heuristic activation is moved to the `Enabled Protocols` window +(in the menu `Analyze`). In the `enabled protocols` window, search +for `lte` and select `mac_lte_udp` to have `MAC-LTE over UDP`. + +You may also want to configure other parameters in `MAC-LTE`, +`RLC-LTE`, `PDCP-LTE`, and maybe others. Check the documentation +of `wireshark`. + +It is advised to use a recent version of wireshark (say more than 2.4). + +## Configure wireshark for NR + +Use a recent version of wireshark. The steps below were done using +version 3.3.2. Maybe some options are different for your version +of wireshark. Adapt as necessary. + +First, do the previous steps for LTE. + +Then, in the menu, choose `Edit->Preferences`. + +In the preference window, unroll `Protocols`. + +Go to `MAC-NR`. Select both options (`Attempt to decode BCCH, PCCH and CCCH data using NR RRC dissector` +and `Attempt to dissect LCID 1-3 as srb1-3`). + +For `Source of LCID -> drb channel settings` choose option `From static table`. +Then click the `Edit...` button of `LCID -> DRB Mappings Table`. + +In the new window, click on `+`. Choose LCID `4`, DRBID `1`, UL RLC Bearer +Type `AM, SN Len=18`, same thing for DL RLC Bearer Type. + +Then click OK. + +Now, go to `RLC-NR`. Select `Call PDCP dissector for SRB PDUs`. + +For `Call PDCP dissector for UL DRB PDUs` choose `18-bit SN`. Same +for DL. + +Select `Call RRC dissector for CCCH PDUs`. + +You don't need to select `May see RLC headers only` and +`Try to reassemble UM frames`. + +Now, go to `PDCP-NR`. Select what you want in there. It's good +to select `Show uncompressed User-Plane data as IP`. Also good +to select `Show unciphered Signalling-Plane data as RRC`. +For `Do sequence number analysis` it can be good to use +`Only-RLC-frames` but anything will do. We don't use ROHC so you +don't need to select `Attempt to decode ROHC data`. And the +layer info to show depends on what you want to analyse. +`Traffic Info` is a good choice. + +You are done with the preferences. You can click OK. + +Then, in the menu `Analyze`, choose `Enabled Protocols...`. In the new window +search for `nr` and select `mac_nr_udp` to have `MAC-NR over UDP`. + +And that's it. Maybe other settings can be changed, but those steps should be +enough for a start. + +Note: not all versions of Wireshark correctly dissect encapsulated packets. For instance, we observed that Wireshark v3.4.8 did not call the PDCP dissector for a PDCP PDU split in two RLC SDUs. On the other hand, Wireshark v3.7.0 showed it just fine. + +## Alternative to wireshark + +While using `macpdu2wireshark` with the `-live` option, it is possible to use `tcpdump` instead of `wireshak` to record MAC PDUs and also other types of traffic (sctp, gtp) in the same output pcap file. + +A "catch all" solution is to run: + +``` +sudo tcpdump -n -iany "udp port 9999 or udp port 2152 or sctp or port 38462 or port 38472 or port 38412 or port 2153" -w /tmp/rec.pcap +``` + +(This is an example, other solutions are also possible.) diff --git a/common/utils/T/DOC/T/wireshark.png b/common/utils/T/DOC/T/wireshark.png new file mode 100644 index 0000000000..15b138be7d Binary files /dev/null and b/common/utils/T/DOC/T/wireshark.png differ diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile index d76ab93cb8..4f1bc695ae 100644 --- a/common/utils/T/Makefile +++ b/common/utils/T/Makefile @@ -20,7 +20,7 @@ T_IDs.h: $(GENIDS) T_messages.txt check_vcd: T_IDs.h T_messages.txt.h gcc -Wall -I. -I.. -I../itti -I../../../openair2/COMMON -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread - ./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) + ./_check_vcd T_messages.txt ../LOG/vcd_signal_dumper.h || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) rm -f ./_check_vcd .PHONY: check_vcd diff --git a/common/utils/T/check_vcd.c b/common/utils/T/check_vcd.c index 33ca58f947..d946834270 100644 --- a/common/utils/T/check_vcd.c +++ b/common/utils/T/check_vcd.c @@ -67,14 +67,17 @@ void err(char *fmt, ...) exit(1); } -int main(void) +int main(int argc, char *argv[]) { /* to disable the checks done by this program, uncomment the following * line, ie. remove the leading '//' */ //return 0; - void *database = parse_database("T_messages.txt"); + if (argc != 3) err("usage: %s ", argv[0]); + char *T_msg_txt = argv[1]; + char *vcd_sig_dmp = argv[2]; + void *database = parse_database(T_msg_txt); int number_of_events; int first_var = -1; int last_var; @@ -212,8 +215,8 @@ int main(void) * VCD_VARIABLE_ABC or VCD_FUNCTION_XYZ */ i = first_var; - in = fopen("../LOG/vcd_signal_dumper.h", "r"); - if (in == NULL) err("could not open ../LOG/vcd_signal_dumper.h"); + in = fopen(vcd_sig_dmp, "r"); + if (in == NULL) err("could not open %s\n", vcd_sig_dmp); while (1) { char *x = " VCD_SIGNAL_DUMPER_VARIABLES_"; ssize_t r; @@ -253,7 +256,9 @@ int main(void) err("%s is not correct in T_messages.txt", name); i++; } + free(l); fclose(in); + free_database(database); if (i != last_fun + 1) err("VCD FUNCTIONS wrong in T_messages.txt"); return 0; diff --git a/common/utils/T/tracer/CMakeLists.txt b/common/utils/T/tracer/CMakeLists.txt new file mode 100644 index 0000000000..6f66c2f4ee --- /dev/null +++ b/common/utils/T/tracer/CMakeLists.txt @@ -0,0 +1,73 @@ +add_library(tracer_utils OBJECT config.c database.c event.c handler.c utils.c) +target_link_libraries(tracer_utils PUBLIC m pthread) + +add_library(tracer_events OBJECT event_selector.c) + +add_executable(record record.c) +target_link_libraries(record PRIVATE tracer_utils) + +add_executable(replay replay.c) +target_link_libraries(replay PRIVATE tracer_utils) + +add_executable(extract_config extract_config.c) +target_link_libraries(extract_config PRIVATE tracer_utils) + +add_executable(extract_input_subframe extract_input_subframe.c) +target_link_libraries(extract_input_subframe PRIVATE tracer_utils) + +add_executable(extract_output_subframe extract_output_subframe.c) +target_link_libraries(extract_output_subframe PRIVATE tracer_utils) + +add_executable(extract extract.c) +target_link_libraries(extract PRIVATE tracer_utils) + +add_executable(textlog textlog.c) +target_link_libraries(textlog PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) + + +find_library(png png REQUIRED) +add_executable(enb enb.c) +target_link_libraries(enb PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) +target_link_libraries(enb PRIVATE png) + +add_executable(ue ue.c) +target_link_libraries(ue PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) +target_link_libraries(ue PRIVATE png) + +add_executable(vcd vcd.c) +target_link_libraries(vcd PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) + +add_executable(to_vcd to_vcd.c) +target_link_libraries(to_vcd PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) + +add_executable(macpdu2wireshark macpdu2wireshark.c) +target_link_libraries(macpdu2wireshark PRIVATE tracer_utils) + +add_executable(multi multi.c) +target_link_libraries(multi PRIVATE tracer_utils T) +target_include_directories(multi PRIVATE ..) + +add_executable(gnb gnb.c) +target_link_libraries(gnb PRIVATE tracer_utils tracer_filter tracer_gui + tracer_logger tracer_view tracer_events) +target_link_libraries(gnb PRIVATE png) + +add_subdirectory(filter) +add_subdirectory(gui) +add_subdirectory(logger) +add_subdirectory(view) + +add_custom_target(T_tools) +add_dependencies(T_tools + record replay extract_config textlog enb ue vcd macpdu2wireshark + extract_input_subframe extract_output_subframe to_vcd extract multi + gnb) +add_dependencies(nr-softmodem T_tools) +add_dependencies(nr-uesoftmodem T_tools) +add_dependencies(lte-softmodem T_tools) +add_dependencies(lte-uesoftmodem T_tools) diff --git a/common/utils/T/tracer/database.c b/common/utils/T/tracer/database.c index 543ab66664..347ca7cfcf 100644 --- a/common/utils/T/tracer/database.c +++ b/common/utils/T/tracer/database.c @@ -43,6 +43,14 @@ typedef struct { buffer value; } parser; +void *my_bsearch(const void *key, const void *base, + size_t nmemb, size_t size, + int (*compar)(const void *, const void *)) +{ + if (nmemb == 0) return NULL; + return bsearch(key, base, nmemb, size, compar); +} + void put(buffer *b, int c) { if (b->size == b->maxsize) { @@ -125,7 +133,7 @@ int string_cmp(const void *_p1, const void *_p2) id *add_id(database *r, char *idname, int i) { - if (bsearch(&(id){name:idname}, r->i, r->isize, sizeof(id), id_cmp) != NULL) + if (my_bsearch(&(id){.name=idname}, r->i, r->isize, sizeof(id), id_cmp) != NULL) { printf("ERROR: ID '%s' declared more than once\n", idname); exit(1); } if ((r->isize & 1023) == 0) { r->i = realloc(r->i, (r->isize + 1024) * sizeof(id)); @@ -143,14 +151,14 @@ id *add_id(database *r, char *idname, int i) r->i[r->isize].id = i; r->isize++; qsort(r->i, r->isize, sizeof(id), id_cmp); - return (id*)bsearch(&(id){name:idname}, r->i, r->isize, sizeof(id), id_cmp); + return (id*)my_bsearch(&(id){.name=idname}, r->i, r->isize, sizeof(id), id_cmp); } group *get_group(database *r, char *group_name) { group *ret; - ret = bsearch(&(group){name:group_name}, + ret = my_bsearch(&(group){.name=group_name}, r->g, r->gsize, sizeof(group), group_cmp); if (ret != NULL) return ret; @@ -166,7 +174,7 @@ group *get_group(database *r, char *group_name) qsort(r->g, r->gsize, sizeof(group), group_cmp); - return bsearch(&(group){name:group_name}, + return my_bsearch(&(group){.name=group_name}, r->g, r->gsize, sizeof(group), group_cmp); } @@ -182,7 +190,7 @@ void group_add_id(group *g, char *id) void id_add_group(id *i, char *group) { - char *g = bsearch(&group, i->groups, i->gsize, sizeof(char *), string_cmp); + char *g = my_bsearch(&group, i->groups, i->gsize, sizeof(char *), string_cmp); if (g != NULL) return; if ((i->gsize & 1023) == 0) { @@ -392,7 +400,7 @@ void list_groups(void *_d) static int onoff_id(database *d, char *name, int *a, int onoff) { id *i; - i = bsearch(&(id){name:name}, d->i, d->isize, sizeof(id), id_cmp); + i = my_bsearch(&(id){.name=name}, d->i, d->isize, sizeof(id), id_cmp); if (i == NULL) return 0; a[i->id] = onoff; printf("turning %s %s\n", onoff ? "ON" : "OFF", name); @@ -403,7 +411,7 @@ static int onoff_group(database *d, char *name, int *a, int onoff) { group *g; int i; - g = bsearch(&(group){name:name}, d->g, d->gsize, sizeof(group), group_cmp); + g = my_bsearch(&(group){.name=name}, d->g, d->gsize, sizeof(group), group_cmp); if (g == NULL) return 0; for (i = 0; i < g->size; i++) onoff_id(d, g->ids[i], a, onoff); return 1; @@ -442,7 +450,7 @@ char *event_vcd_name_from_id(void *_database, int id) int event_id_from_name(void *_database, char *name) { database *d = _database; - id *i = (id*)bsearch(&(id){name:name}, d->i, d->isize, sizeof(id), id_cmp); + id *i = (id*)my_bsearch(&(id){.name=name}, d->i, d->isize, sizeof(id), id_cmp); if (i == NULL) { printf("%s:%d: '%s' not found\n", __FILE__, __LINE__, name); abort(); } return i->id; @@ -516,3 +524,31 @@ void database_get_generic_description(void *_d, int id, PUTC(&o, 0); *desc = o.obuf; } + +void free_database(void *_d) +{ + database *d = _d; + int i; + int j; + free(d->name); + for (i = 0; i < d->isize; i++) { + free(d->i[i].name); + free(d->i[i].desc); + free(d->i[i].groups); + for (j = 0; j < d->i[i].asize; j++) { + free(d->i[i].arg_type[j]); + free(d->i[i].arg_name[j]); + } + free(d->i[i].arg_type); + free(d->i[i].arg_name); + free(d->i[i].vcd_name); + } + free(d->i); + for (i = 0; i < d->gsize; i++) { + free(d->g[i].name); + free(d->g[i].ids); + } + free(d->g); + free(d->id_to_pos); + free(d); +} diff --git a/common/utils/T/tracer/database.h b/common/utils/T/tracer/database.h index 9fdbaed7c6..ee126ca145 100644 --- a/common/utils/T/tracer/database.h +++ b/common/utils/T/tracer/database.h @@ -3,6 +3,7 @@ /* returns an opaque pointer - truly a 'database *', see database.c */ void *parse_database(char *filename); +void free_database(void *database); void dump_database(void *database); void list_ids(void *database); void list_groups(void *database); diff --git a/common/utils/T/tracer/extract.c b/common/utils/T/tracer/extract.c index d66e8a3bb8..bd1649a31a 100644 --- a/common/utils/T/tracer/extract.c +++ b/common/utils/T/tracer/extract.c @@ -55,8 +55,8 @@ int main(int n, char **v) int found; int count = 1; int check_time = 0; - time_t sec; - long nsec; + time_t sec = 0; /* initialization not necessary but gcc is not happy */ + long nsec = 0; /* initialization not necessary but gcc is not happy */ for (i = 1; i < n; i++) { if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); diff --git a/common/utils/T/tracer/filter/CMakeLists.txt b/common/utils/T/tracer/filter/CMakeLists.txt new file mode 100644 index 0000000000..828f1bc40b --- /dev/null +++ b/common/utils/T/tracer/filter/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(tracer_filter STATIC filter.c) +target_include_directories(tracer_filter PRIVATE ..) diff --git a/common/utils/T/tracer/gui/CMakeLists.txt b/common/utils/T/tracer/gui/CMakeLists.txt new file mode 100644 index 0000000000..f1485be484 --- /dev/null +++ b/common/utils/T/tracer/gui/CMakeLists.txt @@ -0,0 +1,10 @@ +include(FindPkgConfig) +pkg_check_modules(xft REQUIRED xft) +find_library(X11 X11 REQUIRED) +add_library(tracer_gui STATIC + init.c loop.c toplevel_window.c x.c container.c widget.c + gui.c label.c textarea.c event.c xy_plot.c textlist.c notify.c + positioner.c timeline.c space.c image.c) + +target_link_libraries(tracer_gui PRIVATE pthread m ${xft_LIBRARIES} X11) +target_include_directories(tracer_gui PRIVATE ${xft_INCLUDE_DIRS}) diff --git a/common/utils/T/tracer/gui/event.c b/common/utils/T/tracer/gui/event.c index 842318fcea..862f4d67dd 100644 --- a/common/utils/T/tracer/gui/event.c +++ b/common/utils/T/tracer/gui/event.c @@ -107,7 +107,7 @@ void send_event(gui *_gui, enum event_type type, ...) struct gui *g = _gui; int do_write = 0; va_list ap; - struct event *e; + struct event *e = NULL; /* initialization not necessary but gcc is not happy */ if (g->queued_events == NULL) do_write = 1; diff --git a/common/utils/T/tracer/gui/x_defs.h b/common/utils/T/tracer/gui/x_defs.h index d0595ef51d..d117a63e2e 100644 --- a/common/utils/T/tracer/gui/x_defs.h +++ b/common/utils/T/tracer/gui/x_defs.h @@ -2,7 +2,7 @@ #define _X_DEFS_H_ #include -#include +#include struct x_connection { Display *d; diff --git a/common/utils/T/tracer/logger/CMakeLists.txt b/common/utils/T/tracer/logger/CMakeLists.txt new file mode 100644 index 0000000000..72a207b50c --- /dev/null +++ b/common/utils/T/tracer/logger/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(tracer_logger STATIC + logger.c textlog.c framelog.c ttilog.c timelog.c ticklog.c iqlog.c + iqdotlog.c ticked_ttilog.c throughputlog.c) +target_link_libraries(tracer_logger PRIVATE pthread tracer_filter) +target_include_directories(tracer_logger PRIVATE ..) diff --git a/common/utils/T/tracer/textlog.c b/common/utils/T/tracer/textlog.c index f83cc7efd3..99cddaf43a 100644 --- a/common/utils/T/tracer/textlog.c +++ b/common/utils/T/tracer/textlog.c @@ -86,7 +86,7 @@ int main(int n, char **v) int i; event_handler *h; logger *textlog; - gui *g; + gui *g = NULL; /* initialization not necessary but gcc is not happy */ int gui_mode = 0; view *out; int gui_active = 1; diff --git a/common/utils/T/tracer/view/CMakeLists.txt b/common/utils/T/tracer/view/CMakeLists.txt new file mode 100644 index 0000000000..f0bf1abae0 --- /dev/null +++ b/common/utils/T/tracer/view/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(tracer_view STATIC + stdout.c textlist.c xy.c tti.c time.c ticktime.c scrolltti.c) +target_link_libraries(tracer_view PRIVATE pthread) +target_include_directories(tracer_view PRIVATE ../logger) +target_include_directories(tracer_view PUBLIC ..) diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp index 897e6757af..b0d05c6aca 100644 --- a/common/utils/ocp_itti/intertask_interface.cpp +++ b/common/utils/ocp_itti/intertask_interface.cpp @@ -140,7 +140,7 @@ extern "C" { t->message_queue.insert(t->message_queue.begin(), message); eventfd_t sem_counter = 1; AssertFatal ( sizeof(sem_counter) == write(t->sem_fd, &sem_counter, sizeof(sem_counter)), ""); - LOG_D(ITTI,"sent messages id=%d to %s\n",message_id, t->admin.name); + LOG_D(ITTI, "sent messages id=%s messages_info to %s\n", messages_info[message_id].name, t->admin.name); return 0; } diff --git a/common/utils/telnetsrv/telnetsrv.c b/common/utils/telnetsrv/telnetsrv.c index d32cc88b2f..1b25007978 100644 --- a/common/utils/telnetsrv/telnetsrv.c +++ b/common/utils/telnetsrv/telnetsrv.c @@ -339,9 +339,6 @@ int history_cmd(char *buff, int debug, telnet_printfunc_t prnt) { memset(cmds,0,sizeof(cmds)); sscanf(buff,"%9s %9s %9s %9s %9s", cmds[0],cmds[1],cmds[2],cmds[3],cmds[4] ); - if (cmds[0] == NULL) - return CMDSTATUS_VARNOTFOUND; - if (strncasecmp(cmds[0],"list",4) == 0) { HIST_ENTRY **hist = history_list(); diff --git a/doc/FEATURE_SET.md b/doc/FEATURE_SET.md index d9606c1265..f8d9c460d4 100644 --- a/doc/FEATURE_SET.md +++ b/doc/FEATURE_SET.md @@ -271,7 +271,7 @@ The following features are valid for the gNB and the 5G-NR UE. - Support for 256 QAM * NR-PUCCH - Format 0 (2 bits, for ACK/NACK and SR) - - Format 2 (up to 11 bits, mainly for CSI feedback) + - Format 2 (mainly for CSI feedback) * NR-SRS - SRS signal reception - Channel estimation (with T tracer real time monitoring) @@ -443,7 +443,7 @@ The following features are valid for the gNB and the 5G-NR UE. - Support for up to 2 layers * NR-PUCCH - Format 0 (2 bits for ACK/NACK and SR) - - Format 2 (up to 11 bits, mainly for CSI feedback) + - Format 2 (mainly for CSI feedback) - Format 1 (limited testing) - Format 3 and 4 present but old code never tested (need restructuring before verification) * NR-SRS diff --git a/doc/README.md b/doc/README.md index cbe97a168b..776b217248 100644 --- a/doc/README.md +++ b/doc/README.md @@ -75,7 +75,7 @@ Legacy unmaintained files: ## General -- The [T tracer](https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/T/): a generic tracing tool (VCD, Wireshark, GUI, to save for later, ...) +- The [T tracer](../common/utils/T/DOC/T.md): a generic tracing tool (VCD, Wireshark, GUI, to save for later, ...) - [OPT](../openair2/UTIL/OPT/README.txt): how to trace to wireshark - The [configuration module](../common/config/DOC/config.md) - The [logging module](../common/utils/LOG/DOC/log.md) diff --git a/docker/Dockerfile.clang.rhel9 b/docker/Dockerfile.clang.rhel9 index a7a602dbf6..654bae8539 100644 --- a/docker/Dockerfile.clang.rhel9 +++ b/docker/Dockerfile.clang.rhel9 @@ -40,4 +40,4 @@ RUN /bin/sh oaienv && \ mkdir -p log && \ export CC=/usr/bin/clang && \ export CXX=/usr/bin/clang++ && \ - ./build_oai --phy_simulators --gNB --eNB --nrUE --UE --ninja --verbose-ci --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror + ./build_oai --phy_simulators --gNB --eNB --nrUE --UE --ninja --verbose-ci --noavx512 --disable-T-Tracer -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror diff --git a/executables/nr-ru.c b/executables/nr-ru.c index c9d3dab560..c19d3f8b4f 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -776,7 +776,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) { } else if (nextslot_type == NR_UPLINK_SLOT) { flags_burst = TX_BURST_END; } else { - flags_burst = TX_BURST_MIDDLE; + flags_burst = proc->first_tx == 1 ? TX_BURST_START : TX_BURST_MIDDLE; } } } else { // FDD diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 1b56dfccdb..aa7e9f26ea 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -505,8 +505,7 @@ static void RU_write(nr_rxtx_thread_data_t *rxtxD) { void *txp[NB_ANTENNAS_TX]; for (int i=0; iframe_parms.nb_antennas_tx; i++) - txp[i] = (void *)&UE->common_vars.txdata[i][UE->frame_parms.get_samples_slot_timestamp( - proc->nr_slot_tx, &UE->frame_parms, 0)]; + txp[i] = (void *)&UE->common_vars.txData[i][UE->frame_parms.get_samples_slot_timestamp(proc->nr_slot_tx, &UE->frame_parms, 0)]; radio_tx_burst_flag_t flags = TX_BURST_INVALID; @@ -868,7 +867,6 @@ void *UE_thread(void *arg) { nr_rxtx_thread_data_t curMsg = {0}; curMsg.UE=UE; // update thread index for received subframe - curMsg.proc.CC_id = UE->CC_id; curMsg.proc.nr_slot_rx = slot_nr; curMsg.proc.nr_slot_tx = (absolute_slot + DURATION_RX_TO_TX) % nb_slot_frame; curMsg.proc.frame_rx = (absolute_slot/nb_slot_frame) % MAX_FRAME_NUMBER; @@ -876,16 +874,6 @@ void *UE_thread(void *arg) { curMsg.proc.rx_slot_type = nr_ue_slot_select(cfg, curMsg.proc.frame_rx, curMsg.proc.nr_slot_rx); curMsg.proc.tx_slot_type = nr_ue_slot_select(cfg, curMsg.proc.frame_tx, curMsg.proc.nr_slot_tx); curMsg.proc.decoded_frame_rx=-1; - //LOG_I(PHY,"Process slot %d total gain %d\n", slot_nr, UE->rx_total_gain_dB); - -#ifdef OAI_ADRV9371_ZC706 - /*uint32_t total_gain_dB_prev = 0; - if (total_gain_dB_prev != UE->rx_total_gain_dB) { - total_gain_dB_prev = UE->rx_total_gain_dB; - openair0_cfg[0].rx_gain[0] = UE->rx_total_gain_dB; - UE->rfdevice.trx_set_gains_func(&UE->rfdevice,&openair0_cfg[0]); - }*/ -#endif int firstSymSamp = get_firstSymSamp(slot_nr, &UE->frame_parms); for (int i=0; iframe_parms.nb_antennas_rx; i++) @@ -938,7 +926,7 @@ void *UE_thread(void *arg) { timing_advance = UE->timing_advance; } - nr_ue_rrc_timer_trigger(UE->Mod_id, curMsg.proc.frame_tx, curMsg.proc.nr_slot_tx); + nr_ue_rrc_timer_trigger(UE->Mod_id, curMsg.proc.frame_tx, curMsg.proc.nr_slot_tx, curMsg.proc.gNB_id); // Start TX slot processing here. It runs in parallel with RX slot processing notifiedFIFO_elt_t *newElt = newNotifiedFIFO_elt(sizeof(nr_rxtx_thread_data_t), curMsg.proc.nr_slot_tx, &txFifo, processSlotTX); @@ -1010,16 +998,3 @@ void init_NR_UE_threads(int nb_inst) { } } } - -/* HACK: this function is needed to compile the UE - * fix it somehow - */ -int find_dlsch(uint16_t rnti, - PHY_VARS_eNB *eNB, - find_type_t type) -{ - printf("you cannot read this\n"); - abort(); -} - -void multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP) {} diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h index a8cf02a357..4acd5e0d5f 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h @@ -442,6 +442,9 @@ typedef struct { uint16_t start_rb; uint16_t number_symbols; uint16_t start_symbol; + // TODO this is a workaround to make it work + // implementation is also a bunch of workarounds + uint16_t rb_offset; uint16_t dlDmrsSymbPos; uint8_t dmrsConfigType; uint8_t prb_bundling_size_ind; diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c index 62ce034f59..18de88db79 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c @@ -39,6 +39,8 @@ #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" #include "assertions.h" +//#define POLAR_CODING_DEBUG + static inline void updateCrcChecksum2(int xlen, int ylen, uint8_t crcChecksum[xlen][ylen], @@ -611,24 +613,78 @@ uint32_t polar_decoder_int16(int16_t *input, uint8_t aggregation_level ) { t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true); + +#ifdef POLAR_CODING_DEBUG + printf("\nRX\n"); + printf("rm:"); + for (int i = 0; i < polarParams->N; i++) { + if (i % 4 == 0) { + printf(" "); + } + printf("%i", input[i] < 0 ? 1 : 0); + } + printf("\n"); +#endif + int16_t d_tilde[polarParams->N];// = malloc(sizeof(double) * polarParams->N); - nr_polar_rate_matching_int16(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength); + nr_polar_rate_matching_int16(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength, polarParams->i_bil); for (int i=0; iN; i++) { if (d_tilde[i]<-128) d_tilde[i]=-128; else if (d_tilde[i]>127) d_tilde[i]=128; } - memcpy((void *)&polarParams->tree.root->alpha[0],(void *)&d_tilde[0],sizeof(int16_t)*polarParams->N); - generic_polar_decoder(polarParams,polarParams->tree.root); - //Extract the information bits (û to ĉ) - uint64_t Cprime[4]= {0,0,0,0}; - uint64_t B[4]= {0,0,0,0}; +#ifdef POLAR_CODING_DEBUG + printf("d: "); + for (int i = 0; i < polarParams->N; i++) { + if (i % 4 == 0) { + printf(" "); + } + printf("%i", d_tilde[i] < 0 ? 1 : 0); + } + printf("\n"); +#endif - for (int i=0; iK; i++) Cprime[i>>6] = Cprime[i>>6] | ((uint64_t)polarParams->nr_polar_U[polarParams->Q_I_N[i]])<<(i&63); + memcpy((void *)&polarParams->tree.root->alpha[0], (void *)&d_tilde[0], sizeof(int16_t) * polarParams->N); + memset(polarParams->nr_polar_U, 0, polarParams->N * sizeof(uint8_t)); + generic_polar_decoder(polarParams, polarParams->tree.root); + +#ifdef POLAR_CODING_DEBUG + printf("u: "); + for (int i = 0; i < polarParams->N; i++) { + if (i % 4 == 0) { + printf(" "); + } + printf("%i", polarParams->nr_polar_U[i]); + } + printf("\n"); +#endif + + // Extract the information bits (û to ĉ) + uint64_t Cprime[4]= {0}; + nr_polar_info_extraction_from_u(Cprime, + polarParams->nr_polar_U, + polarParams->information_bit_pattern, + polarParams->parity_check_bit_pattern, + polarParams->N, + polarParams->n_pc); + +#ifdef POLAR_CODING_DEBUG + printf("c: "); + for (int n = 0; n < polarParams->K; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + printf("%lu", (Cprime[n1] >> n2) & 1); + } + printf("\n"); +#endif //Deinterleaving (ĉ to b) uint8_t *Cprimebyte = (uint8_t *)Cprime; + uint64_t B[4] = {0}; if (polarParams->K<65) { B[0] = polarParams->B_tab0[0][Cprimebyte[0]] | @@ -650,6 +706,21 @@ uint32_t polar_decoder_int16(int16_t *input, } } +#ifdef POLAR_CODING_DEBUG + int B_array = (polarParams->K + 63) >> 6; + int n_start = (B_array << 6) - polarParams->K; + printf("b: "); + for (int n = 0; n < polarParams->K; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = (n + n_start) >> 6; + int n2 = (n + n_start) - (n1 << 6); + printf("%lu", (B[B_array - 1 - n1] >> (63 - n2)) & 1); + } + printf("\n"); +#endif + int len=polarParams->payloadBits; //int len_mod64=len&63; int crclen = polarParams->crcParityBits; @@ -700,6 +771,21 @@ uint32_t polar_decoder_int16(int16_t *input, else if (crclen==6) crc = (uint64_t)(crc6(A64_flip,8*offset+len)>>26)&0x3f; } +#ifdef POLAR_CODING_DEBUG + int A_array = (len + 63) >> 6; + printf("a: "); + for (int n = 0; n < len; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + int alen = n1 == 0 ? len - (A_array << 6) : 64; + printf("%lu", (Ar >> (alen - 1 - n2)) & 1); + } + printf("\n\n"); +#endif + #if 0 printf("A %llx B %llx|%llx Cprime %llx|%llx (crc %x,rxcrc %llx %d)\n", Ar, diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h index 8a86661cf5..e48a205889 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h @@ -106,6 +106,7 @@ struct nrPolar_params { int16_t *Q_F_N; int16_t *Q_PC_N; uint8_t *information_bit_pattern; + uint8_t *parity_check_bit_pattern; uint16_t *channel_interleaver_pattern; //uint32_t crc_polynomial; @@ -238,24 +239,28 @@ void nr_polar_rate_matching(double *input, void nr_polar_rate_matching_int16(int16_t *input, int16_t *output, - uint16_t *rmp, - uint16_t K, - uint16_t N, - uint16_t E); + const uint16_t *rmp, + const uint16_t K, + const uint16_t N, + const uint16_t E, + const uint8_t i_bil); void nr_polar_interleaving_pattern(uint16_t K, uint8_t I_IL, uint16_t *PI_k_); void nr_polar_info_bit_pattern(uint8_t *ibp, + uint8_t *pcbp, int16_t *Q_I_N, int16_t *Q_F_N, - uint16_t *J, + int16_t *Q_PC_N, + const uint16_t *J, const uint16_t *Q_0_Nminus1, uint16_t K, uint16_t N, uint16_t E, - uint8_t n_PC); + uint8_t n_PC, + uint8_t n_pc_wm); void nr_polar_info_bit_extraction(uint8_t *input, uint8_t *output, @@ -272,6 +277,22 @@ void nr_byte2bit_uint8_32(uint8_t *in, const uint8_t **crc24c_generator_matrix(uint16_t payloadSizeBits); +void nr_polar_generate_u(uint64_t *u, + const uint64_t *Cprime, + const uint8_t *information_bit_pattern, + const uint8_t *parity_check_bit_pattern, + uint16_t N, + uint8_t n_pc); + +void nr_polar_uxG(uint64_t *D, const uint64_t *u, const uint64_t **G_N_tab, uint16_t N); + +void nr_polar_info_extraction_from_u(uint64_t *Cprime, + const uint8_t *u, + const uint8_t *information_bit_pattern, + const uint8_t *parity_check_bit_pattern, + uint16_t N, + uint8_t n_pc); + void nr_polar_bit_insertion(uint8_t *input, uint8_t *output, uint16_t N, diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c index 1a4137fb29..ea476c0d38 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c @@ -33,6 +33,7 @@ //#define DEBUG_POLAR_ENCODER //#define DEBUG_POLAR_ENCODER_DCI //#define DEBUG_POLAR_MATLAB +//#define POLAR_CODING_DEBUG #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" #include "assertions.h" @@ -262,6 +263,44 @@ void polar_encoder_dci(uint32_t *in, polarReturn; } +/* + * Interleaving of coded bits implementation + * TS 138.212: Section 5.4.1.3 - Interleaving of coded bits + */ +void nr_polar_rm_interleaving_cb(void *in, void *out, uint16_t E) +{ + int T = ceil((sqrt(8 * E + 1) - 1) / 2); + int v[T][T]; + int k = 0; + uint64_t *in64 = (uint64_t *)in; + for (int i = 0; i < T; i++) { + for (int j = 0; j < T - i; j++) { + if (k < E) { + int k1 = k >> 6; + int k2 = k - (k1 << 6); + v[i][j] = (in64[k1] >> k2) & 1; + } else { + v[i][j] = -1; + } + k++; + } + } + + k = 0; + uint64_t *out64 = (uint64_t *)out; + memset(out64, 0, E >> 3); + for (int j = 0; j < T; j++) { + for (int i = 0; i < T - j; i++) { + if (v[i][j] != -1) { + int k1 = k >> 6; + int k2 = k - (k1 << 6); + out64[k1] |= (uint64_t)v[i][j] << k2; + k++; + } + } + } +} + static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void *in,void *out) __attribute__((always_inline)); static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void *in,void *out) { @@ -309,6 +348,10 @@ static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void for (int i=0; iencoderLength>>4; i++) { ((uint16_t *)out)[i] = ((uint16_t *)in)[polarParams->rm_tab[i]]; } + + if (polarParams->i_bil == 1) { + nr_polar_rm_interleaving_cb(out, out, polarParams->encoderLength); + } } void build_polar_tables(t_nrPolar_params *polarParams) { @@ -344,28 +387,27 @@ void build_polar_tables(t_nrPolar_params *polarParams) { AssertFatal(polarParams->N == 512 || polarParams->N == 256 || polarParams->N == 128 || polarParams->N == 64, "N = %d, not done yet\n", polarParams->N); - // build G bit vectors for information bit positions and convert the bit as bytes tables in nr_polar_kronecker_power_matrices.c to 64 bit packed vectors. - // keep only rows of G which correspond to information/crc bits - polarParams->G_N_tab = (uint64_t **)calloc((polarParams->K + polarParams->n_pc),sizeof(int64_t *)); - int k=0; + // build G bit vectors for information bit positions and convert the bit as bytes tables in nr_polar_kronecker_power_matrices.c to + // 64 bit packed vectors. + polarParams->G_N_tab = (uint64_t **)calloc(polarParams->N, sizeof(int64_t *)); - for (int i=0; iN; i++) { - if (polarParams->information_bit_pattern[i] > 0) { - polarParams->G_N_tab[k] = (uint64_t *)memalign(32,(polarParams->N/64)*sizeof(uint64_t)); - memset((void *)polarParams->G_N_tab[k],0,(polarParams->N/64)*sizeof(uint64_t)); + for (int i = 0; i < polarParams->N; i++) { + polarParams->G_N_tab[i] = (uint64_t *)memalign(32, (polarParams->N / 64) * sizeof(uint64_t)); + memset((void *)polarParams->G_N_tab[i], 0, (polarParams->N / 64) * sizeof(uint64_t)); - for (int j=0; jN; j++) - polarParams->G_N_tab[k][j/64] |= ((uint64_t)polarParams->G_N[i][j])<<(j&63); + for (int j = 0; j < polarParams->N; j++) + polarParams->G_N_tab[i][j / 64] |= ((uint64_t)polarParams->G_N[i][j]) << (j & 63); #ifdef DEBUG_POLAR_ENCODER - printf("Bit %d Selecting row %d of G : ",k,i); + printf("Bit %d Selecting row %d of G : ", i, i); - for (int j=0; jN; j+=4) printf("%1x",polarParams->G_N[i][j]+(polarParams->G_N[i][j+1]*2)+(polarParams->G_N[i][j+2]*4)+(polarParams->G_N[i][j+3]*8)); + for (int j = 0; j < polarParams->N; j += 4) + printf("%1x", + polarParams->G_N[i][j] + (polarParams->G_N[i][j + 1] * 2) + (polarParams->G_N[i][j + 2] * 4) + + (polarParams->G_N[i][j + 3] * 8)); - printf("\n"); + printf("\n"); #endif - k++; - } } // rate matching table @@ -452,6 +494,21 @@ void polar_encoder_fast(uint64_t *A, uint8_t aggregation_level) { t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false); + +#ifdef POLAR_CODING_DEBUG + printf("polarParams->payloadBits = %i\n", polarParams->payloadBits); + printf("polarParams->crcParityBits = %i\n", polarParams->crcParityBits); + printf("polarParams->K = %i\n", polarParams->K); + printf("polarParams->N = %i\n", polarParams->N); + printf("polarParams->encoderLength = %i\n", polarParams->encoderLength); + printf("polarParams->n_pc = %i\n", polarParams->n_pc); + printf("polarParams->n_pc_wm = %i\n", polarParams->n_pc_wm); + printf("polarParams->groupsize = %i\n", polarParams->groupsize); + printf("polarParams->i_il = %i\n", polarParams->i_il); + printf("polarParams->i_bil = %i\n", polarParams->i_bil); + printf("polarParams->n_max = %i\n", polarParams->n_max); +#endif + // AssertFatal(polarParams->K > 32, "K = %d < 33, is not supported yet\n",polarParams->K); AssertFatal(polarParams->K < 129, "K = %d > 128, is not supported yet\n",polarParams->K); AssertFatal(polarParams->payloadBits < 65, "payload bits = %d > 64, is not supported yet\n",polarParams->payloadBits); @@ -460,6 +517,23 @@ void polar_encoder_fast(uint64_t *A, AssertFatal(bitlen<129,"support for payloads <= 128 bits\n"); // AssertFatal(polarParams->crcParityBits == 24,"support for 24-bit crc only for now\n"); //int bitlen0=bitlen; + +#ifdef POLAR_CODING_DEBUG + int A_array = (bitlen + 63) >> 6; + printf("\nTX\n"); + printf("a: "); + for (int n = 0; n < bitlen; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + int alen = n1 == 0 ? bitlen - (A_array << 6) : 64; + printf("%lu", (A[A_array - 1 - n1] >> (alen - 1 - n2)) & 1); + } + printf("\n"); +#endif + uint64_t tcrc=0; uint8_t offset = 0; @@ -526,7 +600,6 @@ void polar_encoder_fast(uint64_t *A, tcrc = (uint64_t)((crcmask^(crc11(A128_flip,bitlen)>>21)))&0x7ff; } - int n; // this is number of quadwords in the bit string int quadwlen = (polarParams->K+63)/64; @@ -536,27 +609,43 @@ void polar_encoder_fast(uint64_t *A, //??? b_{N'-1} b_{N'-2} ... b_{N'-A} b_{N'-A-1} ... b_{N'-A-Nparity} = a_{N-1} a_{N-2} ... a_{N-A} p_{N_parity-1} ... p_0 uint64_t B[4]= {0}; B[0] = (A[0] << polarParams->crcParityBits) | tcrc; - for (n=1; n n) B[n] = (A[n] << polarParams->crcParityBits) | (A[n-1]>>(64-polarParams->crcParityBits)); else B[n] = (A[n-1]>>(64-polarParams->crcParityBits)); - uint8_t *Bbyte = (uint8_t *)B; +#ifdef POLAR_CODING_DEBUG + int bitlen_B = bitlen + polarParams->crcParityBits; + int B_array = (bitlen_B + 63) >> 6; + int n_start = (B_array << 6) - bitlen_B; + printf("b: "); + for (int n = 0; n < bitlen_B; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = (n + n_start) >> 6; + int n2 = (n + n_start) - (n1 << 6); + printf("%lu", (B[B_array - 1 - n1] >> (63 - n2)) & 1); + } + printf("\n"); +#endif - // for each byte of B, lookup in corresponding table for 64-bit word corresponding to that byte and its position + // TS 38.212 - Section 5.3.1.1 Interleaving + // For each byte of B, lookup in corresponding table for 64-bit word corresponding to that byte and its position uint64_t Cprime[4]= {0}; - if (polarParams->K<65) + uint8_t *Bbyte = (uint8_t *)B; + if (polarParams->K < 65) { Cprime[0] = polarParams->cprime_tab0[0][Bbyte[0]] | - polarParams->cprime_tab0[1][Bbyte[1]] | + polarParams->cprime_tab0[1][Bbyte[1]] | polarParams->cprime_tab0[2][Bbyte[2]] | polarParams->cprime_tab0[3][Bbyte[3]] | polarParams->cprime_tab0[4][Bbyte[4]] | polarParams->cprime_tab0[5][Bbyte[5]] | polarParams->cprime_tab0[6][Bbyte[6]] | polarParams->cprime_tab0[7][Bbyte[7]]; - else if (polarParams->K < 129) { - for (int i=0; i<1+(polarParams->K/8); i++) { + } else if (polarParams->K < 129) { + for (int i = 0; i < 1 + (polarParams->K / 8); i++) { Cprime[0] |= polarParams->cprime_tab0[i][Bbyte[i]]; Cprime[1] |= polarParams->cprime_tab1[i][Bbyte[i]]; } @@ -567,165 +656,73 @@ void polar_encoder_fast(uint64_t *A, for (int i = 0; i < quadwlen; i++) printf("[polar_encoder_fast]C'[%d]= 0x%llx\n", i, (unsigned long long)(Cprime[i])); #endif -#ifdef DEBUG_POLAR_ENCODER - - printf("Polar encoder: (N,K) : (%d,%d)\n",polarParams->N,polarParams->K); - if (polarParams->K<65) - printf("A %llx B %llx Cprime %llx (payload bits %d,crc %lx)\n", - (unsigned long long)(A[0]&(((uint64_t)1<payloadBits, - tcrc); - else if (polarParams->K<129) { - if (bitlen<64) - printf("A %llx B %llx|%llx Cprime %llx|%llx (payload bits %d,crc %lx)\n", - (unsigned long long)(A[0]&(((uint64_t)1<payloadBits, - tcrc); - else - printf("A %llx|%llx B %llx|%llx Cprime %llx|%llx (payload bits %d,crc %x)\n", - (unsigned long long)(A[1]&(((uint64_t)1<<(bitlen-64))-1)),(unsigned long long)(A[0]), - (unsigned long long)(B[1]),(unsigned long long)(B[0]), - (unsigned long long)(Cprime[1]),(unsigned long long)(Cprime[0]), - polarParams->payloadBits, - crc24c((uint8_t *)A,bitlen)>>8); +#ifdef POLAR_CODING_DEBUG + printf("c: "); + for (int n = 0; n < bitlen_B; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + printf("%lu", (Cprime[n1] >> n2) & 1); } - - #endif - /* printf("Bbytes : %x.%x.%x.%x.%x.%x.%x.%x\n",Bbyte[0],Bbyte[1],Bbyte[2],Bbyte[3],Bbyte[4],Bbyte[5],Bbyte[6],Bbyte[7]); - printf("%llx,%llx,%llx,%llx,%llx,%llx,%llx,%llx\n",polarParams->cprime_tab[0][Bbyte[0]] , - polarParams->cprime_tab[1][Bbyte[1]] , - polarParams->cprime_tab[2][Bbyte[2]] , - polarParams->cprime_tab[3][Bbyte[3]] , - polarParams->cprime_tab[4][Bbyte[4]] , - polarParams->cprime_tab[5][Bbyte[5]] , - polarParams->cprime_tab[6][Bbyte[6]] , - polarParams->cprime_tab[7][Bbyte[7]]);*/ - // now do Gu product (here using 64-bit XORs, we can also do with SIMD after) - // here we're reading out the bits LSB -> MSB, is this correct w.r.t. 3GPP ? - uint64_t Cprime_i; - /* printf("%llx Cprime_0 (%llx) G %llx,%llx,%llx,%llx,%llx,%llx,%llx,%llx\n",Cprime_i,Cprime &1, - polarParams->G_N_tab[0][0], - polarParams->G_N_tab[0][1], - polarParams->G_N_tab[0][2], - polarParams->G_N_tab[0][3], - polarParams->G_N_tab[0][4], - polarParams->G_N_tab[0][5], - polarParams->G_N_tab[0][6], - polarParams->G_N_tab[0][7]);*/ - uint64_t D[8]= {0,0,0,0,0,0,0,0}; - int off=0; - int len=polarParams->K; - - if (polarParams->N==512) { - for (int j=0; j<(1+(polarParams->K>>6)); j++,off+=64,len-=64) { - for (int i=0; i<((len>63) ? 64 : len); i++) { - Cprime_i = -((Cprime[j]>>i)&1); // this converts bit 0 as, 0 => 0000x00, 1 => 1111x11 - /* - #ifdef DEBUG_POLAR_ENCODER - printf("%llx Cprime_%d (%llx) G %llx,%llx,%llx,%llx,%llx,%llx,%llx,%llx\n", - Cprime_i,off+i,(Cprime[j]>>i) &1, - polarParams->G_N_tab[off+i][0], - polarParams->G_N_tab[off+i][1], - polarParams->G_N_tab[off+i][2], - polarParams->G_N_tab[off+i][3], - polarParams->G_N_tab[off+i][4], - polarParams->G_N_tab[off+i][5], - polarParams->G_N_tab[off+i][6], - polarParams->G_N_tab[off+i][7]); - #endif - */ - uint64_t *Gi=polarParams->G_N_tab[off+i]; - D[0] ^= (Cprime_i & Gi[0]); - D[1] ^= (Cprime_i & Gi[1]); - D[2] ^= (Cprime_i & Gi[2]); - D[3] ^= (Cprime_i & Gi[3]); - D[4] ^= (Cprime_i & Gi[4]); - D[5] ^= (Cprime_i & Gi[5]); - D[6] ^= (Cprime_i & Gi[6]); - D[7] ^= (Cprime_i & Gi[7]); - -#ifdef DEBUG_POLAR_ENCODER - printf("D %llx,%llx,%llx,%llx,%llx,%llx,%llx,%llx\n", - D[0], - D[1], - D[2], - D[3], - D[4], - D[5], - D[6], - D[7]); + printf("\n"); #endif - } + + uint64_t u[16] = {0}; + nr_polar_generate_u(u, + Cprime, + polarParams->information_bit_pattern, + polarParams->parity_check_bit_pattern, + polarParams->N, + polarParams->n_pc); + +#ifdef POLAR_CODING_DEBUG + int N_array = polarParams->N >> 6; + printf("u: "); + for (int n = 0; n < polarParams->N; n++) { + if (n % 4 == 0) { + printf(" "); } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + printf("%lu", (u[N_array - 1 - n1] >> (63 - n2)) & 1); } - else if (polarParams->N==256) { - for (int j=0; j<(1+(polarParams->K>>6)); j++,off+=64,len-=64) { - for (int i=0; i<((len>63) ? 64 : len); i++) { - Cprime_i = -((Cprime[j]>>i)&1); // this converts bit 0 as, 0 => 0000x00, 1 => 1111x11 - /* - #ifdef DEBUG_POLAR_ENCODER - printf("%llx Cprime_%d (%llx) G %llx,%llx,%llx,%llx\n", - Cprime_i,off+i,(Cprime[j]>>i) &1, - polarParams->G_N_tab[off+i][0], - polarParams->G_N_tab[off+i][1], - polarParams->G_N_tab[off+i][2], - polarParams->G_N_tab[off+i][3], - #endif - */ - uint64_t *Gi=polarParams->G_N_tab[off+i]; - D[0] ^= (Cprime_i & Gi[0]); - D[1] ^= (Cprime_i & Gi[1]); - D[2] ^= (Cprime_i & Gi[2]); - D[3] ^= (Cprime_i & Gi[3]); - - -#ifdef DEBUG_POLAR_ENCODER - printf("D %llx,%llx,%llx,%llx\n", - D[0], - D[1], - D[2], - D[3]); + printf("\n"); #endif - } + + uint64_t D[8] = {0}; + nr_polar_uxG(D, u, (const uint64_t **)polarParams->G_N_tab, polarParams->N); + +#ifdef POLAR_CODING_DEBUG + printf("d: "); + for (int n = 0; n < polarParams->N; n++) { + if (n % 4 == 0) { + printf(" "); } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + printf("%lu", (D[n1] >> n2) & 1); } - else if (polarParams->N==128) { - for (int j=0; j<(1+(polarParams->K>>6)); j++,off+=64,len-=64) { - for (int i=0; i<((len>63) ? 64 : len); i++) { - Cprime_i = -((Cprime[j]>>i)&1); // this converts bit 0 as, 0 => 0000x00, 1 => 1111x11 - - #ifdef DEBUG_POLAR_ENCODER - printf("%lx Cprime_%d (%d+%d) (%llx) G %llx,%llx\n", - Cprime_i,off+i,off,i,(Cprime[j]>>i) &1, - polarParams->G_N_tab[off+i][0], - polarParams->G_N_tab[off+i][1]); - #endif - - uint64_t *Gi=polarParams->G_N_tab[off+i]; - D[0] ^= (Cprime_i & Gi[0]); - D[1] ^= (Cprime_i & Gi[1]); - - -#ifdef DEBUG_POLAR_ENCODER - printf("D %llx,%llx\n", - D[0], - D[1]); + printf("\n"); #endif - } - } - } else if (polarParams->N == 64) { - for (int i = 0; i < ((len > 63) ? 64 : len); i++) { - Cprime_i = -((Cprime[0] >> i) & 1); - D[0] ^= (Cprime_i & polarParams->G_N_tab[off + i][0]); - } - } + memset((void*)out,0,polarParams->encoderLength>>3); polar_rate_matching(polarParams,(void *)D, out); - polarReturn; +#ifdef POLAR_CODING_DEBUG + uint64_t *out64 = (uint64_t *)out; + printf("rm:"); + for (int n = 0; n < polarParams->encoderLength; n++) { + if (n % 4 == 0) { + printf(" "); + } + int n1 = n >> 6; + int n2 = n - (n1 << 6); + printf("%lu", (out64[n1] >> n2) & 1); + } + printf("\n"); +#endif + polarReturn; } diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c index 26832fd70c..4df7557495 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c @@ -32,6 +32,117 @@ #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" + +// TS 38.212 - Section 5.3.1.2 Polar encoding +void nr_polar_generate_u(uint64_t *u, + const uint64_t *Cprime, + const uint8_t *information_bit_pattern, + const uint8_t *parity_check_bit_pattern, + uint16_t N, + uint8_t n_pc) +{ + int N_array = N >> 6; + int k = 0; + + if (n_pc > 0) { + uint64_t y0 = 0, y1 = 0, y2 = 0, y3 = 0, y4 = 0; + + for (int n = 0; n < N; n++) { + uint64_t yt = y0; + y0 = y1; + y1 = y2; + y2 = y3; + y3 = y4; + y4 = yt; + + if (information_bit_pattern[n] == 1) { + int n1 = n >> 6; + int n2 = n - (n1 << 6); + if (parity_check_bit_pattern[n] == 1) { + u[N_array - 1 - n1] |= y0 << (63 - n2); + } else { + int k1 = k >> 6; + int k2 = k - (k1 << 6); + uint64_t bit = (Cprime[k1] >> k2) & 1; + u[N_array - 1 - n1] |= bit << (63 - n2); + k++; + y0 = y0 ^ (int)bit; + } + } + } + + } else { + for (int n = 0; n < N; n++) { + if (information_bit_pattern[n] == 1) { + int n1 = n >> 6; + int n2 = n - (n1 << 6); + int k1 = k >> 6; + int k2 = k - (k1 << 6); + uint64_t bit = (Cprime[k1] >> k2) & 1; + u[N_array - 1 - n1] |= bit << (63 - n2); + k++; + } + } + } +} + +void nr_polar_info_extraction_from_u(uint64_t *Cprime, + const uint8_t *u, + const uint8_t *information_bit_pattern, + const uint8_t *parity_check_bit_pattern, + uint16_t N, + uint8_t n_pc) +{ + int k = 0; + + if (n_pc > 0) { + for (int n = 0; n < N; n++) { + if (information_bit_pattern[n] == 1) { + if (parity_check_bit_pattern[n] == 0) { + int k1 = k >> 6; + int k2 = k - (k1 << 6); + Cprime[k1] |= (uint64_t)u[n] << k2; + k++; + } + } + } + + } else { + for (int n = 0; n < N; n++) { + if (information_bit_pattern[n] == 1) { + int k1 = k >> 6; + int k2 = k - (k1 << 6); + Cprime[k1] |= (uint64_t)u[n] << k2; + k++; + } + } + } +} + +void nr_polar_uxG(uint64_t *D, const uint64_t *u, const uint64_t **G_N_tab, uint16_t N) +{ + int N_array = N >> 6; + + for (int n = 0; n < N; n++) { + const uint64_t *Gn = G_N_tab[N - 1 - n]; + + int n_ones = 0; + for (int a = 0; a < N_array; a++) { + uint64_t uxG = u[a] & Gn[a]; + for (int m = 0; m < 64; m++) { + if (((uxG >> m) & 1) == 1) { + n_ones++; + } + } + } + uint64_t bit = n_ones % 2; + + int n1 = n >> 6; + int n2 = n - (n1 << 6); + D[n1] |= bit << n2; + } +} + void nr_polar_bit_insertion(uint8_t *input, uint8_t *output, uint16_t N, @@ -138,14 +249,17 @@ void nr_polar_channel_interleaver_pattern(uint16_t *cip, void nr_polar_info_bit_pattern(uint8_t *ibp, - int16_t *Q_I_N, - int16_t *Q_F_N, - uint16_t *J, - const uint16_t *Q_0_Nminus1, - uint16_t K, - uint16_t N, - uint16_t E, - uint8_t n_PC) + uint8_t *pcbp, + int16_t *Q_I_N, + int16_t *Q_F_N, + int16_t *Q_PC_N, + const uint16_t *J, + const uint16_t *Q_0_Nminus1, + uint16_t K, + uint16_t N, + uint16_t E, + uint8_t n_PC, + uint8_t n_pc_wm) { int16_t *Q_Ftmp_N = malloc(sizeof(int16_t) * (N + 1)); // Last element shows the final int16_t *Q_Itmp_N = malloc(sizeof(int16_t) * (N + 1)); // array index assigned a value. @@ -159,44 +273,44 @@ void nr_polar_info_bit_pattern(uint8_t *ibp, uint16_t limit, ind; if (E < N) { - if ((K / (double) E) <= (7.0 / 16)) { //puncturing + if ((K / (double)E) <= (7.0 / 16)) { // puncturing for (int n = 0; n <= N - E - 1; n++) { - ind = Q_Ftmp_N[N] + 1; - Q_Ftmp_N[ind] = J[n]; - Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; + ind = Q_Ftmp_N[N] + 1; + Q_Ftmp_N[ind] = J[n]; + Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; } - if ((E / (double) N) >= (3.0 / 4)) { - limit = ceil((double) (3 * N - 2 * E) / 4); - for (int n = 0; n <= limit - 1; n++) { - ind = Q_Ftmp_N[N] + 1; - Q_Ftmp_N[ind] = n; - Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; - } + if ((E / (double)N) >= (3.0 / 4)) { + limit = ceil((double)(3 * N - 2 * E) / 4); + for (int n = 0; n <= limit - 1; n++) { + ind = Q_Ftmp_N[N] + 1; + Q_Ftmp_N[ind] = n; + Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; + } } else { - limit = ceil((double) (9 * N - 4 * E) / 16); - for (int n = 0; n <= limit - 1; n++) { - ind = Q_Ftmp_N[N] + 1; - Q_Ftmp_N[ind] = n; - Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; - } + limit = ceil((double)(9 * N - 4 * E) / 16); + for (int n = 0; n <= limit - 1; n++) { + ind = Q_Ftmp_N[N] + 1; + Q_Ftmp_N[ind] = n; + Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; + } } - } else { //shortening + } else { // shortening for (int n = E; n <= N - 1; n++) { - ind = Q_Ftmp_N[N] + 1; - Q_Ftmp_N[ind] = J[n]; - Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; + ind = Q_Ftmp_N[N] + 1; + Q_Ftmp_N[ind] = J[n]; + Q_Ftmp_N[N] = Q_Ftmp_N[N] + 1; } } } - //Q_I,tmp_N = Q_0_N-1 \ Q_F,tmp_N + // Q_I,tmp_N = Q_0_N-1 \ Q_F,tmp_N for (int n = 0; n <= N - 1; n++) { flag = 1; for (int m = 0; m <= Q_Ftmp_N[N]; m++) { if (Q_0_Nminus1[n] == Q_Ftmp_N[m]) { - flag = 0; - break; + flag = 0; + break; } } if (flag) { @@ -205,19 +319,26 @@ void nr_polar_info_bit_pattern(uint8_t *ibp, } } - //Q_I_N comprises (K+n_PC) most reliable bit indices in Q_I,tmp_N + // Q_I_N comprises (K+n_PC) most reliable bit indices in Q_I,tmp_N for (int n = 0; n <= (K + n_PC) - 1; n++) { ind = Q_Itmp_N[N] + n - ((K + n_PC) - 1); Q_I_N[n] = Q_Itmp_N[ind]; } - //Q_F_N = Q_0_N-1 \ Q_I_N + if (n_PC > 0) { + AssertFatal(n_pc_wm == 0, "Q_PC_N computation for n_pc_wm = %i is not implemented yet!\n", n_pc_wm); + for (int n = 0; n < n_PC - n_pc_wm; n++) { + Q_PC_N[n] = Q_I_N[n]; + } + } + + // Q_F_N = Q_0_N-1 \ Q_I_N for (int n = 0; n <= N - 1; n++) { flag = 1; for (int m = 0; m <= (K + n_PC) - 1; m++) { if (Q_0_Nminus1[n] == Q_I_N[m]) { - flag = 0; - break; + flag = 0; + break; } } if (flag) { @@ -226,16 +347,25 @@ void nr_polar_info_bit_pattern(uint8_t *ibp, } } - //Information Bit Pattern + // Information and Parity Chack Bit Pattern for (int n = 0; n <= N - 1; n++) { - ibp[n] = 0; + ibp[n] = 0; for (int m = 0; m <= (K + n_PC) - 1; m++) { if (n == Q_I_N[m]) { - ibp[n] = 1; - break; + ibp[n] = 1; + break; } } + + pcbp[n] = 0; + for (int m = 0; m < n_PC - n_pc_wm; m++) { + if (n == Q_PC_N[m]) { + pcbp[n] = 1; + break; + } + } + } free(Q_Ftmp_N); @@ -325,23 +455,75 @@ void nr_polar_rate_matching(double *input, } } -void nr_polar_rate_matching_int16(int16_t *input, - int16_t *output, - uint16_t *rmp, - uint16_t K, - uint16_t N, - uint16_t E) +/* + * De-interleaving of coded bits implementation + * TS 138.212: Section 5.4.1.3 - Interleaving of coded bits + */ +void nr_polar_rm_deinterleaving_cb(const int16_t *in, int16_t *out, const uint16_t E) { - if (E>=N) { //repetition - memset((void*)output,0,N*sizeof(int16_t)); - for (int i=0; i<=E-1; i++) output[rmp[i]]+=input[i]; - } else { - if ( (K/(double)E) <= (7.0/16) ) memset((void*)output,0,N*sizeof(int16_t)); //puncturing - else { //shortening - for (int i=0; i<=N-1; i++) output[i]=32767;//instead of INFINITY, to prevent [-Woverflow] + int T = ceil((sqrt(8 * E + 1) - 1) / 2); + int v_tab[T][T]; + int k = 0; + for (int i = 0; i < T; i++) { + memset(v_tab[i], 0, T * sizeof(int)); + for (int j = 0; j < T - i; j++) { + if (k < E) { + v_tab[i][j] = k + 1; + } + k++; } + } - for (int i=0; i<=E-1; i++) output[rmp[i]]=input[i]; - + int v[T][T]; + k = 0; + for (int j = 0; j < T; j++) { + for (int i = 0; i < T - j; i++) { + if (k < E && v_tab[i][j] != 0) { + v[i][j] = in[k]; + k++; + } else { + v[i][j] = INT_MAX; + } + } + } + + k = 0; + memset(out, 0, E * sizeof(int16_t)); + for (int i = 0; i < T; i++) { + for (int j = 0; j < T - i; j++) { + if (v[i][j] != INT_MAX) { + out[k] = v[i][j]; + k++; + } + } + } +} + +void nr_polar_rate_matching_int16(int16_t *input, + int16_t *output, + const uint16_t *rmp, + const uint16_t K, + const uint16_t N, + const uint16_t E, + const uint8_t i_bil) +{ + if (i_bil == 1) { + nr_polar_rm_deinterleaving_cb(input, input, E); + } + + if (E >= N) { // repetition + memset((void *)output, 0, N * sizeof(int16_t)); + for (int i = 0; i <= E - 1; i++) + output[rmp[i]] += input[i]; + } else { + if ((K / (double)E) <= (7.0 / 16)) + memset((void *)output, 0, N * sizeof(int16_t)); // puncturing + else { // shortening + for (int i = 0; i <= N - 1; i++) + output[i] = 32767; // instead of INFINITY, to prevent [-Woverflow] + } + + for (int i = 0; i <= E - 1; i++) + output[rmp[i]] = input[i]; } } diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c index 4a88417a13..bbc51f416b 100644 --- a/openair1/PHY/CODING/nr_polar_init.c +++ b/openair1/PHY/CODING/nr_polar_init.c @@ -49,9 +49,9 @@ static void nr_polar_delete_list(t_nrPolar_params * polarParams) { delete_decoder_tree(polarParams); //From build_polar_tables() - for (int k=0; k < polarParams->K + polarParams->n_pc; k++) - if (polarParams->G_N_tab[k]) - free(polarParams->G_N_tab[k]); + for (int n=0; n < polarParams->N; n++) + if (polarParams->G_N_tab[n]) + free(polarParams->G_N_tab[n]); free(polarParams->G_N_tab); free(polarParams->rm_tab); if (polarParams->crc_generator_matrix) @@ -71,6 +71,7 @@ static void nr_polar_delete_list(t_nrPolar_params * polarParams) { free(polarParams->deinterleaving_pattern); free(polarParams->rate_matching_pattern); free(polarParams->information_bit_pattern); + free(polarParams->parity_check_bit_pattern); free(polarParams->Q_I_N); free(polarParams->Q_F_N); free(polarParams->Q_PC_N); @@ -234,6 +235,7 @@ t_nrPolar_params *nr_polar_params(int8_t messageType, uint16_t messageLength, ui newPolarInitNode->N, newPolarInitNode->encoderLength); newPolarInitNode->information_bit_pattern = malloc(sizeof(uint8_t) * newPolarInitNode->N); + newPolarInitNode->parity_check_bit_pattern = malloc(sizeof(uint8_t) * newPolarInitNode->N); newPolarInitNode->Q_I_N = malloc(sizeof(int16_t) * (newPolarInitNode->K + newPolarInitNode->n_pc)); newPolarInitNode->Q_F_N = malloc( sizeof(int16_t) * (newPolarInitNode->N + 1)); // Last element shows the final array index assigned a value. newPolarInitNode->Q_PC_N = malloc( sizeof(int16_t) * (newPolarInitNode->n_pc)); @@ -242,14 +244,18 @@ t_nrPolar_params *nr_polar_params(int8_t messageType, uint16_t messageLength, ui newPolarInitNode->Q_F_N[i] = -1; // Empty array. nr_polar_info_bit_pattern(newPolarInitNode->information_bit_pattern, + newPolarInitNode->parity_check_bit_pattern, newPolarInitNode->Q_I_N, newPolarInitNode->Q_F_N, + newPolarInitNode->Q_PC_N, J, newPolarInitNode->Q_0_Nminus1, newPolarInitNode->K, newPolarInitNode->N, newPolarInitNode->encoderLength, - newPolarInitNode->n_pc); + newPolarInitNode->n_pc, + newPolarInitNode->n_pc_wm); + // sort the Q_I_N array in ascending order (first K positions) qsort((void *)newPolarInitNode->Q_I_N,newPolarInitNode->K,sizeof(int16_t),intcmp); newPolarInitNode->channel_interleaver_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->encoderLength); diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 1fb9ca985f..a09d00b291 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -149,16 +149,16 @@ void init_nr_prs_ue_vars(PHY_VARS_NR_UE *ue) // PRS vars init for(int idx = 0; idx < NR_MAX_PRS_COMB_SIZE; idx++) { - prs_vars[idx] = (NR_UE_PRS *)malloc16_clear(sizeof(NR_UE_PRS)); + prs_vars[idx] = malloc16_clear(sizeof(NR_UE_PRS)); // PRS channel estimates for(int k = 0; k < NR_MAX_PRS_RESOURCES_PER_SET; k++) { - prs_vars[idx]->prs_resource[k].prs_meas = (prs_meas_t **)malloc16_clear( fp->nb_antennas_rx*sizeof(prs_meas_t *) ); + prs_vars[idx]->prs_resource[k].prs_meas = malloc16_clear(fp->nb_antennas_rx * sizeof(prs_meas_t *)); AssertFatal((prs_vars[idx]->prs_resource[k].prs_meas!=NULL), "%s: PRS measurements malloc failed for gNB_id %d\n", __FUNCTION__, idx); for (int j=0; jnb_antennas_rx; j++) { - prs_vars[idx]->prs_resource[k].prs_meas[j] = (prs_meas_t *)malloc16_clear(sizeof(prs_meas_t) ); + prs_vars[idx]->prs_resource[k].prs_meas[j] = malloc16_clear(sizeof(prs_meas_t)); AssertFatal((prs_vars[idx]->prs_resource[k].prs_meas[j]!=NULL), "%s: PRS measurements malloc failed for gNB_id %d, rx_ant %d\n", __FUNCTION__, idx, j); } } @@ -168,23 +168,23 @@ void init_nr_prs_ue_vars(PHY_VARS_NR_UE *ue) RCconfig_nrUE_prs(ue); //PRS sequence init - ue->nr_gold_prs = (uint32_t *****)malloc16(ue->prs_active_gNBs*sizeof(uint32_t ****)); + ue->nr_gold_prs = malloc16(ue->prs_active_gNBs * sizeof(uint32_t ****)); uint32_t *****prs = ue->nr_gold_prs; AssertFatal(prs!=NULL, "%s: positioning reference signal malloc failed\n", __FUNCTION__); for (int gnb = 0; gnb < ue->prs_active_gNBs; gnb++) { - prs[gnb] = (uint32_t ****)malloc16(ue->prs_vars[gnb]->NumPRSResources*sizeof(uint32_t ***)); + prs[gnb] = malloc16(ue->prs_vars[gnb]->NumPRSResources * sizeof(uint32_t ***)); AssertFatal(prs[gnb]!=NULL, "%s: positioning reference signal for gnb %d - malloc failed\n", __FUNCTION__, gnb); for (int rsc = 0; rsc < ue->prs_vars[gnb]->NumPRSResources; rsc++) { - prs[gnb][rsc] = (uint32_t ***)malloc16(fp->slots_per_frame*sizeof(uint32_t **)); + prs[gnb][rsc] = malloc16(fp->slots_per_frame * sizeof(uint32_t **)); AssertFatal(prs[gnb][rsc]!=NULL, "%s: positioning reference signal for gnb %d rsc %d- malloc failed\n", __FUNCTION__, gnb, rsc); for (int slot=0; slotslots_per_frame; slot++) { - prs[gnb][rsc][slot] = (uint32_t **)malloc16(fp->symbols_per_slot*sizeof(uint32_t *)); + prs[gnb][rsc][slot] = malloc16(fp->symbols_per_slot * sizeof(uint32_t *)); AssertFatal(prs[gnb][rsc][slot]!=NULL, "%s: positioning reference signal for gnb %d rsc %d slot %d - malloc failed\n", __FUNCTION__, gnb, rsc, slot); for (int symb=0; symbsymbols_per_slot; symb++) { - prs[gnb][rsc][slot][symb] = (uint32_t *)malloc16(NR_MAX_PRS_INIT_LENGTH_DWORD*sizeof(uint32_t)); + prs[gnb][rsc][slot][symb] = malloc16(NR_MAX_PRS_INIT_LENGTH_DWORD * sizeof(uint32_t)); AssertFatal(prs[gnb][rsc][slot][symb]!=NULL, "%s: positioning reference signal for gnb %d rsc %d slot %d symbol %d - malloc failed\n", __FUNCTION__, gnb, rsc, slot, symb); } // for symb } // for slot @@ -251,19 +251,19 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) // ceil(((NB_RB*6(k)*2(QPSK)/32) // 3 RE *2(QPSK) int pusch_dmrs_init_length = ((fp->N_RB_UL*12)>>5)+1; - ue->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***)); + ue->nr_gold_pusch_dmrs = malloc16(fp->slots_per_frame * sizeof(uint32_t ***)); uint32_t ****pusch_dmrs = ue->nr_gold_pusch_dmrs; for (slot=0; slotslots_per_frame; slot++) { - pusch_dmrs[slot] = (uint32_t ***)malloc16(fp->symbols_per_slot*sizeof(uint32_t **)); + pusch_dmrs[slot] = malloc16(fp->symbols_per_slot * sizeof(uint32_t **)); AssertFatal(pusch_dmrs[slot]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d - malloc failed\n", slot); for (symb=0; symbsymbols_per_slot; symb++) { - pusch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_NB_NSCID*sizeof(uint32_t *)); + pusch_dmrs[slot][symb] = malloc16(NR_NB_NSCID * sizeof(uint32_t *)); AssertFatal(pusch_dmrs[slot][symb]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); for (int q=0; qtx_power_dBm[i]=-127; // init TX buffers - common_vars->txdata = (c16_t **)malloc16(fp->nb_antennas_tx*sizeof(c16_t *)); - common_vars->txdataF = (c16_t **)malloc16(fp->nb_antennas_tx*sizeof(c16_t *)); + common_vars->txData = malloc16(fp->nb_antennas_tx * sizeof(c16_t *)); for (i=0; inb_antennas_tx; i++) { - common_vars->txdata[i] = (c16_t *)malloc16_clear((fp->samples_per_frame) * sizeof(c16_t)); - common_vars->txdataF[i] = (c16_t *)malloc16_clear((fp->samples_per_frame) * sizeof(c16_t)); + common_vars->txData[i] = malloc16_clear((fp->samples_per_frame) * sizeof(c16_t)); } // init RX buffers - common_vars->rxdata = (c16_t **)malloc16( fp->nb_antennas_rx*sizeof(c16_t *)); - common_vars->rxdataF = (c16_t **)malloc16( fp->nb_antennas_rx*sizeof(c16_t *)); + common_vars->rxdata = malloc16(fp->nb_antennas_rx * sizeof(c16_t *)); + common_vars->rxdataF = malloc16(fp->nb_antennas_rx * sizeof(c16_t *)); for (i=0; inb_antennas_rx; i++) { - common_vars->rxdata[i] = (c16_t *)malloc16_clear((2 * (fp->samples_per_frame)+fp->ofdm_symbol_size) * sizeof(c16_t)); - common_vars->rxdataF[i] = (c16_t *)malloc16_clear((2 * (fp->samples_per_frame)+fp->ofdm_symbol_size) * sizeof(c16_t)); + common_vars->rxdata[i] = malloc16_clear((2 * (fp->samples_per_frame) + fp->ofdm_symbol_size) * sizeof(c16_t)); + common_vars->rxdataF[i] = malloc16_clear((2 * (fp->samples_per_frame) + fp->ofdm_symbol_size) * sizeof(c16_t)); } // ceil(((NB_RB<<1)*3)/32) // 3 RE *2(QPSK) int pdcch_dmrs_init_length = (((fp->N_RB_DL<<1)*3)>>5)+1; //PDCCH DMRS init (gNB offset = 0) - ue->nr_gold_pdcch[0] = (uint32_t ***)malloc16(fp->slots_per_frame*sizeof(uint32_t **)); + ue->nr_gold_pdcch[0] = malloc16(fp->slots_per_frame * sizeof(uint32_t **)); uint32_t ***pdcch_dmrs = ue->nr_gold_pdcch[0]; AssertFatal(pdcch_dmrs!=NULL, "NR init: pdcch_dmrs malloc failed\n"); for (int slot=0; slotslots_per_frame; slot++) { - pdcch_dmrs[slot] = (uint32_t **)malloc16(fp->symbols_per_slot*sizeof(uint32_t *)); + pdcch_dmrs[slot] = malloc16(fp->symbols_per_slot * sizeof(uint32_t *)); AssertFatal(pdcch_dmrs[slot]!=NULL, "NR init: pdcch_dmrs for slot %d - malloc failed\n", slot); for (int symb=0; symbsymbols_per_slot; symb++) { - pdcch_dmrs[slot][symb] = (uint32_t *)malloc16(pdcch_dmrs_init_length*sizeof(uint32_t)); + pdcch_dmrs[slot][symb] = malloc16(pdcch_dmrs_init_length * sizeof(uint32_t)); AssertFatal(pdcch_dmrs[slot][symb]!=NULL, "NR init: pdcch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); } } @@ -329,19 +327,19 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) int pdsch_dmrs_init_length = ((fp->N_RB_DL*12)>>5)+1; //PDSCH DMRS init (eNB offset = 0) - ue->nr_gold_pdsch[0] = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***)); + ue->nr_gold_pdsch[0] = malloc16(fp->slots_per_frame * sizeof(uint32_t ***)); uint32_t ****pdsch_dmrs = ue->nr_gold_pdsch[0]; for (int slot=0; slotslots_per_frame; slot++) { - pdsch_dmrs[slot] = (uint32_t ***)malloc16(fp->symbols_per_slot*sizeof(uint32_t **)); + pdsch_dmrs[slot] = malloc16(fp->symbols_per_slot * sizeof(uint32_t **)); AssertFatal(pdsch_dmrs[slot]!=NULL, "NR init: pdsch_dmrs for slot %d - malloc failed\n", slot); for (int symb=0; symbsymbols_per_slot; symb++) { - pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_NB_NSCID*sizeof(uint32_t *)); + pdsch_dmrs[slot][symb] = malloc16(NR_NB_NSCID * sizeof(uint32_t *)); AssertFatal(pdsch_dmrs[slot][symb]!=NULL, "NR init: pdsch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); for (int q=0; qn_connected_gNB; gNB_id++) { - prach_vars[gNB_id] = (NR_UE_PRACH *)malloc16_clear(sizeof(NR_UE_PRACH)); - csiim_vars[gNB_id] = (NR_UE_CSI_IM *)malloc16_clear(sizeof(NR_UE_CSI_IM)); - csirs_vars[gNB_id] = (NR_UE_CSI_RS *)malloc16_clear(sizeof(NR_UE_CSI_RS)); - srs_vars[gNB_id] = (NR_UE_SRS *)malloc16_clear(sizeof(NR_UE_SRS)); + prach_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_PRACH)); + csiim_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_CSI_IM)); + csirs_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_CSI_RS)); + srs_vars[gNB_id] = malloc16_clear(sizeof(NR_UE_SRS)); csiim_vars[gNB_id]->active = false; csirs_vars[gNB_id]->active = false; @@ -360,24 +358,23 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) // ceil((NB_RB*8(max allocation per RB)*2(QPSK))/32) int csi_dmrs_init_length = ((fp->N_RB_DL<<4)>>5)+1; - ue->nr_csi_info = (nr_csi_info_t *)malloc16_clear(sizeof(nr_csi_info_t)); - ue->nr_csi_info->nr_gold_csi_rs = (uint32_t ***)malloc16(fp->slots_per_frame * sizeof(uint32_t **)); + ue->nr_csi_info = malloc16_clear(sizeof(nr_csi_info_t)); + ue->nr_csi_info->nr_gold_csi_rs = malloc16(fp->slots_per_frame * sizeof(uint32_t **)); AssertFatal(ue->nr_csi_info->nr_gold_csi_rs != NULL, "NR init: csi reference signal malloc failed\n"); for (int slot=0; slotslots_per_frame; slot++) { - ue->nr_csi_info->nr_gold_csi_rs[slot] = (uint32_t **)malloc16(fp->symbols_per_slot * sizeof(uint32_t *)); + ue->nr_csi_info->nr_gold_csi_rs[slot] = malloc16(fp->symbols_per_slot * sizeof(uint32_t *)); AssertFatal(ue->nr_csi_info->nr_gold_csi_rs[slot] != NULL, "NR init: csi reference signal for slot %d - malloc failed\n", slot); for (int symb=0; symbsymbols_per_slot; symb++) { - ue->nr_csi_info->nr_gold_csi_rs[slot][symb] = (uint32_t *)malloc16(csi_dmrs_init_length * sizeof(uint32_t)); + ue->nr_csi_info->nr_gold_csi_rs[slot][symb] = malloc16(csi_dmrs_init_length * sizeof(uint32_t)); AssertFatal(ue->nr_csi_info->nr_gold_csi_rs[slot][symb] != NULL, "NR init: csi reference signal for slot %d symbol %d - malloc failed\n", slot, symb); } } - ue->nr_csi_info->csi_rs_generated_signal = (int32_t **)malloc16(NR_MAX_NB_PORTS * sizeof(int32_t *) ); + ue->nr_csi_info->csi_rs_generated_signal = malloc16(NR_MAX_NB_PORTS * sizeof(int32_t *)); for (i=0; inr_csi_info->csi_rs_generated_signal[i] = (int32_t *) malloc16_clear(fp->samples_per_frame_wCP * sizeof(int32_t)); + ue->nr_csi_info->csi_rs_generated_signal[i] = malloc16_clear(fp->samples_per_frame_wCP * sizeof(int32_t)); } - ue->nr_srs_info = (nr_srs_info_t *)malloc16_clear(sizeof(nr_srs_info_t)); - + ue->nr_srs_info = malloc16_clear(sizeof(nr_srs_info_t)); } ue->init_averaging = 1; @@ -411,12 +408,10 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) NR_UE_COMMON* common_vars = &ue->common_vars; for (int i = 0; i < fp->nb_antennas_tx; i++) { - free_and_zero(common_vars->txdata[i]); - free_and_zero(common_vars->txdataF[i]); + free_and_zero(common_vars->txData[i]); } - free_and_zero(common_vars->txdata); - free_and_zero(common_vars->txdataF); + free_and_zero(common_vars->txData); for (int i = 0; i < fp->nb_antennas_rx; i++) { free_and_zero(common_vars->rxdata[i]); diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c index c444440451..ca28d94ae1 100644 --- a/openair1/PHY/INIT/nr_parms.c +++ b/openair1/PHY/INIT/nr_parms.c @@ -173,7 +173,7 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, int N_RB_DL) N_RB_DL,fp->first_carrier_offset,fp->nb_prefix_samples,fp->nb_prefix_samples0, fp->ofdm_symbol_size); } -uint32_t get_samples_per_slot(int slot, NR_DL_FRAME_PARMS* fp) +uint32_t get_samples_per_slot(int slot, const NR_DL_FRAME_PARMS *fp) { uint32_t samp_count; @@ -185,7 +185,7 @@ uint32_t get_samples_per_slot(int slot, NR_DL_FRAME_PARMS* fp) return samp_count; } -uint32_t get_slot_from_timestamp(openair0_timestamp timestamp_rx, NR_DL_FRAME_PARMS* fp) +uint32_t get_slot_from_timestamp(openair0_timestamp timestamp_rx, const NR_DL_FRAME_PARMS *fp) { uint32_t slot_idx = 0; int samples_till_the_slot = fp->get_samples_per_slot(slot_idx,fp)-1; @@ -198,7 +198,7 @@ uint32_t get_slot_from_timestamp(openair0_timestamp timestamp_rx, NR_DL_FRAME_PA return slot_idx; } -uint32_t get_samples_slot_timestamp(int slot, NR_DL_FRAME_PARMS* fp, uint8_t sl_ahead) +uint32_t get_samples_slot_timestamp(int slot, const NR_DL_FRAME_PARMS *fp, uint8_t sl_ahead) { uint32_t samp_count = 0; diff --git a/openair1/PHY/MODULATION/modulation_common.h b/openair1/PHY/MODULATION/modulation_common.h index d1546da9b5..06b595fbe3 100644 --- a/openair1/PHY/MODULATION/modulation_common.h +++ b/openair1/PHY/MODULATION/modulation_common.h @@ -49,7 +49,7 @@ void PHY_ofdm_mod(int *input, void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRAME_PARMS *frame_parms); -void nr_normal_prefix_mod(c16_t *txdataF, c16_t *txdata, uint8_t nsymb, NR_DL_FRAME_PARMS *frame_parms, uint32_t slot); +void nr_normal_prefix_mod(c16_t *txdataF, c16_t *txdata, uint8_t nsymb, const NR_DL_FRAME_PARMS *frame_parms, uint32_t slot); void do_OFDM_mod(c16_t **txdataF, c16_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); diff --git a/openair1/PHY/MODULATION/nr_modulation.h b/openair1/PHY/MODULATION/nr_modulation.h index 8c530676cd..be3cc33afc 100644 --- a/openair1/PHY/MODULATION/nr_modulation.h +++ b/openair1/PHY/MODULATION/nr_modulation.h @@ -108,9 +108,9 @@ int nr_beam_precoding(c16_t **txdataF, int offset ); -void apply_nr_rotation_TX(NR_DL_FRAME_PARMS *fp, +void apply_nr_rotation_TX(const NR_DL_FRAME_PARMS *fp, c16_t *txdataF, - c16_t *symbol_rotation, + const c16_t *symbol_rotation, int slot, int nb_rb, int first_symbol, diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 45261b1fdb..7bd0c9d839 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -64,7 +64,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA } -void nr_normal_prefix_mod(c16_t *txdataF, c16_t *txdata, uint8_t nsymb, NR_DL_FRAME_PARMS *frame_parms, uint32_t slot) +void nr_normal_prefix_mod(c16_t *txdataF, c16_t *txdata, uint8_t nsymb, const NR_DL_FRAME_PARMS *frame_parms, uint32_t slot) { // This function works only slot wise. For more generic symbol generation refer nr_feptx0() if (frame_parms->numerology_index != 0) { // case where numerology != 0 @@ -334,9 +334,9 @@ void do_OFDM_mod(c16_t **txdataF, c16_t **txdata, uint32_t frame,uint16_t next_s } -void apply_nr_rotation_TX(NR_DL_FRAME_PARMS *fp, +void apply_nr_rotation_TX(const NR_DL_FRAME_PARMS *fp, c16_t *txdataF, - c16_t *symbol_rotation, + const c16_t *symbol_rotation, int slot, int nb_rb, int first_symbol, @@ -347,7 +347,7 @@ void apply_nr_rotation_TX(NR_DL_FRAME_PARMS *fp, symbol_rotation += symb_offset; for (int sidx = first_symbol; sidx < first_symbol + nsymb; sidx++) { - c16_t *this_rotation = symbol_rotation + sidx; + const c16_t *this_rotation = symbol_rotation + sidx; c16_t *this_symbol = (txdataF) + sidx * fp->ofdm_symbol_size; LOG_D(PHY,"Rotating symbol %d, slot %d, symbol_subframe_index %d (%d,%d)\n", diff --git a/openair1/PHY/NR_REFSIG/sss_nr.h b/openair1/PHY/NR_REFSIG/sss_nr.h index 38d6e72819..7292cc0f02 100644 --- a/openair1/PHY/NR_REFSIG/sss_nr.h +++ b/openair1/PHY/NR_REFSIG/sss_nr.h @@ -75,11 +75,11 @@ void free_context_sss_nr(void); void insert_sss_nr(int16_t *sss_time, NR_DL_FRAME_PARMS *frame_parms); -int rx_sss_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - int32_t *tot_metric, - uint8_t *phase_max, - int *freq_offset_sss, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); +bool rx_sss_nr(PHY_VARS_NR_UE *ue, + UE_nr_rxtx_proc_t *proc, + int32_t *tot_metric, + uint8_t *phase_max, + int *freq_offset_sss, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); #endif /* SSS_NR_H */ diff --git a/openair1/PHY/NR_TRANSPORT/nr_prach.h b/openair1/PHY/NR_TRANSPORT/nr_prach.h index 8df4ca9609..ba170e593d 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_prach.h +++ b/openair1/PHY/NR_TRANSPORT/nr_prach.h @@ -30,7 +30,7 @@ * \warning */ -extern int16_t nr_ru[2 * 839]; // quantized roots of unity +extern c16_t nr_ru[839]; // quantized roots of unity extern uint16_t nr_du[838]; static const char* const prachfmt[] = {"0", "1", "2", "3", "A1", "A2", "A3", "B1", "B4", "C0", "C2", "A1/B1", "A2/B2", "A3/B3"}; diff --git a/openair1/PHY/NR_TRANSPORT/nr_prach_common.c b/openair1/PHY/NR_TRANSPORT/nr_prach_common.c index 0b32aac849..5933e84cbb 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_prach_common.c +++ b/openair1/PHY/NR_TRANSPORT/nr_prach_common.c @@ -38,7 +38,7 @@ #include "common/utils/LOG/log.h" #include "common/utils/LOG/vcd_signal_dumper.h" #include "T.h" -int16_t nr_ru[2 * 839]; // quantized roots of unity +c16_t nr_ru[839]; // quantized roots of unity static uint32_t nr_ZC_inv[839]; // multiplicative inverse for roots u uint16_t nr_du[838]; @@ -97,11 +97,8 @@ void nr_fill_du(uint16_t N_ZC, const uint16_t *prach_root_sequence_map) } -void compute_nr_prach_seq(uint8_t short_sequence, - uint8_t num_sequences, - uint8_t rootSequenceIndex, - uint32_t X_u[64][839]){ - +void compute_nr_prach_seq(uint8_t short_sequence, uint8_t num_sequences, uint8_t rootSequenceIndex, c16_t X_u[64][839]) +{ // Compute DFT of x_u => X_u[k] = x_u(inv(u)*k)^* X_u[k] = exp(j\pi u*inv(u)*k*(inv(u)*k+1)/N_ZC) unsigned int k,inv_u,i; int N_ZC; @@ -147,7 +144,7 @@ void compute_nr_prach_seq(uint8_t short_sequence, for (k=0; kprb_size; // prb size is 1 - int32_t rp[frame_parms->nb_antennas_rx][pucch_pdu->nr_of_symbols][nb_re_pucch],*tmp_rp; + int32_t rp[frame_parms->nb_antennas_rx][pucch_pdu->nr_of_symbols][nb_re_pucch]; + memset(rp, 0, sizeof(rp)); + int32_t *tmp_rp = NULL; for (int l=0; lnr_of_symbols; l++) { uint8_t l2 = l + pucch_pdu->start_symbol_index; @@ -1169,7 +1171,9 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, int nb_re_pucch = 12*pucch_pdu->prb_size; - int16_t rp[Prx2][2][nb_re_pucch*2],*tmp_rp; + int16_t rp[Prx2][2][nb_re_pucch*2]; + memset(rp, 0, sizeof(rp)); + int16_t *tmp_rp = NULL; __m64 dmrs_re,dmrs_im; for (int aa=0;aaframe_parms.first_carrier_offset) / 12; - if (is_SI) { - rb_offset -= BWPStart; - } int8_t delta = get_delta(p, config_type); // checking if re-initialization of scrambling IDs is needed diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index 11dad31602..19bc2f410c 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -80,13 +80,13 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, - bool is_SI, unsigned short p, unsigned char symbol, unsigned char nscid, unsigned short scrambling_id, unsigned short BWPStart, uint8_t config_type, + uint16_t rb_offset, unsigned short bwp_start_subcarrier, unsigned short nb_rb_pdsch, uint32_t pdsch_est_size, diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 74e5f4ce30..3d1d9b8c73 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -671,8 +671,6 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { - uint32_t frame = proc->frame_rx; - uint32_t slot = proc->nr_slot_rx; NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; uint8_t log2_maxh, aarx; @@ -730,11 +728,10 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, log2_maxh = (log2_approx(avgs) / 2) + 5; //+frame_parms->nb_antennas_rx; #ifdef UE_DEBUG_TRACE - LOG_D(PHY,"slot %d: pdcch log2_maxh = %d (%d,%d)\n",slot,log2_maxh,avgP[0],avgs); + LOG_D(PHY, "slot %d: pdcch log2_maxh = %d (%d,%d)\n", proc->nr_slot_rx, log2_maxh, avgP[0], avgs); #endif #if T_TRACER - T(T_UE_PHY_PDCCH_ENERGY, T_INT(0), T_INT(0), T_INT(frame%1024), T_INT(slot), - T_INT(avgP[0]), T_INT(avgP[1]), T_INT(avgP[2]), T_INT(avgP[3])); + T(T_UE_PHY_PDCCH_ENERGY, T_INT(0), T_INT(0), T_INT(proc->frame_rx % 1024), T_INT(proc->nr_slot_rx), T_INT(avgP[0]), T_INT(avgP[1]), T_INT(avgP[2]), T_INT(avgP[3])); #endif LOG_D(PHY,"we enter nr_pdcch_channel_compensation(log2_maxh=%d)\n",log2_maxh); LOG_D(PHY,"in nr_pdcch_channel_compensation(rxdataF_ext x dl_ch_estimates_ext -> rxdataF_comp)\n"); @@ -889,7 +886,8 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, break; } } - if (dci_found==1) continue; + if (dci_found == 1) + continue; int dci_length = rel15->dci_length_options[k]; uint64_t dci_estimation[2]= {0}; @@ -923,8 +921,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, if (mb > (ue->dci_thres+30)) { LOG_W(PHY,"DCI false positive. Dropping DCI index %d. Mismatched bits: %d/%d. Current DCI threshold: %d\n",j,mb,L*108,ue->dci_thres); continue; - } - else { + } else { dci_ind->SFN = proc->frame_rx; dci_ind->slot = proc->nr_slot_rx; dci_ind->dci_list[dci_ind->number_of_dcis].rnti = n_rnti; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 942c6befdf..0b63af4af7 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -515,15 +515,14 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, stop_meas(&ue->generic_stat_bis[slot]); } if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, - "[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f \n", - frame, - nr_slot_rx, - slot, - symbol, - *log2_maxh, - proc->channel_level, - ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + *log2_maxh, + ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); start_meas(&ue->generic_stat_bis[slot]); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index 5a475b84ae..44f7507390 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -208,8 +208,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, int32_t sync_pos, sync_pos_frame; // k_ssb, N_ssb_crb, sync_pos2, int32_t metric_tdd_ncp=0; uint8_t phase_tdd_ncp; - double im, re; - int is; + int frame_id; NR_DL_FRAME_PARMS *fp = &ue->frame_parms; int ret=-1; @@ -244,14 +243,13 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, // initial sync performed on two successive frames, if pbch passes on first frame, no need to process second frame // only one frame is used for symulation tools - for(is=0; isnb_prefix_samples) + continue; - /* process pss search on received buffer */ - sync_pos = pss_synchro_nr(ue, is, NO_RATE_CHANGE); - if (sync_pos < fp->nb_prefix_samples) - continue; - - ue->ssb_offset = sync_pos - fp->nb_prefix_samples; + ue->ssb_offset = sync_pos - fp->nb_prefix_samples; #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY, "[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n", ue->Mod_id, sync_pos, ue->common_vars.nid2); @@ -269,23 +267,17 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, // In SA we need to perform frequency offset correction until the end of buffer because we need to decode SIB1 // and we do not know yet in which slot it goes. - // start for offset correction - int start = is*fp->samples_per_frame; - - // loop over samples - int end = start + fp->samples_per_frame; - - for(int n=start; nsamples_per_frame; n < (frame_id + 1) * fp->samples_per_frame; n++) { for (int ar=0; arnb_antennas_rx; ar++) { - re = ((double)(((short *)ue->common_vars.rxdata[ar]))[2*n]); - im = ((double)(((short *)ue->common_vars.rxdata[ar]))[2*n+1]); - ((short *)ue->common_vars.rxdata[ar])[2*n] = (short)(round(re*cos(n*off_angle) - im*sin(n*off_angle))); - ((short *)ue->common_vars.rxdata[ar])[2*n+1] = (short)(round(re*sin(n*off_angle) + im*cos(n*off_angle))); + const double re = ue->common_vars.rxdata[ar][n].r; + const double im = ue->common_vars.rxdata[ar][n].i; + ue->common_vars.rxdata[ar][n].r = (short)(round(re * cos(n * off_angle) - im * sin(n * off_angle))); + ue->common_vars.rxdata[ar][n].i = (short)(round(re * sin(n * off_angle) + im * cos(n * off_angle))); } } } - /* slop_fep function works for lte and takes into account begining of frame with prefix for subframe 0 */ + /* slot_fep function works for lte and takes into account begining of frame with prefix for subframe 0 */ /* for NR this is not the case but slot_fep is still used for computing FFT of samples */ /* in order to achieve correct processing for NR prefix samples is forced to 0 and then restored after function call */ /* symbol number are from beginning of SS/PBCH blocks as below: */ @@ -295,21 +287,15 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, /* rxdataF stores SS/PBCH from beginning of buffers in the same symbol order as in time domain */ for (int i = 0; i < NR_N_SYMBOLS_SSB; i++) - nr_slot_fep_init_sync(ue, - proc, - i, - is * fp->samples_per_frame + ue->ssb_offset, - false, - rxdataF, - link_type_dl); + nr_slot_fep_init_sync(ue, proc, i, frame_id * fp->samples_per_frame + ue->ssb_offset, false, rxdataF, link_type_dl); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"Calling sss detection (normal CP)\n"); #endif int freq_offset_sss = 0; - ret = rx_sss_nr(ue, proc, &metric_tdd_ncp, &phase_tdd_ncp, &freq_offset_sss, rxdataF); - + bool ret_sss = rx_sss_nr(ue, proc, &metric_tdd_ncp, &phase_tdd_ncp, &freq_offset_sss, rxdataF); + ret = !ret_sss; // digital compensation of FFO for SSB symbols if (ue->UE_fo_compensation){ double s_time = 1/(1.0e3*fp->samples_per_subframe); // sampling time @@ -317,19 +303,12 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, // In SA we need to perform frequency offset correction until the end of buffer because we need to decode SIB1 // and we do not know yet in which slot it goes. - - // start for offset correction - int start = is*fp->samples_per_frame; - - // loop over samples - int end = start + fp->samples_per_frame; - - for(int n=start; nsamples_per_frame; n < (frame_id + 1) * fp->samples_per_frame; n++) { for (int ar=0; arnb_antennas_rx; ar++) { - re = ((double)(((short *)ue->common_vars.rxdata[ar]))[2*n]); - im = ((double)(((short *)ue->common_vars.rxdata[ar]))[2*n+1]); - ((short *)ue->common_vars.rxdata[ar])[2*n] = (short)(round(re*cos(n*off_angle) - im*sin(n*off_angle))); - ((short *)ue->common_vars.rxdata[ar])[2*n+1] = (short)(round(re*sin(n*off_angle) + im*cos(n*off_angle))); + const double re = ue->common_vars.rxdata[ar][n].r; + const double im = ue->common_vars.rxdata[ar][n].i; + ue->common_vars.rxdata[ar][n].r = (short)(round(re * cos(n * off_angle) - im * sin(n * off_angle))); + ue->common_vars.rxdata[ar][n].i = (short)(round(re * sin(n * off_angle) + im * cos(n * off_angle))); } } @@ -351,7 +330,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, int n_symb_prefix0 = (ue->symbol_offset/(7*(1<ofdm_symbol_size + fp->nb_prefix_samples0)+(ue->symbol_offset-n_symb_prefix0)*(fp->ofdm_symbol_size + fp->nb_prefix_samples); // for a correct computation of frame number to sync with the one decoded at MIB we need to take into account in which of the n_frames we got sync - ue->init_sync_frame = n_frames - 1 - is; + ue->init_sync_frame = n_frames - 1 - frame_id; // compute the scramblingID_pdcch and the gold pdcch ue->scramblingID_pdcch = fp->Nid_cell; @@ -409,7 +388,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, #endif } if (ret == 0) break; - } + } } else { ret = -1; @@ -444,13 +423,11 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, } - -#if defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706) - LOG_I(PHY, "[UE %d] Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", - ue->Mod_id, - openair0_cfg[0].rx_freq[0]+ue->common_vars.freq_offset, - ue->common_vars.freq_offset); -#endif + LOG_I(PHY, + "[UE %d] Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", + ue->Mod_id, + openair0_cfg[0].rx_freq[0] + ue->common_vars.freq_offset, + ue->common_vars.freq_offset); } else { #ifdef DEBUG_INITIAL_SYNC LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id); @@ -486,29 +463,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] ); #endif -#ifndef OAI_USRP -#ifndef OAI_BLADERF -#ifndef OAI_LMSSDR -#ifndef OAI_ADRV9371_ZC706 - //phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0); -#endif -#endif -#endif -#endif - - } - else { - -#ifndef OAI_USRP -#ifndef OAI_BLADERF -#ifndef OAI_LMSSDR -#ifndef OAI_ADRV9371_ZC706 - //phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0); -#endif -#endif -#endif -#endif - } if (ue->target_Nid_cell != -1) { @@ -533,7 +487,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, nr_slot_fep_init_sync(ue, proc, l, // the UE PHY has no notion of the symbols to be monitored in the search space - is*fp->samples_per_frame+phy_pdcch_config->sfn*fp->samples_per_frame+ue->rx_offset, + frame_id * fp->samples_per_frame + phy_pdcch_config->sfn * fp->samples_per_frame + ue->rx_offset, true, rxdataF, link_type_dl); @@ -560,7 +514,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, nr_slot_fep_init_sync(ue, proc, m, - is*fp->samples_per_frame+phy_pdcch_config->sfn*fp->samples_per_frame+ue->rx_offset, + frame_id * fp->samples_per_frame + phy_pdcch_config->sfn * fp->samples_per_frame + ue->rx_offset, true, rxdataF, link_type_dl); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c index 6ec4c3d4f2..3ba71ed3ea 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c @@ -62,20 +62,18 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t uint16_t rootSequenceIndex, prach_fmt_id, NCS, preamble_offset = 0; const uint16_t *prach_root_sequence_map; uint16_t preamble_shift = 0, preamble_index0, n_shift_ra, n_shift_ra_bar, d_start=INT16_MAX, numshift, N_ZC, u, offset, offset2, first_nonzero_root_idx; - int16_t prach_tmp[(4688+4*24576)*4*2] __attribute__((aligned(32))) = {0}; + c16_t prach[(4688 + 4 * 24576) * 2] __attribute__((aligned(32))) = {0}; int16_t prachF_tmp[(4688+4*24576)*4*2] __attribute__((aligned(32))) = {0}; - int16_t Ncp = 0, amp, *prach, *prach2, *prachF, *Xu; - int32_t Xu_re, Xu_im; + int16_t Ncp = 0; int prach_start, prach_sequence_length, i, prach_len, dftlen, mu, kbar, K, n_ra_prb, k, prachStartSymbol, sample_offset_slot; fd_occasion = 0; prach_len = 0; dftlen = 0; - first_nonzero_root_idx = 0; - prach = prach_tmp; - amp = ue->prach_vars[gNB_id]->amp; - prachF = prachF_tmp; + first_nonzero_root_idx = 0; + int16_t amp = ue->prach_vars[gNB_id]->amp; + int16_t *prachF = prachF_tmp; Mod_id = ue->Mod_id; prach_sequence_length = nrUE_config->prach_config.prach_sequence_length; N_ZC = (prach_sequence_length == 0) ? 839:139; @@ -390,9 +388,9 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t * *********************************************************/ - Xu = (int16_t*)ue->X_u[preamble_offset-first_nonzero_root_idx]; + c16_t *Xu = ue->X_u[preamble_offset - first_nonzero_root_idx]; - #if defined (PRACH_WRITE_OUTPUT_DEBUG) +#if defined (PRACH_WRITE_OUTPUT_DEBUG) LOG_M("X_u.m", "X_u", (int16_t*)ue->X_u[preamble_offset-first_nonzero_root_idx], N_ZC, 1, 1); #endif @@ -400,11 +398,10 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t if (offset2 >= N_ZC) offset2 -= N_ZC; - - Xu_re = (((int32_t)Xu[offset<<1]*amp)>>15); - Xu_im = (((int32_t)Xu[1+(offset<<1)]*amp)>>15); - prachF[k++]= ((Xu_re*nr_ru[offset2<<1]) - (Xu_im*nr_ru[1+(offset2<<1)]))>>15; - prachF[k++]= ((Xu_im*nr_ru[offset2<<1]) + (Xu_re*nr_ru[1+(offset2<<1)]))>>15; + const int32_t Xu_re = (Xu[offset].r * amp) >> 15; + const int32_t Xu_im = (Xu[offset].i * amp) >> 15; + prachF[k++] = (Xu_re * nr_ru[offset2].r - Xu_im * nr_ru[offset2].i) >> 15; + prachF[k++] = (Xu_im * nr_ru[offset2].r + Xu_re * nr_ru[offset2].i) >> 15; if (k==dftlen) k=0; } @@ -415,78 +412,78 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t #endif // This is after cyclic prefix - prach2 = prach+(2*Ncp); // times 2 for complex samples - const idft_size_idx_t idft_size = get_idft(dftlen); - idft(idft_size, prachF, prach, 1); - memmove(prach2, prach, (dftlen<<2)); + c16_t *prach2 = prach + Ncp; + const idft_size_idx_t idft_size = get_idft(dftlen); + idft(idft_size, prachF, (int16_t *)prach, 1); + memmove(prach2, prach, (dftlen << 2)); - if (prach_sequence_length == 0) { - if (prach_fmt_id == 0) { - // here we have | empty | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); - // here we have | Prefix | Prach | - prach_len = dftlen+Ncp; - } else if (prach_fmt_id == 1) { - // here we have | empty | Prach | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); - // here we have | empty | Prach | Prach | - memcpy(prach, prach+(dftlen<<2), (Ncp<<2)); - // here we have | Prefix | Prach | Prach | - prach_len = (dftlen*2)+Ncp; - } else if (prach_fmt_id == 2 || prach_fmt_id == 3) { - // here we have | empty | Prach | empty | empty | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); - // here we have | empty | Prach | Prach | empty | empty | - memcpy(prach2+(dftlen<<2), prach2, (dftlen<<3)); - // here we have | empty | Prach | Prach | Prach | Prach | - memcpy(prach, prach+(dftlen<<3), (Ncp<<2)); - // here we have | Prefix | Prach | Prach | Prach | Prach | - prach_len = (dftlen*4)+Ncp; - } + if (prach_sequence_length == 0) { + if (prach_fmt_id == 0) { + // here we have | empty | Prach | + memcpy(prach, prach + dftlen, (Ncp << 2)); + // here we have | Prefix | Prach | + prach_len = dftlen + Ncp; + } else if (prach_fmt_id == 1) { + // here we have | empty | Prach | empty | + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); + // here we have | empty | Prach | Prach | + memcpy(prach, prach + dftlen * 2, (Ncp << 2)); + // here we have | Prefix | Prach | Prach | + prach_len = (dftlen * 2) + Ncp; + } else if (prach_fmt_id == 2 || prach_fmt_id == 3) { + // here we have | empty | Prach | empty | empty | empty | + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); + // here we have | empty | Prach | Prach | empty | empty | + memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); + // here we have | empty | Prach | Prach | Prach | Prach | + memcpy(prach, prach + dftlen * 4, (Ncp << 2)); + // here we have | Prefix | Prach | Prach | Prach | Prach | + prach_len = (dftlen * 4) + Ncp; + } } else { // short PRACH sequence if (prach_fmt_id == 9) { // here we have | empty | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); + memcpy(prach, prach + dftlen, (Ncp << 2)); // here we have | Prefix | Prach | prach_len = (dftlen*1)+Ncp; } else if (prach_fmt_id == 4 || prach_fmt_id == 7) { // here we have | empty | Prach | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); // here we have | empty | Prach | Prach | memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); // here we have | Prefix | Prach | Prach | prach_len = (dftlen*2)+Ncp; } else if (prach_fmt_id == 5 || prach_fmt_id == 10) { // 4xdftlen // here we have | empty | Prach | empty | empty | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); // here we have | empty | Prach | Prach | empty | empty | - memcpy(prach2+(dftlen<<2), prach2, (dftlen<<3)); + memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); // here we have | empty | Prach | Prach | Prach | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); + memcpy(prach, prach + dftlen, (Ncp << 2)); // here we have | Prefix | Prach | Prach | Prach | Prach | prach_len = (dftlen*4)+Ncp; } else if (prach_fmt_id == 6) { // 6xdftlen // here we have | empty | Prach | empty | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); // here we have | empty | Prach | Prach | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<2), prach2, (dftlen<<3)); + memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); // here we have | empty | Prach | Prach | Prach | Prach | empty | empty | - memcpy(prach2+(dftlen<<3), prach2, (dftlen<<3)); + memcpy(prach2 + dftlen * 4, prach2, (dftlen << 3)); // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); + memcpy(prach, prach + dftlen, (Ncp << 2)); // here we have | Prefix | Prach | Prach | Prach | Prach | Prach | Prach | prach_len = (dftlen*6)+Ncp; } else if (prach_fmt_id == 8) { // 12xdftlen // here we have | empty | Prach | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<1), prach2, (dftlen<<2)); + memcpy(prach2 + dftlen, prach2, (dftlen << 2)); // here we have | empty | Prach | Prach | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<2), prach2, (dftlen<<3)); + memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); // here we have | empty | Prach | Prach | Prach | Prach | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<3), prach2, (dftlen<<3)); + memcpy(prach2 + dftlen * 4, prach2, (dftlen << 3)); // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | empty | empty | empty | empty | empty | empty | - memcpy(prach2+(dftlen<<1)*6, prach2, (dftlen<<2)*6); + memcpy(prach2 + dftlen * 6, prach2, (dftlen << 2) * 6); // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); + memcpy(prach, prach + dftlen, (Ncp << 2)); // here we have | Prefix | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | prach_len = (dftlen*12)+Ncp; } @@ -499,18 +496,10 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t prach_len); #endif - for (i=0; icommon_vars.txdata[0][prach_start]))[2*i] = prach[2*i]; - ((int16_t*)(&ue->common_vars.txdata[0][prach_start]))[2*i+1] = prach[2*i+1]; - } + for (i = 0; i < prach_len; i++) + ue->common_vars.txData[0][prach_start + i] = prach[i]; - //printf("----------------------\n"); - //for(int ii = prach_start; ii<2*(prach_start + prach_len); ii++){ - // printf("PRACH rx data[%d] = %d\n", ii, ue->common_vars.txdata[0][ii]); - //} - //printf(" \n"); - - #ifdef PRACH_WRITE_OUTPUT_DEBUG +#ifdef PRACH_WRITE_OUTPUT_DEBUG LOG_M("prach_tx0.m", "prachtx0", prach+(Ncp<<1), prach_len-Ncp, 1, 1); LOG_M("Prach_txsig.m","txs",(int16_t*)(&ue->common_vars.txdata[0][prach_start]), 2*(prach_start+prach_len), 1, 1) #endif diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index cb777c3515..6b40f0f54c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -238,20 +238,21 @@ void nr_pusch_codeword_scrambling(uint8_t *in, */ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, - unsigned char harq_pid, - uint32_t frame, - uint8_t slot, - int gNB_id, - nr_phy_data_tx_t *phy_data); - + const unsigned char harq_pid, + const uint32_t frame, + const uint8_t slot, + const int gNB_id, + nr_phy_data_tx_t *phy_data, + c16_t **txdataF); /** \brief This function does IFFT for PUSCH */ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, - uint8_t slot, - NR_DL_FRAME_PARMS *frame_parms, - uint8_t Nl); + const uint8_t slot, + const NR_DL_FRAME_PARMS *frame_parms, + const uint8_t n_antenna_ports, + c16_t **txdataF); int8_t clean_UE_ulsch(PHY_VARS_NR_UE *UE, uint8_t gNB_id); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index b27b738523..0d4806f74e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -107,12 +107,13 @@ void nr_pusch_codeword_scrambling(uint8_t *in, } void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, - unsigned char harq_pid, - uint32_t frame, - uint8_t slot, - int gNB_id, - nr_phy_data_tx_t *phy_data) { - + const unsigned char harq_pid, + const uint32_t frame, + const uint8_t slot, + const int gNB_id, + nr_phy_data_tx_t *phy_data, + c16_t **txdataF) +{ LOG_D(PHY,"nr_ue_ulsch_procedures hard_id %d %d.%d\n",harq_pid,frame,slot); int8_t Wf[2], Wt[2]; @@ -122,14 +123,13 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, int sample_offsetF, N_RE_prime; NR_DL_FRAME_PARMS *frame_parms = &UE->frame_parms; - c16_t **txdataF = UE->common_vars.txdataF; int N_PRB_oh = 0; // higher layer (RRC) parameter xOverhead in PUSCH-ServingCellConfig uint16_t number_dmrs_symbols = 0; NR_UE_ULSCH_t *ulsch_ue = &phy_data->ulsch; NR_UL_UE_HARQ_t *harq_process_ul_ue = &UE->ul_harq_processes[harq_pid]; - nfapi_nr_ue_pusch_pdu_t *pusch_pdu = &ulsch_ue->pusch_pdu; + const nfapi_nr_ue_pusch_pdu_t *pusch_pdu = &ulsch_ue->pusch_pdu; int start_symbol = pusch_pdu->start_symbol_index; uint16_t ul_dmrs_symb_pos = pusch_pdu->ul_dmrs_symb_pos; @@ -585,30 +585,17 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, /////////// //////////////////////////////////////////////////////////////////////// - } - uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, - uint8_t slot, - NR_DL_FRAME_PARMS *frame_parms, - uint8_t n_antenna_ports) + const uint8_t slot, + const NR_DL_FRAME_PARMS *frame_parms, + const uint8_t n_antenna_ports, + c16_t **txdataF) { - /////////////////////////IFFT/////////////////////// - /////////// - - int tx_offset = frame_parms->get_samples_slot_timestamp(slot, frame_parms, 0); - - // clear the transmit data array for the current subframe - /*for (int aa=0; aaframe_parms.nb_antennas_tx; aa++) { - memset(&UE->common_vars.txdata[aa][tx_offset],0,UE->frame_parms.samples_per_slot*sizeof(int32_t)); - //memset(&UE->common_vars.txdataF[aa][tx_offset],0,UE->frame_parms.samples_per_slot*sizeof(int32_t)); - }*/ - - - c16_t **txdata = UE->common_vars.txdata; - c16_t **txdataF = UE->common_vars.txdataF; + const int tx_offset = frame_parms->get_samples_slot_timestamp(slot, frame_parms, 0); + c16_t **txdata = UE->common_vars.txData; for(int ap = 0; ap < n_antenna_ports; ap++) { apply_nr_rotation_TX(frame_parms, txdataF[ap], diff --git a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c index 818954bc29..d59da8be97 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c @@ -49,13 +49,14 @@ #endif //#define ONE_OVER_SQRT2 23170 // 32767/sqrt(2) = 23170 (ONE_OVER_SQRT2) +//#define POLAR_CODING_DEBUG -void nr_generate_pucch0(PHY_VARS_NR_UE *ue, +void nr_generate_pucch0(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu) + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu) { #ifdef DEBUG_NR_PUCCH_TX printf("\t [nr_generate_pucch0] start function at slot(nr_slot_tx)=%d\n",nr_slot_tx); @@ -168,12 +169,12 @@ void nr_generate_pucch0(PHY_VARS_NR_UE *ue, } } -void nr_generate_pucch1(PHY_VARS_NR_UE *ue, +void nr_generate_pucch1(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu) + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu) { uint16_t m0 = pucch_pdu->initial_cyclic_shift; uint64_t payload = pucch_pdu->payload; @@ -652,12 +653,13 @@ static void nr_uci_encoding(uint64_t payload, } //#if 0 -void nr_generate_pucch2(PHY_VARS_NR_UE *ue, +void nr_generate_pucch2(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu) { + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu) +{ #ifdef DEBUG_NR_PUCCH_TX printf("\t [nr_generate_pucch2] start function at slot(nr_slot_tx)=%d with payload=%lu and nr_bit=%d\n",nr_slot_tx, pucch_pdu->payload, pucch_pdu->n_bit); #endif @@ -692,7 +694,19 @@ void nr_generate_pucch2(PHY_VARS_NR_UE *ue, /* * Implementing TS 38.211 Subclause 6.3.2.5.1 scrambling format 2 */ - nr_pucch2_3_4_scrambling(M_bit,rnti,pucch_pdu->data_scrambling_id,&b[0],btilde); + nr_pucch2_3_4_scrambling(M_bit, rnti, pucch_pdu->data_scrambling_id, b, btilde); + +#ifdef POLAR_CODING_DEBUG + printf("bt:"); + for (int n = 0; n < M_bit; n++) { + if (n % 4 == 0) { + printf(" "); + } + printf("%u", btilde[n]); + } + printf("\n"); +#endif + /* * Implementing TS 38.211 Subclause 6.3.2.5.2 modulation format 2 * btilde shall be modulated as described in subclause 5.1 using QPSK @@ -848,12 +862,13 @@ void nr_generate_pucch2(PHY_VARS_NR_UE *ue, free(btilde); } //#if 0 -void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue, +void nr_generate_pucch3_4(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu) { + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu) +{ #ifdef DEBUG_NR_PUCCH_TX printf("\t [nr_generate_pucch3_4] start function at slot(nr_slot_tx)=%d with payload=%lu and nr_bit=%d\n", nr_slot_tx, pucch_pdu->payload, pucch_pdu->n_bit); #endif @@ -1317,4 +1332,3 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue, free(z_im); free(btilde); } - diff --git a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h index 7eb836505e..54620f1ba0 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h +++ b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h @@ -44,34 +44,33 @@ #include "T.h" #define ONE_OVER_SQRT2 23170 // 32767/sqrt(2) = 23170 (ONE_OVER_SQRT2) - -void nr_generate_pucch0(PHY_VARS_NR_UE *ue, +void nr_generate_pucch0(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu); + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu); -void nr_generate_pucch1(PHY_VARS_NR_UE *ue, +void nr_generate_pucch1(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu); + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu); -void nr_generate_pucch2(PHY_VARS_NR_UE *ue, +void nr_generate_pucch2(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu); + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu); -void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue, +void nr_generate_pucch3_4(const PHY_VARS_NR_UE *ue, c16_t **txdataF, - NR_DL_FRAME_PARMS *frame_parms, - int16_t amp, - int nr_slot_tx, - fapi_nr_ul_config_pucch_pdu *pucch_pdu); + const NR_DL_FRAME_PARMS *frame_parms, + const int16_t amp, + const int nr_slot_tx, + const fapi_nr_ul_config_pucch_pdu *pucch_pdu); // tables for mcs values for different payloads static const uint8_t table1_mcs[]={0,6,3,9}; diff --git a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c index 2cbd2afbd5..a856be768f 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c @@ -432,7 +432,7 @@ int generate_srs_nr(nfapi_nr_srs_pdu_t *srs_config_pdu, * send srs according to current configuration * *********************************************************************/ -int ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc) +int ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, c16_t **txdataF) { if(!ue->srs_vars[0]->active) { return -1; @@ -471,8 +471,15 @@ int ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc) NR_DL_FRAME_PARMS *frame_parms = &(ue->frame_parms); uint16_t symbol_offset = (frame_parms->symbols_per_slot - 1 - srs_config_pdu->time_start_position)*frame_parms->ofdm_symbol_size; - if (generate_srs_nr(srs_config_pdu, frame_parms, (int32_t **)ue->common_vars.txdataF, symbol_offset, ue->nr_srs_info, - AMP, proc->frame_tx, proc->nr_slot_tx) == 0) { + if (generate_srs_nr(srs_config_pdu, + frame_parms, + (int32_t **)txdataF, + symbol_offset, + ue->nr_srs_info, + AMP, + proc->frame_tx, + proc->nr_slot_tx) + == 0) { return 0; } else { return -1; diff --git a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h index 803aada84a..b44914695e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h +++ b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.h @@ -177,7 +177,7 @@ int is_srs_period_nr(SRS_Resource_t *p_SRS_Resource, @param current gNB_id identifier @returns 0 if srs is transmitted -1 otherwise */ -int ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc); +int ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, c16_t **txdataF); #undef EXTERN #undef INIT_VARIABLES_SRS_MODULATION_NR_H diff --git a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c index cb8e4f40e9..6df24949a9 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c @@ -350,24 +350,23 @@ static int pss_sss_extract_nr(PHY_VARS_NR_UE *phy_vars_ue, } /******************************************************************* -* -* NAME : rx_sss_nr -* -* PARAMETERS : none -* -* RETURN : Set Nid_cell in ue context -* -* DESCRIPTION : Determine element Nid1 of cell identity -* so Nid_cell in ue context is set according to Nid1 & Nid2 -* -*********************************************************************/ - -int rx_sss_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - int32_t *tot_metric, - uint8_t *phase_max, - int *freq_offset_sss, - c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) + * + * NAME : rx_sss_nr + * + * PARAMETERS : none + * + * RETURN : Set Nid_cell in ue context, return true if cell detected + * + * DESCRIPTION : Determine element Nid1 of cell identity + * so Nid_cell in ue context is set according to Nid1 & Nid2 + * + *********************************************************************/ +bool rx_sss_nr(PHY_VARS_NR_UE *ue, + UE_nr_rxtx_proc_t *proc, + int32_t *tot_metric, + uint8_t *phase_max, + int *freq_offset_sss, + c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { uint8_t i; c16_t pss_ext[NB_ANTENNAS_RX][LENGTH_PSS_NR]; @@ -506,13 +505,13 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, //#endif if (Nid1==N_ID_1_NUMBER) - return -1; - + return false; + int re = 0; int im = 0; if (Nid1 == N_ID_1_NUMBER) { LOG_I(PHY,"Failed to detect SSS after PSS\n"); - return -1; + return false; } d = (int16_t *)&d_sss[Nid2][Nid1]; for(i = 0; isubcarrier_spacing); double ffo_pss = ((double)ue->common_vars.freq_offset)/frame_parms->subcarrier_spacing; - LOG_I(NR_PHY, "ffo_pss %f (%i Hz), ffo_sss %f (%i Hz), ffo_pss+ffo_sss %f (%i Hz)\n", - ffo_pss, (int)(ffo_pss*frame_parms->subcarrier_spacing), ffo_sss, *freq_offset_sss, ffo_pss+ffo_sss, (int)((ffo_pss+ffo_sss)*frame_parms->subcarrier_spacing)); + LOG_W(NR_PHY, + "ffo_pss %f (%i Hz), ffo_sss %f (%i Hz), ffo_pss+ffo_sss %f (%i Hz), nid1: %d, nid2: %d\n", + ffo_pss, + (int)(ffo_pss * frame_parms->subcarrier_spacing), + ffo_sss, + *freq_offset_sss, + ffo_pss + ffo_sss, + (int)((ffo_pss + ffo_sss) * frame_parms->subcarrier_spacing), + Nid1, + Nid2); - return(0); + return true; } diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c index e321ba706f..405f580714 100644 --- a/openair1/PHY/TOOLS/cmult_sv.c +++ b/openair1/PHY/TOOLS/cmult_sv.c @@ -83,11 +83,7 @@ void multadd_real_vector_complex_scalar(const int16_t *x, const int16_t *alpha, } } -void rotate_cpx_vector(c16_t *x, - c16_t *alpha, - c16_t *y, - uint32_t N, - uint16_t output_shift) +void rotate_cpx_vector(const c16_t *const x, const c16_t *const alpha, c16_t *y, uint32_t N, uint16_t output_shift) { // multiply a complex vector with a complex value (alpha) // stores result in y @@ -98,12 +94,41 @@ void rotate_cpx_vector(c16_t *x, // output is 32 bytes aligned, but not the input const c16_t for_re={alpha->r, -alpha->i}; - __m256i const alpha_for_real = simde_mm256_set1_epi32(*(uint32_t*)&for_re); + const __m256i alpha_for_real = simde_mm256_set1_epi32(*(uint32_t *)&for_re); const c16_t for_im={alpha->i, alpha->r}; - __m256i const alpha_for_im= simde_mm256_set1_epi32(*(uint32_t*)&for_im); - __m256i const perm_mask = - simde_mm256_set_epi8(31,30,23,22,29,28,21,20,27,26,19,18,25,24,17,16, - 15,14,7,6,13,12,5,4,11,10,3,2,9,8,1,0); + const __m256i alpha_for_im = simde_mm256_set1_epi32(*(uint32_t *)&for_im); + const __m256i perm_mask = simde_mm256_set_epi8(31, + 30, + 23, + 22, + 29, + 28, + 21, + 20, + 27, + 26, + 19, + 18, + 25, + 24, + 17, + 16, + 15, + 14, + 7, + 6, + 13, + 12, + 5, + 4, + 11, + 10, + 3, + 2, + 9, + 8, + 1, + 0); __m256i* xd= (__m256i*)x; const __m256i *end=xd+N/8; for( __m256i* yd = (__m256i *)y; xdgNB->frame_parms.ofdm_symbol_size; + if (!len) + // gnb not yet initialized, many race conditions in the scope + return; #ifdef WEBSRVSCOPE websrv_scopedata_msg_t *msg = NULL; websrv_nf_getdata(graph->graph, 0, &msg); diff --git a/openair1/PHY/TOOLS/phy_scope_interface.h b/openair1/PHY/TOOLS/phy_scope_interface.h index 19395891ad..d0e3bf7dac 100644 --- a/openair1/PHY/TOOLS/phy_scope_interface.h +++ b/openair1/PHY/TOOLS/phy_scope_interface.h @@ -34,8 +34,10 @@ #ifdef __cplusplus #include +#ifndef _Atomic #define _Atomic(X) std::atomic< X > #endif +#endif #include #include diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 060b85f94e..9c5b58f851 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -741,12 +741,7 @@ This function performs componentwise multiplication of a vector with a complex s The function implemented is : \f$\mathbf{y} = \alpha\mathbf{x}\f$ */ -void rotate_cpx_vector(c16_t *x, - c16_t *alpha, - c16_t *y, - uint32_t N, - uint16_t output_shift); - +void rotate_cpx_vector(const c16_t *const x, const c16_t *const alpha, c16_t *y, uint32_t N, uint16_t output_shift); //cadd_sv.c diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 4066550d76..20322a2d73 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -679,7 +679,7 @@ typedef struct PHY_VARS_gNB_s { uint32_t ****nr_gold_prs; /// PRACH root sequence - uint32_t X_u[64][839]; + c16_t X_u[64][839]; /// OFDM symbol offset divisor for UL uint32_t ofdm_offset_divisor; diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index d4c5a2da49..93ff036d4f 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -221,7 +221,7 @@ typedef struct { /// For IFFT_FPGA this points to the same memory as PHY_vars->tx_vars[a].TX_DMA_BUFFER. /// - first index: tx antenna [0..nb_antennas_tx[ /// - second index: sample [0..FRAME_LENGTH_COMPLEX_SAMPLES[ - c16_t **txdata; + c16_t **txData; /// \brief Holds the transmit data in the frequency domain. /// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. /// - first index: tx antenna [0..nb_antennas_tx[ @@ -485,8 +485,8 @@ typedef struct { // PRS sequence per gNB, per resource uint32_t *****nr_gold_prs; - - uint32_t X_u[64][839]; + + c16_t X_u[64][839]; // flag to activate PRB based averaging of channel estimates // when off, defaults to frequency domain interpolation @@ -664,6 +664,24 @@ typedef struct { int tx_wait_for_dlsch[NR_MAX_SLOTS_PER_FRAME]; } PHY_VARS_NR_UE; +typedef struct { + openair0_timestamp timestamp_tx; + int gNB_id; + /// NR slot index within frame_tx [0 .. slots_per_frame - 1] to act upon for transmission + int nr_slot_tx; + int rx_slot_type; + /// NR slot index within frame_rx [0 .. slots_per_frame - 1] to act upon for transmission + int nr_slot_rx; + int tx_slot_type; + //#endif + /// frame to act upon for transmission + int frame_tx; + /// frame to act upon for reception + int frame_rx; + int frame_number_4lsb; + int decoded_frame_rx; +} UE_nr_rxtx_proc_t; + typedef struct nr_phy_data_tx_s { NR_UE_ULSCH_t ulsch; NR_UE_PUCCH pucch_vars; diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index 2b0a07fda7..7e007f8d4e 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -131,10 +131,10 @@ typedef struct { typedef struct NR_DL_FRAME_PARMS NR_DL_FRAME_PARMS; -typedef uint32_t (*get_samples_per_slot_t)(int slot, NR_DL_FRAME_PARMS* fp); -typedef uint32_t (*get_slot_from_timestamp_t)(openair0_timestamp timestamp_rx, NR_DL_FRAME_PARMS* fp); +typedef uint32_t (*get_samples_per_slot_t)(int slot, const NR_DL_FRAME_PARMS *fp); +typedef uint32_t (*get_slot_from_timestamp_t)(openair0_timestamp timestamp_rx, const NR_DL_FRAME_PARMS *fp); -typedef uint32_t (*get_samples_slot_timestamp_t)(int slot, NR_DL_FRAME_PARMS* fp, uint8_t sl_ahead); +typedef uint32_t (*get_samples_slot_timestamp_t)(int slot, const NR_DL_FRAME_PARMS *fp, uint8_t sl_ahead); struct NR_DL_FRAME_PARMS { /// frequency range diff --git a/openair1/PHY/thread_NR_UE.h b/openair1/PHY/thread_NR_UE.h deleted file mode 100644 index aadb4aaf50..0000000000 --- a/openair1/PHY/thread_NR_UE.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef __thread_NR_UE__ -#define __thread_NR_UE__ -#include -#include -/// Context data structure for RX/TX portion of subframe processing -typedef struct { - /// Component Carrier index - uint8_t CC_id; - /// timestamp transmitted to HW - openair0_timestamp timestamp_tx; - //#ifdef UE_NR_PHY_DEMO - int gNB_id; - /// NR slot index within frame_tx [0 .. slots_per_frame - 1] to act upon for transmission - int nr_slot_tx; - int rx_slot_type; - /// NR slot index within frame_rx [0 .. slots_per_frame - 1] to act upon for transmission - int nr_slot_rx; - int tx_slot_type; - //#endif - /// frame to act upon for transmission - int frame_tx; - /// frame to act upon for reception - int frame_rx; - int decoded_frame_rx; - /// internal This variable is protected by ref mutex_fep_slot1. - //int instance_cnt_slot0_dl_processing; - int instance_cnt_slot1_dl_processing; - /// pthread descriptor fep_slot1 thread - //pthread_t pthread_slot0_dl_processing; - pthread_t pthread_slot1_dl_processing; - /// pthread attributes for fep_slot1 processing thread - /// condition variable for UE fep_slot1 thread; - //pthread_cond_t cond_slot0_dl_processing; - pthread_cond_t cond_slot1_dl_processing; - /// mutex for UE synch thread - //pthread_mutex_t mutex_slot0_dl_processing; - pthread_mutex_t mutex_slot1_dl_processing; - //int instance_cnt_slot0_dl_processing; - int instance_cnt_dlsch_td; - /// pthread descriptor fep_slot1 thread - //pthread_t pthread_slot0_dl_processing; - pthread_t pthread_dlsch_td; - /// pthread attributes for fep_slot1 processing thread - /// condition variable for UE fep_slot1 thread; - //pthread_cond_t cond_slot0_dl_processing; - pthread_cond_t cond_dlsch_td; - /// mutex for UE synch thread - uint8_t chan_est_pilot0_slot1_available; - uint8_t chan_est_slot1_available; - uint8_t llr_slot1_available; - uint8_t dci_slot0_available; - uint8_t first_symbol_available; - uint8_t decoder_thread_available; - uint8_t decoder_main_available; - uint8_t decoder_switch; - int num_seg; - uint8_t channel_level; - int eNB_id; - int harq_pid; - int llr8_flag; - /// scheduling parameters for fep_slot1 thread - struct sched_param sched_param_fep_slot1; - - int sub_frame_start; - int sub_frame_step; - uint8_t decoder_thread_available1; - int dci_err_cnt; -} UE_nr_rxtx_proc_t; - -#endif diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index a789142b0b..a9cba05d4d 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -200,6 +200,7 @@ void common_signal_procedures_fembms (PHY_VARS_eNB *eNB,int frame, int subframe) eNB->pbch_configured=0; } +#if T_TRACER if (T_ACTIVE(T_ENB_PHY_MIB)) { /* MIB is stored in reverse in pbch_pdu, reverse it for properly logging */ uint8_t mib[3]; @@ -209,6 +210,7 @@ void common_signal_procedures_fembms (PHY_VARS_eNB *eNB,int frame, int subframe) T(T_ENB_PHY_MIB, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_BUFFER(mib, 3)); } +#endif generate_pbch_fembms (&eNB->pbch, txdataF, AMP, fp, pbch_pdu, (frame & 15)/4); } //else if ((subframe == 1) && (fp->frame_type == TDD)) { //generate_pss (txdataF, AMP, fp, 2, 2); @@ -276,6 +278,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) { eNB->pbch_configured=0; } +#if T_TRACER if (T_ACTIVE(T_ENB_PHY_MIB)) { /* MIB is stored in reverse in pbch_pdu, reverse it for properly logging */ uint8_t mib[3]; @@ -285,6 +288,7 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) { T(T_ENB_PHY_MIB, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_BUFFER(mib, 3)); } +#endif generate_pbch (&eNB->pbch, txdataF, AMP, fp, pbch_pdu, frame & 3); } else if ((subframe == 1) && (fp->frame_type == TDD)) { generate_pss (txdataF, AMP, fp, 2, 2); diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index b97bf1748e..cd1bdf629e 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -99,6 +99,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_ cfg, fp); +#if T_TRACER if (T_ACTIVE(T_GNB_PHY_MIB)) { unsigned char bch[3]; bch[0] = ssb_pdu.ssb_pdu_rel15.bchPayload & 0xff; @@ -106,6 +107,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_ bch[2] = (ssb_pdu.ssb_pdu_rel15.bchPayload >> 16) & 0xff; T(T_GNB_PHY_MIB, T_INT(0) /* module ID */, T_INT(frame), T_INT(slot), T_BUFFER(bch, 3)); } +#endif // Beam_id is currently used only for FR2 if (fp->freq_range==nr_FR2){ @@ -135,14 +137,14 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, PHY_VARS_gNB *gNB = msgTx->gNB; NR_DL_FRAME_PARMS *fp=&gNB->frame_parms; nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config; - int offset = gNB->CC_id, slot_prs; + int slot_prs = 0; int txdataF_offset = slot*fp->samples_per_slot_wCP; prs_config_t *prs_config = NULL; if ((cfg->cell_config.frame_duplex_type.value == TDD) && (nr_slot_select(cfg,frame,slot) == NR_UPLINK_SLOT)) return; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX + gNB->CC_id, 1); // clear the transmit data array and beam index for the current slot for (aa=0; aacarrier_config.num_tx_ant.value; aa++) { @@ -235,7 +237,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, T_INT(aa), T_BUFFER(&gNB->common_vars.txdataF[aa][txdataF_offset], fp->samples_per_slot_wCP*sizeof(int32_t))); } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX + gNB->CC_id, 0); } static void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h index 679cb771f9..30da87a352 100644 --- a/openair1/SCHED_NR_UE/defs.h +++ b/openair1/SCHED_NR_UE/defs.h @@ -96,7 +96,7 @@ typedef struct { @param proc Pointer to RXn-TXnp4 proc information @param eNB_id Local id of eNB on which to act */ -void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data); +void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data); void send_slot_ind(notifiedFIFO_t *nf, int slot); @@ -117,7 +117,7 @@ void processSlotTX(void *arg); @param @param */ -void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc); +void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc); int8_t nr_find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 3b9bb25d75..e2071f059f 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -301,13 +301,12 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response return 0; } - -void configure_dlsch(NR_UE_DLSCH_t *dlsch0, - NR_DL_UE_HARQ_t *harq_list, - fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu, - module_id_t module_id, - int rnti) { - +static void configure_dlsch(NR_UE_DLSCH_t *dlsch0, + NR_DL_UE_HARQ_t *harq_list, + fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu, + module_id_t module_id, + int rnti) +{ const uint8_t current_harq_pid = dlsch_config_pdu->harq_process_nbr; dlsch0->active = true; dlsch0->rnti = rnti; @@ -331,7 +330,6 @@ void configure_dlsch(NR_UE_DLSCH_t *dlsch0, } } - void configure_ta_command(PHY_VARS_NR_UE *ue, fapi_nr_ta_command_pdu *ta_command_pdu) { diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index c903df6f6d..3300f7a421 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -54,7 +54,6 @@ #include //#define DEBUG_PHY_PROC -#define NR_PDCCH_SCHED //#define NR_PDCCH_SCHED_DEBUG //#define NR_PUCCH_SCHED //#define NR_PUCCH_SCHED_DEBUG @@ -75,10 +74,6 @@ fifo_dump_emos_UE emos_dump_UE; #include "intertask_interface.h" #include "T.h" -#if defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706) -extern uint64_t downlink_frequency[MAX_NUM_CCs][4]; -#endif - unsigned int gain_table[31] = {100,112,126,141,158,178,200,224,251,282,316,359,398,447,501,562,631,708,794,891,1000,1122,1258,1412,1585,1778,1995,2239,2512,2818,3162}; void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, @@ -264,43 +259,43 @@ void ue_ta_procedures(PHY_VARS_NR_UE *ue, int slot_tx, int frame_tx) } } -void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_tx_t *phy_data) { - - int slot_tx = proc->nr_slot_tx; - int frame_tx = proc->frame_tx; - int gNB_id = proc->gNB_id; +void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data) +{ + const int slot_tx = proc->nr_slot_tx; + const int frame_tx = proc->frame_tx; + const int gNB_id = proc->gNB_id; AssertFatal(ue->CC_id == 0, "Transmission on secondary CCs is not supported yet\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX,VCD_FUNCTION_IN); + const int samplesF_per_slot = NR_SYMBOLS_PER_SLOT * ue->frame_parms.ofdm_symbol_size; + c16_t txdataF_buf[ue->frame_parms.nb_antennas_tx * samplesF_per_slot] __attribute__((aligned(32))); + memset(txdataF_buf, 0, sizeof(txdataF_buf)); + c16_t *txdataF[ue->frame_parms.nb_antennas_tx]; /* workaround to be compatible with current txdataF usage in all tx procedures. */ for(int i=0; i< ue->frame_parms.nb_antennas_tx; ++i) - memset(ue->common_vars.txdataF[i], 0, sizeof(int)*14*ue->frame_parms.ofdm_symbol_size); + txdataF[i] = &txdataF_buf[i * samplesF_per_slot]; LOG_D(PHY,"****** start TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, slot_tx); start_meas(&ue->phy_proc_tx); for (uint8_t harq_pid = 0; harq_pid < NR_MAX_ULSCH_HARQ_PROCESSES; harq_pid++) { - if (ue->ul_harq_processes[harq_pid].status == ACTIVE) - nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, gNB_id, phy_data); + if (ue->ul_harq_processes[harq_pid].status == ACTIVE) { + nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, gNB_id, phy_data, (c16_t **)&txdataF); + } } - ue_srs_procedures_nr(ue, proc); + ue_srs_procedures_nr(ue, proc, (c16_t **)&txdataF); - pucch_procedures_ue_nr(ue, proc, phy_data); + pucch_procedures_ue_nr(ue, proc, phy_data, (c16_t **)&txdataF); LOG_D(PHY, "Sending Uplink data \n"); - nr_ue_pusch_common_procedures(ue, - proc->nr_slot_tx, - &ue->frame_parms, - ue->frame_parms.nb_antennas_tx); + nr_ue_pusch_common_procedures(ue, proc->nr_slot_tx, &ue->frame_parms, ue->frame_parms.nb_antennas_tx, (c16_t **)txdataF); nr_ue_prach_procedures(ue, proc); - LOG_D(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", proc->frame_tx, proc->nr_slot_tx); + LOG_D(PHY, "****** end TX-Chain for AbsSubframe %d.%d ******\n", proc->frame_tx, proc->nr_slot_tx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT); stop_meas(&ue->phy_proc_tx); @@ -314,7 +309,6 @@ void nr_ue_measurement_procedures(uint16_t l, int32_t dl_ch_estimates[][pdsch_est_size]) { NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms; - int frame_rx = proc->frame_rx; int nr_slot_rx = proc->nr_slot_rx; int gNB_id = proc->gNB_id; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_MEASUREMENT_PROCEDURES, VCD_FUNCTION_IN); @@ -331,14 +325,18 @@ void nr_ue_measurement_procedures(uint16_t l, #if T_TRACER if(nr_slot_rx == 0) - T(T_UE_PHY_MEAS, T_INT(gNB_id), T_INT(ue->Mod_id), T_INT(frame_rx%1024), T_INT(nr_slot_rx), - T_INT((int)(10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB)), - T_INT((int)ue->measurements.rx_rssi_dBm[0]), - T_INT((int)(ue->measurements.rx_power_avg_dB[0] - ue->measurements.n0_power_avg_dB)), - T_INT((int)ue->measurements.rx_power_avg_dB[0]), - T_INT((int)ue->measurements.n0_power_avg_dB), - T_INT((int)ue->measurements.wideband_cqi_avg[0]), - T_INT((int)ue->common_vars.freq_offset)); + T(T_UE_PHY_MEAS, + T_INT(gNB_id), + T_INT(ue->Mod_id), + T_INT(proc->frame_rx % 1024), + T_INT(nr_slot_rx), + T_INT((int)(10 * log10(ue->measurements.rsrp[0]) - ue->rx_total_gain_dB)), + T_INT((int)ue->measurements.rx_rssi_dBm[0]), + T_INT((int)(ue->measurements.rx_power_avg_dB[0] - ue->measurements.n0_power_avg_dB)), + T_INT((int)ue->measurements.rx_power_avg_dB[0]), + T_INT((int)ue->measurements.n0_power_avg_dB), + T_INT((int)ue->measurements.wideband_cqi_avg[0]), + T_INT((int)ue->common_vars.freq_offset)); #endif } @@ -402,37 +400,12 @@ static int nr_ue_pbch_procedures(PHY_VARS_NR_UE *ue, #endif } else { - LOG_E(PHY,"[UE %d] frame %d, nr_slot_rx %d, Error decoding PBCH!\n", - ue->Mod_id,frame_rx, nr_slot_rx); - /*FILE *fd; - if ((fd = fopen("rxsig_frame0.dat","w")) != NULL) { - fwrite((void *)&ue->common_vars.rxdata[0][0], - sizeof(int32_t), - ue->frame_parms.samples_per_frame, - fd); - LOG_I(PHY,"Dummping Frame ... bye bye \n"); - fclose(fd); - exit(0); - }*/ - - /* - write_output("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_subframe,1,1); - - - write_output("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - write_output("H10.m","h10",&(ue->common_vars.dl_ch_estimates[0][2][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1); - - write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],8*ue->frame_parms.ofdm_symbol_size,1,1); - exit(-1); - */ - + LOG_E(PHY, "[UE %d] frame %d, nr_slot_rx %d, Error decoding PBCH!\n", ue->Mod_id, frame_rx, nr_slot_rx); } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT); return ret; } - - unsigned int nr_get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb) { @@ -450,8 +423,6 @@ unsigned int nr_get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb return(0); } -#ifdef NR_PDCCH_SCHED - int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int32_t pdcch_est_size, @@ -478,7 +449,7 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); nr_rx_pdcch(ue, proc, pdcch_est_size, pdcch_dl_ch_estimates, pdcch_e_rx, rel15, rxdataF); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT); - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN); @@ -492,9 +463,8 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, #ifdef NR_PDCCH_SCHED_DEBUG LOG_I(PHY,"<-NR_PDCCH_PHY_PROCEDURES_LTE_UE (nr_ue_pdcch_procedures)-> Ending function nr_dci_decoding_procedure() -> dci_cnt=%u\n",dci_cnt); #endif - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_OUT); - //LOG_D(PHY,"[UE %d][PUSCH] Frame %d nr_slot_rx %d PHICH RX\n",ue->Mod_id,frame_rx,nr_slot_rx); for (int i=0; i rnti %x : format %d\n", @@ -512,13 +482,11 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, // send to mac ue->if_inst->dl_indication(&dl_indication); - stop_meas(&ue->dlsch_rx_pdcch_stats); - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT); return(dci_cnt); } -#endif // NR_PDCCH_SCHED int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, @@ -544,10 +512,9 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, uint16_t pdsch_nb_rb = dlsch0->dlsch_config.number_rbs; uint16_t s0 = dlsch0->dlsch_config.start_symbol; uint16_t s1 = dlsch0->dlsch_config.number_symbols; - bool is_SI = dlsch0->rnti_type == _SI_RNTI_; - LOG_D(PHY,"[UE %d] nr_slot_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x, Nl %d\n", - ue->Mod_id,nr_slot_rx,harq_pid,dlsch0_harq->status,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0->dlsch_config.dlDmrsSymbPos, dlsch0->Nl); + LOG_D(PHY,"[UE %d] nr_slot_rx %d, harq_pid %d (%d), BWP start %d, rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x, Nl %d\n", + ue->Mod_id,nr_slot_rx,harq_pid,dlsch0_harq->status,BWPStart,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0->dlsch_config.dlDmrsSymbPos, dlsch0->Nl); const uint32_t pdsch_est_size = ((ue->frame_parms.symbols_per_slot * ue->frame_parms.ofdm_symbol_size + 15) / 16) * 16; __attribute__((aligned(32))) int32_t pdsch_dl_ch_estimates[ue->frame_parms.nb_antennas_rx * dlsch0->Nl][pdsch_est_size]; @@ -569,13 +536,13 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, LOG_D(PHY,"PDSCH Channel estimation gNB id %d, PDSCH antenna port %d, slot %d, symbol %d\n",0,aatx,nr_slot_rx,m); nr_pdsch_channel_estimation(ue, proc, - is_SI, get_dmrs_port(aatx,dlsch0->dlsch_config.dmrs_ports), m, dlsch0->dlsch_config.nscid, dlsch0->dlsch_config.dlDmrsScramblingId, BWPStart, dlsch0->dlsch_config.dmrsConfigType, + dlsch0->dlsch_config.rb_offset, ue->frame_parms.first_carrier_offset+(BWPStart + pdsch_start_rb)*12, pdsch_nb_rb, pdsch_est_size, @@ -658,10 +625,12 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, stop_meas(&ue->dlsch_llr_stats_parallelization[slot]); if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",frame_rx,nr_slot_rx,m,ue->dlsch_llr_stats_parallelization[slot].p_time/(cpuf*1000.0)); - if(first_symbol_flag) { - proc->first_symbol_available = 1; - } + LOG_D(PHY, + "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n", + frame_rx, + nr_slot_rx, + m, + ue->dlsch_llr_stats_parallelization[slot].p_time / (cpuf * 1000.0)); } // CRNTI active stop_meas(&ue->rx_pdsch_stats); } @@ -1004,8 +973,6 @@ void pbch_pdcch_processing(PHY_VARS_NR_UE *ue, LOG_I(NR_PHY,"============================================\n"); } -#ifdef NR_PDCCH_SCHED - LOG_D(PHY," ------ --> PDCCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PDCCH, VCD_FUNCTION_IN); @@ -1058,7 +1025,6 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, int gNB_id = proc->gNB_id; NR_UE_DLSCH_t *dlsch = &phy_data->dlsch[0]; -#endif //NR_PDCCH_SCHED start_meas(&ue->generic_stat); // do procedures for C-RNTI int ret_pdsch = 0; @@ -1199,7 +1165,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, stop_meas(&ue->generic_stat); if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY,"after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0)); + LOG_D(PHY, "after ldpc decode until end of Rx %5.2f \n", ue->generic_stat.p_time / (cpuf * 1000.0)); #ifdef EMOS phy_procedures_emos_UE_RX(ue,slot,gNB_id); @@ -1219,8 +1185,8 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, // todo: // - power control as per 38.213 ch 7.4 -void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc) { - +void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc) +{ int gNB_id = proc->gNB_id; int frame_tx = proc->frame_tx, nr_slot_tx = proc->nr_slot_tx, prach_power; // tx_amp uint8_t mod_id = ue->Mod_id; @@ -1228,7 +1194,6 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_IN); if (ue->prach_vars[gNB_id]->active) { - fapi_nr_ul_config_prach_pdu *prach_pdu = &ue->prach_vars[gNB_id]->prach_pdu; ue->tx_power_dBm[nr_slot_tx] = prach_pdu->prach_tx_power; diff --git a/openair1/SCHED_NR_UE/pucch_uci_ue_nr.c b/openair1/SCHED_NR_UE/pucch_uci_ue_nr.c index 7871b34f32..2023d7dec3 100644 --- a/openair1/SCHED_NR_UE/pucch_uci_ue_nr.c +++ b/openair1/SCHED_NR_UE/pucch_uci_ue_nr.c @@ -198,18 +198,14 @@ void nr_generate_pucch3_4(int32_t **txdataF, * *********************************************************************/ -void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_tx_t *phy_data) { - - int nr_slot_tx = proc->nr_slot_tx; - fapi_nr_ul_config_pucch_pdu *pucch_pdu; +void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data, c16_t **txdataF) +{ + const int nr_slot_tx = proc->nr_slot_tx; NR_UE_PUCCH *pucch_vars = &phy_data->pucch_vars; for (int i=0; i<2; i++) { if(pucch_vars->active[i]) { - - pucch_pdu = &pucch_vars->pucch_pdu[i]; + const fapi_nr_ul_config_pucch_pdu *pucch_pdu = &pucch_vars->pucch_pdu[i]; uint16_t nb_of_prbs = pucch_pdu->prb_size; /* Generate PUCCH signal according to its format and parameters */ @@ -238,37 +234,17 @@ void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, switch(pucch_pdu->format_type) { case 0: - nr_generate_pucch0(ue, - ue->common_vars.txdataF, - &ue->frame_parms, - tx_amp, - nr_slot_tx, - pucch_pdu); + nr_generate_pucch0(ue, txdataF, &ue->frame_parms, tx_amp, nr_slot_tx, pucch_pdu); break; case 1: - nr_generate_pucch1(ue, - ue->common_vars.txdataF, - &ue->frame_parms, - tx_amp, - nr_slot_tx, - pucch_pdu); + nr_generate_pucch1(ue, txdataF, &ue->frame_parms, tx_amp, nr_slot_tx, pucch_pdu); break; case 2: - nr_generate_pucch2(ue, - ue->common_vars.txdataF, - &ue->frame_parms, - tx_amp, - nr_slot_tx, - pucch_pdu); + nr_generate_pucch2(ue, txdataF, &ue->frame_parms, tx_amp, nr_slot_tx, pucch_pdu); break; case 3: case 4: - nr_generate_pucch3_4(ue, - ue->common_vars.txdataF, - &ue->frame_parms, - tx_amp, - nr_slot_tx, - pucch_pdu); + nr_generate_pucch3_4(ue, txdataF, &ue->frame_parms, tx_amp, nr_slot_tx, pucch_pdu); break; } } @@ -276,8 +252,6 @@ void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, } } - - int dummy_csi_status = 0; uint32_t dummy_csi_payload = 0; diff --git a/openair1/SCHED_NR_UE/pucch_uci_ue_nr.h b/openair1/SCHED_NR_UE/pucch_uci_ue_nr.h index 8bfb692e46..c3fa990eeb 100644 --- a/openair1/SCHED_NR_UE/pucch_uci_ue_nr.h +++ b/openair1/SCHED_NR_UE/pucch_uci_ue_nr.h @@ -58,10 +58,7 @@ /*************** FUNCTIONS ****************************************/ -void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, - nr_phy_data_tx_t *phy_data); - +void pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_data_tx_t *phy_data, c16_t **txdataF); void set_csi_nr(int csi_status, uint32_t csi_payload); diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index ee3ecd221d..19d58ef4b5 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -2731,6 +2731,7 @@ int ue_pdcch_procedures(uint8_t eNB_id, CBA_RNTI, eNB_id, 0)==0)) { +#if T_TRACER int harq_pid = subframe2harq_pid(&ue->frame_parms, pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx), pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx)); @@ -2749,6 +2750,7 @@ int ue_pdcch_procedures(uint8_t eNB_id, pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx)); LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx); } +#endif } } else if( (dci_alloc_rx[i].rnti == ue->ulsch[eNB_id]->cba_rnti[0]) && (dci_alloc_rx[i].format == format0)) { diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 88e8727245..592565bb16 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -902,7 +902,6 @@ int main(int argc, char **argv) { // moreover you need to init itti with the following line // however itti will catch all signals, so ctrl-c won't work anymore // alternatively you can disable ITTI completely in CMakeLists.txt - T_stdout = 1; if (common_flag == 0) { switch (N_RB_DL) { diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 70622b2120..21ca86cf47 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -398,7 +398,6 @@ int main(int argc, char **argv) { AssertFatal(load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) != NULL, "Cannot load configuration module, exiting\n"); logInit(); set_glog(OAILOG_INFO); - T_stdout = 1; // enable these lines if you need debug info // however itti will catch all signals, so ctrl-c won't work anymore // alternatively you can disable ITTI completely in CMakeLists.txt diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index c98bc4ee04..3e003252ea 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -342,7 +342,6 @@ int main(int argc, char **argv) logInit(); set_glog(loglvl); - T_stdout = 1; if (snr1set == 0) snr1 = snr0 + 10; @@ -412,7 +411,7 @@ int main(int argc, char **argv) } //configure UE - UE = malloc(sizeof(PHY_VARS_NR_UE)); + UE = calloc(1, sizeof(*UE)); memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS)); //phy_init_nr_top(frame_parms); diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index daa1b2531c..cbec36129e 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -610,7 +610,6 @@ int main(int argc, char **argv) logInit(); set_glog(loglvl); - T_stdout = 1; /* initialize the sin table */ InitSinLUT(); @@ -708,13 +707,11 @@ int main(int argc, char **argv) N_RB_DL,g_mcsTableIdx,0); // TODO do a UECAP for phy-sim - const gNB_RrcConfigurationReq conf = { - .pdsch_AntennaPorts = pdsch_AntennaPorts, - .minRXTXTIME = 6, - .do_CSIRS = 0, - .do_SRS = 0, - .force_256qam_off = false - }; + const gNB_RrcConfigurationReq conf = {.pdsch_AntennaPorts = pdsch_AntennaPorts, + .minRXTXTIME = 6, + .do_CSIRS = 0, + .do_SRS = 0, + .force_256qam_off = false}; NR_CellGroupConfig_t *secondaryCellGroup = get_default_secondaryCellGroup(scc, scd, UE_Capability_nr, 0, 1, &conf, 0); /* RRC parameter validation for secondaryCellGroup */ diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 9299cd4073..f4f04b0538 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -478,7 +478,6 @@ int main(int argc, char **argv) logInit(); set_glog(loglvl); - T_stdout = 1; if (snr1set==0) snr1 = snr0+10; diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index 3938eef12d..b616f050fe 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -411,7 +411,6 @@ int main(int argc, char **argv){ // Configure log logInit(); set_glog(loglvl); - T_stdout = 1; SET_LOG_DEBUG(PRACH); // Configure gNB and RU @@ -597,7 +596,7 @@ int main(int argc, char **argv){ ue_prach_pdu = &UE->prach_vars[0]->prach_pdu; ue_prach_config = &UE->nrUE_config.prach_config; - txdata = UE->common_vars.txdata; + txdata = UE->common_vars.txData; UE->prach_vars[0]->amp = AMP; ue_prach_pdu->root_seq_id = rootSequenceIndex; diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c index 3ced917cac..d600c480d2 100644 --- a/openair1/SIMULATION/NR_PHY/pucchsim.c +++ b/openair1/SIMULATION/NR_PHY/pucchsim.c @@ -123,7 +123,7 @@ int main(int argc, char **argv) int16_t amp=0x7FFF; int nr_slot_tx=0; int nr_frame_tx=0; - uint64_t actual_payload=0,payload_received; + uint64_t actual_payload = 0, payload_received = 0; bool random_payload = true; int nr_bit=1; // maximum value possible is 2 uint8_t m0=0;// higher layer paramater initial cyclic shift diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c index 4b25863e85..2114bbe766 100644 --- a/openair1/SIMULATION/NR_PHY/ulschsim.c +++ b/openair1/SIMULATION/NR_PHY/ulschsim.c @@ -377,7 +377,6 @@ int main(int argc, char **argv) logInit(); set_glog(loglvl); - T_stdout = 1; if (snr1set == 0) snr1 = snr0 + 10; @@ -428,7 +427,7 @@ int main(int argc, char **argv) phy_init_nr_gNB(gNB); //configure UE - UE = malloc(sizeof(PHY_VARS_NR_UE)); + UE = calloc(1, sizeof(*UE)); memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS)); UE->frame_parms.nb_antennas_tx = n_tx; diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 53c691afa3..4c193df4fd 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -561,7 +561,6 @@ int main(int argc, char **argv) logInit(); set_glog(loglvl); - T_stdout = 1; get_softmodem_params()->phy_test = 1; get_softmodem_params()->do_ra = 0; @@ -634,14 +633,12 @@ int main(int argc, char **argv) N_RB_UL,0,mcs_table); // TODO do a UECAP for phy-sim - const gNB_RrcConfigurationReq conf = { - .pdsch_AntennaPorts = { .N1 = 1, .N2 = 1, .XP = 1 }, - .pusch_AntennaPorts = n_rx, - .minRXTXTIME = 0, - .do_CSIRS = 0, - .do_SRS = 0, - .force_256qam_off = false - }; + const gNB_RrcConfigurationReq conf = {.pdsch_AntennaPorts = {.N1 = 1, .N2 = 1, .XP = 1}, + .pusch_AntennaPorts = n_rx, + .minRXTXTIME = 0, + .do_CSIRS = 0, + .do_SRS = 0, + .force_256qam_off = false}; NR_CellGroupConfig_t *secondaryCellGroup = get_default_secondaryCellGroup(scc, scd, UE_Capability_nr, 0, 1, &conf, 0); @@ -1186,14 +1183,14 @@ int main(int argc, char **argv) phy_procedures_nrUE_TX(UE, &UE_proc, &phy_data); if (n_trials == 1) { - LOG_M("txsig0.m", "txs0", &UE->common_vars.txdata[0][slot_offset], slot_length, 1, 1); + LOG_M("txsig0.m", "txs0", &UE->common_vars.txData[0][slot_offset], slot_length, 1, 1); LOG_M("txsig0F.m", "txs0F", UE->common_vars.txdataF[0], frame_parms->ofdm_symbol_size * 14, 1, 1); if (precod_nbr_layers > 1) { - LOG_M("txsig1.m", "txs1", &UE->common_vars.txdata[1][slot_offset], slot_length, 1, 1); + LOG_M("txsig1.m", "txs1", &UE->common_vars.txData[1][slot_offset], slot_length, 1, 1); LOG_M("txsig1F.m", "txs1F", UE->common_vars.txdataF[1], frame_parms->ofdm_symbol_size * 14, 1, 1); if (precod_nbr_layers == 4) { - LOG_M("txsig2.m", "txs2", &UE->common_vars.txdata[2][slot_offset], slot_length, 1, 1); - LOG_M("txsig3.m", "txs3", &UE->common_vars.txdata[3][slot_offset], slot_length, 1, 1); + LOG_M("txsig2.m", "txs2", &UE->common_vars.txData[2][slot_offset], slot_length, 1, 1); + LOG_M("txsig3.m", "txs3", &UE->common_vars.txData[3][slot_offset], slot_length, 1, 1); LOG_M("txsig2F.m", "txs2F", UE->common_vars.txdataF[2], frame_parms->ofdm_symbol_size * 14, 1, 1); LOG_M("txsig3F.m", "txs3F", UE->common_vars.txdataF[3], frame_parms->ofdm_symbol_size * 14, 1, 1); } @@ -1204,8 +1201,10 @@ int main(int argc, char **argv) tx_offset = frame_parms->get_samples_slot_timestamp(slot, frame_parms, 0); txlev_sum = 0; for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { - atxlev[aa] = signal_energy((int32_t *)&UE->common_vars.txdata[aa][tx_offset + 5 * frame_parms->ofdm_symbol_size + 4 * frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0], - frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples); + atxlev[aa] = signal_energy( + (int32_t *)&UE->common_vars.txData[aa][tx_offset + 5 * frame_parms->ofdm_symbol_size + + 4 * frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0], + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples); txlev_sum += atxlev[aa]; @@ -1226,8 +1225,8 @@ int main(int argc, char **argv) for (i = 0; i < slot_length; i++) { for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { - s_re[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i << 1)]); - s_im[aa][i] = ((double)(((short *)&UE->common_vars.txdata[aa][slot_offset]))[(i << 1) + 1]); + s_re[aa][i] = (double)UE->common_vars.txData[aa][slot_offset + i].r; + s_im[aa][i] = (double)UE->common_vars.txData[aa][slot_offset + i].i; } } diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c index 9ba14d4f8e..fad949ce93 100644 --- a/openair1/SIMULATION/TOOLS/random_channel.c +++ b/openair1/SIMULATION/TOOLS/random_channel.c @@ -110,7 +110,7 @@ void fill_channel_desc(channel_desc_t *chan_desc, LOG_D(OCM,"[CHANNEL] Doing delays ...\n"); if (delays==NULL) { - chan_desc->delays = (double *) malloc(nb_taps*sizeof(double)); + chan_desc->delays = calloc(nb_taps, sizeof(double)); chan_desc->free_flags=chan_desc->free_flags|CHANMODEL_FREE_DELAY ; delta_tau = Td/nb_taps; @@ -131,22 +131,22 @@ void fill_channel_desc(channel_desc_t *chan_desc, chan_desc->first_run = 1; chan_desc->ip = 0.0; chan_desc->max_Doppler = max_Doppler; - chan_desc->ch = (struct complexd **) malloc(nb_tx*nb_rx*sizeof(struct complexd *)); - chan_desc->chF = (struct complexd **) malloc(nb_tx*nb_rx*sizeof(struct complexd *)); - chan_desc->a = (struct complexd **) malloc(nb_taps*sizeof(struct complexd *)); + chan_desc->ch = calloc(nb_tx*nb_rx, sizeof(struct complexd *)); + chan_desc->chF = calloc(nb_tx*nb_rx, sizeof(struct complexd *)); + chan_desc->a = calloc(nb_taps, sizeof(struct complexd *)); LOG_D(OCM,"[CHANNEL] Filling ch \n"); for (i = 0; ich[i] = (struct complexd *) malloc(channel_length * sizeof(struct complexd)); + chan_desc->ch[i] = calloc(channel_length, sizeof(struct complexd)); for (i = 0; ichF[i] = (struct complexd *) malloc(275 * 12 * sizeof(struct complexd)); // allocate for up to 275 RBs, 12 symbols per RB + chan_desc->chF[i] = calloc(275 * 12, sizeof(struct complexd)); // allocate for up to 275 RBs, 12 symbols per RB LOG_D(OCM,"[CHANNEL] Filling a (nb_taps %d)\n",nb_taps); for (i = 0; ia[i],nb_tx*nb_rx * sizeof(struct complexd)); - chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd)); + chan_desc->a[i] = calloc(nb_tx*nb_rx, sizeof(struct complexd)); } LOG_D(OCM,"[CHANNEL] Doing R_sqrt ...\n"); @@ -367,7 +367,7 @@ void tdlModel(int tdl_paths, double *tdl_delays, double *tdl_amps_dB, double DS 2/(M_PI*M_PI)*log(4*M_PI*chan_desc->sampling_rate*chan_desc->Td)); printf("TDL : %f Ms/s, nb_taps %d, Td %e, channel_length %d\n",chan_desc->sampling_rate,tdl_paths,chan_desc->Td,chan_desc->channel_length); double sum_amps = 0; - chan_desc->amps = (double *) malloc(chan_desc->nb_taps*sizeof(double)); + chan_desc->amps = calloc(chan_desc->nb_taps, sizeof(double)); for (int i = 0; inb_taps; i++) { chan_desc->amps[i] = pow(10,.1*tdl_amps_dB[i]); @@ -382,19 +382,19 @@ void tdlModel(int tdl_paths, double *tdl_delays, double *tdl_amps_dB, double DS chan_desc->delays = tdl_delays; chan_desc->aoa = 0; chan_desc->random_aoa = 0; - chan_desc->ch = (struct complexd **) malloc(nb_tx*nb_rx*sizeof(struct complexd *)); - chan_desc->chF = (struct complexd **) malloc(nb_tx*nb_rx*sizeof(struct complexd *)); - chan_desc->a = (struct complexd **) malloc(chan_desc->nb_taps*sizeof(struct complexd *)); + chan_desc->ch = calloc(nb_tx*nb_rx, sizeof(struct complexd *)); + chan_desc->chF = calloc(nb_tx*nb_rx, sizeof(struct complexd *)); + chan_desc->a = calloc(chan_desc->nb_taps, sizeof(struct complexd *)); chan_desc->ricean_factor = 1.0; for (int i = 0; ich[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd)); + chan_desc->ch[i] = calloc(chan_desc->channel_length, sizeof(struct complexd)); for (int i = 0; ichF[i] = (struct complexd *) malloc((2+(275*12)) * sizeof(struct complexd)); + chan_desc->chF[i] = calloc(2+(275*12), sizeof(struct complexd)); for (int i = 0; inb_taps; i++) - chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd)); + chan_desc->a[i] = calloc(nb_tx*nb_rx, sizeof(struct complexd)); int matrix_size = nb_tx*nb_rx; double *correlation_matrix[matrix_size]; @@ -446,9 +446,9 @@ void tdlModel(int tdl_paths, double *tdl_delays, double *tdl_amps_dB, double DS } } - chan_desc->R_sqrt = (struct complexd **) malloc(matrix_size*sizeof(struct complexd **)); + chan_desc->R_sqrt = calloc(matrix_size, sizeof(*chan_desc->R_sqrt)); for (int row = 0; row < matrix_size; row++) { - chan_desc->R_sqrt[row] = (struct complexd *) calloc(1, matrix_size*sizeof(struct complexd)); + chan_desc->R_sqrt[row] = calloc(matrix_size, sizeof(**chan_desc->R_sqrt)); if (correlation_matrix[row] == NULL) { // TS 38.104 - Table G.2.3.1.2-4: MIMO correlation matrices for low correlation chan_desc->R_sqrt[row][row].r = 1.0; @@ -637,7 +637,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx, chan_desc->Td = 4.625; chan_desc->channel_length = (int) (2*chan_desc->sampling_rate*chan_desc->Td + 1 + 2/(M_PI*M_PI)*log(4*M_PI*chan_desc->sampling_rate*chan_desc->Td)); sum_amps = 0; - chan_desc->amps = (double *) malloc(chan_desc->nb_taps*sizeof(double)); + chan_desc->amps = calloc(chan_desc->nb_taps, sizeof(double)); chan_desc->free_flags=chan_desc->free_flags|CHANMODEL_FREE_AMPS ; for (i = 0; inb_taps; i++) { @@ -657,15 +657,15 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx, chan_desc->a = (struct complexd **) malloc(chan_desc->nb_taps*sizeof(struct complexd *)); for (i = 0; ich[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd)); + chan_desc->ch[i] = calloc(chan_desc->channel_length, sizeof(struct complexd)); for (i = 0; ichF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd)); + chan_desc->chF[i] = calloc(1200, sizeof(struct complexd)); for (i = 0; inb_taps; i++) - chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd)); + chan_desc->a[i] = calloc(nb_tx*nb_rx, sizeof(struct complexd)); - chan_desc->R_sqrt = (struct complexd **) malloc(6*sizeof(struct complexd **)); + chan_desc->R_sqrt = calloc(6, sizeof(struct complexd **)); if (nb_tx==2 && nb_rx==2) { for (i = 0; i<6; i++) @@ -680,7 +680,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx, chan_desc->free_flags=chan_desc->free_flags|CHANMODEL_FREE_RSQRT_6 ; for (i = 0; i<6; i++) { - chan_desc->R_sqrt[i] = (struct complexd *) malloc(nb_tx*nb_rx*nb_tx*nb_rx * sizeof(struct complexd)); + chan_desc->R_sqrt[i] = calloc(nb_tx*nb_rx*nb_tx*nb_rx, sizeof(struct complexd)); for (j = 0; jR_sqrt[i][j].r = 1.0; diff --git a/openair2/CMakeLists.txt b/openair2/CMakeLists.txt index 117d18412b..c6e28a6b36 100644 --- a/openair2/CMakeLists.txt +++ b/openair2/CMakeLists.txt @@ -6,3 +6,4 @@ add_subdirectory(F1AP) add_subdirectory(M2AP) add_subdirectory(X2AP) add_subdirectory(RRC) +add_subdirectory(XNAP) diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 87ad04a2dc..4914dd9068 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -467,6 +467,7 @@ typedef struct rrc_subframe_process_s { typedef struct nrrrc_slot_process_s { int frame; int slot; + int gnb_id; } NRRrcSlotProcess; // eNB: RLC -> RRC messages diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index 395a69b0b3..d9b9cf6f10 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -701,7 +701,7 @@ void ue_init_config_request(NR_UE_MAC_INST_t *mac, int scs) void nr_rrc_mac_config_req_mib(module_id_t module_id, int cc_idP, NR_MIB_t *mib, - bool sched_sib1) + int sched_sib) { NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); AssertFatal(mib, "MIB should not be NULL\n"); @@ -709,16 +709,21 @@ void nr_rrc_mac_config_req_mib(module_id_t module_id, mac->mib = mib; // update by every reception mac->phy_config.Mod_id = module_id; mac->phy_config.CC_id = cc_idP; - mac->get_sib1 = sched_sib1; + if (sched_sib == 1) + mac->get_sib1 = true; + else if (sched_sib == 2) + mac->get_otherSI = true; } void nr_rrc_mac_config_req_sib1(module_id_t module_id, int cc_idP, + struct NR_SI_SchedulingInfo *si_SchedulingInfo, NR_ServingCellConfigCommonSIB_t *scc) { NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); AssertFatal(scc, "SIB1 SCC should not be NULL\n"); mac->scc_SIB = scc; + mac->si_SchedulingInfo = si_SchedulingInfo; mac->nr_band = *scc->downlinkConfigCommon.frequencyInfoDL.frequencyBandList.list.array[0]->freqBandIndicatorNR; config_common_ue_sa(mac, module_id, cc_idP); configure_current_BWP(mac, scc, NULL); diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index 4eee1bb3fe..5051d92143 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -382,6 +382,43 @@ typedef struct NR_UL_TIME_ALIGNMENT { int slot; } NR_UL_TIME_ALIGNMENT_t; +// The PRACH Config period is a series of selected slots in one or multiple frames +typedef struct prach_conf_period { + prach_occasion_slot_t prach_occasion_slot_map[MAX_NB_FRAME_IN_PRACH_CONF_PERIOD][MAX_NB_SLOT_IN_FRAME]; + uint16_t nb_of_prach_occasion; // Total number of PRACH occasions in the PRACH Config period + uint8_t nb_of_frame; // Size of the PRACH Config period in number of 10ms frames + uint8_t nb_of_slot; // Nb of slots in each frame +} prach_conf_period_t; + +// The association period is a series of PRACH Config periods +typedef struct prach_association_period { + prach_conf_period_t *prach_conf_period_list[MAX_NB_PRACH_CONF_PERIOD_IN_ASSOCIATION_PERIOD]; + uint8_t nb_of_prach_conf_period; // Nb of PRACH configuration periods within the association period + uint8_t nb_of_frame; // Total number of frames included in the association period +} prach_association_period_t; + +// The association pattern is a series of Association periods +typedef struct prach_association_pattern { + prach_association_period_t prach_association_period_list[MAX_NB_ASSOCIATION_PERIOD_IN_ASSOCIATION_PATTERN_PERIOD]; + prach_conf_period_t prach_conf_period_list[MAX_NB_PRACH_CONF_PERIOD_IN_ASSOCIATION_PATTERN_PERIOD]; + uint8_t nb_of_assoc_period; // Nb of association periods within the association pattern + uint8_t nb_of_prach_conf_period_in_max_period; // Nb of PRACH configuration periods within the maximum association pattern period (according to the size of the configured PRACH + uint8_t nb_of_frame; // Total number of frames included in the association pattern period (after mapping the SSBs and determining the real association pattern length) +} prach_association_pattern_t; + +// SSB details +typedef struct ssb_info { + bool transmitted; // True if the SSB index is transmitted according to the SSB positions map configuration + prach_occasion_info_t *mapped_ro[MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN]; // List of mapped RACH Occasions to this SSB index + uint32_t nb_mapped_ro; // Total number of mapped ROs to this SSB index +} ssb_info_t; + +// List of all the possible SSBs and their details +typedef struct ssb_list_info { + ssb_info_t tx_ssb[MAX_NB_SSB]; + uint8_t nb_tx_ssb; +} ssb_list_info_t; + /*!\brief Top level UE MAC structure */ typedef struct { NR_UE_L2_STATE_t state; @@ -394,6 +431,7 @@ typedef struct { //// MAC config int first_sync_frame; bool get_sib1; + bool get_otherSI; NR_DRX_Config_t *drx_Config; NR_SchedulingRequestConfig_t *schedulingRequestConfig; NR_BSR_Config_t *bsr_Config; @@ -401,6 +439,9 @@ typedef struct { NR_PHR_Config_t *phr_Config; NR_RNTI_Value_t *cs_RNTI; NR_MIB_t *mib; + struct NR_SI_SchedulingInfo *si_SchedulingInfo; + int si_window_start; + ssb_list_info_t ssb_list; NR_UE_DL_BWP_t current_DL_BWP; NR_UE_UL_BWP_t current_UL_BWP; @@ -484,43 +525,5 @@ typedef struct { } NR_UE_MAC_INST_t; - -// The PRACH Config period is a series of selected slots in one or multiple frames -typedef struct prach_conf_period { - prach_occasion_slot_t prach_occasion_slot_map[MAX_NB_FRAME_IN_PRACH_CONF_PERIOD][MAX_NB_SLOT_IN_FRAME]; - uint16_t nb_of_prach_occasion; // Total number of PRACH occasions in the PRACH Config period - uint8_t nb_of_frame; // Size of the PRACH Config period in number of 10ms frames - uint8_t nb_of_slot; // Nb of slots in each frame -} prach_conf_period_t; - -// The association period is a series of PRACH Config periods -typedef struct prach_association_period { - prach_conf_period_t *prach_conf_period_list[MAX_NB_PRACH_CONF_PERIOD_IN_ASSOCIATION_PERIOD]; - uint8_t nb_of_prach_conf_period; // Nb of PRACH configuration periods within the association period - uint8_t nb_of_frame; // Total number of frames included in the association period -} prach_association_period_t; - -// The association pattern is a series of Association periods -typedef struct prach_association_pattern { - prach_association_period_t prach_association_period_list[MAX_NB_ASSOCIATION_PERIOD_IN_ASSOCIATION_PATTERN_PERIOD]; - prach_conf_period_t prach_conf_period_list[MAX_NB_PRACH_CONF_PERIOD_IN_ASSOCIATION_PATTERN_PERIOD]; - uint8_t nb_of_assoc_period; // Nb of association periods within the association pattern - uint8_t nb_of_prach_conf_period_in_max_period; // Nb of PRACH configuration periods within the maximum association pattern period (according to the size of the configured PRACH - uint8_t nb_of_frame; // Total number of frames included in the association pattern period (after mapping the SSBs and determining the real association pattern length) -} prach_association_pattern_t; - -// SSB details -typedef struct ssb_info { - bool transmitted; // True if the SSB index is transmitted according to the SSB positions map configuration - prach_occasion_info_t *mapped_ro[MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN]; // List of mapped RACH Occasions to this SSB index - uint32_t nb_mapped_ro; // Total number of mapped ROs to this SSB index -} ssb_info_t; - -// List of all the possible SSBs and their details -typedef struct ssb_list_info { - ssb_info_t tx_ssb[MAX_NB_SSB]; - uint8_t nb_tx_ssb; -} ssb_list_info_t; - /*@}*/ #endif /*__LAYER2_MAC_DEFS_H__ */ diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 9eb332109e..09d85cb7a2 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -106,10 +106,11 @@ void nr_rrc_mac_config_req_mcg(module_id_t module_id, void nr_rrc_mac_config_req_mib(module_id_t module_id, int cc_idP, NR_MIB_t *mibP, - bool sched_sib1); + int sched_sib1); void nr_rrc_mac_config_req_sib1(module_id_t module_id, int cc_idP, + struct NR_SI_SchedulingInfo *si_SchedulingInfo, NR_ServingCellConfigCommonSIB_t *scc); /**\brief initialization NR UE MAC instance(s), total number of MAC instance based on NB_NR_UE_MAC_INST*/ @@ -324,7 +325,6 @@ and fills the PRACH PDU per each FD occasion. @param slotP Slot index @returns void */ -void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t slotP); void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, void *phy_data); void nr_schedule_csirs_reception(NR_UE_MAC_INST_t *mac, int frame, int slot); void nr_schedule_csi_for_im(NR_UE_MAC_INST_t *mac, int frame, int slot); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c index 1c09ec574d..9820e60107 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c @@ -738,9 +738,7 @@ uint8_t nr_ue_get_rach(module_id_t mod_id, ((NR_MAC_SUBHEADER_FIXED *) pdu)->R = 0; ((NR_MAC_SUBHEADER_FIXED *) pdu)->LCID = UL_SCH_LCID_PADDING; pdu += sizeof(NR_MAC_SUBHEADER_FIXED); - for (int j = 0; j < TBS_max - ra->Msg3_size - sizeof(NR_MAC_SUBHEADER_FIXED); j++) { - pdu[j] = 0; - } + memset(pdu, 0, TBS_max - ra->Msg3_size - sizeof(NR_MAC_SUBHEADER_FIXED)); } // Dumping ULSCH payload diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c index 8b99818508..b69097ae8e 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c @@ -365,10 +365,78 @@ bool is_ss_monitor_occasion(const int frame, const int slot, const int slots_per return monitor; } +bool monitior_dci_for_other_SI(NR_UE_MAC_INST_t *mac, + const NR_SearchSpace_t *ss, + const int slots_per_frame, + const int frame, + const int slot) +{ + const struct NR_SI_SchedulingInfo *si_SchedulingInfo = mac->si_SchedulingInfo; + // 5.2.2.3.2 in 331 + if (!si_SchedulingInfo) + return false; + const int si_window_slots = 5 << si_SchedulingInfo->si_WindowLength; + const int abs_slot = frame * slots_per_frame + slot; + for (int n = 0; n < si_SchedulingInfo->schedulingInfoList.list.count; n++) { + struct NR_SchedulingInfo *sched_Info = si_SchedulingInfo->schedulingInfoList.list.array[n]; + if(mac->si_window_start == -1) { + int x = n * si_window_slots; + int T = 8 << sched_Info->si_Periodicity; // radio frame periodicity + if ((frame % T) == (x / slots_per_frame) && + (x % slots_per_frame == 0)) + mac->si_window_start = abs_slot; // in terms of absolute slot number + } + if (mac->si_window_start == -1) { + // out of window + return false; + } + else if (abs_slot > mac->si_window_start + si_window_slots) { + // window expired + mac->si_window_start = -1; + return false; + } + else { + const int duration = ss->duration ? *ss->duration : 1; + int period, offset; + get_monitoring_period_offset(ss, &period, &offset); + for (int i = 0; i < duration; i++) { + if (((frame * slots_per_frame + slot - offset - i) % period) == 0) { + int N = mac->ssb_list.nb_tx_ssb; + int K = 0; // k_th transmitted SSB + for (int i = 0; i < mac->mib_ssb; i++) { + if(mac->ssb_list.tx_ssb[i].transmitted) + K++; + } + // numbering current frame and slot in terms of monitoring occasions in window + int current_monitor_occasion = ((abs_slot - mac->si_window_start) % period) + + (duration * (abs_slot - mac->si_window_start) / period); + if (current_monitor_occasion % N == K) + return true; + else + return false; + } + } + } + } + return false; +} + + void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl_config, const frame_t frame, const int slot) { const NR_UE_DL_BWP_t *current_DL_BWP = &mac->current_DL_BWP; const int slots_per_frame = nr_slots_per_frame[current_DL_BWP->scs]; + if (mac->get_otherSI) { + // If searchSpaceOtherSystemInformation is set to zero, + // PDCCH monitoring occasions for SI message reception in SI-window + // are same as PDCCH monitoring occasions for SIB1 + const NR_SearchSpace_t *ss = mac->otherSI_SS ? mac->otherSI_SS : mac->search_space_zero; + // TODO configure SI-window + if (monitior_dci_for_other_SI(mac, ss, slots_per_frame, frame, slot)) { + LOG_D(NR_MAC, "Monitoring DCI for other SIs in frame %d slot %d\n", frame, slot); + config_dci_pdu(mac, dl_config, NR_RNTI_SI, slot, ss); + } + } if (mac->state == UE_PERFORMING_RA && mac->ra.ra_state >= WAIT_RAR) { // if RA is ongoing use RA search space diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index b1e0c17cc8..5d949f74f2 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -165,8 +165,10 @@ void nr_ue_init_mac(module_id_t module_idP) nr_ue_mac_default_configs(mac); mac->first_sync_frame = -1; mac->get_sib1 = false; + mac->get_otherSI = false; mac->phy_config_request_sent = false; mac->state = UE_NOT_SYNC; + mac->si_window_start = -1; } void nr_ue_mac_default_configs(NR_UE_MAC_INST_t *mac) @@ -354,13 +356,17 @@ int8_t nr_ue_decode_BCCH_DL_SCH(module_id_t module_id, unsigned int gNB_index, uint8_t ack_nack, uint8_t *pduP, - uint32_t pdu_len) { + uint32_t pdu_len) +{ + NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); if(ack_nack) { LOG_D(NR_MAC, "Decoding NR-BCCH-DL-SCH-Message (SIB1 or SI)\n"); nr_mac_rrc_data_ind_ue(module_id, cc_id, gNB_index, 0, 0, 0, NR_BCCH_DL_SCH, (uint8_t *) pduP, pdu_len); } else - LOG_E(NR_MAC, "Got NACK on NR-BCCH-DL-SCH-Message (SIB1 or SI)\n"); + LOG_E(NR_MAC, "Got NACK on NR-BCCH-DL-SCH-Message (%s)\n", mac->get_sib1 ? "SIB1" : "other SI"); + mac->get_sib1 = false; + mac->get_otherSI = false; return 0; } @@ -655,7 +661,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr dlsch_config_pdu_1_0->pduBitmap = 0; - NR_PDSCH_Config_t *pdsch_config = current_DL_BWP ? current_DL_BWP->pdsch_Config : NULL; + NR_PDSCH_Config_t *pdsch_config = (current_DL_BWP || !mac->get_sib1) ? current_DL_BWP->pdsch_Config : NULL; if (dci_ind->ss_type == NR_SearchSpace__searchSpaceType_PR_common) { dlsch_config_pdu_1_0->BWPSize = mac->type0_PDCCH_CSS_config.num_rbs ? mac->type0_PDCCH_CSS_config.num_rbs : current_DL_BWP->initial_BWPSize; dlsch_config_pdu_1_0->BWPStart = dci_ind->cset_start; @@ -672,7 +678,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon; if(mac->frequency_range == FR2) dlsch_config_pdu_1_0->SubcarrierSpacing = mac->mib->subCarrierSpacingCommon + 2; - if (pdsch_config) pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL; // For PDSCH with mapping type A, the UE shall assume dmrs-AdditionalPosition='pos2' } else { dlsch_config_pdu_1_0->SubcarrierSpacing = current_DL_BWP->scs; if (ra->RA_window_cnt >= 0 && rnti == ra->ra_rnti){ @@ -688,19 +693,23 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr LOG_W(MAC, "[%d.%d] Invalid frequency_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot); return -1; } + dlsch_config_pdu_1_0->rb_offset = dlsch_config_pdu_1_0->start_rb + dlsch_config_pdu_1_0->BWPStart; + if (mac->get_sib1) + dlsch_config_pdu_1_0->rb_offset -= dlsch_config_pdu_1_0->BWPStart; /* TIME_DOM_RESOURCE_ASSIGNMENT */ int dmrs_typeA_pos = (mac->scc != NULL) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position; - // TODO need to differentiate SI_RNTI between SIB1 and other SIB NR_tda_info_t tda_info = get_dl_tda_info(current_DL_BWP, dci_ind->ss_type, dci->time_domain_assignment.val, - dmrs_typeA_pos, mux_pattern, get_rnti_type(mac, rnti), coreset_type, rnti == SI_RNTI); + dmrs_typeA_pos, mux_pattern, get_rnti_type(mac, rnti), coreset_type, mac->get_sib1); dlsch_config_pdu_1_0->number_symbols = tda_info.nrOfSymbols; dlsch_config_pdu_1_0->start_symbol = tda_info.startSymbolIndex; struct NR_DMRS_DownlinkConfig *dl_dmrs_config = NULL; if (pdsch_config) - dl_dmrs_config = (tda_info.mapping_type == typeA) ? pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + dl_dmrs_config = (tda_info.mapping_type == typeA) ? + pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : + pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; dlsch_config_pdu_1_0->nscid = 0; if(dl_dmrs_config && dl_dmrs_config->scramblingID0) @@ -908,6 +917,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr LOG_W(MAC, "[%d.%d] Invalid frequency_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot); return -1; } + dlsch_config_pdu_1_1->rb_offset = dlsch_config_pdu_1_1->start_rb + dlsch_config_pdu_1_1->BWPStart; /* TIME_DOM_RESOURCE_ASSIGNMENT */ int dmrs_typeA_pos = (mac->scc != NULL) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position; NR_tda_info_t tda_info = get_dl_tda_info(current_DL_BWP, dci_ind->ss_type, dci->time_domain_assignment.val, diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 81771629f2..33201d8921 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -58,7 +58,7 @@ //#define SRS_DEBUG static prach_association_pattern_t prach_assoc_pattern; -static ssb_list_info_t ssb_list; +static void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t slotP); void fill_ul_config(fapi_nr_ul_config_request_t *ul_config, frame_t frame_tx, int slot_tx, uint8_t pdu_type){ @@ -1658,6 +1658,7 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) { BIT_STRING_t *ssb_bitmap; uint64_t ssb_positionsInBurst; uint8_t ssb_idx = 0; + ssb_list_info_t *ssb_list = &mac->ssb_list; if (mac->scc) { NR_ServingCellConfigCommon_t *scc = mac->scc; @@ -1671,8 +1672,8 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) { for (uint8_t bit_nb=3; bit_nb<=3; bit_nb--) { // If SSB is transmitted if ((ssb_positionsInBurst>>bit_nb) & 0x01) { - ssb_list.nb_tx_ssb++; - ssb_list.tx_ssb[ssb_idx].transmitted = true; + ssb_list->nb_tx_ssb++; + ssb_list->tx_ssb[ssb_idx].transmitted = true; LOG_D(NR_MAC,"SSB idx %d transmitted\n", ssb_idx); } ssb_idx++; @@ -1687,8 +1688,8 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) { for (uint8_t bit_nb=7; bit_nb<=7; bit_nb--) { // If SSB is transmitted if ((ssb_positionsInBurst>>bit_nb) & 0x01) { - ssb_list.nb_tx_ssb++; - ssb_list.tx_ssb[ssb_idx].transmitted = true; + ssb_list->nb_tx_ssb++; + ssb_list->tx_ssb[ssb_idx].transmitted = true; LOG_D(NR_MAC,"SSB idx %d transmitted\n", ssb_idx); } ssb_idx++; @@ -1703,8 +1704,8 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) { for (uint8_t bit_nb=63; bit_nb<=63; bit_nb--) { // If SSB is transmitted if ((ssb_positionsInBurst>>bit_nb) & 0x01) { - ssb_list.nb_tx_ssb++; - ssb_list.tx_ssb[ssb_idx].transmitted = true; + ssb_list->nb_tx_ssb++; + ssb_list->tx_ssb[ssb_idx].transmitted = true; LOG_D(NR_MAC,"SSB idx %d transmitted\n", ssb_idx); } ssb_idx++; @@ -1726,8 +1727,8 @@ static void build_ssb_list(NR_UE_MAC_INST_t *mac) { for (uint8_t bit_nb=7; bit_nb<=7; bit_nb--) { // If SSB is transmitted if ((ssb_positionsInBurst>>bit_nb) & 0x01) { - ssb_list.nb_tx_ssb++; - ssb_list.tx_ssb[ssb_idx].transmitted = true; + ssb_list->nb_tx_ssb++; + ssb_list->tx_ssb[ssb_idx].transmitted = true; LOG_D(NR_MAC,"SSB idx %d transmitted\n", ssb_idx); } ssb_idx++; @@ -1797,15 +1798,15 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { // There is only one possible association period which can contain up to 16 PRACH configuration periods LOG_D(NR_MAC,"Evaluate the number of PRACH configuration periods required to map all the SSBs and set the association period\n"); if (true == multiple_ssb_per_ro) { - required_nb_of_prach_occasion = ((ssb_list.nb_tx_ssb-1) + ssb_rach_ratio) / ssb_rach_ratio; + required_nb_of_prach_occasion = ((mac->ssb_list.nb_tx_ssb-1) + ssb_rach_ratio) / ssb_rach_ratio; } else { - required_nb_of_prach_occasion = ssb_list.nb_tx_ssb * ssb_rach_ratio; + required_nb_of_prach_occasion = mac->ssb_list.nb_tx_ssb * ssb_rach_ratio; } AssertFatal(prach_assoc_pattern.prach_conf_period_list[0].nb_of_prach_occasion>0, "prach_assoc_pattern.prach_conf_period_list[0].nb_of_prach_occasion shouldn't be 0 (ssb_list.nb_tx_ssb %d, ssb_rach_ratio %d\n", - ssb_list.nb_tx_ssb,ssb_rach_ratio); + mac->ssb_list.nb_tx_ssb,ssb_rach_ratio); required_nb_of_prach_conf_period = ((required_nb_of_prach_occasion-1) + prach_assoc_pattern.prach_conf_period_list[0].nb_of_prach_occasion) / prach_assoc_pattern.prach_conf_period_list[0].nb_of_prach_occasion; @@ -1885,17 +1886,20 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { // this is true if no PRACH occasions are conflicting with SSBs nor TDD_UL_DL_ConfigurationCommon schedule for (; ssb_idxssb_list.tx_ssb[ssb_idx].transmitted) { ro_p->mapped_ssb_idx[ro_p->nb_mapped_ssb] = ssb_idx; ro_p->nb_mapped_ssb++; - ssb_list.tx_ssb[ssb_idx].mapped_ro[ssb_list.tx_ssb[ssb_idx].nb_mapped_ro] = ro_p; - ssb_list.tx_ssb[ssb_idx].nb_mapped_ro++; - AssertFatal(MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN > ssb_list.tx_ssb[ssb_idx].nb_mapped_ro,"Too many mapped ROs (%d) to a single SSB\n", ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); + mac->ssb_list.tx_ssb[ssb_idx].mapped_ro[mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro] = ro_p; + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro++; + AssertFatal(MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN > mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro, + "Too many mapped ROs (%d) to a single SSB\n", + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); - LOG_D(NR_MAC,"Mapped ssb_idx %u to RO slot-symbol %u-%u, %u-%u-%u/%u\n", + LOG_D(NR_MAC, "Mapped ssb_idx %u to RO slot-symbol %u-%u, %u-%u-%u/%u\n", ssb_idx, ro_p->slot, ro_p->start_symbol, slot, ro_in_time, ro_in_freq, prach_conf_period_p->prach_occasion_slot_map[frame][slot].nb_of_prach_occasion_in_freq); - LOG_D(NR_MAC,"Nb mapped ROs for this ssb idx: in the association period only %u\n", ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); + LOG_D(NR_MAC, "Nb mapped ROs for this ssb idx: in the association period only %u\n", + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); // If all the required SSBs are mapped to this RO, exit the loop of SSBs if (ro_p->nb_mapped_ssb == ssb_rach_ratio) { @@ -1941,12 +1945,11 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { // Go through the list of transmitted SSBs for (ssb_idx=0; ssb_idx %d\n", - ssb_idx,ssb_list.tx_ssb[ssb_idx].transmitted); + LOG_D(NR_MAC,"Checking ssb_idx %d => %d\n", + ssb_idx, mac->ssb_list.tx_ssb[ssb_idx].transmitted); // Map only the transmitted ssb_idx - if (true == ssb_list.tx_ssb[ssb_idx].transmitted) { + if (true == mac->ssb_list.tx_ssb[ssb_idx].transmitted) { // Map all the required ROs to this SSB // Go through the list of PRACH config periods within this association period @@ -1964,17 +1967,18 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { ro_p->mapped_ssb_idx[0] = ssb_idx; ro_p->nb_mapped_ssb = 1; - ssb_list.tx_ssb[ssb_idx].mapped_ro[ssb_list.tx_ssb[ssb_idx].nb_mapped_ro] = ro_p; - ssb_list.tx_ssb[ssb_idx].nb_mapped_ro++; - AssertFatal(MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN > ssb_list.tx_ssb[ssb_idx].nb_mapped_ro,"Too many mapped ROs (%d) to a single SSB\n", - ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); + mac->ssb_list.tx_ssb[ssb_idx].mapped_ro[mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro] = ro_p; + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro++; + AssertFatal(MAX_NB_RO_PER_SSB_IN_ASSOCIATION_PATTERN > mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro, + "Too many mapped ROs (%d) to a single SSB\n", + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro); nb_mapped_ro_in_association_period++; LOG_D(NR_MAC,"Mapped ssb_idx %u to RO slot-symbol %u-%u, %u-%u-%u/%u\n", ssb_idx, ro_p->slot, ro_p->start_symbol, slot, ro_in_time, ro_in_freq, prach_conf_period_p->prach_occasion_slot_map[frame][slot].nb_of_prach_occasion_in_freq); - LOG_D(NR_MAC,"Nb mapped ROs for this ssb idx: in the association period only %u / total %u\n", - ssb_list.tx_ssb[ssb_idx].nb_mapped_ro, nb_mapped_ro_in_association_period); + LOG_D(NR_MAC, "Nb mapped ROs for this ssb idx: in the association period only %u / total %u\n", + mac->ssb_list.tx_ssb[ssb_idx].nb_mapped_ro, nb_mapped_ro_in_association_period); // Exit the loop if this SSB has been mapped to all the required ROs // WIP: Assuming that ssb_rach_ratio equals the maximum nb of times a given ssb_idx is mapped within an association period: @@ -2024,8 +2028,9 @@ static void map_ssb_to_ro(NR_UE_MAC_INST_t *mac) { static int get_nr_prach_info_from_ssb_index(uint8_t ssb_idx, int frame, int slot, - prach_occasion_info_t **prach_occasion_info_pp) { - + ssb_list_info_t *ssb_list, + prach_occasion_info_t **prach_occasion_info_pp) +{ ssb_info_t *ssb_info_p; prach_occasion_slot_t *prach_occasion_slot_p = NULL; @@ -2036,7 +2041,7 @@ static int get_nr_prach_info_from_ssb_index(uint8_t ssb_idx, // - ssb_idx mapped to one of the ROs in that RO slot // - exact slot number // - frame offset - ssb_info_p = &ssb_list.tx_ssb[ssb_idx]; + ssb_info_p = &ssb_list->tx_ssb[ssb_idx]; LOG_D(NR_MAC,"checking for prach : ssb_info_p->nb_mapped_ro %d\n",ssb_info_p->nb_mapped_ro); for (uint8_t n_mapped_ro=0; n_mapped_ronb_mapped_ro; n_mapped_ro++) { LOG_D(NR_MAC,"%d.%d: mapped_ro[%d]->frame.slot %d.%d, prach_assoc_pattern.nb_of_frame %d\n", @@ -2104,7 +2109,7 @@ void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac) { // Clear all the lists and maps memset(&prach_assoc_pattern, 0, sizeof(prach_association_pattern_t)); - memset(&ssb_list, 0, sizeof(ssb_list_info_t)); + memset(&mac->ssb_list, 0, sizeof(ssb_list_info_t)); // Build the list of all the valid RACH occasions in the maximum association pattern period according to the PRACH config LOG_D(NR_MAC,"Build RO list\n"); @@ -2488,8 +2493,8 @@ void nr_schedule_csirs_reception(NR_UE_MAC_INST_t *mac, int frame, int slot) { // PRACH formats 9, 10, 11 are corresponding to dual PRACH format configurations A1/B1, A2/B2, A3/B3. // - todo: // - Partial configuration is actually already stored in (fapi_nr_prach_config_t) &mac->phy_config.config_req->prach_config -void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) { - +static void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) +{ NR_UE_MAC_INST_t *mac = get_mac_inst(module_idP); RA_config_t *ra = &mac->ra; ra->RA_offset = 2; // to compensate the rx frame offset at the gNB @@ -2523,9 +2528,10 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s // Get any valid PRACH occasion in the current slot for the selected SSB index prach_occasion_info_t *prach_occasion_info_p; int is_nr_prach_slot = get_nr_prach_info_from_ssb_index(selected_gnb_ssb_idx, - (int)frameP, - (int)slotP, - &prach_occasion_info_p); + (int)frameP, + (int)slotP, + &mac->ssb_list, + &prach_occasion_info_p); if (is_nr_prach_slot) { AssertFatal(NULL != prach_occasion_info_p,"PRACH Occasion Info not returned in a valid NR Prach Slot\n"); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index d7f461d231..ca59142949 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -1154,9 +1154,6 @@ int nr_acknack_scheduling(gNB_MAC_INST *mac, if(curr_pucch->csi_bits > 0 && !curr_pucch->simultaneous_harqcsi) continue; - // TODO we can't schedule more than 11 bits in PUCCH2 for now - if (curr_pucch->csi_bits + curr_pucch->dai_c >= 10) - continue; // otherwise we can schedule in this active PUCCH // no need to check VRB occupation because already done when PUCCH has been activated diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 4f3becb8f5..45c4a5d5c5 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -674,6 +674,7 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ } } +// This piece of code is not used in "normal" ue, but in "fapi mode" void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, nfapi_nr_tx_data_request_t *tx_data_request, nfapi_nr_ul_dci_request_t *ul_dci_request, @@ -734,25 +735,24 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, nr_ue_dl_scheduler(&mac->dl_info); nr_ue_dl_indication(&mac->dl_info); - if (pthread_mutex_unlock(&mac->mutex_dl_info)) abort(); - - // If we filled dl_info AFTER we got the slot indication, we want to check if we should fill tx_req: - nr_uplink_indication_t ul_info; - memset(&ul_info, 0, sizeof(ul_info)); + if (pthread_mutex_unlock(&mac->mutex_dl_info)) + abort(); int slots_per_frame = 20; //30 kHZ subcarrier spacing int slot_ahead = 2; // TODO: Make this dynamic - ul_info.frame_rx = frame; - ul_info.slot_rx = slot; - ul_info.slot_tx = (slot + slot_ahead) % slots_per_frame; - ul_info.frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx; + if (mac->scc || mac->scc_SIB) { - if (is_nr_UL_slot(mac->scc ? - mac->scc->tdd_UL_DL_ConfigurationCommon : - mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, - ul_info.slot_tx, - mac->frame_type) && mac->ra.ra_state != RA_SUCCEEDED) { - nr_ue_ul_scheduler(&ul_info); - } + if (is_nr_UL_slot(mac->scc ? mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, + (slot + slot_ahead) % slots_per_frame, + mac->frame_type) + && mac->ra.ra_state != RA_SUCCEEDED) { + // If we filled dl_info AFTER we got the slot indication, we want to check if we should fill tx_req: + nr_uplink_indication_t ul_info = { + .frame_rx = frame, + .slot_rx = slot, + .slot_tx = (slot + slot_ahead) % slots_per_frame, + .frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx}; + nr_ue_ul_scheduler(&ul_info); + } } } @@ -1053,7 +1053,8 @@ int handle_bcch_bch(module_id_t module_id, int cc_id, } // L2 Abstraction Layer -int handle_bcch_dlsch(module_id_t module_id, int cc_id, unsigned int gNB_index, uint8_t ack_nack, uint8_t *pduP, uint32_t pdu_len){ +int handle_bcch_dlsch(module_id_t module_id, int cc_id, unsigned int gNB_index, uint8_t ack_nack, uint8_t *pduP, uint32_t pdu_len) +{ return nr_ue_decode_BCCH_DL_SCH(module_id, cc_id, gNB_index, ack_nack, pduP, pdu_len); } @@ -1131,7 +1132,9 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info) LOG_T(NR_MAC, "In %s():%d not calling scheduler mac->ra.ra_state = %d\n", __FUNCTION__, __LINE__, mac->ra.ra_state); - NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon = mac->scc != NULL ? mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon; + NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon = + mac->scc != NULL ? mac->scc->tdd_UL_DL_ConfigurationCommon + : (mac->scc_SIB ? mac->scc_SIB->tdd_UL_DL_ConfigurationCommon : NULL); if (mac->phy_config_request_sent && is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type)) nr_ue_ul_scheduler(ul_info); @@ -1227,6 +1230,10 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info) break; case FAPI_NR_RX_PDU_TYPE_RAR: ret_mask |= (handle_dlsch(dl_info, i)) << FAPI_NR_RX_PDU_TYPE_RAR; + if (!dl_info->rx_ind->rx_indication_body[i].pdsch_pdu.ack_nack) + LOG_W(PHY, "Received a RAR-Msg2 but LDPC decode failed\n"); + else + LOG_I(PHY, "RAR-Msg2 decoded\n"); break; case FAPI_NR_CSIRS_IND: ret_mask |= (handle_csirs_measurements(dl_info->module_id, diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 534279e2e2..207efc0546 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -34,7 +34,6 @@ #define __NR_IF_MODULE_H__ #include "platform_types.h" -#include #include #include "fapi_nr_ue_interface.h" #include "openair2/PHY_INTERFACE/queue_t.h" diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h b/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h index 340d07fb48..cff783739e 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_Packet_Drop.h @@ -23,7 +23,6 @@ #include #include -#include #include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" #define NR_NUM_MCS 29 diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index 789980ae36..266d842276 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -850,7 +850,7 @@ static void config_pucch_resset1(NR_PUCCH_Config_t *pucch_Config, const NR_UE_NR pucchfmt2->interslotFrequencyHopping = NULL; pucchfmt2->additionalDMRS = NULL; pucchfmt2->maxCodeRate = calloc(1,sizeof(*pucchfmt2->maxCodeRate)); - *pucchfmt2->maxCodeRate = NR_PUCCH_MaxCodeRate_zeroDot35; + *pucchfmt2->maxCodeRate = NR_PUCCH_MaxCodeRate_zeroDot15; pucchfmt2->nrofSlots = NULL; pucchfmt2->pi2BPSK = NULL; diff --git a/openair2/RRC/NR/rrc_gNB_UE_context.c b/openair2/RRC/NR/rrc_gNB_UE_context.c index b7f7e189ae..2d2742aa4a 100644 --- a/openair2/RRC/NR/rrc_gNB_UE_context.c +++ b/openair2/RRC/NR/rrc_gNB_UE_context.c @@ -101,8 +101,8 @@ rrc_gNB_ue_context_t *rrc_gNB_get_ue_context_by_rnti(gNB_RRC_INST *rrc_instance_ void rrc_gNB_free_mem_ue_context(rrc_gNB_ue_context_t *const ue_context_pP) //----------------------------------------------------------------------------- { - free(ue_context_pP); LOG_T(NR_RRC, " Clearing UE context 0x%p (free internal structs)\n", ue_context_pP); + free(ue_context_pP); } //------------------------------------------------------------------------------ diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 704ea605e4..3ffae4b07d 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -393,6 +393,7 @@ void process_nsa_message(NR_UE_RRC_INST_t *rrc, nsa_message_t nsa_message_type, } + NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* uecap_file, char* rrc_config_path) { if(NB_NR_UE_INST > 0) { @@ -406,14 +407,8 @@ NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* uecap_file, char* rrc_config_ rrc->ubwpd = NULL; rrc->as_security_activated = false; - // TODO: Put the appropriate list of SIBs - rrc->requested_SI_List.buf = CALLOC(1,4); - rrc->requested_SI_List.buf[0] = SIB2 | SIB3 | SIB5; // SIB2 - SIB9 - rrc->requested_SI_List.buf[1] = 0; // SIB10 - SIB17 - rrc->requested_SI_List.buf[2] = 0; // SIB18 - SIB25 - rrc->requested_SI_List.buf[3] = 0; // SIB26 - SIB32 - rrc->requested_SI_List.size= 4; - rrc->requested_SI_List.bits_unused= 0; + for (int i = 0; i < NB_SIG_CNX_UE; i++) + memset((void *)&rrc->SInfo[i], 0, sizeof(rrc->SInfo[i])); rrc->ra_trigger = RA_NOT_RUNNING; } @@ -485,6 +480,28 @@ int8_t nr_ue_process_physical_cell_group_config(NR_PhysicalCellGroupConfig_t *ph return 0; } +int check_si_status(NR_UE_RRC_SI_INFO *SI_info) +{ + // schedule reception of SIB1 + if (!SI_info->sib1) + return 1; + else { + if (!SI_info->sib1->si_SchedulingInfo) + return 0; + // The UE in RRC_IDLE and RRC_INACTIVE shall ensure having + // a valid version of (at least) the MIB, SIB1 through + // SIB4 (and SIB5 if the UE supports E-UTRA) + if (!SI_info->sib2 || + !SI_info->sib3 || + !SI_info->sib4) + // we schedule reception of otherSI + // if UE RRC doesn't have any of the + // default SIBs for now + return 2; + } + return 0; +} + /*brief decode BCCH-BCH (MIB) message*/ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(const module_id_t module_id, const uint8_t gNB_index, uint8_t *const bufferP, const uint8_t buffer_len) { @@ -506,234 +523,18 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(const module_id_t module_id, const u bcch_message->message.choice.mib = NULL; NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[module_id].SInfo[gNB_index]; - NR_SIB1_t *sib1 = SI_info->sib1; - // if no sib1 because not acquired yet or expired, get a new one - bool get_sib1 = sib1 == NULL; - nr_rrc_mac_config_req_mib(module_id, 0, NR_UE_rrc_inst[module_id].mib, get_sib1); + // to schedule MAC to get SI if required + int get_sib = check_si_status(SI_info); + nr_rrc_mac_config_req_mib(module_id, 0, NR_UE_rrc_inst[module_id].mib, get_sib); ret = 0; } ASN_STRUCT_FREE(asn_DEF_NR_BCCH_BCH_Message, bcch_message); - return ret; } -const char *nr_SIBreserved( long value ) { - if (value < 0 || value > 1) - return "ERR"; - - if (value) - return "notReserved"; - - return "reserved"; -} - -void nr_dump_sib2( NR_SIB2_t *sib2 ){ -//cellReselectionInfoCommon - //nrofSS_BlocksToAverage - if( sib2->cellReselectionInfoCommon.nrofSS_BlocksToAverage) - LOG_I( RRC, "cellReselectionInfoCommon.nrofSS_BlocksToAverage : %ld\n", - *sib2->cellReselectionInfoCommon.nrofSS_BlocksToAverage ); - else - LOG_I( RRC, "cellReselectionInfoCommon->nrofSS_BlocksToAverage : not defined\n" ); - - //absThreshSS_BlocksConsolidation - if( sib2->cellReselectionInfoCommon.absThreshSS_BlocksConsolidation){ - LOG_I( RRC, "absThreshSS_BlocksConsolidation.thresholdRSRP : %ld\n", - *sib2->cellReselectionInfoCommon.absThreshSS_BlocksConsolidation->thresholdRSRP ); - LOG_I( RRC, "absThreshSS_BlocksConsolidation.thresholdRSRQ : %ld\n", - *sib2->cellReselectionInfoCommon.absThreshSS_BlocksConsolidation->thresholdRSRQ ); - LOG_I( RRC, "absThreshSS_BlocksConsolidation.thresholdSINR : %ld\n", - *sib2->cellReselectionInfoCommon.absThreshSS_BlocksConsolidation->thresholdSINR ); - } else - LOG_I( RRC, "cellReselectionInfoCommon->absThreshSS_BlocksConsolidation : not defined\n" ); - - //q_Hyst - LOG_I( RRC, "cellReselectionInfoCommon.q_Hyst : %ld\n", - sib2->cellReselectionInfoCommon.q_Hyst ); - - //speedStateReselectionPars - if( sib2->cellReselectionInfoCommon.speedStateReselectionPars){ - LOG_I( RRC, "speedStateReselectionPars->mobilityStateParameters.t_Evaluation : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_Evaluation); - LOG_I( RRC, "speedStateReselectionPars->mobilityStateParameters.t_HystNormal : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_HystNormal); - LOG_I( RRC, "speedStateReselectionPars->mobilityStateParameters.n_CellChangeMedium : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeMedium); - LOG_I( RRC, "speedStateReselectionPars->mobilityStateParameters.n_CellChangeHigh : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeHigh); - LOG_I( RRC, "speedStateReselectionPars->q_HystSF.sf_Medium : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_Medium); - LOG_I( RRC, "speedStateReselectionPars->q_HystSF.sf_High : %ld\n", - sib2->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_High); - } else - LOG_I( RRC, "cellReselectionInfoCommon->speedStateReselectionPars : not defined\n" ); - -//cellReselectionServingFreqInfo - if( sib2->cellReselectionServingFreqInfo.s_NonIntraSearchP) - LOG_I( RRC, "cellReselectionServingFreqInfo.s_NonIntraSearchP : %ld\n", - *sib2->cellReselectionServingFreqInfo.s_NonIntraSearchP ); - else - LOG_I( RRC, "cellReselectionServingFreqInfo->s_NonIntraSearchP : not defined\n" ); - - if( sib2->cellReselectionServingFreqInfo.s_NonIntraSearchQ) - LOG_I( RRC, "cellReselectionServingFreqInfo.s_NonIntraSearchQ : %ld\n", - *sib2->cellReselectionServingFreqInfo.s_NonIntraSearchQ ); - else - LOG_I( RRC, "cellReselectionServingFreqInfo->s_NonIntraSearchQ : not defined\n" ); - - LOG_I( RRC, "cellReselectionServingFreqInfo.threshServingLowP : %ld\n", - sib2->cellReselectionServingFreqInfo.threshServingLowP ); - - if( sib2->cellReselectionServingFreqInfo.threshServingLowQ) - LOG_I( RRC, "cellReselectionServingFreqInfo.threshServingLowQ : %ld\n", - *sib2->cellReselectionServingFreqInfo.threshServingLowQ ); - else - LOG_I( RRC, "cellReselectionServingFreqInfo->threshServingLowQ : not defined\n" ); - - LOG_I( RRC, "cellReselectionServingFreqInfo.cellReselectionPriority : %ld\n", - sib2->cellReselectionServingFreqInfo.cellReselectionPriority ); - if( sib2->cellReselectionServingFreqInfo.cellReselectionSubPriority) - LOG_I( RRC, "cellReselectionServingFreqInfo.cellReselectionSubPriority : %ld\n", - *sib2->cellReselectionServingFreqInfo.cellReselectionSubPriority ); - else - LOG_I( RRC, "cellReselectionServingFreqInfo->cellReselectionSubPriority : not defined\n" ); - -//intraFreqCellReselectionInfo - LOG_I( RRC, "intraFreqCellReselectionInfo.q_RxLevMin : %ld\n", - sib2->intraFreqCellReselectionInfo.q_RxLevMin ); - - if( sib2->intraFreqCellReselectionInfo.q_RxLevMinSUL) - LOG_I( RRC, "intraFreqCellReselectionInfo.q_RxLevMinSUL : %ld\n", - *sib2->intraFreqCellReselectionInfo.q_RxLevMinSUL ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->q_RxLevMinSUL : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.q_QualMin) - LOG_I( RRC, "intraFreqCellReselectionInfo.q_QualMin : %ld\n", - *sib2->intraFreqCellReselectionInfo.q_QualMin ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->q_QualMin : not defined\n" ); - - LOG_I( RRC, "intraFreqCellReselectionInfo.s_IntraSearchP : %ld\n", - sib2->intraFreqCellReselectionInfo.s_IntraSearchP ); - - if( sib2->intraFreqCellReselectionInfo.s_IntraSearchQ) - LOG_I( RRC, "intraFreqCellReselectionInfo.s_IntraSearchQ : %ld\n", - *sib2->intraFreqCellReselectionInfo.s_IntraSearchQ ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->s_IntraSearchQ : not defined\n" ); - - LOG_I( RRC, "intraFreqCellReselectionInfo.t_ReselectionNR : %ld\n", - sib2->intraFreqCellReselectionInfo.t_ReselectionNR ); - - if( sib2->intraFreqCellReselectionInfo.frequencyBandList) - LOG_I( RRC, "intraFreqCellReselectionInfo.frequencyBandList : %p\n", - sib2->intraFreqCellReselectionInfo.frequencyBandList ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->frequencyBandList : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.frequencyBandListSUL) - LOG_I( RRC, "intraFreqCellReselectionInfo.frequencyBandListSUL : %p\n", - sib2->intraFreqCellReselectionInfo.frequencyBandListSUL ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->frequencyBandListSUL : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.p_Max) - LOG_I( RRC, "intraFreqCellReselectionInfo.p_Max : %ld\n", - *sib2->intraFreqCellReselectionInfo.p_Max ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->p_Max : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.smtc) - LOG_I( RRC, "intraFreqCellReselectionInfo.smtc : %p\n", - sib2->intraFreqCellReselectionInfo.smtc ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->smtc : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.ss_RSSI_Measurement) - LOG_I( RRC, "intraFreqCellReselectionInfo.ss_RSSI_Measurement : %p\n", - sib2->intraFreqCellReselectionInfo.ss_RSSI_Measurement ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->ss_RSSI_Measurement : not defined\n" ); - - if( sib2->intraFreqCellReselectionInfo.ssb_ToMeasure) - LOG_I( RRC, "intraFreqCellReselectionInfo.ssb_ToMeasure : %p\n", - sib2->intraFreqCellReselectionInfo.ssb_ToMeasure ); - else - LOG_I( RRC, "intraFreqCellReselectionInfo->ssb_ToMeasure : not defined\n" ); - - LOG_I( RRC, "intraFreqCellReselectionInfo.deriveSSB_IndexFromCell : %d\n", - sib2->intraFreqCellReselectionInfo.deriveSSB_IndexFromCell ); - -} - -void nr_dump_sib3( NR_SIB3_t *sib3 ) { -//intraFreqNeighCellList - if( sib3->intraFreqNeighCellList){ - LOG_I( RRC, "intraFreqNeighCellList : %p\n", - sib3->intraFreqNeighCellList ); - const int n = sib3->intraFreqNeighCellList->list.count; - for (int i = 0; i < n; ++i){ - LOG_I( RRC, "intraFreqNeighCellList->physCellId : %ld\n", - sib3->intraFreqNeighCellList->list.array[i]->physCellId ); - LOG_I( RRC, "intraFreqNeighCellList->q_OffsetCell : %ld\n", - sib3->intraFreqNeighCellList->list.array[i]->q_OffsetCell ); - - if( sib3->intraFreqNeighCellList->list.array[i]->q_RxLevMinOffsetCell) - LOG_I( RRC, "intraFreqNeighCellList->q_RxLevMinOffsetCell : %ld\n", - *sib3->intraFreqNeighCellList->list.array[i]->q_RxLevMinOffsetCell ); - else - LOG_I( RRC, "intraFreqNeighCellList->q_RxLevMinOffsetCell : not defined\n" ); - - if( sib3->intraFreqNeighCellList->list.array[i]->q_RxLevMinOffsetCellSUL) - LOG_I( RRC, "intraFreqNeighCellList->q_RxLevMinOffsetCellSUL : %ld\n", - *sib3->intraFreqNeighCellList->list.array[i]->q_RxLevMinOffsetCellSUL ); - else - LOG_I( RRC, "intraFreqNeighCellList->q_RxLevMinOffsetCellSUL : not defined\n" ); - - if( sib3->intraFreqNeighCellList->list.array[i]->q_QualMinOffsetCell) - LOG_I( RRC, "intraFreqNeighCellList->q_QualMinOffsetCell : %ld\n", - *sib3->intraFreqNeighCellList->list.array[i]->q_QualMinOffsetCell ); - else - LOG_I( RRC, "intraFreqNeighCellList->q_QualMinOffsetCell : not defined\n" ); - } - } else{ - LOG_I( RRC, "intraFreqCellReselectionInfo : not defined\n" ); - } - -//intraFreqBlackCellList - if( sib3->intraFreqExcludedCellList){ - LOG_I( RRC, "intraFreqExcludedCellList : %p\n", - sib3->intraFreqExcludedCellList ); - const int n = sib3->intraFreqExcludedCellList->list.count; - for (int i = 0; i < n; ++i){ - LOG_I( RRC, "intraFreqExcludedCellList->start : %ld\n", - sib3->intraFreqExcludedCellList->list.array[i]->start ); - - if( sib3->intraFreqExcludedCellList->list.array[i]->range) - LOG_I( RRC, "intraFreqExcludedCellList->range : %ld\n", - *sib3->intraFreqExcludedCellList->list.array[i]->range ); - else - LOG_I( RRC, "intraFreqExcludedCellList->range : not defined\n" ); - } - } else{ - LOG_I( RRC, "intraFreqExcludedCellList : not defined\n" ); - } - -//lateNonCriticalExtension - if( sib3->lateNonCriticalExtension) - LOG_I( RRC, "lateNonCriticalExtension : %p\n", - sib3->lateNonCriticalExtension ); - else - LOG_I( RRC, "lateNonCriticalExtension : not defined\n" ); -} - -int nr_decode_SI(const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index) +int nr_decode_SI(const module_id_t module_id, const uint8_t gNB_index, NR_SystemInformation_t *si) { - NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[ctxt_pP->module_id].SInfo[gNB_index]; - NR_SystemInformation_t *si = SI_info->si; - int new_sib = 0; - NR_SIB1_t *sib1 = SI_info->sib1; + NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[module_id].SInfo[gNB_index]; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_IN ); // Dump contents @@ -752,239 +553,117 @@ int nr_decode_SI(const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index) switch(typeandinfo->present) { case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib2: - if ((SI_info->SIStatus & 2) == 0) { - SI_info->SIStatus |= 2; - //new_sib=1; - memcpy(SI_info->sib2, &typeandinfo->choice.sib2, sizeof(NR_SIB2_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - nr_dump_sib2(SI_info->sib2); - LOG_I(RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params gNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n", - ctxt_pP->frame, ctxt_pP->module_id, gNB_index, ctxt_pP->module_id ); - //TODO rrc_mac_config_req_ue - - // After SI is received, prepare RRCConnectionRequest - if (NR_UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) { // see -Q option - if (get_softmodem_params()->sa) - nr_rrc_ue_generate_RRCSetupRequest( ctxt_pP->module_id, gNB_index ); - } - } - + if(!SI_info->sib2) + SI_info->sib2 = calloc(1, sizeof(*SI_info->sib2)); + memcpy(SI_info->sib2, typeandinfo->choice.sib2, sizeof(NR_SIB2_t)); + SI_info->sib2_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB2 from gNB %"PRIu8"\n", module_id, gNB_index); break; // case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2 case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib3: - if ((SI_info->SIStatus & 4) == 0) { - SI_info->SIStatus |= 4; - new_sib=1; - memcpy(SI_info->sib3, &typeandinfo->choice.sib3, sizeof(LTE_SystemInformationBlockType3_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index ); - nr_dump_sib3(SI_info->sib3); - } - + if(!SI_info->sib3) + SI_info->sib3 = calloc(1, sizeof(*SI_info->sib3)); + memcpy(SI_info->sib3, typeandinfo->choice.sib3, sizeof(NR_SIB3_t)); + SI_info->sib3_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB3 from gNB %"PRIu8"\n", module_id, gNB_index ); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib4: - if ((SI_info->SIStatus & 8) == 0) { - SI_info->SIStatus |= 8; - new_sib=1; - memcpy(SI_info->sib4, typeandinfo->choice.sib4, sizeof(NR_SIB4_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib4) + SI_info->sib4 = calloc(1, sizeof(*SI_info->sib4)); + memcpy(SI_info->sib4, typeandinfo->choice.sib4, sizeof(NR_SIB4_t)); + SI_info->sib4_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB4 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib5: - if ((SI_info->SIStatus & 16) == 0) { - SI_info->SIStatus |= 16; - new_sib=1; - memcpy(SI_info->sib5, typeandinfo->choice.sib5, sizeof(NR_SIB5_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib5) + SI_info->sib5 = calloc(1, sizeof(*SI_info->sib5)); + memcpy(SI_info->sib5, typeandinfo->choice.sib5, sizeof(NR_SIB5_t)); + SI_info->sib5_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB5 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib6: - if ((SI_info->SIStatus & 32) == 0) { - SI_info->SIStatus |= 32; - new_sib=1; - memcpy(SI_info->sib6, typeandinfo->choice.sib6, sizeof(NR_SIB6_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib6) + SI_info->sib6 = calloc(1, sizeof(*SI_info->sib6)); + memcpy(SI_info->sib6, typeandinfo->choice.sib6, sizeof(NR_SIB6_t)); + SI_info->sib6_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB6 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib7: - if ((SI_info->SIStatus & 64) == 0) { - SI_info->SIStatus |= 64; - new_sib=1; - memcpy(SI_info->sib7, typeandinfo->choice.sib7, sizeof(NR_SIB7_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib7) + SI_info->sib7 = calloc(1, sizeof(*SI_info->sib7)); + memcpy(SI_info->sib7, typeandinfo->choice.sib7, sizeof(NR_SIB7_t)); + SI_info->sib7_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB7 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib8: - if ((SI_info->SIStatus & 128) == 0) { - SI_info->SIStatus |= 128; - new_sib=1; - memcpy(SI_info->sib8, typeandinfo->choice.sib8, sizeof(NR_SIB8_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib8) + SI_info->sib8 = calloc(1, sizeof(*SI_info->sib8)); + memcpy(SI_info->sib8, typeandinfo->choice.sib8, sizeof(NR_SIB8_t)); + SI_info->sib8_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB8 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib9: - if ((SI_info->SIStatus & 256) == 0) { - SI_info->SIStatus |= 256; - new_sib=1; - memcpy(SI_info->sib9, typeandinfo->choice.sib9, sizeof(NR_SIB9_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib9) + SI_info->sib9 = calloc(1, sizeof(*SI_info->sib9)); + memcpy(SI_info->sib9, typeandinfo->choice.sib9, sizeof(NR_SIB9_t)); + SI_info->sib9_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB9 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib10_v1610: - if ((SI_info->SIStatus & 512) == 0) { - SI_info->SIStatus |= 512; - new_sib=1; - memcpy(SI_info->sib10, typeandinfo->choice.sib10_v1610, sizeof(NR_SIB10_r16_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib10) + SI_info->sib10 = calloc(1, sizeof(*SI_info->sib10)); + memcpy(SI_info->sib10, typeandinfo->choice.sib10_v1610, sizeof(NR_SIB10_r16_t)); + SI_info->sib10_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB10 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib11_v1610: - if ((SI_info->SIStatus & 1024) == 0) { - SI_info->SIStatus |= 1024; - new_sib=1; - memcpy(SI_info->sib11, typeandinfo->choice.sib11_v1610, sizeof(NR_SIB11_r16_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib11) + SI_info->sib11 = calloc(1, sizeof(*SI_info->sib11)); + memcpy(SI_info->sib11, typeandinfo->choice.sib11_v1610, sizeof(NR_SIB11_r16_t)); + SI_info->sib11_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB11 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib12_v1610: - if ((SI_info->SIStatus & 2048) == 0) { - SI_info->SIStatus |= 2048; - new_sib=1; - memcpy(SI_info->sib12, typeandinfo->choice.sib12_v1610, sizeof(NR_SIB12_r16_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib12) + SI_info->sib12 = calloc(1, sizeof(*SI_info->sib12)); + memcpy(SI_info->sib12, typeandinfo->choice.sib12_v1610, sizeof(NR_SIB12_r16_t)); + SI_info->sib12_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB12 from gNB %"PRIu8"\n", module_id, gNB_index); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib13_v1610: - if ((SI_info->SIStatus & 4096) == 0) { - SI_info->SIStatus |= 4096; - new_sib=1; - memcpy(SI_info->sib13, typeandinfo->choice.sib13_v1610, sizeof(NR_SIB13_r16_t)); - LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index ); - //dump_sib13(SI_info->sib13); - // adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer - LOG_I(RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params gNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n", - ctxt_pP->frame, ctxt_pP->module_id, gNB_index, ctxt_pP->module_id); - // TODO rrc_mac_config_req_ue - } + if(!SI_info->sib13) + SI_info->sib13 = calloc(1, sizeof(*SI_info->sib13)); + memcpy(SI_info->sib13, typeandinfo->choice.sib13_v1610, sizeof(NR_SIB13_r16_t)); + SI_info->sib13_timer = 0; + LOG_I( RRC, "[UE %"PRIu8"] Found SIB13 from gNB %"PRIu8"\n", module_id, gNB_index ); break; case NR_SystemInformation_IEs__sib_TypeAndInfo__Member_PR_sib14_v1610: - if ((SI_info->SIStatus & 8192) == 0) { - SI_info->SIStatus |= 8192; - new_sib=1; - memcpy(SI_info->sib12, typeandinfo->choice.sib14_v1610, sizeof(NR_SIB14_r16_t)); - LOG_I(RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB14 from gNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, gNB_index); - } - + if(!SI_info->sib14) + SI_info->sib14 = calloc(1, sizeof(*SI_info->sib14)); + memcpy(SI_info->sib12, typeandinfo->choice.sib14_v1610, sizeof(NR_SIB14_r16_t)); + SI_info->sib14_timer = 0; + LOG_I(RRC, "[UE %"PRIu8"] Found SIB14 from gNB %"PRIu8"\n", module_id, gNB_index); break; - default: break; } - if (new_sib == 1) { - SI_info->SIcnt++; - if (SI_info->SIcnt == sib1->si_SchedulingInfo->schedulingInfoList.list.count) - nr_rrc_set_sub_state(ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE_NR); - - LOG_I(NR_RRC,"SIStatus %x, SIcnt %d/%d\n", - SI_info->SIStatus, - SI_info->SIcnt, - sib1->si_SchedulingInfo->schedulingInfoList.list.count); - } + nr_rrc_set_sub_state(module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE_NR); } - - //if (new_sib == 1) { - // NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].SIcnt++; - - // if (NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].SIcnt == sib1->schedulingInfoList.list.count) - // rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE ); - - // LOG_I(NR_RRC, "SIStatus %x, SIcnt %d/%d\n", - // NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].SIStatus, - // NR_UE_rrc_inst[ctxt_pP->module_id].Info[gNB_index].SIcnt, - // sib1->schedulingInfoList.list.count); - //} - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_OUT); return 0; } -static int8_t check_requested_SI_List(module_id_t module_id, BIT_STRING_t requested_SI_List, NR_SIB1_t sib1) { - - if(sib1.si_SchedulingInfo) { - - bool SIB_to_request[32] = {}; - - LOG_D(RRC, "SIBs broadcasting: "); - for(int i = 0; i < sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.count; i++) { - LOG_D(RRC, "SIB%li ", sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.array[i]->type + 2); - } - LOG_D(RRC, "\n"); - - LOG_D(RRC, "SIBs needed by UE: "); - for(int j = 0; j < 8*requested_SI_List.size; j++) { - if( ((requested_SI_List.buf[j/8]>>(j%8))&1) == 1) { - - LOG_D(RRC, "SIB%i ", j + 2); - - SIB_to_request[j] = true; - for(int i = 0; i < sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.count; i++) { - if(sib1.si_SchedulingInfo->schedulingInfoList.list.array[0]->sib_MappingInfo.list.array[i]->type == j) { - SIB_to_request[j] = false; - break; - } - } - - } - } - LOG_D(RRC, "\n"); - - LOG_D(RRC, "SIBs to request by UE: "); - bool do_ra = false; - for(int j = 0; j < 8*requested_SI_List.size; j++) { - if(SIB_to_request[j]) { - LOG_D(RRC, "SIB%i ", j + 2); - do_ra = true; - } - } - LOG_D(RRC, "\n"); - - if(do_ra) { - - NR_UE_rrc_inst[module_id].ra_trigger = REQUEST_FOR_OTHER_SI; - get_softmodem_params()->do_ra = 1; - - if(sib1.si_SchedulingInfo->si_RequestConfig) { - LOG_D(RRC, "Trigger contention-free RA procedure (ra_trigger = %i)\n", NR_UE_rrc_inst[module_id].ra_trigger); - } else { - LOG_D(RRC, "Trigger contention-based RA procedure (ra_trigger = %i)\n", NR_UE_rrc_inst[module_id].ra_trigger); - } - - } - - } - - return 0; -} - int8_t nr_rrc_ue_generate_ra_msg(module_id_t module_id, uint8_t gNB_index) { switch(NR_UE_rrc_inst[module_id].ra_trigger){ @@ -1037,16 +716,8 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id, { NR_BCCH_DL_SCH_Message_t *bcch_message = NULL; NR_UE_RRC_SI_INFO *SI_info = &NR_UE_rrc_inst[module_id].SInfo[gNB_index]; - NR_SIB1_t *sib1 = SI_info->sib1; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); - if (((SI_info->SIStatus & 1) == 1) && sib1->si_SchedulingInfo &&// SIB1 received - (SI_info->SIcnt == sib1->si_SchedulingInfo->schedulingInfoList.list.count)) { - // to prevent memory bloating - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); - return 0; - } - nr_rrc_set_sub_state(module_id, RRC_SUB_STATE_IDLE_RECEIVING_SIB_NR); asn_dec_rval_t dec_rval = uper_decode_complete(NULL, @@ -1065,7 +736,7 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id, dec_rval.consumed); log_dump(NR_RRC, Sdu, Sdu_len, LOG_DUMP_CHAR," Received bytes:\n"); // free the memory - SEQUENCE_free( &asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1 ); + SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT ); return -1; } @@ -1073,60 +744,33 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id, if (bcch_message->message.present == NR_BCCH_DL_SCH_MessageType_PR_c1) { switch (bcch_message->message.choice.c1->present) { case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: - if ((SI_info->SIStatus & 1) == 0) { - if(sib1 != NULL) { - SEQUENCE_free(&asn_DEF_NR_SIB1, (void *)sib1, 1); - } - SI_info->SIStatus |= 1; - sib1 = bcch_message->message.choice.c1->choice.systemInformationBlockType1; - if (*(int64_t*)sib1 != 1) { - SI_info->sib1 = sib1; - if(g_log->log_component[NR_RRC].level >= OAILOG_DEBUG) { - xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void *) SI_info->sib1); - } - LOG_A(NR_RRC, "SIB1 decoded\n"); - - /// dump_SIB1(); - // FIXME: improve condition for the RA trigger - // Check for on-demand not broadcasted SI - check_requested_SI_List(module_id, NR_UE_rrc_inst[module_id].requested_SI_List, *sib1); - if(nr_rrc_get_state(module_id) <= RRC_STATE_IDLE_NR) { - NR_UE_rrc_inst[module_id].ra_trigger = INITIAL_ACCESS_FROM_RRC_IDLE; - LOG_D(PHY,"Setting state to RRC_STATE_IDLE_NR\n"); - nr_rrc_set_state (module_id, RRC_STATE_IDLE_NR); - } - // configure timers and constant - nr_rrc_set_sib1_timers_and_constants(&NR_UE_rrc_inst[module_id].timers_and_constants, sib1); - // take ServingCellConfigCommon and configure L1/L2 - NR_UE_rrc_inst[module_id].servingCellConfigCommonSIB = sib1->servingCellConfigCommon; - nr_rrc_mac_config_req_sib1(module_id, 0, sib1->servingCellConfigCommon); - nr_rrc_ue_generate_ra_msg(module_id, gNB_index); - } else { - LOG_E(NR_RRC, "SIB1 not decoded\n"); - } + if(SI_info->sib1 != NULL) + SEQUENCE_free(&asn_DEF_NR_SIB1, (void *)SI_info->sib1, 1); + NR_SIB1_t *sib1 = bcch_message->message.choice.c1->choice.systemInformationBlockType1; + SI_info->sib1 = sib1; + if(g_log->log_component[NR_RRC].level >= OAILOG_DEBUG) + xer_fprint(stdout, &asn_DEF_NR_SIB1, (const void *) SI_info->sib1); + LOG_A(NR_RRC, "SIB1 decoded\n"); + SI_info->sib1_timer = 0; + // FIXME: improve condition for the RA trigger + if(nr_rrc_get_state(module_id) <= RRC_STATE_IDLE_NR) { + NR_UE_rrc_inst[module_id].ra_trigger = INITIAL_ACCESS_FROM_RRC_IDLE; + LOG_D(PHY,"Setting state to RRC_STATE_IDLE_NR\n"); + nr_rrc_set_state(module_id, RRC_STATE_IDLE_NR); } + // configure timers and constant + nr_rrc_set_sib1_timers_and_constants(&NR_UE_rrc_inst[module_id].timers_and_constants, sib1); + // take ServingCellConfigCommon and configure L1/L2 + NR_UE_rrc_inst[module_id].servingCellConfigCommonSIB = sib1->servingCellConfigCommon; + nr_rrc_mac_config_req_sib1(module_id, 0, sib1->si_SchedulingInfo, sib1->servingCellConfigCommon); + nr_rrc_ue_generate_ra_msg(module_id, gNB_index); break; - case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation: - if ((SI_info->SIStatus & 1) == 1) { - LOG_W(NR_RRC, "Decoding SI not implemented yet\n"); - // TODO: Decode SI - /* - // SIB1 with schedulingInfoList is available - NR_SystemInformation_t *si = NR_UE_rrc_inst[module_id].si[gNB_index]; - - memcpy( si, - bcch_message->message.choice.c1->choice.systemInformation, - sizeof(NR_SystemInformation_t) ); - LOG_I(NR_RRC, "[UE %"PRIu8"] Decoding SI\n", module_id); - nr_decode_SI( ctxt_pP, gNB_index ); - - if (nfapi_mode == 3) - UE_mac_inst[ctxt_pP->module_id].SI_Decoded = 1; - */ - } + LOG_I(NR_RRC, "[UE %"PRIu8"] Decoding SI\n", module_id); + NR_SystemInformation_t *si = bcch_message->message.choice.c1->choice.systemInformation; + nr_decode_SI(module_id, gNB_index, si); + SEQUENCE_free(&asn_DEF_NR_BCCH_DL_SCH_Message, (void *)bcch_message, 1); break; - case NR_BCCH_DL_SCH_MessageType__c1_PR_NOTHING: default: break; @@ -1357,8 +1001,7 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB } if (dl_ccch_msg->message.present == NR_DL_CCCH_MessageType_PR_c1) { - if (NR_UE_rrc_inst[ctxt_pP->module_id].SInfo[gNB_index].SIStatus > 0) { - switch (dl_ccch_msg->message.choice.c1->present) { + switch (dl_ccch_msg->message.choice.c1->present) { case NR_DL_CCCH_MessageType__c1_PR_NOTHING: LOG_I(NR_RRC, "[UE%d] Frame %d : Received PR_NOTHING on DL-CCCH-Message\n", ctxt_pP->module_id, @@ -1396,7 +1039,6 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB ctxt_pP->frame); rval = -1; break; - } } } @@ -2305,6 +1947,8 @@ void *rrc_nrue_task(void *args_p) ue_mod_id, ITTI_MSG_NAME (msg_p), NRRRC_SLOT_PROCESS (msg_p).frame, NRRRC_SLOT_PROCESS (msg_p).slot); NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[ue_mod_id].timers_and_constants; nr_rrc_handle_timers(timers); + NR_UE_RRC_SI_INFO *SInfo = &NR_UE_rrc_inst[ue_mod_id].SInfo[NRRRC_SLOT_PROCESS (msg_p).gnb_id]; + nr_rrc_SI_timers(SInfo); break; case NR_RRC_MAC_RA_IND: @@ -2790,12 +2434,13 @@ void process_lte_nsa_msg(nsa_msg_t *msg, int msg_len) } } -void nr_ue_rrc_timer_trigger(int module_id, int frame, int slot) +void nr_ue_rrc_timer_trigger(int module_id, int frame, int slot, int gnb_id) { MessageDef *message_p; message_p = itti_alloc_new_message(TASK_RRC_NRUE, 0, NRRRC_SLOT_PROCESS); NRRRC_SLOT_PROCESS(message_p).frame = frame; NRRRC_SLOT_PROCESS(message_p).slot = slot; + NRRRC_SLOT_PROCESS(message_p).gnb_id = gnb_id; LOG_D(NR_RRC, "RRC timer trigger: frame %d slot %d \n", frame, slot); itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(module_id), message_p); } diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h index ac598bdf51..ea9ae55ba2 100644 --- a/openair2/RRC/NR_UE/rrc_defs.h +++ b/openair2/RRC/NR_UE/rrc_defs.h @@ -134,23 +134,34 @@ typedef enum RA_trigger_e { } RA_trigger_t; typedef struct UE_RRC_SI_INFO_NR_s { - uint32_t SIStatus; - uint32_t SIcnt; - NR_SystemInformation_t *si; NR_SIB1_t *sib1; + int sib1_timer; NR_SIB2_t *sib2; + int sib2_timer; NR_SIB3_t *sib3; + int sib3_timer; NR_SIB4_t *sib4; + int sib4_timer; NR_SIB5_t *sib5; + int sib5_timer; NR_SIB6_t *sib6; + int sib6_timer; NR_SIB7_t *sib7; + int sib7_timer; NR_SIB8_t *sib8; + int sib8_timer; NR_SIB9_t *sib9; + int sib9_timer; NR_SIB10_r16_t *sib10; + int sib10_timer; NR_SIB11_r16_t *sib11; + int sib11_timer; NR_SIB12_r16_t *sib12; + int sib12_timer; NR_SIB13_r16_t *sib13; + int sib13_timer; NR_SIB14_r16_t *sib14; + int sib14_timer; } __attribute__ ((__packed__)) NR_UE_RRC_SI_INFO; typedef struct NR_UE_Timers_Constants_s { @@ -212,7 +223,6 @@ typedef struct NR_UE_RRC_INST_s { NR_SRB_INFO_TABLE_ENTRY Srb1[NB_CNX_UE]; NR_SRB_INFO_TABLE_ENTRY Srb2[NB_CNX_UE]; - uint8_t MBMS_flag; OAI_NR_UECapability_t *UECap; uint8_t *UECapability; uint16_t UECapability_size; @@ -223,7 +233,6 @@ typedef struct NR_UE_RRC_INST_s { plmn_t plmnID; - BIT_STRING_t requested_SI_List; NR_UE_RRC_SI_INFO SInfo[NB_SIG_CNX_UE]; NR_MIB_t *mib; diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index 67369a8488..6d453dbec5 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -159,7 +159,9 @@ void process_lte_nsa_msg(nsa_msg_t *msg, int msg_len); int get_from_lte_ue_fd(); -void nr_ue_rrc_timer_trigger(int module_id, int frame, int slot); +void nr_rrc_SI_timers(NR_UE_RRC_SI_INFO *SInfo); + +void nr_ue_rrc_timer_trigger(int module_id, int frame, int slot, int gnb_id); void configure_spcell(NR_UE_RRC_INST_t *rrc, NR_SpCellConfig_t *spcell_config); void reset_rlf_timers_and_constants(NR_UE_Timers_Constants_t *tac); diff --git a/openair2/RRC/NR_UE/rrc_timers_and_constants.c b/openair2/RRC/NR_UE/rrc_timers_and_constants.c index 50c2240339..b027eb3241 100644 --- a/openair2/RRC/NR_UE/rrc_timers_and_constants.c +++ b/openair2/RRC/NR_UE/rrc_timers_and_constants.c @@ -21,6 +21,124 @@ #include "openair2/RRC/NR_UE/rrc_proto.h" +void nr_rrc_SI_timers(NR_UE_RRC_SI_INFO *SInfo) +{ + // delete any stored version of a SIB after 3 hours + // from the moment it was successfully confirmed as valid + if (SInfo->sib1) { + SInfo->sib1_timer += 10; + if (SInfo->sib1_timer > 10800000) { + SInfo->sib1_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB1, SInfo->sib1, 1); + SInfo->sib1 = NULL; + } + } + if (SInfo->sib2) { + SInfo->sib2_timer += 10; + if (SInfo->sib2_timer > 10800000) { + SInfo->sib2_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB2, SInfo->sib2, 1); + SInfo->sib2 = NULL; + } + } + if (SInfo->sib3) { + SInfo->sib3_timer += 10; + if (SInfo->sib3_timer > 10800000) { + SInfo->sib3_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB3, SInfo->sib3, 1); + SInfo->sib3 = NULL; + } + } + if (SInfo->sib4) { + SInfo->sib4_timer += 10; + if (SInfo->sib4_timer > 10800000) { + SInfo->sib4_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB4, SInfo->sib4, 1); + SInfo->sib4 = NULL; + } + } + if (SInfo->sib5) { + SInfo->sib5_timer += 10; + if (SInfo->sib5_timer > 10800000) { + SInfo->sib5_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB5, SInfo->sib5, 1); + SInfo->sib5 = NULL; + } + } + if (SInfo->sib6) { + SInfo->sib6_timer += 10; + if (SInfo->sib6_timer > 10800000) { + SInfo->sib6_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB6, SInfo->sib6, 1); + SInfo->sib6 = NULL; + } + } + if (SInfo->sib7) { + SInfo->sib7_timer += 10; + if (SInfo->sib7_timer > 10800000) { + SInfo->sib7_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB7, SInfo->sib7, 1); + SInfo->sib7 = NULL; + } + } + if (SInfo->sib8) { + SInfo->sib8_timer += 10; + if (SInfo->sib8_timer > 10800000) { + SInfo->sib8_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB8, SInfo->sib8, 1); + SInfo->sib8 = NULL; + } + } + if (SInfo->sib9) { + SInfo->sib9_timer += 10; + if (SInfo->sib9_timer > 10800000) { + SInfo->sib9_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB9, SInfo->sib9, 1); + SInfo->sib9 = NULL; + } + } + if (SInfo->sib10) { + SInfo->sib10_timer += 10; + if (SInfo->sib10_timer > 10800000) { + SInfo->sib10_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB10_r16, SInfo->sib10, 1); + SInfo->sib10 = NULL; + } + } + if (SInfo->sib11) { + SInfo->sib11_timer += 10; + if (SInfo->sib11_timer > 10800000) { + SInfo->sib11_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB11_r16, SInfo->sib11, 1); + SInfo->sib11 = NULL; + } + } + if (SInfo->sib12) { + SInfo->sib12_timer += 10; + if (SInfo->sib12_timer > 10800000) { + SInfo->sib12_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB12_r16, SInfo->sib12, 1); + SInfo->sib12 = NULL; + } + } + if (SInfo->sib13) { + SInfo->sib13_timer += 10; + if (SInfo->sib13_timer > 10800000) { + SInfo->sib13_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB13_r16, SInfo->sib13, 1); + SInfo->sib13 = NULL; + } + } + if (SInfo->sib14) { + SInfo->sib14_timer += 10; + if (SInfo->sib14_timer > 10800000) { + SInfo->sib14_timer = 0; + SEQUENCE_free(&asn_DEF_NR_SIB14_r16, SInfo->sib14, 1); + SInfo->sib14 = NULL; + } + } +} + void nr_rrc_handle_timers(NR_UE_Timers_Constants_t *timers) { // T304 diff --git a/openair2/XNAP/CMakeLists.txt b/openair2/XNAP/CMakeLists.txt new file mode 100644 index 0000000000..d003732d8a --- /dev/null +++ b/openair2/XNAP/CMakeLists.txt @@ -0,0 +1,7 @@ +add_subdirectory(MESSAGES) +add_library(xnap xnap_common.c) +target_link_libraries(xnap + PUBLIC asn1_xnap + PRIVATE nr_rrc) +target_include_directories(xnap PUBLIC ${CMAKE_CURRENT_DIR}) + diff --git a/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.asn b/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.asn new file mode 100644 index 0000000000..9aeafc5479 --- /dev/null +++ b/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.asn @@ -0,0 +1,8907 @@ +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- +-- ************************************************************** + +XnAP-PDU-Descriptions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) xnap (2) version1 (1) xnap-PDU-Descriptions (0) } + +-- XnAP-PDU-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + ProcedureCode + +FROM XnAP-CommonDataTypes + + HandoverRequest, + HandoverRequestAcknowledge, + HandoverPreparationFailure, + SNStatusTransfer, + UEContextRelease, + HandoverCancel, + NotificationControlIndication, + RANPaging, + RetrieveUEContextRequest, + RetrieveUEContextResponse, + RetrieveUEContextFailure, + XnUAddressIndication, + SecondaryRATDataUsageReport, + SNodeAdditionRequest, + SNodeAdditionRequestAcknowledge, + SNodeAdditionRequestReject, + SNodeReconfigurationComplete, + SNodeModificationRequest, + SNodeModificationRequestAcknowledge, + SNodeModificationRequestReject, + SNodeModificationRequired, + SNodeModificationConfirm, + SNodeModificationRefuse, + SNodeReleaseRequest, + SNodeReleaseRequestAcknowledge, + SNodeReleaseReject, + SNodeReleaseRequired, + SNodeReleaseConfirm, + SNodeCounterCheckRequest, + SNodeChangeRequired, + SNodeChangeConfirm, + SNodeChangeRefuse, + RRCTransfer, + XnRemovalRequest, + XnRemovalResponse, + XnRemovalFailure, + XnSetupRequest, + XnSetupResponse, + XnSetupFailure, + NGRANNodeConfigurationUpdate, + NGRANNodeConfigurationUpdateAcknowledge, + NGRANNodeConfigurationUpdateFailure, + E-UTRA-NR-CellResourceCoordinationRequest, + E-UTRA-NR-CellResourceCoordinationResponse, + ActivityNotification, + CellActivationRequest, + CellActivationResponse, + CellActivationFailure, + ResetRequest, + ResetResponse, + ErrorIndication, + PrivateMessage, + DeactivateTrace, + TraceStart, + HandoverSuccess, + ConditionalHandoverCancel, + EarlyStatusTransfer, + FailureIndication, + HandoverReport, + ResourceStatusRequest, + ResourceStatusResponse, + ResourceStatusFailure, + ResourceStatusUpdate, + MobilityChangeRequest, + MobilityChangeAcknowledge, + MobilityChangeFailure, + AccessAndMobilityIndication + + +FROM XnAP-PDU-Contents + + id-handoverPreparation, + id-sNStatusTransfer, + id-handoverCancel, + id-notificationControl, + id-retrieveUEContext, + id-rANPaging, + id-xnUAddressIndication, + id-uEContextRelease, + id-secondaryRATDataUsageReport, + id-sNGRANnodeAdditionPreparation, + id-sNGRANnodeReconfigurationCompletion, + id-mNGRANnodeinitiatedSNGRANnodeModificationPreparation, + id-sNGRANnodeinitiatedSNGRANnodeModificationPreparation, + id-mNGRANnodeinitiatedSNGRANnodeRelease, + id-sNGRANnodeinitiatedSNGRANnodeRelease, + id-sNGRANnodeCounterCheck, + id-sNGRANnodeChange, + id-activityNotification, + id-rRCTransfer, + id-xnRemoval, + id-xnSetup, + id-nGRANnodeConfigurationUpdate, + id-e-UTRA-NR-CellResourceCoordination, + id-cellActivation, + id-reset, + id-errorIndication, + id-privateMessage, + id-deactivateTrace, + id-traceStart, + id-handoverSuccess, + id-conditionalHandoverCancel, + id-earlyStatusTransfer, + id-failureIndication, + id-handoverReport, + id-resourceStatusReportingInitiation, + id-resourceStatusReporting, + id-mobilitySettingsChange, + id-accessAndMobilityIndication + +FROM XnAP-Constants; + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +XNAP-ELEMENTARY-PROCEDURE ::= CLASS { + &InitiatingMessage , + &SuccessfulOutcome OPTIONAL, + &UnsuccessfulOutcome OPTIONAL, + &procedureCode ProcedureCode UNIQUE, + &criticality Criticality DEFAULT ignore +} +WITH SYNTAX { + INITIATING MESSAGE &InitiatingMessage + [SUCCESSFUL OUTCOME &SuccessfulOutcome] + [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] + PROCEDURE CODE &procedureCode + [CRITICALITY &criticality] +} + +-- ************************************************************** +-- +-- Interface PDU Definition +-- +-- ************************************************************** + +XnAP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} + +InitiatingMessage ::= SEQUENCE { + procedureCode XNAP-ELEMENTARY-PROCEDURE.&procedureCode ({XNAP-ELEMENTARY-PROCEDURES}), + criticality XNAP-ELEMENTARY-PROCEDURE.&criticality ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value XNAP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { + procedureCode XNAP-ELEMENTARY-PROCEDURE.&procedureCode ({XNAP-ELEMENTARY-PROCEDURES}), + criticality XNAP-ELEMENTARY-PROCEDURE.&criticality ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value XNAP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode XNAP-ELEMENTARY-PROCEDURE.&procedureCode ({XNAP-ELEMENTARY-PROCEDURES}), + criticality XNAP-ELEMENTARY-PROCEDURE.&criticality ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value XNAP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({XNAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +XNAP-ELEMENTARY-PROCEDURES XNAP-ELEMENTARY-PROCEDURE ::= { + XNAP-ELEMENTARY-PROCEDURES-CLASS-1 | + XNAP-ELEMENTARY-PROCEDURES-CLASS-2 , + ... +} + +XNAP-ELEMENTARY-PROCEDURES-CLASS-1 XNAP-ELEMENTARY-PROCEDURE ::= { + handoverPreparation | + retrieveUEContext | + sNGRANnodeAdditionPreparation | + mNGRANnodeinitiatedSNGRANnodeModificationPreparation | + sNGRANnodeinitiatedSNGRANnodeModificationPreparation | + mNGRANnodeinitiatedSNGRANnodeRelease | + sNGRANnodeinitiatedSNGRANnodeRelease | + sNGRANnodeChange | + xnRemoval | + xnSetup | + nGRANnodeConfigurationUpdate | + e-UTRA-NR-CellResourceCoordination | + cellActivation | + reset | + resourceStatusReportingInitiation | + mobilitySettingsChange , + ... +} + +XNAP-ELEMENTARY-PROCEDURES-CLASS-2 XNAP-ELEMENTARY-PROCEDURE ::= { + sNStatusTransfer | + handoverCancel | + rANPaging | + xnUAddressIndication | + uEContextRelease | + sNGRANnodeReconfigurationCompletion | + sNGRANnodeCounterCheck | + rRCTransfer | + errorIndication | + privateMessage | + notificationControl | + activityNotification | + secondaryRATDataUsageReport | + deactivateTrace | + traceStart | + handoverSuccess | + conditionalHandoverCancel | + earlyStatusTransfer | + failureIndication | + handoverReport | + resourceStatusReporting | + accessAndMobilityIndication , + ... + +} + +-- ************************************************************** +-- +-- Interface Elementary Procedures +-- +-- ************************************************************** + +handoverPreparation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverRequest + SUCCESSFUL OUTCOME HandoverRequestAcknowledge + UNSUCCESSFUL OUTCOME HandoverPreparationFailure + PROCEDURE CODE id-handoverPreparation + CRITICALITY reject +} + + +sNStatusTransfer XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNStatusTransfer + PROCEDURE CODE id-sNStatusTransfer + CRITICALITY ignore +} + + +handoverCancel XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverCancel + PROCEDURE CODE id-handoverCancel + CRITICALITY ignore +} + + +retrieveUEContext XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RetrieveUEContextRequest + SUCCESSFUL OUTCOME RetrieveUEContextResponse + UNSUCCESSFUL OUTCOME RetrieveUEContextFailure + PROCEDURE CODE id-retrieveUEContext + CRITICALITY reject +} + + +rANPaging XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RANPaging + PROCEDURE CODE id-rANPaging + CRITICALITY reject +} + + +xnUAddressIndication XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE XnUAddressIndication + PROCEDURE CODE id-xnUAddressIndication + CRITICALITY reject +} + + +uEContextRelease XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextRelease + PROCEDURE CODE id-uEContextRelease + CRITICALITY reject +} + + +sNGRANnodeAdditionPreparation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeAdditionRequest + SUCCESSFUL OUTCOME SNodeAdditionRequestAcknowledge + UNSUCCESSFUL OUTCOME SNodeAdditionRequestReject + PROCEDURE CODE id-sNGRANnodeAdditionPreparation + CRITICALITY reject +} + + +sNGRANnodeReconfigurationCompletion XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeReconfigurationComplete + PROCEDURE CODE id-sNGRANnodeReconfigurationCompletion + CRITICALITY reject +} + + +mNGRANnodeinitiatedSNGRANnodeModificationPreparation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeModificationRequest + SUCCESSFUL OUTCOME SNodeModificationRequestAcknowledge + UNSUCCESSFUL OUTCOME SNodeModificationRequestReject + PROCEDURE CODE id-mNGRANnodeinitiatedSNGRANnodeModificationPreparation + CRITICALITY reject +} + + +sNGRANnodeinitiatedSNGRANnodeModificationPreparation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeModificationRequired + SUCCESSFUL OUTCOME SNodeModificationConfirm + UNSUCCESSFUL OUTCOME SNodeModificationRefuse + PROCEDURE CODE id-sNGRANnodeinitiatedSNGRANnodeModificationPreparation + CRITICALITY reject +} + + +mNGRANnodeinitiatedSNGRANnodeRelease XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeReleaseRequest + SUCCESSFUL OUTCOME SNodeReleaseRequestAcknowledge + UNSUCCESSFUL OUTCOME SNodeReleaseReject + PROCEDURE CODE id-mNGRANnodeinitiatedSNGRANnodeRelease + CRITICALITY reject +} + + +sNGRANnodeinitiatedSNGRANnodeRelease XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeReleaseRequired + SUCCESSFUL OUTCOME SNodeReleaseConfirm + PROCEDURE CODE id-sNGRANnodeinitiatedSNGRANnodeRelease + CRITICALITY reject +} + + +sNGRANnodeCounterCheck XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeCounterCheckRequest + PROCEDURE CODE id-sNGRANnodeCounterCheck + CRITICALITY reject +} + + +sNGRANnodeChange XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SNodeChangeRequired + SUCCESSFUL OUTCOME SNodeChangeConfirm + UNSUCCESSFUL OUTCOME SNodeChangeRefuse + PROCEDURE CODE id-sNGRANnodeChange + CRITICALITY reject +} + + +rRCTransfer XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RRCTransfer + PROCEDURE CODE id-rRCTransfer + CRITICALITY reject +} + + +xnRemoval XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE XnRemovalRequest + SUCCESSFUL OUTCOME XnRemovalResponse + UNSUCCESSFUL OUTCOME XnRemovalFailure + PROCEDURE CODE id-xnRemoval + CRITICALITY reject +} + + +xnSetup XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE XnSetupRequest + SUCCESSFUL OUTCOME XnSetupResponse + UNSUCCESSFUL OUTCOME XnSetupFailure + PROCEDURE CODE id-xnSetup + CRITICALITY reject +} + + +nGRANnodeConfigurationUpdate XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NGRANNodeConfigurationUpdate + SUCCESSFUL OUTCOME NGRANNodeConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME NGRANNodeConfigurationUpdateFailure + PROCEDURE CODE id-nGRANnodeConfigurationUpdate + CRITICALITY reject +} + + +e-UTRA-NR-CellResourceCoordination XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE E-UTRA-NR-CellResourceCoordinationRequest + SUCCESSFUL OUTCOME E-UTRA-NR-CellResourceCoordinationResponse + PROCEDURE CODE id-e-UTRA-NR-CellResourceCoordination + CRITICALITY reject +} + + +cellActivation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE CellActivationRequest + SUCCESSFUL OUTCOME CellActivationResponse + UNSUCCESSFUL OUTCOME CellActivationFailure + PROCEDURE CODE id-cellActivation + CRITICALITY reject +} + + +reset XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ResetRequest + SUCCESSFUL OUTCOME ResetResponse + PROCEDURE CODE id-reset + CRITICALITY reject +} + + +errorIndication XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ErrorIndication + PROCEDURE CODE id-errorIndication + CRITICALITY ignore +} + + +notificationControl XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NotificationControlIndication + PROCEDURE CODE id-notificationControl + CRITICALITY ignore +} + + +activityNotification XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ActivityNotification + PROCEDURE CODE id-activityNotification + CRITICALITY ignore +} + + +privateMessage XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PrivateMessage + PROCEDURE CODE id-privateMessage + CRITICALITY ignore +} + +secondaryRATDataUsageReport XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SecondaryRATDataUsageReport + PROCEDURE CODE id-secondaryRATDataUsageReport + CRITICALITY reject +} + +deactivateTrace XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DeactivateTrace + PROCEDURE CODE id-deactivateTrace + CRITICALITY ignore +} + +traceStart XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE TraceStart + PROCEDURE CODE id-traceStart + CRITICALITY ignore +} + +handoverSuccess XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverSuccess + PROCEDURE CODE id-handoverSuccess + CRITICALITY ignore +} + +conditionalHandoverCancel XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ConditionalHandoverCancel + PROCEDURE CODE id-conditionalHandoverCancel + CRITICALITY ignore +} + +earlyStatusTransfer XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE EarlyStatusTransfer + PROCEDURE CODE id-earlyStatusTransfer + CRITICALITY ignore +} + +failureIndication XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE FailureIndication + PROCEDURE CODE id-failureIndication + CRITICALITY ignore +} + +handoverReport XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverReport + PROCEDURE CODE id-handoverReport + CRITICALITY ignore +} + +resourceStatusReportingInitiation XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ResourceStatusRequest + SUCCESSFUL OUTCOME ResourceStatusResponse + UNSUCCESSFUL OUTCOME ResourceStatusFailure + PROCEDURE CODE id-resourceStatusReportingInitiation + CRITICALITY reject +} + +resourceStatusReporting XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ResourceStatusUpdate + PROCEDURE CODE id-resourceStatusReporting + CRITICALITY ignore +} + +mobilitySettingsChange XNAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MobilityChangeRequest + SUCCESSFUL OUTCOME MobilityChangeAcknowledge + UNSUCCESSFUL OUTCOME MobilityChangeFailure +PROCEDURE CODE id-mobilitySettingsChange + CRITICALITY reject +} + + +accessAndMobilityIndication XNAP-ELEMENTARY-PROCEDURE ::={ + INITIATING MESSAGE AccessAndMobilityIndication + PROCEDURE CODE id-accessAndMobilityIndication + CRITICALITY ignore +} + +END + + +-- ************************************************************** +-- +-- PDU definitions for XnAP. +-- +-- ************************************************************** + +XnAP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) xnap (2) version1 (1) xnap-PDU-Contents (1) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + ActivationIDforCellActivation, + AMF-Region-Information, + AMF-UE-NGAP-ID, + AS-SecurityInformation, + AssistanceDataForRANPaging, + BitRate, + Cause, + CellAndCapacityAssistanceInfo-EUTRA, + CellAndCapacityAssistanceInfo-NR, + CellAssistanceInfo-EUTRA, + CellAssistanceInfo-NR, + CHOinformation-Req, + CHOinformation-Ack, + CHO-MRDC-Indicator, + CPTransportLayerInformation, + TNLA-To-Add-List, + TNLA-To-Update-List, + TNLA-To-Remove-List, + TNLA-Setup-List, + TNLA-Failed-To-Setup-List, + CriticalityDiagnostics, + XnUAddressInfoperPDUSession-List, + DAPSResponseInfo-List, + DataTrafficResourceIndication, + DeliveryStatus, + DesiredActNotificationLevel, + DRB-ID, + DRB-List, + DRB-Number, + DRBsSubjectToDLDiscarding-List, + DRBsSubjectToEarlyStatusTransfer-List, + DRBsSubjectToStatusTransfer-List, + DRBToQoSFlowMapping-List, + E-UTRA-CGI, + ExpectedUEBehaviour, + FiveGCMobilityRestrictionListContainer, + GlobalNG-RANNode-ID, + GlobalNG-RANCell-ID, + GUAMI, + InterfaceInstanceIndication, + I-RNTI, + LocationInformationSNReporting, + LocationReportingInformation, + LowerLayerPresenceStatusChange, + LTEUESidelinkAggregateMaximumBitRate, + LTEV2XServicesAuthorized, + MR-DC-ResourceCoordinationInfo, + ServedCells-E-UTRA, + ServedCells-NR, + ServedCellsToUpdate-E-UTRA, + ServedCellsToUpdate-NR, + MAC-I, + MaskedIMEISV, + MDT-Configuration, + MDTPLMNList, + MobilityRestrictionList, + NG-RAN-Cell-Identity, + NG-RANnodeUEXnAPID, + NR-CGI, + NE-DC-TDM-Pattern, + NRUESidelinkAggregateMaximumBitRate, + NRV2XServicesAuthorized, + PagingDRX, + PagingPriority, + PartialListIndicator, + PLMN-Identity, + PDCPChangeIndication, + PDUSessionAggregateMaximumBitRate, + PDUSession-ID, + PDUSession-List, + PDUSession-List-withCause, + PDUSession-List-withDataForwardingFromTarget, + PDUSession-List-withDataForwardingRequest, + PDUSessionResourcesAdmitted-List, + PDUSessionResourcesNotAdmitted-List, + PDUSessionResourcesToBeSetup-List, + PDUSessionResourceChangeRequiredInfo-SNterminated, + PDUSessionResourceChangeRequiredInfo-MNterminated, + PDUSessionResourceChangeConfirmInfo-SNterminated, + PDUSessionResourceChangeConfirmInfo-MNterminated, + PDUSessionResourceSecondaryRATUsageList, + PDUSessionResourceSetupInfo-SNterminated, + PDUSessionResourceSetupInfo-MNterminated, + PDUSessionResourceSetupResponseInfo-SNterminated, + PDUSessionResourceSetupResponseInfo-MNterminated, + PDUSessionResourceModificationInfo-SNterminated, + PDUSessionResourceModificationInfo-MNterminated, + PDUSessionResourceModificationResponseInfo-SNterminated, + PDUSessionResourceModificationResponseInfo-MNterminated, + PDUSessionResourceModConfirmInfo-SNterminated, + PDUSessionResourceModConfirmInfo-MNterminated, + PDUSessionResourceModRqdInfo-SNterminated, + PDUSessionResourceModRqdInfo-MNterminated, + PDUSessionType, + PC5QoSParameters, + QoSFlowIdentifier, + QoSFlowNotificationControlIndicationInfo, + QoSFlows-List, + RANPagingArea, + ResetRequestTypeInfo, + ResetResponseTypeInfo, + RFSP-Index, + RRCConfigIndication, + RRCResumeCause, + SCGConfigurationQuery, + SecurityIndication, + S-NG-RANnode-SecurityKey, + SpectrumSharingGroupID, + SplitSRBsTypes, + S-NG-RANnode-Addition-Trigger-Ind, + S-NSSAI, + TargetCellList, + TAISupport-List, + Target-CGI, + TimeToWait, + TraceActivation, + UEAggregateMaximumBitRate, + UEContextID, + UEContextInfoRetrUECtxtResp, + UEContextKeptIndicator, + UEHistoryInformation, + UEIdentityIndexValue, + UERadioCapabilityForPaging, + UERadioCapabilityID, + UERANPagingIdentity, + UESecurityCapabilities, + UPTransportLayerInformation, + UserPlaneTrafficActivityReport, + XnBenefitValue, + RANPagingFailure, + TNLConfigurationInfo, + MaximumCellListSize, + MessageOversizeNotification, + NG-RANTraceID, + MobilityInformation, + InitiatingCondition-FailureIndication, + HandoverReportType, + TargetCellinEUTRAN, + C-RNTI, + UERLFReportContainer, + Measurement-ID, + RegistrationRequest, + ReportCharacteristics, + CellToReport, + ReportingPeriodicity, + CellMeasurementResult, + UEHistoryInformationFromTheUE, + MobilityParametersInformation, + MobilityParametersModificationRange, + RACHReportInformation, + IABNodeIndication, + SNTriggered + + +FROM XnAP-IEs + + PrivateIE-Container{}, + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + ProtocolIE-ContainerList{}, + ProtocolIE-ContainerPair{}, + ProtocolIE-ContainerPairList{}, + ProtocolIE-Single-Container{}, + XNAP-PRIVATE-IES, + XNAP-PROTOCOL-EXTENSION, + XNAP-PROTOCOL-IES, + XNAP-PROTOCOL-IES-PAIR +FROM XnAP-Containers + + + id-ActivatedServedCells, + id-ActivationIDforCellActivation, + id-AdditionalDRBIDs, + id-AMF-Region-Information, + id-AMF-Region-Information-To-Add, + id-AMF-Region-Information-To-Delete, + id-AssistanceDataForRANPaging, + id-AvailableDRBIDs, + id-Cause, + id-cellAssistanceInfo-EUTRA, + id-cellAssistanceInfo-NR, + id-CellAndCapacityAssistanceInfo-EUTRA, + id-CellAndCapacityAssistanceInfo-NR, + id-ConfigurationUpdateInitiatingNodeChoice, + id-UEContextID, + id-CriticalityDiagnostics, + id-XnUAddressInfoperPDUSession-List, + id-DesiredActNotificationLevel, + id-DRBsSubjectToStatusTransfer-List, + id-ExpectedUEBehaviour, + id-FiveGCMobilityRestrictionListContainer, + id-GlobalNG-RAN-node-ID, + id-GUAMI, + id-indexToRatFrequSelectionPriority, + id-List-of-served-cells-E-UTRA, + id-List-of-served-cells-NR, + id-LocationInformationSN, + id-LocationInformationSNReporting, + id-LocationReportingInformation, + id-LTEUESidelinkAggregateMaximumBitRate, + id-LTEV2XServicesAuthorized, + id-MAC-I, + id-MaskedIMEISV, + id-MDT-Configuration, + id-MDTPLMNList, + id-MN-to-SN-Container, + id-MobilityRestrictionList, + id-M-NG-RANnodeUEXnAPID, + id-new-NG-RAN-Cell-Identity, + id-newNG-RANnodeUEXnAPID, + id-NRUESidelinkAggregateMaximumBitRate, + id-NRV2XServicesAuthorized, + id-oldNG-RANnodeUEXnAPID, + id-OldtoNewNG-RANnodeResumeContainer, + id-PagingDRX, + id-PagingPriority, + id-PartialListIndicator-EUTRA, + id-PartialListIndicator-NR, + id-PCellID, + id-PDUSessionResourceSecondaryRATUsageList, + id-PDUSessionResourcesActivityNotifyList, + id-PDUSessionResourcesAdmitted-List, + id-PDUSessionResourcesNotAdmitted-List, + id-PDUSessionResourcesNotifyList, + id-PDUSessionToBeAddedAddReq, + id-PDUSessionToBeReleased-RelReqAck, + id-procedureStage, + id-RANPagingArea, + id-requestedSplitSRB, + id-RequiredNumberOfDRBIDs, + id-ResetRequestTypeInfo, + id-ResetResponseTypeInfo, + id-RespondingNodeTypeConfigUpdateAck, + id-RRCResumeCause, + id-selectedPLMN, + id-ServedCellsToActivate, + id-servedCellsToUpdate-E-UTRA, + id-ServedCellsToUpdateInitiatingNodeChoice, + id-servedCellsToUpdate-NR, + id-sourceNG-RANnodeUEXnAPID, + id-SpareDRBIDs, + id-S-NG-RANnodeMaxIPDataRate-UL, + id-S-NG-RANnodeMaxIPDataRate-DL, + id-S-NG-RANnodeUEXnAPID, + id-TAISupport-list, + id-Target2SourceNG-RANnodeTranspContainer, + id-targetCellGlobalID, + id-targetNG-RANnodeUEXnAPID, + id-TimeToWait, + id-TNLA-To-Add-List, + id-TNLA-To-Update-List, + id-TNLA-To-Remove-List, + id-TNLA-Setup-List, + id-TNLA-Failed-To-Setup-List, + id-TraceActivation, + id-UEContextInfoHORequest, + id-UEContextInfoRetrUECtxtResp, + id-UEContextKeptIndicator, + id-UEContextRefAtSN-HORequest, + id-UEHistoryInformation, + id-UEIdentityIndexValue, + id-UERANPagingIdentity, + id-UESecurityCapabilities, + id-UserPlaneTrafficActivityReport, + id-XnRemovalThreshold, + id-PDUSessionAdmittedAddedAddReqAck, + id-PDUSessionNotAdmittedAddReqAck, + id-SN-to-MN-Container, + id-RRCConfigIndication, + id-SplitSRB-RRCTransfer, + id-UEReportRRCTransfer, + id-PDUSessionReleasedList-RelConf, + id-BearersSubjectToCounterCheck, + id-PDUSessionToBeReleasedList-RelRqd, + id-ResponseInfo-ReconfCompl, + id-initiatingNodeType-ResourceCoordRequest, + id-respondingNodeType-ResourceCoordResponse, + id-PDUSessionToBeReleased-RelReq, + id-PDUSession-SNChangeRequired-List, + id-PDUSession-SNChangeConfirm-List, + id-PDCPChangeIndication, + id-PC5QoSParameters, + id-SCGConfigurationQuery, + id-UEContextInfo-SNModRequest, + id-requestedSplitSRBrelease, + id-PDUSessionAdmitted-SNModResponse, + id-PDUSessionNotAdmitted-SNModResponse, + id-admittedSplitSRB, + id-admittedSplitSRBrelease, + id-PDUSessionAdmittedModSNModConfirm, + id-PDUSessionReleasedSNModConfirm, + id-s-ng-RANnode-SecurityKey, + id-PDUSessionToBeModifiedSNModRequired, + id-S-NG-RANnodeUE-AMBR, + id-PDUSessionToBeReleasedSNModRequired, + id-target-S-NG-RANnodeID, + id-S-NSSAI, + id-MR-DC-ResourceCoordinationInfo, + id-RANPagingFailure, + id-UERadioCapabilityForPaging, + id-PDUSessionDataForwarding-SNModResponse, + id-Secondary-MN-Xn-U-TNLInfoatM, + id-NE-DC-TDM-Pattern, + id-InterfaceInstanceIndication, + id-S-NG-RANnode-Addition-Trigger-Ind, + id-SNTriggered, + id-DRBs-transferred-to-MN, + id-TNLConfigurationInfo, + id-MessageOversizeNotification, + id-NG-RANTraceID, + id-FastMCGRecoveryRRCTransfer-SN-to-MN, + id-FastMCGRecoveryRRCTransfer-MN-to-SN, + id-RequestedFastMCGRecoveryViaSRB3, + id-AvailableFastMCGRecoveryViaSRB3, + id-RequestedFastMCGRecoveryViaSRB3Release, + id-ReleaseFastMCGRecoveryViaSRB3, + id-CHOinformation-Req, + id-CHOinformation-Ack, + id-targetCellsToCancel, + id-requestedTargetCellGlobalID, + id-DAPSResponseInfo-List, + id-CHO-MRDC-Indicator, + id-MobilityInformation, + id-InitiatingCondition-FailureIndication, + id-UEHistoryInformationFromTheUE, + id-HandoverReportType, + id-HandoverCause, + id-SourceCellCGI, + id-TargetCellCGI, + id-ReEstablishmentCellCGI, + id-TargetCellinEUTRAN, + id-SourceCellCRNTI, + id-UERLFReportContainer, + id-NGRAN-Node1-Measurement-ID, + id-NGRAN-Node2-Measurement-ID, + id-RegistrationRequest, + id-ReportCharacteristics, + id-CellToReport, + id-ReportingPeriodicity, + id-CellMeasurementResult, + id-NG-RANnode1CellID, + id-NG-RANnode2CellID, + id-NG-RANnode1MobilityParameters, + id-NG-RANnode2ProposedMobilityParameters, + id-MobilityParametersModificationRange, + id-RACHReportInformation, + id-IABNodeIndication, + id-UERadioCapabilityID, + + + + maxnoofCellsinNG-RANnode, + maxnoofDRBs, + maxnoofPDUSessions, + maxnoofQoSFlows +FROM XnAP-Constants; + +-- ************************************************************** +-- +-- HANDOVER REQUEST +-- +-- ************************************************************** + +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, + ... +} + +HandoverRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}| + { ID id-targetCellGlobalID CRITICALITY reject TYPE Target-CGI PRESENCE mandatory}| + { ID id-GUAMI CRITICALITY reject TYPE GUAMI PRESENCE mandatory}| + { ID id-UEContextInfoHORequest CRITICALITY reject TYPE UEContextInfoHORequest PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-UEHistoryInformation CRITICALITY ignore TYPE UEHistoryInformation PRESENCE mandatory}| + { ID id-UEContextRefAtSN-HORequest CRITICALITY ignore TYPE UEContextRefAtSN-HORequest PRESENCE optional }| + { ID id-CHOinformation-Req CRITICALITY reject TYPE CHOinformation-Req PRESENCE optional }| +{ ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| +{ ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| +{ ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters + PRESENCE optional }| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| + { ID id-UEHistoryInformationFromTheUE CRITICALITY ignore TYPE UEHistoryInformationFromTheUE PRESENCE optional }| + { ID id-IABNodeIndication CRITICALITY reject TYPE IABNodeIndication PRESENCE optional}, + ... +} + +UEContextInfoHORequest ::= SEQUENCE { + ng-c-UE-reference AMF-UE-NGAP-ID, + cp-TNL-info-source CPTransportLayerInformation, + ueSecurityCapabilities UESecurityCapabilities, + securityInformation AS-SecurityInformation, + indexToRatFrequencySelectionPriority RFSP-Index OPTIONAL, + ue-AMBR UEAggregateMaximumBitRate, + pduSessionResourcesToBeSetup-List PDUSessionResourcesToBeSetup-List, + rrc-Context OCTET STRING, + locationReportingInformation LocationReportingInformation OPTIONAL, + mrl MobilityRestrictionList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEContextInfoHORequest-ExtIEs} } OPTIONAL, + ... +} + +UEContextInfoHORequest-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + { ID id-FiveGCMobilityRestrictionListContainer CRITICALITY ignore EXTENSION FiveGCMobilityRestrictionListContainer PRESENCE optional }| +{ ID id-NRUESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION NRUESidelinkAggregateMaximumBitRate PRESENCE optional}| +{ ID id-LTEUESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION LTEUESidelinkAggregateMaximumBitRate PRESENCE optional}| + { ID id-MDTPLMNList CRITICALITY reject EXTENSION MDTPLMNList PRESENCE optional}| + { ID id-UERadioCapabilityID CRITICALITY reject EXTENSION UERadioCapabilityID PRESENCE optional }, + ... +} + +UEContextRefAtSN-HORequest ::= SEQUENCE { + globalNG-RANNode-ID GlobalNG-RANNode-ID, + sN-NG-RANnodeUEXnAPID NG-RANnodeUEXnAPID, + iE-Extensions ProtocolExtensionContainer { {UEContextRefAtSN-HORequest-ExtIEs} } OPTIONAL, + ... +} + +UEContextRefAtSN-HORequest-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + +-- ************************************************************** +-- +-- HANDOVER REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, + ... +} + +HandoverRequestAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionResourcesAdmitted-List CRITICALITY ignore TYPE PDUSessionResourcesAdmitted-List PRESENCE mandatory}| + { ID id-PDUSessionResourcesNotAdmitted-List CRITICALITY ignore TYPE PDUSessionResourcesNotAdmitted-List PRESENCE optional }| + { ID id-Target2SourceNG-RANnodeTranspContainer CRITICALITY ignore TYPE OCTET STRING PRESENCE mandatory}| + { ID id-UEContextKeptIndicator CRITICALITY ignore TYPE UEContextKeptIndicator PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-DRBs-transferred-to-MN CRITICALITY ignore TYPE DRB-List PRESENCE optional }| + { ID id-DAPSResponseInfo-List CRITICALITY reject TYPE DAPSResponseInfo-List PRESENCE optional }| + { ID id-CHOinformation-Ack CRITICALITY reject TYPE CHOinformation-Ack PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- HANDOVER PREPARATION FAILURE +-- +-- ************************************************************** + +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, + ... +} + +HandoverPreparationFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE Target-CGI PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- SN STATUS TRANSFER +-- +-- ************************************************************** + +SNStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, + ... +} + +SNStatusTransfer-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-DRBsSubjectToStatusTransfer-List CRITICALITY ignore TYPE DRBsSubjectToStatusTransfer-List PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE +-- +-- ************************************************************** + +UEContextRelease ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, + ... +} + +UEContextRelease-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- HANDOVER CANCEL +-- +-- ************************************************************** + +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, + ... +} + +HandoverCancel-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-targetCellsToCancel CRITICALITY reject TYPE TargetCellList PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- HANDOVER SUCCESS +-- +-- ************************************************************** + +HandoverSuccess ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{HandoverSuccess-IEs}}, + ... +} + +HandoverSuccess-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE Target-CGI PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- CONDITIONAL HANDOVER CANCEL +-- +-- ************************************************************** + +ConditionalHandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ ConditionalHandoverCancel-IEs}}, + ... +} + +ConditionalHandoverCancel-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetCellsToCancel CRITICALITY reject TYPE TargetCellList PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- EARLY STATUS TRANSFER +-- +-- ************************************************************** + +EarlyStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ EarlyStatusTransfer-IEs}}, + ... +} + +EarlyStatusTransfer-IEs XNAP-PROTOCOL-IES ::= { + { ID id-sourceNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-targetNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-procedureStage CRITICALITY reject TYPE ProcedureStageChoice PRESENCE mandatory}, + ... +} + +ProcedureStageChoice ::= CHOICE { + first-dl-count FirstDLCount, + dl-discarding DLDiscarding, + choice-extension ProtocolIE-Single-Container { {ProcedureStageChoice-ExtIEs} } +} + +ProcedureStageChoice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +FirstDLCount ::= SEQUENCE { + dRBsSubjectToEarlyStatusTransfer DRBsSubjectToEarlyStatusTransfer-List, + iE-Extension ProtocolExtensionContainer { {FirstDLCount-ExtIEs} } OPTIONAL, + ... +} + +FirstDLCount-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DLDiscarding ::= SEQUENCE { + dRBsSubjectToDLDiscarding DRBsSubjectToDLDiscarding-List, + iE-Extension ProtocolExtensionContainer { {DLDiscarding-ExtIEs} } OPTIONAL, + ... +} + +DLDiscarding-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- RAN PAGING +-- +-- ************************************************************** + +RANPaging ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RANPaging-IEs}}, + ... +} + +RANPaging-IEs XNAP-PROTOCOL-IES ::= { + { ID id-UEIdentityIndexValue CRITICALITY reject TYPE UEIdentityIndexValue PRESENCE mandatory}| + { ID id-UERANPagingIdentity CRITICALITY ignore TYPE UERANPagingIdentity PRESENCE mandatory}| + { ID id-PagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE mandatory}| + { ID id-RANPagingArea CRITICALITY reject TYPE RANPagingArea PRESENCE mandatory}| + { ID id-PagingPriority CRITICALITY ignore TYPE PagingPriority PRESENCE optional }| + { ID id-AssistanceDataForRANPaging CRITICALITY ignore TYPE AssistanceDataForRANPaging PRESENCE optional }| + { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RETRIEVE UE CONTEXT REQUEST +-- +-- ************************************************************** + +RetrieveUEContextRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{RetrieveUEContextRequest-IEs}}, + ... +} + +RetrieveUEContextRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-newNG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-UEContextID CRITICALITY reject TYPE UEContextID PRESENCE mandatory}| + { ID id-MAC-I CRITICALITY reject TYPE MAC-I PRESENCE mandatory}| + { ID id-new-NG-RAN-Cell-Identity CRITICALITY reject TYPE NG-RAN-Cell-Identity PRESENCE mandatory}| + { ID id-RRCResumeCause CRITICALITY ignore TYPE RRCResumeCause PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RETRIEVE UE CONTEXT RESPONSE +-- +-- ************************************************************** + +RetrieveUEContextResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, + ... +} + +RetrieveUEContextResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-newNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-oldNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-GUAMI CRITICALITY reject TYPE GUAMI PRESENCE mandatory}| + { ID id-UEContextInfoRetrUECtxtResp CRITICALITY reject TYPE UEContextInfoRetrUECtxtResp PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-LocationReportingInformation CRITICALITY ignore TYPE LocationReportingInformation PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| +{ ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional}| +{ ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional}| + { ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters PRESENCE optional }| + { ID id-UEHistoryInformation CRITICALITY ignore TYPE UEHistoryInformation PRESENCE optional}| + { ID id-UEHistoryInformationFromTheUE CRITICALITY ignore TYPE UEHistoryInformationFromTheUE PRESENCE optional }| + { ID id-MDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RETRIEVE UE CONTEXT FAILURE +-- +-- ************************************************************** + +RetrieveUEContextFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, + ... +} + +RetrieveUEContextFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-newNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-OldtoNewNG-RANnodeResumeContainer CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- XN-U ADDRESS INDICATION +-- +-- ************************************************************** + +XnUAddressIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnUAddressIndication-IEs}}, + ... +} + +XnUAddressIndication-IEs XNAP-PROTOCOL-IES ::= { + { ID id-newNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-oldNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-XnUAddressInfoperPDUSession-List CRITICALITY reject TYPE XnUAddressInfoperPDUSession-List PRESENCE mandatory}| + { ID id-CHO-MRDC-Indicator CRITICALITY reject TYPE CHO-MRDC-Indicator PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE ADDITION REQUEST +-- +-- ************************************************************** + +SNodeAdditionRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeAdditionRequest-IEs}}, + ... +} + +SNodeAdditionRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory}| + { ID id-s-ng-RANnode-SecurityKey CRITICALITY reject TYPE S-NG-RANnode-SecurityKey PRESENCE mandatory}| + { ID id-S-NG-RANnodeUE-AMBR CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| + { ID id-selectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional }| + { ID id-MobilityRestrictionList CRITICALITY ignore TYPE MobilityRestrictionList PRESENCE optional }| + { ID id-indexToRatFrequSelectionPriority CRITICALITY reject TYPE RFSP-Index PRESENCE optional }| + { ID id-PDUSessionToBeAddedAddReq CRITICALITY reject TYPE PDUSessionToBeAddedAddReq PRESENCE mandatory}| + { ID id-MN-to-SN-Container CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional }| + { ID id-requestedSplitSRB CRITICALITY reject TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-PCellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE optional }| + { ID id-DesiredActNotificationLevel CRITICALITY ignore TYPE DesiredActNotificationLevel PRESENCE optional }| + { ID id-AvailableDRBIDs CRITICALITY reject TYPE DRB-List PRESENCE conditional} + -- The IE shall be present if there is at least one PDUSessionResourceSetupInfo-SNterminated included --| + { ID id-S-NG-RANnodeMaxIPDataRate-UL CRITICALITY reject TYPE BitRate PRESENCE optional }| + { ID id-S-NG-RANnodeMaxIPDataRate-DL CRITICALITY reject TYPE BitRate PRESENCE optional }| + { ID id-LocationInformationSNReporting CRITICALITY ignore TYPE LocationInformationSNReporting PRESENCE optional}| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional}| + { ID id-NE-DC-TDM-Pattern CRITICALITY ignore TYPE NE-DC-TDM-Pattern PRESENCE optional}| + { ID id-S-NG-RANnode-Addition-Trigger-Ind CRITICALITY reject TYPE S-NG-RANnode-Addition-Trigger-Ind PRESENCE optional}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| + { ID id-RequestedFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE RequestedFastMCGRecoveryViaSRB3 PRESENCE optional}| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional}, + ... +} + +PDUSessionToBeAddedAddReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionToBeAddedAddReq-Item + +PDUSessionToBeAddedAddReq-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + s-NSSAI S-NSSAI, + sN-PDUSessionAMBR PDUSessionAggregateMaximumBitRate OPTIONAL, + sn-terminated PDUSessionResourceSetupInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceSetupInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Setup Info – SN terminated IE +-- nor the PDU Session Resource Setup Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.1.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionToBeAddedAddReq-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionToBeAddedAddReq-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RequestedFastMCGRecoveryViaSRB3 ::= ENUMERATED {true, ...} + +-- ************************************************************** +-- +-- S-NODE ADDITION REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +SNodeAdditionRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeAdditionRequestAcknowledge-IEs}}, + ... +} + +SNodeAdditionRequestAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionAdmittedAddedAddReqAck CRITICALITY ignore TYPE PDUSessionAdmittedAddedAddReqAck PRESENCE mandatory}| + { ID id-PDUSessionNotAdmittedAddReqAck CRITICALITY ignore TYPE PDUSessionNotAdmittedAddReqAck PRESENCE optional }| + { ID id-SN-to-MN-Container CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}| + { ID id-admittedSplitSRB CRITICALITY reject TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRCConfigIndication PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-LocationInformationSN CRITICALITY ignore TYPE Target-CGI PRESENCE optional }| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }| + { ID id-AvailableFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE AvailableFastMCGRecoveryViaSRB3 PRESENCE optional }, + ... +} + +PDUSessionAdmittedAddedAddReqAck ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionAdmittedAddedAddReqAck-Item + +PDUSessionAdmittedAddedAddReqAck-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceSetupResponseInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceSetupResponseInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Setup Response Info – SN terminated IE +-- nor the PDU Session Resource Setup Response Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.1.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedAddedAddReqAck-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedAddedAddReqAck-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionNotAdmittedAddReqAck ::= SEQUENCE { + pduSessionResourcesNotAdmitted-SNterminated PDUSessionResourcesNotAdmitted-List OPTIONAL, + pduSessionResourcesNotAdmitted-MNterminated PDUSessionResourcesNotAdmitted-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionNotAdmittedAddReqAck-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionNotAdmittedAddReqAck-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +AvailableFastMCGRecoveryViaSRB3 ::= ENUMERATED {true, ...} + +-- ************************************************************** +-- +-- S-NODE ADDITION REQUEST REJECT +-- +-- ************************************************************** + +SNodeAdditionRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeAdditionRequestReject-IEs}}, + ... +} + +SNodeAdditionRequestReject-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE RECONFIGURATION COMPLETE +-- +-- ************************************************************** + +SNodeReconfigurationComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReconfigurationComplete-IEs}}, + ... +} + +SNodeReconfigurationComplete-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-ResponseInfo-ReconfCompl CRITICALITY ignore TYPE ResponseInfo-ReconfCompl PRESENCE mandatory}, + ... +} + +ResponseInfo-ReconfCompl ::= SEQUENCE { + responseType-ReconfComplete ResponseType-ReconfComplete, + iE-Extensions ProtocolExtensionContainer { {ResponseInfo-ReconfCompl-ExtIEs} } OPTIONAL, + ... +} + +ResponseInfo-ReconfCompl-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResponseType-ReconfComplete ::= CHOICE { + configuration-successfully-applied Configuration-successfully-applied, + configuration-rejected-by-M-NG-RANNode Configuration-rejected-by-M-NG-RANNode, + choice-extension ProtocolIE-Single-Container { {ResponseType-ReconfComplete-ExtIEs} } +} + +ResponseType-ReconfComplete-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +Configuration-successfully-applied ::= SEQUENCE { + m-NG-RANNode-to-S-NG-RANNode-Container OCTET STRING OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Configuration-successfully-applied-ExtIEs} } OPTIONAL, + ... +} + +Configuration-successfully-applied-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +Configuration-rejected-by-M-NG-RANNode ::= SEQUENCE { + cause Cause, + m-NG-RANNode-to-S-NG-RANNode-Container OCTET STRING OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Configuration-rejected-by-M-NG-RANNode-ExtIEs} } OPTIONAL, + ... +} + +Configuration-rejected-by-M-NG-RANNode-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE MODIFICATION REQUEST +-- +-- ************************************************************** + +SNodeModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationRequest-IEs}}, + ... +} + +SNodeModificationRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional }| + { ID id-selectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional }| + { ID id-MobilityRestrictionList CRITICALITY ignore TYPE MobilityRestrictionList PRESENCE optional }| + { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional }| + { ID id-UEContextInfo-SNModRequest CRITICALITY reject TYPE UEContextInfo-SNModRequest PRESENCE optional }| + { ID id-MN-to-SN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-requestedSplitSRB CRITICALITY ignore TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-requestedSplitSRBrelease CRITICALITY ignore TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-DesiredActNotificationLevel CRITICALITY ignore TYPE DesiredActNotificationLevel PRESENCE optional }| + { ID id-AdditionalDRBIDs CRITICALITY reject TYPE DRB-List PRESENCE optional }| + { ID id-S-NG-RANnodeMaxIPDataRate-UL CRITICALITY reject TYPE BitRate PRESENCE optional }| + { ID id-S-NG-RANnodeMaxIPDataRate-DL CRITICALITY reject TYPE BitRate PRESENCE optional }| + { ID id-LocationInformationSNReporting CRITICALITY ignore TYPE LocationInformationSNReporting PRESENCE optional}| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }| + { ID id-PCellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE optional }| + { ID id-NE-DC-TDM-Pattern CRITICALITY ignore TYPE NE-DC-TDM-Pattern PRESENCE optional}| + { ID id-RequestedFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE RequestedFastMCGRecoveryViaSRB3 PRESENCE optional }| + { ID id-RequestedFastMCGRecoveryViaSRB3Release CRITICALITY ignore TYPE RequestedFastMCGRecoveryViaSRB3Release PRESENCE optional }| + { ID id-SNTriggered CRITICALITY ignore TYPE SNTriggered PRESENCE optional}, + ... +} + +UEContextInfo-SNModRequest ::= SEQUENCE { + ueSecurityCapabilities UESecurityCapabilities OPTIONAL, + s-ng-RANnode-SecurityKey S-NG-RANnode-SecurityKey OPTIONAL, + s-ng-RANnodeUE-AMBR UEAggregateMaximumBitRate OPTIONAL, + indexToRatFrequencySelectionPriority RFSP-Index OPTIONAL, + lowerLayerPresenceStatusChange LowerLayerPresenceStatusChange OPTIONAL, + pduSessionResourceToBeAdded PDUSessionsToBeAdded-SNModRequest-List OPTIONAL, + pduSessionResourceToBeModified PDUSessionsToBeModified-SNModRequest-List OPTIONAL, + pduSessionResourceToBeReleased PDUSessionsToBeReleased-SNModRequest-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {UEContextInfo-SNModRequest-ExtIEs} } OPTIONAL, + ... +} + +UEContextInfo-SNModRequest-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionsToBeAdded-SNModRequest-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionsToBeAdded-SNModRequest-Item + +PDUSessionsToBeAdded-SNModRequest-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + s-NSSAI S-NSSAI, + sN-PDUSessionAMBR PDUSessionAggregateMaximumBitRate OPTIONAL, + sn-terminated PDUSessionResourceSetupInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceSetupInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Setup Info – SN terminated IE +-- nor the PDU Session Resource Setup Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.3.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionsToBeAdded-SNModRequest-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionsToBeAdded-SNModRequest-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionsToBeModified-SNModRequest-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionsToBeModified-SNModRequest-Item + +PDUSessionsToBeModified-SNModRequest-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sN-PDUSessionAMBR PDUSessionAggregateMaximumBitRate OPTIONAL, + sn-terminated PDUSessionResourceModificationInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceModificationInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Modification Info – SN terminated IE +-- nor the PDU Session Resource Modification Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.3.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionsToBeModified-SNModRequest-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionsToBeModified-SNModRequest-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-S-NSSAI CRITICALITY reject EXTENSION S-NSSAI PRESENCE optional}, + ... +} + +PDUSessionsToBeReleased-SNModRequest-List ::= SEQUENCE { + pdu-session-list PDUSession-List-withCause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionsToBeReleased-SNModRequest-List-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionsToBeReleased-SNModRequest-List-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RequestedFastMCGRecoveryViaSRB3Release ::= ENUMERATED {true, ...} + +-- ************************************************************** +-- +-- S-NODE MODIFICATION REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +SNodeModificationRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationRequestAcknowledge-IEs}}, + ... +} + +SNodeModificationRequestAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionAdmitted-SNModResponse CRITICALITY ignore TYPE PDUSessionAdmitted-SNModResponse PRESENCE optional }| + { ID id-PDUSessionNotAdmitted-SNModResponse CRITICALITY ignore TYPE PDUSessionNotAdmitted-SNModResponse PRESENCE optional }| + { ID id-SN-to-MN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-admittedSplitSRB CRITICALITY ignore TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-admittedSplitSRBrelease CRITICALITY ignore TYPE SplitSRBsTypes PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-LocationInformationSN CRITICALITY ignore TYPE Target-CGI PRESENCE optional }| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }| + { ID id-PDUSessionDataForwarding-SNModResponse CRITICALITY ignore TYPE PDUSessionDataForwarding-SNModResponse PRESENCE optional }| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRCConfigIndication PRESENCE optional }| + { ID id-AvailableFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE AvailableFastMCGRecoveryViaSRB3 PRESENCE optional }| + { ID id-ReleaseFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE ReleaseFastMCGRecoveryViaSRB3 PRESENCE optional }, + ... +} +PDUSessionAdmitted-SNModResponse ::= SEQUENCE { + pduSessionResourcesAdmittedToBeAdded PDUSessionAdmittedToBeAddedSNModResponse OPTIONAL, + pduSessionResourcesAdmittedToBeModified PDUSessionAdmittedToBeModifiedSNModResponse OPTIONAL, + pduSessionResourcesAdmittedToBeReleased PDUSessionAdmittedToBeReleasedSNModResponse OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmitted-SNModResponse-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmitted-SNModResponse-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionAdmittedToBeAddedSNModResponse ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionAdmittedToBeAddedSNModResponse-Item +PDUSessionAdmittedToBeAddedSNModResponse-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceSetupResponseInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceSetupResponseInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Setup Response Info – SN terminated IE +-- nor the PDU Session Resource Setup Response Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.3.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedToBeAddedSNModResponse-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedToBeAddedSNModResponse-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionAdmittedToBeModifiedSNModResponse::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionAdmittedToBeModifiedSNModResponse-Item +PDUSessionAdmittedToBeModifiedSNModResponse-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceModificationResponseInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceModificationResponseInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Modification Response Info – SN terminated IE +-- nor the PDU Session Resource Modification Response Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.3.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedToBeModifiedSNModResponse-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedToBeModifiedSNModResponse-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionAdmittedToBeReleasedSNModResponse ::= SEQUENCE { + sn-terminated PDUSession-List-withDataForwardingRequest OPTIONAL, + mn-terminated PDUSession-List-withCause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedToBeReleasedSNModResponse-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedToBeReleasedSNModResponse-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionNotAdmitted-SNModResponse ::= SEQUENCE { + pdu-Session-List PDUSession-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionNotAdmitted-SNModResponse-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionNotAdmitted-SNModResponse-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSessionDataForwarding-SNModResponse ::= SEQUENCE { + sn-terminated PDUSession-List-withDataForwardingRequest, + iE-Extensions ProtocolExtensionContainer { {PDUSessionDataForwarding-SNModResponse-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionDataForwarding-SNModResponse-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ReleaseFastMCGRecoveryViaSRB3 ::= ENUMERATED {true, ...} + + +-- ************************************************************** +-- +-- S-NODE MODIFICATION REQUEST REJECT +-- +-- ************************************************************** + +SNodeModificationRequestReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationRequestReject-IEs}}, + ... +} + +SNodeModificationRequestReject-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE MODIFICATION REQUIRED +-- +-- ************************************************************** + +SNodeModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationRequired-IEs}}, + ... +} + +SNodeModificationRequired-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional }| + { ID id-PDUSessionToBeModifiedSNModRequired CRITICALITY ignore TYPE PDUSessionToBeModifiedSNModRequired PRESENCE optional }| + { ID id-PDUSessionToBeReleasedSNModRequired CRITICALITY ignore TYPE PDUSessionToBeReleasedSNModRequired PRESENCE optional }| + { ID id-SN-to-MN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-SpareDRBIDs CRITICALITY ignore TYPE DRB-List PRESENCE optional }| + { ID id-RequiredNumberOfDRBIDs CRITICALITY ignore TYPE DRB-Number PRESENCE optional }| + { ID id-LocationInformationSN CRITICALITY ignore TYPE Target-CGI PRESENCE optional }| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }| + { ID id-RRCConfigIndication CRITICALITY reject TYPE RRCConfigIndication PRESENCE optional }| + { ID id-AvailableFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE AvailableFastMCGRecoveryViaSRB3 PRESENCE optional }| + { ID id-ReleaseFastMCGRecoveryViaSRB3 CRITICALITY ignore TYPE ReleaseFastMCGRecoveryViaSRB3 PRESENCE optional }, + ... +} +PDUSessionToBeModifiedSNModRequired::= SEQUENCE (SIZE (1.. maxnoofPDUSessions)) OF PDUSessionToBeModifiedSNModRequired-Item + +PDUSessionToBeModifiedSNModRequired-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceModRqdInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceModRqdInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Modification Required Info – SN terminated IE +-- nor the PDU Session Resource Modification Required Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.4.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionToBeModifiedSNModRequired-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionToBeModifiedSNModRequired-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionToBeReleasedSNModRequired ::= SEQUENCE { + sn-terminated PDUSession-List-withDataForwardingRequest OPTIONAL, + mn-terminated PDUSession-List-withCause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionToBeReleasedSNModRequired-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionToBeReleasedSNModRequired-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- S-NODE MODIFICATION CONFIRM +-- +-- ************************************************************** + +SNodeModificationConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationConfirm-IEs}}, + ... +} + +SNodeModificationConfirm-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionAdmittedModSNModConfirm CRITICALITY ignore TYPE PDUSessionAdmittedModSNModConfirm PRESENCE optional }| + { ID id-PDUSessionReleasedSNModConfirm CRITICALITY ignore TYPE PDUSessionReleasedSNModConfirm PRESENCE optional }| + { ID id-MN-to-SN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-AdditionalDRBIDs CRITICALITY reject TYPE DRB-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-MR-DC-ResourceCoordinationInfo CRITICALITY ignore TYPE MR-DC-ResourceCoordinationInfo PRESENCE optional }, + ... +} + +PDUSessionAdmittedModSNModConfirm ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionAdmittedModSNModConfirm-Item + +PDUSessionAdmittedModSNModConfirm-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceModConfirmInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceModConfirmInfo-MNterminated OPTIONAL, +-- NOTE: If neither the PDU Session Resource Modification Confirm Info – SN terminated IE +-- nor the PDU Session Resource Modification Confirm Info – MN terminated IE is present, +-- abnormal conditions as specified in clause 8.3.4.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedModSNModConfirm-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedModSNModConfirm-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSessionReleasedSNModConfirm ::= SEQUENCE { + sn-terminated PDUSession-List-withDataForwardingFromTarget OPTIONAL, + mn-terminated PDUSession-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionAdmittedToBeReleasedSNModConfirm-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAdmittedToBeReleasedSNModConfirm-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE MODIFICATION REFUSE +-- +-- ************************************************************** + +SNodeModificationRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeModificationRefuse-IEs}}, + ... +} + +SNodeModificationRefuse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MN-to-SN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE RELEASE REQUEST +-- +-- ************************************************************** + +SNodeReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReleaseRequest-IEs}}, + ... +} + +SNodeReleaseRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDUSessionToBeReleased-RelReq CRITICALITY ignore TYPE PDUSession-List-withCause PRESENCE mandatory}| + { ID id-UEContextKeptIndicator CRITICALITY ignore TYPE UEContextKeptIndicator PRESENCE optional }| + { ID id-MN-to-SN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }| + { ID id-DRBs-transferred-to-MN CRITICALITY ignore TYPE DRB-List PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE RELEASE REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +SNodeReleaseRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReleaseRequestAcknowledge-IEs}}, + ... +} + +SNodeReleaseRequestAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-PDUSessionToBeReleased-RelReqAck CRITICALITY ignore TYPE PDUSessionToBeReleasedList-RelReqAck PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +PDUSessionToBeReleasedList-RelReqAck ::= SEQUENCE { + pduSessionsToBeReleasedList-SNterminated PDUSession-List-withDataForwardingRequest OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionToBeReleasedList-RelReqAck-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionToBeReleasedList-RelReqAck-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- S-NODE RELEASE REJECT +-- +-- ************************************************************** + +SNodeReleaseReject ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReleaseReject-IEs}}, + ... +} + +SNodeReleaseReject-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- S-NODE RELEASE REQUIRED +-- +-- ************************************************************** + +SNodeReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReleaseRequired-IEs}}, + ... +} + +SNodeReleaseRequired-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionToBeReleasedList-RelRqd CRITICALITY ignore TYPE PDUSessionToBeReleasedList-RelRqd PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SN-to-MN-Container CRITICALITY ignore TYPE OCTET STRING PRESENCE optional }, + ... +} + +PDUSessionToBeReleasedList-RelRqd ::= SEQUENCE { + pduSessionsToBeReleasedList-SNterminated PDUSession-List-withDataForwardingRequest OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionToBeReleasedList-RelRqd-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionToBeReleasedList-RelRqd-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE RELEASE CONFIRM +-- +-- ************************************************************** + +SNodeReleaseConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeReleaseConfirm-IEs}}, + ... +} + +SNodeReleaseConfirm-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionReleasedList-RelConf CRITICALITY ignore TYPE PDUSessionReleasedList-RelConf PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +PDUSessionReleasedList-RelConf ::= SEQUENCE { + pduSessionsReleasedList-SNterminated PDUSession-List-withDataForwardingFromTarget OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionReleasedList-RelConf-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionReleasedList-RelConf-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE COUNTER CHECK REQUEST +-- +-- ************************************************************** + +SNodeCounterCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeCounterCheckRequest-IEs}}, + ... +} + +SNodeCounterCheckRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-BearersSubjectToCounterCheck CRITICALITY ignore TYPE BearersSubjectToCounterCheck-List PRESENCE mandatory}, + ... +} + +BearersSubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF BearersSubjectToCounterCheck-Item + +BearersSubjectToCounterCheck-Item ::= SEQUENCE { + drb-ID DRB-ID, + ul-count INTEGER (0.. 4294967295), + dl-count INTEGER (0.. 4294967295), + iE-Extensions ProtocolExtensionContainer { {BearersSubjectToCounterCheck-Item-ExtIEs} } OPTIONAL, + ... +} + +BearersSubjectToCounterCheck-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE CHANGE REQUIRED +-- +-- ************************************************************** + +SNodeChangeRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeChangeRequired-IEs}}, + ... +} + +SNodeChangeRequired-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-target-S-NG-RANnodeID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-PDUSession-SNChangeRequired-List CRITICALITY ignore TYPE PDUSession-SNChangeRequired-List PRESENCE optional }| + { ID id-SN-to-MN-Container CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}, + ... +} + +PDUSession-SNChangeRequired-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSession-SNChangeRequired-Item + +PDUSession-SNChangeRequired-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceChangeRequiredInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceChangeRequiredInfo-MNterminated OPTIONAL, +-- NOTE: If the PDU Session Resource Change Required Info – SN terminated IE is not present, +-- abnormal conditions as specified in clause 8.3.5.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSession-SNChangeRequired-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSession-SNChangeRequired-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE CHANGE CONFIRM +-- +-- ************************************************************** + +SNodeChangeConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeChangeConfirm-IEs}}, + ... +} + +SNodeChangeConfirm-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSession-SNChangeConfirm-List CRITICALITY ignore TYPE PDUSession-SNChangeConfirm-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} +PDUSession-SNChangeConfirm-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSession-SNChangeConfirm-Item + +PDUSession-SNChangeConfirm-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + sn-terminated PDUSessionResourceChangeConfirmInfo-SNterminated OPTIONAL, + mn-terminated PDUSessionResourceChangeConfirmInfo-MNterminated OPTIONAL, +-- NOTE: If the PDU Session Resource Change Confirm Info – SN terminated IE is not present, +-- abnormal conditions as specified in clause 8.3.5.4 apply. + iE-Extension ProtocolExtensionContainer { {PDUSession-SNChangeConfirm-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSession-SNChangeConfirm-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- S-NODE CHANGE REFUSE +-- +-- ************************************************************** + +SNodeChangeRefuse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SNodeChangeRefuse-IEs}}, + ... +} + +SNodeChangeRefuse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RRC TRANSFER +-- +-- ************************************************************** + +RRCTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RRCTransfer-IEs}}, + ... +} + +RRCTransfer-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-SplitSRB-RRCTransfer CRITICALITY reject TYPE SplitSRB-RRCTransfer PRESENCE optional }| + { ID id-UEReportRRCTransfer CRITICALITY reject TYPE UEReportRRCTransfer PRESENCE optional }| + { ID id-FastMCGRecoveryRRCTransfer-SN-to-MN CRITICALITY ignore TYPE FastMCGRecoveryRRCTransfer PRESENCE optional}| + { ID id-FastMCGRecoveryRRCTransfer-MN-to-SN CRITICALITY ignore TYPE FastMCGRecoveryRRCTransfer PRESENCE optional}, + ... +} + +SplitSRB-RRCTransfer ::= SEQUENCE { + rrcContainer OCTET STRING OPTIONAL, + srbType ENUMERATED {srb1, srb2, ...}, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-RRCTransfer-ExtIEs} } OPTIONAL, + ... +} + +SplitSRB-RRCTransfer-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEReportRRCTransfer::= SEQUENCE { + rrcContainer OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {UEReportRRCTransfer-ExtIEs} } OPTIONAL, + ... +} + +UEReportRRCTransfer-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +FastMCGRecoveryRRCTransfer::= SEQUENCE { + rrcContainer OCTET STRING, + iE-Extensions ProtocolExtensionContainer { { FastMCGRecoveryRRCTransfer-ExtIEs} } OPTIONAL, + ... +} + +FastMCGRecoveryRRCTransfer-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- NOTIFICATION CONTROL INDICATION +-- +-- ************************************************************** + +NotificationControlIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{NotificationControlIndication-IEs}}, + ... +} + +NotificationControlIndication-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionResourcesNotifyList CRITICALITY reject TYPE PDUSessionResourcesNotifyList PRESENCE optional }, + ... +} + +PDUSessionResourcesNotifyList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourcesNotify-Item + +PDUSessionResourcesNotify-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + qosFlowsNotificationContrIndInfo QoSFlowNotificationControlIndicationInfo, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourcesNotify-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourcesNotify-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- ACTIVITY NOTIFICATION +-- +-- ************************************************************** + +ActivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ActivityNotification-IEs}}, + ... +} + +ActivityNotification-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-UserPlaneTrafficActivityReport CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional }| + { ID id-PDUSessionResourcesActivityNotifyList CRITICALITY ignore TYPE PDUSessionResourcesActivityNotifyList PRESENCE optional }| + { ID id-RANPagingFailure CRITICALITY ignore TYPE RANPagingFailure PRESENCE optional }, + ... +} + +PDUSessionResourcesActivityNotifyList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourcesActivityNotify-Item + +PDUSessionResourcesActivityNotify-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + pduSessionLevelUPactivityreport UserPlaneTrafficActivityReport OPTIONAL, + qosFlowsActivityNotifyList QoSFlowsActivityNotifyList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourcesActivityNotify-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourcesActivityNotify-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +QoSFlowsActivityNotifyList ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF QoSFlowsActivityNotifyItem + +QoSFlowsActivityNotifyItem ::= SEQUENCE { + qosFlowIdentifier QoSFlowIdentifier, + pduSessionLevelUPactivityreport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsActivityNotifyItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- XN SETUP REQUEST +-- +-- ************************************************************** + +XnSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnSetupRequest-IEs}}, + ... +} + +XnSetupRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-GlobalNG-RAN-node-ID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE mandatory}| + { ID id-TAISupport-list CRITICALITY reject TYPE TAISupport-List PRESENCE mandatory}| + { ID id-AMF-Region-Information CRITICALITY reject TYPE AMF-Region-Information PRESENCE mandatory}| + { ID id-List-of-served-cells-NR CRITICALITY reject TYPE ServedCells-NR PRESENCE optional }| + { ID id-List-of-served-cells-E-UTRA CRITICALITY reject TYPE ServedCells-E-UTRA PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }| + { ID id-TNLConfigurationInfo CRITICALITY ignore TYPE TNLConfigurationInfo PRESENCE optional}| + { ID id-PartialListIndicator-NR CRITICALITY ignore TYPE PartialListIndicator PRESENCE optional }| + { ID id-CellAndCapacityAssistanceInfo-NR CRITICALITY ignore TYPE CellAndCapacityAssistanceInfo-NR PRESENCE optional }| + { ID id-PartialListIndicator-EUTRA CRITICALITY ignore TYPE PartialListIndicator PRESENCE optional }| + { ID id-CellAndCapacityAssistanceInfo-EUTRA CRITICALITY ignore TYPE CellAndCapacityAssistanceInfo-EUTRA PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- XN SETUP RESPONSE +-- +-- ************************************************************** + +XnSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnSetupResponse-IEs}}, + ... +} + +XnSetupResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-GlobalNG-RAN-node-ID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE mandatory}| + { ID id-TAISupport-list CRITICALITY reject TYPE TAISupport-List PRESENCE mandatory}| + { ID id-List-of-served-cells-NR CRITICALITY reject TYPE ServedCells-NR PRESENCE optional }| + { ID id-List-of-served-cells-E-UTRA CRITICALITY reject TYPE ServedCells-E-UTRA PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-AMF-Region-Information CRITICALITY reject TYPE AMF-Region-Information PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }| + { ID id-TNLConfigurationInfo CRITICALITY ignore TYPE TNLConfigurationInfo PRESENCE optional }| + { ID id-PartialListIndicator-NR CRITICALITY ignore TYPE PartialListIndicator PRESENCE optional }| + { ID id-CellAndCapacityAssistanceInfo-NR CRITICALITY ignore TYPE CellAndCapacityAssistanceInfo-NR PRESENCE optional }| + { ID id-PartialListIndicator-EUTRA CRITICALITY ignore TYPE PartialListIndicator PRESENCE optional }| + { ID id-CellAndCapacityAssistanceInfo-EUTRA CRITICALITY ignore TYPE CellAndCapacityAssistanceInfo-EUTRA PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- XN SETUP FAILURE +-- +-- ************************************************************** + +XnSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnSetupFailure-IEs}}, + ... +} + +XnSetupFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }| + { ID id-MessageOversizeNotification CRITICALITY ignore TYPE MessageOversizeNotification PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- NG-RAN NODE CONFIGURATION UPDATE +-- +-- ************************************************************** + +NGRANNodeConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ NGRANNodeConfigurationUpdate-IEs}}, + ... +} + +NGRANNodeConfigurationUpdate-IEs XNAP-PROTOCOL-IES ::= { + { ID id-TAISupport-list CRITICALITY reject TYPE TAISupport-List PRESENCE optional }| + { ID id-ConfigurationUpdateInitiatingNodeChoice CRITICALITY ignore TYPE ConfigurationUpdateInitiatingNodeChoice PRESENCE mandatory}| + { ID id-TNLA-To-Add-List CRITICALITY ignore TYPE TNLA-To-Add-List PRESENCE optional }| + { ID id-TNLA-To-Remove-List CRITICALITY ignore TYPE TNLA-To-Remove-List PRESENCE optional }| + { ID id-TNLA-To-Update-List CRITICALITY ignore TYPE TNLA-To-Update-List PRESENCE optional }| + { ID id-GlobalNG-RAN-node-ID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE optional }| + { ID id-AMF-Region-Information-To-Add CRITICALITY reject TYPE AMF-Region-Information PRESENCE optional }| + { ID id-AMF-Region-Information-To-Delete CRITICALITY reject TYPE AMF-Region-Information PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }| + { ID id-TNLConfigurationInfo CRITICALITY ignore TYPE TNLConfigurationInfo PRESENCE optional }, + ... +} + +ConfigurationUpdateInitiatingNodeChoice ::= CHOICE { + gNB ProtocolIE-Container { {ConfigurationUpdate-gNB} }, + ng-eNB ProtocolIE-Container { {ConfigurationUpdate-ng-eNB} }, + choice-extension ProtocolIE-Single-Container { {ServedCellsToUpdateInitiatingNodeChoice-ExtIEs} } +} + +ServedCellsToUpdateInitiatingNodeChoice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +ConfigurationUpdate-gNB XNAP-PROTOCOL-IES ::= { + { ID id-servedCellsToUpdate-NR CRITICALITY ignore TYPE ServedCellsToUpdate-NR PRESENCE optional }| + { ID id-cellAssistanceInfo-NR CRITICALITY ignore TYPE CellAssistanceInfo-NR PRESENCE optional }| + { ID id-cellAssistanceInfo-EUTRA CRITICALITY ignore TYPE CellAssistanceInfo-EUTRA PRESENCE optional }, + ... +} + + +ConfigurationUpdate-ng-eNB XNAP-PROTOCOL-IES ::= { + { ID id-servedCellsToUpdate-E-UTRA CRITICALITY ignore TYPE ServedCellsToUpdate-E-UTRA PRESENCE optional }| + { ID id-cellAssistanceInfo-NR CRITICALITY ignore TYPE CellAssistanceInfo-NR PRESENCE optional }| + { ID id-cellAssistanceInfo-EUTRA CRITICALITY ignore TYPE CellAssistanceInfo-EUTRA PRESENCE optional }, + ... +} + + + +-- ************************************************************** +-- +-- NG-RAN NODE CONFIGURATION UPDATE ACKNOWLEDGE +-- +-- ************************************************************** + +NGRANNodeConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ NGRANNodeConfigurationUpdateAcknowledge-IEs}}, + ... +} + +NGRANNodeConfigurationUpdateAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-RespondingNodeTypeConfigUpdateAck CRITICALITY ignore TYPE RespondingNodeTypeConfigUpdateAck PRESENCE mandatory}| + { ID id-TNLA-Setup-List CRITICALITY ignore TYPE TNLA-Setup-List PRESENCE optional }| + { ID id-TNLA-Failed-To-Setup-List CRITICALITY ignore TYPE TNLA-Failed-To-Setup-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }| + { ID id-TNLConfigurationInfo CRITICALITY ignore TYPE TNLConfigurationInfo PRESENCE optional }, + ... +} +RespondingNodeTypeConfigUpdateAck ::= CHOICE { + ng-eNB RespondingNodeTypeConfigUpdateAck-ng-eNB, + gNB RespondingNodeTypeConfigUpdateAck-gNB, + choice-extension ProtocolIE-Single-Container { {RespondingNodeTypeConfigUpdateAck-ExtIEs} } +} + +RespondingNodeTypeConfigUpdateAck-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +RespondingNodeTypeConfigUpdateAck-ng-eNB ::= SEQUENCE { + iE-Extension ProtocolExtensionContainer { {RespondingNodeTypeConfigUpdateAck-ng-eNB-ExtIEs} } OPTIONAL, + ... +} + +RespondingNodeTypeConfigUpdateAck-ng-eNB-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RespondingNodeTypeConfigUpdateAck-gNB ::= SEQUENCE { + served-NR-Cells ServedCells-NR OPTIONAL, + iE-Extension ProtocolExtensionContainer { {RespondingNodeTypeConfigUpdateAck-gNB-ExtIEs} } OPTIONAL, + ... +} + +RespondingNodeTypeConfigUpdateAck-gNB-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-PartialListIndicator-NR CRITICALITY ignore EXTENSION PartialListIndicator PRESENCE optional }| + { ID id-CellAndCapacityAssistanceInfo-NR CRITICALITY ignore EXTENSION CellAndCapacityAssistanceInfo-NR PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- NG-RAN NODE CONFIGURATION UPDATE FAILURE +-- +-- ************************************************************** + +NGRANNodeConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{NGRANNodeConfigurationUpdateFailure-IEs}}, + ... +} + +NGRANNodeConfigurationUpdateFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- E-UTRA NR CELL RESOURCE COORDINATION REQUEST +-- +-- ************************************************************** + +E-UTRA-NR-CellResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-UTRA-NR-CellResourceCoordinationRequest-IEs}}, + ... +} + +E-UTRA-NR-CellResourceCoordinationRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-initiatingNodeType-ResourceCoordRequest CRITICALITY reject TYPE InitiatingNodeType-ResourceCoordRequest PRESENCE mandatory}| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +InitiatingNodeType-ResourceCoordRequest ::= CHOICE { + ng-eNB ResourceCoordRequest-ng-eNB-initiated, + gNB ResourceCoordRequest-gNB-initiated, + choice-extension ProtocolIE-Single-Container { {InitiatingNodeType-ResourceCoordRequest-ExtIEs} } +} + +InitiatingNodeType-ResourceCoordRequest-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +ResourceCoordRequest-ng-eNB-initiated ::= SEQUENCE { + dataTrafficResourceIndication DataTrafficResourceIndication, + spectrumSharingGroupID SpectrumSharingGroupID, + listofE-UTRACells SEQUENCE (SIZE(1.. maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResourceCoordRequest-ng-eNB-initiated-ExtIEs} } OPTIONAL, + ... +} + +ResourceCoordRequest-ng-eNB-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ResourceCoordRequest-gNB-initiated ::= SEQUENCE { + dataTrafficResourceIndication DataTrafficResourceIndication, + listofE-UTRACells SEQUENCE (SIZE(1.. maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI OPTIONAL, + spectrumSharingGroupID SpectrumSharingGroupID, + listofNRCells SEQUENCE (SIZE(1.. maxnoofCellsinNG-RANnode)) OF NR-CGI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResourceCoordRequest-gNB-initiated-ExtIEs} } OPTIONAL, + ... +} + +ResourceCoordRequest-gNB-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- E-UTRA NR CELL RESOURCE COORDINATION RESPONSE +-- +-- ************************************************************** + +E-UTRA-NR-CellResourceCoordinationResponse::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-UTRA-NR-CellResourceCoordinationResponse-IEs}}, + ... +} + +E-UTRA-NR-CellResourceCoordinationResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-respondingNodeType-ResourceCoordResponse CRITICALITY reject TYPE RespondingNodeType-ResourceCoordResponse PRESENCE mandatory}| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +RespondingNodeType-ResourceCoordResponse ::= CHOICE { + ng-eNB ResourceCoordResponse-ng-eNB-initiated, + gNB ResourceCoordResponse-gNB-initiated, + choice-extension ProtocolIE-Single-Container { {RespondingNodeType-ResourceCoordResponse-ExtIEs} } +} + +RespondingNodeType-ResourceCoordResponse-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +ResourceCoordResponse-ng-eNB-initiated ::= SEQUENCE { + dataTrafficResourceIndication DataTrafficResourceIndication, + spectrumSharingGroupID SpectrumSharingGroupID, + listofE-UTRACells SEQUENCE (SIZE(1.. maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResourceCoordResponse-ng-eNB-initiated-ExtIEs} } OPTIONAL, + ... +} + +ResourceCoordResponse-ng-eNB-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ResourceCoordResponse-gNB-initiated ::= SEQUENCE { + dataTrafficResourceIndication DataTrafficResourceIndication, + spectrumSharingGroupID SpectrumSharingGroupID, + listofNRCells SEQUENCE (SIZE(1.. maxnoofCellsinNG-RANnode)) OF NR-CGI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResourceCoordResponse-gNB-initiated-ExtIEs} } OPTIONAL, + ... +} + +ResourceCoordResponse-gNB-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- ************************************************************** +-- +-- SECONDARY RAT DATA USAGE REPORT +-- +-- ************************************************************** + +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, + ... +} + +SecondaryRATDataUsageReport-IEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-PDUSessionResourceSecondaryRATUsageList CRITICALITY reject TYPE PDUSessionResourceSecondaryRATUsageList PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- XN REMOVAL REQUEST +-- +-- ************************************************************** + +XnRemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnRemovalRequest-IEs}}, + ... +} + +XnRemovalRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-GlobalNG-RAN-node-ID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE mandatory}| + { ID id-XnRemovalThreshold CRITICALITY reject TYPE XnBenefitValue PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- XN REMOVAL RESPONSE +-- +-- ************************************************************** + +XnRemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnRemovalResponse-IEs}}, + ... +} + +XnRemovalResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-GlobalNG-RAN-node-ID CRITICALITY reject TYPE GlobalNG-RANNode-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- XN REMOVAL FAILURE +-- +-- ************************************************************** + +XnRemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ XnRemovalFailure-IEs}}, + ... +} + +XnRemovalFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- CELL ACTIVATION REQUEST +-- +-- ************************************************************** + +CellActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ CellActivationRequest-IEs}}, + ... +} + +CellActivationRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}| + { ID id-ActivationIDforCellActivation CRITICALITY reject TYPE ActivationIDforCellActivation PRESENCE mandatory}| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +ServedCellsToActivate ::= CHOICE { + nr-cells SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF NR-CGI, + e-utra-cells SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI, + choice-extension ProtocolIE-Single-Container { {ServedCellsToActivate-ExtIEs} } +} + +ServedCellsToActivate-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- CELL ACTIVATION RESPONSE +-- +-- ************************************************************** + +CellActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, + ... +} + +CellActivationResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-ActivatedServedCells CRITICALITY reject TYPE ActivatedServedCells PRESENCE mandatory}| + { ID id-ActivationIDforCellActivation CRITICALITY reject TYPE ActivationIDforCellActivation PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +ActivatedServedCells ::= CHOICE { + nr-cells SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF NR-CGI, + e-utra-cells SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI, + choice-extension ProtocolIE-Single-Container { {ActivatedServedCells-ExtIEs} } +} + +ActivatedServedCells-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- CELL ACTIVATION FAILURE +-- +-- ************************************************************** + +CellActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, + ... +} + +CellActivationFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-ActivationIDforCellActivation CRITICALITY reject TYPE ActivationIDforCellActivation PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RESET REQUEST +-- +-- ************************************************************** + +ResetRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, + ... +} + +ResetRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-ResetRequestTypeInfo CRITICALITY reject TYPE ResetRequestTypeInfo PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RESET RESPONSE +-- +-- ************************************************************** + +ResetResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, + ... +} + +ResetResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-ResetResponseTypeInfo CRITICALITY reject TYPE ResetResponseTypeInfo PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- ERROR INDICATION +-- +-- ************************************************************** + +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, + ... +} + +ErrorIndication-IEs XNAP-PROTOCOL-IES ::= { + { ID id-oldNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-newNG-RANnodeUEXnAPID CRITICALITY ignore TYPE NG-RANnodeUEXnAPID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-InterfaceInstanceIndication CRITICALITY reject TYPE InterfaceInstanceIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PRIVATE MESSAGE +-- +-- ************************************************************** + +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} + +PrivateMessage-IEs XNAP-PRIVATE-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- TRACE START +-- +-- ************************************************************** + +TraceStart ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {TraceStartIEs} }, + ... +} + +TraceStartIEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- DEACTIVATE TRACE +-- +-- ************************************************************** + +DeactivateTrace ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DeactivateTraceIEs} }, + ... +} + +DeactivateTraceIEs XNAP-PROTOCOL-IES ::= { + { ID id-M-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-S-NG-RANnodeUEXnAPID CRITICALITY reject TYPE NG-RANnodeUEXnAPID PRESENCE mandatory}| + { ID id-NG-RANTraceID CRITICALITY ignore TYPE NG-RANTraceID PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- FAILURE INDICATION +-- +-- ************************************************************** + +FailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{FailureIndication-IEs}}, + ... +} + +FailureIndication-IEs XNAP-PROTOCOL-IES ::= { + { ID id-InitiatingCondition-FailureIndication CRITICALITY reject TYPE InitiatingCondition-FailureIndication PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- HANDOVER REPORT +-- +-- ************************************************************** + +HandoverReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ HandoverReport-IEs}}, + ... +} + +HandoverReport-IEs XNAP-PROTOCOL-IES ::= { + { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| + { ID id-HandoverCause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-SourceCellCGI CRITICALITY ignore TYPE GlobalNG-RANCell-ID PRESENCE mandatory }| + { ID id-TargetCellCGI CRITICALITY ignore TYPE GlobalNG-RANCell-ID PRESENCE mandatory }| + { ID id-ReEstablishmentCellCGI CRITICALITY ignore TYPE GlobalNG-RANCell-ID PRESENCE conditional }| +-- This IE shall be present if the Handover Report Type IE is set to the value "HO to wrong cell" + { ID id-TargetCellinEUTRAN CRITICALITY ignore TYPE TargetCellinEUTRAN PRESENCE conditional }| +-- This IE shall be present if the Handover Report Type IE is set to the value "Inter-system ping-pong" + { ID id-SourceCellCRNTI CRITICALITY ignore TYPE C-RNTI PRESENCE optional }| + { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional }| + { ID id-UERLFReportContainer CRITICALITY ignore TYPE UERLFReportContainer PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RESOURCE STATUS REQUEST +-- +-- ************************************************************** + +ResourceStatusRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, + ... +} + +ResourceStatusRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NGRAN-Node1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-NGRAN-Node2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}| +-- This IE shall be present if the Registration Request IE is set to the value "stop", "partial stop" or "add". + { ID id-RegistrationRequest CRITICALITY reject TYPE RegistrationRequest PRESENCE mandatory}| + { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE conditional}| +-- This IE shall be present if the Registration Request IE is set to the value "start". + { ID id-CellToReport CRITICALITY ignore TYPE CellToReport PRESENCE optional}| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- RESOURCE STATUS RESPONSE +-- +-- ************************************************************** + +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, + ... +} + +ResourceStatusResponse-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NGRAN-Node1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-NGRAN-Node2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- RESOURCE STATUS FAILURE +-- +-- ************************************************************** + +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, + ... +} + +ResourceStatusFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NGRAN-Node1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-NGRAN-Node2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- RESOURCE STATUS UPDATE +-- +-- ************************************************************** + +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, + ... +} + +ResourceStatusUpdate-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NGRAN-Node1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| + { ID id-NGRAN-Node2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| +{ ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- MOBILITY CHANGE REQUEST +-- +-- ************************************************************** + +MobilityChangeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, + ... +} + +MobilityChangeRequest-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NG-RANnode1CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-NG-RANnode2CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-NG-RANnode1MobilityParameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-NG-RANnode2ProposedMobilityParameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- MOBILITY CHANGE ACKNOWLEDGE +-- +-- ************************************************************** + +MobilityChangeAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, + ... +} + +MobilityChangeAcknowledge-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NG-RANnode1CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-NG-RANnode2CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- MOBILITY CHANGE FAILURE +-- +-- ************************************************************** + +MobilityChangeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, + ... +} + +MobilityChangeFailure-IEs XNAP-PROTOCOL-IES ::= { + { ID id-NG-RANnode1CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-NG-RANnode2CellID CRITICALITY reject TYPE GlobalNG-RANCell-ID PRESENCE mandatory}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| + { ID id-MobilityParametersModificationRange CRITICALITY reject TYPE MobilityParametersModificationRange PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- Access And Mobility Indication +-- +-- ************************************************************** + +AccessAndMobilityIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ AccessAndMobilityIndication-IEs}}, + ... +} +AccessAndMobilityIndication-IEs XNAP-PROTOCOL-IES ::= { + { ID id-RACHReportInformation CRITICALITY ignore TYPE RACHReportInformation PRESENCE optional}, + ... +} + + +END + + +-- ************************************************************** +-- +-- Information Element Definitions +-- +-- ************************************************************** + +XnAP-IEs { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) xnap (2) version1 (1) xnap-IEs (2) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + + + id-CNTypeRestrictionsForEquivalent, + id-CNTypeRestrictionsForServing, + id-Additional-UL-NG-U-TNLatUPF-List, + id-AlternativeQoSParaSetList, + id-CurrentQoSParaSetIndex, + id-DefaultDRB-Allowed, + id-DLCarrierList, + id-EndpointIPAddressAndPort, + id-ExtendedTAISliceSupportList, + id-FiveGCMobilityRestrictionListContainer, + id-SecondarydataForwardingInfoFromTarget-List, + id-LastE-UTRANPLMNIdentity, + id-IntendedTDD-DL-ULConfiguration-NR, + id-MaxIPrate-DL, + id-SecurityResult, + id-OldQoSFlowMap-ULendmarkerexpected, + id-PDUSessionCommonNetworkInstance, + id-BPLMN-ID-Info-EUTRA, + id-BPLMN-ID-Info-NR, + id-DRBsNotAdmittedSetupModifyList, + id-Secondary-MN-Xn-U-TNLInfoatM, + id-ULForwardingProposal, + id-DRB-IDs-takenintouse, + id-SplitSessionIndicator, + id-NonGBRResources-Offered, + id-MDT-Configuration, + id-TraceCollectionEntityURI, + id-NPN-Broadcast-Information, + id-NPNPagingAssistanceInformation, + id-NPNMobilityInformation, + id-NPN-Support, + id-LTEUESidelinkAggregateMaximumBitRate, + id-NRUESidelinkAggregateMaximumBitRate, + id-ExtendedRATRestrictionInformation, + id-QoSMonitoringRequest, + id-DAPSRequestInfo, + id-OffsetOfNbiotChannelNumberToDL-EARFCN, + id-OffsetOfNbiotChannelNumberToUL-EARFCN, + id-NBIoT-UL-DL-AlignmentOffset, + id-TDDULDLConfigurationCommonNR, + id-CarrierList, + id-ULCarrierList, + id-FrequencyShift7p5khz, + id-SSB-PositionsInBurst, + id-NRCellPRACHConfig, + id-Redundant-UL-NG-U-TNLatUPF, + id-Redundant-DL-NG-U-TNLatNG-RAN, + id-CNPacketDelayBudgetDownlink, + id-CNPacketDelayBudgetUplink, + id-ExtendedPacketDelayBudget, + id-Additional-Redundant-UL-NG-U-TNLatUPF-List, + id-RedundantCommonNetworkInstance, + id-TSCTrafficCharacteristics, + id-RedundantQoSFlowIndicator, + id-Additional-PDCP-Duplication-TNL-List, + id-RedundantPDUSessionInformation, + id-UsedRSNInformation, + id-RLCDuplicationInformation, + id-CSI-RSTransmissionIndication, + id-UERadioCapabilityID, + maxEARFCN, + maxnoofAllowedAreas, + maxnoofAMFRegions, + maxnoofAoIs, + maxnoofBPLMNs, + maxnoofCAGs, + maxnoofCAGsperPLMN, + maxnoofCellsinAoI, + maxnoofCellsinNG-RANnode, + maxnoofCellsinRNA, + maxnoofCellsinUEHistoryInfo, + maxnoofCellsUEMovingTrajectory, + maxnoofDRBs, + maxnoofEPLMNs, + maxnoofEPLMNsplus1, + maxnoofEUTRABands, + maxnoofEUTRABPLMNs, + maxnoofForbiddenTACs, + maxnoofMBSFNEUTRA, + maxnoofMultiConnectivityMinusOne, + maxnoofNeighbours, + maxnoofNIDs, + maxnoofNRCellBands, + maxnoofPDUSessions, + maxnoofPLMNs, + maxnoofProtectedResourcePatterns, + maxnoofQoSFlows, + maxnoofQoSParaSets, + maxnoofRANAreaCodes, + maxnoofRANAreasinRNA, + maxnoofSCellGroups, + maxnoofSCellGroupsplus1, + maxnoofSliceItems, + maxnoofExtSliceItems, + maxnoofSNPNIDs, + maxnoofsupportedTACs, + maxnoofsupportedPLMNs, + maxnoofTAI, + maxnoofTAIsinAoI, + maxnoofTNLAssociations, + maxnoofUEContexts, + maxNRARFCN, + maxNrOfErrors, + maxnoofRANNodesinAoI, + maxnooftimeperiods, + maxnoofslots, + maxnoofExtTLAs, + maxnoofGTPTLAs, + maxnoofCHOcells, + maxnoofPC5QoSFlows, + maxnoofSSBAreas, + maxnoofNRSCSs, + maxnoofPhysicalResourceBlocks, + maxnoofRACHReports, + maxnoofAdditionalPDCPDuplicationTNL, + maxnoofRLCDuplicationstate, + maxnoofBluetoothName, + maxnoofCellIDforMDT, + maxnoofMDTPLMNs, + maxnoofTAforMDT, + maxnoofWLANName, + maxnoofSensorName, + maxnoofNeighPCIforMDT, + maxnoofFreqforMDT + +FROM XnAP-Constants + + Criticality, + ProcedureCode, + ProtocolIE-ID, + TriggeringMessage +FROM XnAP-CommonDataTypes + + ProtocolExtensionContainer{}, + ProtocolIE-Single-Container{}, + + XNAP-PROTOCOL-EXTENSION, + XNAP-PROTOCOL-IES +FROM XnAP-Containers; + + +-- A + +Additional-PDCP-Duplication-TNL-List ::= SEQUENCE (SIZE(1..maxnoofAdditionalPDCPDuplicationTNL)) OF Additional-PDCP-Duplication-TNL-Item +Additional-PDCP-Duplication-TNL-Item ::= SEQUENCE { + additional-PDCP-Duplication-UP-TNL-Information UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { Additional-PDCP-Duplication-TNL-ExtIEs} } OPTIONAL, + ... +} +Additional-PDCP-Duplication-TNL-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +Additional-UL-NG-U-TNLatUPF-Item ::= SEQUENCE { + additional-UL-NG-U-TNLatUPF UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { Additional-UL-NG-U-TNLatUPF-Item-ExtIEs} } OPTIONAL, + ... +} + +Additional-UL-NG-U-TNLatUPF-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +Additional-UL-NG-U-TNLatUPF-List ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF Additional-UL-NG-U-TNLatUPF-Item + +ActivationIDforCellActivation ::= INTEGER (0..255) + + +AllocationandRetentionPriority ::= SEQUENCE { + priorityLevel INTEGER (0..15,...), + pre-emption-capability ENUMERATED {shall-not-trigger-preemptdatDion, may-trigger-preemption, ...}, + pre-emption-vulnerability ENUMERATED {not-preemptable, preemptable, ...}, + iE-Extensions ProtocolExtensionContainer { {AllocationandRetentionPriority-ExtIEs} } OPTIONAL, + ... +} + +AllocationandRetentionPriority-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ActivationSFN ::= INTEGER (0..1023) + +AllowedCAG-ID-List-perPLMN ::= SEQUENCE (SIZE(1..maxnoofCAGsperPLMN)) OF CAG-Identifier + +AllowedPNI-NPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofEPLMNsplus1)) OF AllowedPNI-NPN-ID-Item + +AllowedPNI-NPN-ID-Item ::= SEQUENCE { + plmn-id PLMN-Identity, + pni-npn-restricted-information PNI-NPN-Restricted-Information, + allowed-CAG-id-list-per-plmn AllowedCAG-ID-List-perPLMN, + iE-Extensions ProtocolExtensionContainer { {AllowedPNI-NPN-ID-Item-ExtIEs} } OPTIONAL, + ... +} + +AllowedPNI-NPN-ID-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +AlternativeQoSParaSetList ::= SEQUENCE (SIZE(1..maxnoofQoSParaSets)) OF AlternativeQoSParaSetItem + +AlternativeQoSParaSetItem ::= SEQUENCE { + alternativeQoSParaSetIndex QoSParaSetIndex, + guaranteedFlowBitRateDL BitRate OPTIONAL, + guaranteedFlowBitRateUL BitRate OPTIONAL, + packetDelayBudget PacketDelayBudget OPTIONAL, + packetErrorRate PacketErrorRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AlternativeQoSParaSetItem-ExtIEs} } OPTIONAL, + ... +} + +AlternativeQoSParaSetItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +AMF-Region-Information ::= SEQUENCE (SIZE (1..maxnoofAMFRegions)) OF GlobalAMF-Region-Information + +GlobalAMF-Region-Information ::= SEQUENCE { + plmn-ID PLMN-Identity, + amf-region-id BIT STRING (SIZE (8)), + iE-Extensions ProtocolExtensionContainer { {GlobalAMF-Region-Information-ExtIEs} } OPTIONAL, + ... +} + +GlobalAMF-Region-Information-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +AMF-UE-NGAP-ID ::= INTEGER (0..1099511627775) + + +AreaOfInterestInformation ::= SEQUENCE (SIZE(1..maxnoofAoIs)) OF AreaOfInterest-Item + +AreaOfInterest-Item ::= SEQUENCE { + listOfTAIsinAoI ListOfTAIsinAoI OPTIONAL, + listOfCellsinAoI ListOfCells OPTIONAL, + listOfRANNodesinAoI ListOfRANNodesinAoI OPTIONAL, + requestReferenceID RequestReferenceID, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterest-Item-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterest-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +AreaScopeOfMDT-NR ::= CHOICE { + cellBased CellBasedMDT-NR, + tABased TABasedMDT, + tAIBased TAIBasedMDT, + ... +} +AreaScopeOfMDT-EUTRA ::= CHOICE { + cellBased CellBasedMDT-EUTRA, + tABased TABasedMDT, + tAIBased TAIBasedMDT, + ... +} + + +AreaScopeOfNeighCellsList ::= SEQUENCE (SIZE(1..maxnoofFreqforMDT)) OF AreaScopeOfNeighCellsItem +AreaScopeOfNeighCellsItem ::= SEQUENCE { + nrFrequencyInfo NRFrequencyInfo, + pciListForMDT PCIListForMDT OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { AreaScopeOfNeighCellsItem-ExtIEs} } OPTIONAL, + ... +} + +AreaScopeOfNeighCellsItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +AS-SecurityInformation ::= SEQUENCE { + key-NG-RAN-Star BIT STRING (SIZE(256)), + ncc INTEGER (0..7), + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} + +AS-SecurityInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +AssistanceDataForRANPaging ::= SEQUENCE { + ran-paging-attempt-info RANPagingAttemptInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AssistanceDataForRANPaging-ExtIEs} } OPTIONAL, + ... +} + +AssistanceDataForRANPaging-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-NPNPagingAssistanceInformation CRITICALITY ignore EXTENSION NPNPagingAssistanceInformation PRESENCE optional }, + ... +} + + +AvailableCapacity ::= INTEGER (1.. 100,...) + + +AvailableRRCConnectionCapacityValue ::= INTEGER (0..100) + + +AveragingWindow ::= INTEGER (0..4095, ...) + + +-- B + +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BluetoothMeasurementConfiguration-ExtIEs } } OPTIONAL, + ... +} + +BluetoothMeasurementConfiguration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName + +BluetoothMeasConfig::= ENUMERATED {setup,...} + +BluetoothName ::= OCTET STRING (SIZE (1..248)) + + +BPLMN-ID-Info-EUTRA ::= SEQUENCE (SIZE(1..maxnoofEUTRABPLMNs)) OF BPLMN-ID-Info-EUTRA-Item + +BPLMN-ID-Info-EUTRA-Item ::= SEQUENCE { + broadcastPLMNs BroadcastEUTRAPLMNs, + tac TAC, + e-utraCI E-UTRA-Cell-Identity, + ranac RANAC OPTIONAL, + iE-Extension ProtocolExtensionContainer { {BPLMN-ID-Info-EUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +BPLMN-ID-Info-EUTRA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +BPLMN-ID-Info-NR ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF BPLMN-ID-Info-NR-Item + +BPLMN-ID-Info-NR-Item ::= SEQUENCE { + broadcastPLMNs BroadcastPLMNs, + tac TAC, + nr-CI NR-Cell-Identity, + ranac RANAC OPTIONAL, + iE-Extension ProtocolExtensionContainer { {BPLMN-ID-Info-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +BPLMN-ID-Info-NR-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-NPN-Broadcast-Information CRITICALITY reject EXTENSION NPN-Broadcast-Information PRESENCE optional }, + ... +} + +BitRate ::= INTEGER (0..4000000000000,...) + + + +BroadcastCAG-Identifier-List ::= SEQUENCE (SIZE(1..maxnoofCAGs)) OF BroadcastCAG-Identifier-Item + +BroadcastCAG-Identifier-Item ::= SEQUENCE { + cag-Identifier CAG-Identifier, + iE-Extension ProtocolExtensionContainer { {BroadcastCAG-Identifier-Item-ExtIEs} } OPTIONAL, + ... +} + +BroadcastCAG-Identifier-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +BroadcastNID-List ::= SEQUENCE (SIZE(1..maxnoofNIDs)) OF BroadcastNID-Item + +BroadcastNID-Item ::= SEQUENCE { + nid NID, + iE-Extension ProtocolExtensionContainer { {BroadcastNID-Item-ExtIEs} } OPTIONAL, + ... +} + +BroadcastNID-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +BroadcastPLMNs ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity + +BroadcastEUTRAPLMNs ::= SEQUENCE (SIZE(1..maxnoofEUTRABPLMNs)) OF PLMN-Identity + + +BroadcastPLMNinTAISupport-Item ::= SEQUENCE { + plmn-id PLMN-Identity, + tAISliceSupport-List SliceSupport-List, + iE-Extension ProtocolExtensionContainer { {BroadcastPLMNinTAISupport-Item-ExtIEs} } OPTIONAL, + ... +} + +BroadcastPLMNinTAISupport-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-NPN-Support CRITICALITY reject EXTENSION NPN-Support PRESENCE optional}| + { ID id-ExtendedTAISliceSupportList CRITICALITY reject EXTENSION ExtendedSliceSupportList PRESENCE optional}, + ... +} + + +BroadcastPNI-NPN-ID-Information ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF BroadcastPNI-NPN-ID-Information-Item + +BroadcastPNI-NPN-ID-Information-Item ::= SEQUENCE { + plmn-id PLMN-Identity, + broadcastCAG-Identifier-List BroadcastCAG-Identifier-List, + iE-Extension ProtocolExtensionContainer { {BroadcastPNI-NPN-ID-Information-Item-ExtIEs} } OPTIONAL, + ... +} + + +BroadcastPNI-NPN-ID-Information-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +BroadcastSNPNID-List ::= SEQUENCE (SIZE(1..maxnoofSNPNIDs)) OF BroadcastSNPNID + + +BroadcastSNPNID ::= SEQUENCE { + plmn-id PLMN-Identity, + broadcastNID-List BroadcastNID-List, + iE-Extension ProtocolExtensionContainer { {BroadcastSNPNID-ExtIEs} } OPTIONAL, + ... +} + +BroadcastSNPNID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- C + + +CAG-Identifier ::= BIT STRING (SIZE (32)) + + +CapacityValue ::= INTEGER (0..100) + + + +CapacityValueInfo ::= SEQUENCE { + capacityValue CapacityValue, + ssbAreaCapacityValueList SSBAreaCapacityValue-List, +iE-Extension ProtocolExtensionContainer { {CapacityValueInfo-ExtIEs} } OPTIONAL, + ... +} + +CapacityValueInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +Cause ::= CHOICE { + radioNetwork CauseRadioNetworkLayer, + transport CauseTransportLayer, + protocol CauseProtocol, + misc CauseMisc, + choice-extension ProtocolIE-Single-Container { {Cause-ExtIEs} } +} + +Cause-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +CauseRadioNetworkLayer ::= ENUMERATED { + cell-not-available, + handover-desirable-for-radio-reasons, + handover-target-not-allowed, + invalid-AMF-Set-ID, + no-radio-resources-available-in-target-cell, + partial-handover, + reduce-load-in-serving-cell, + resource-optimisation-handover, + time-critical-handover, + tXnRELOCoverall-expiry, + tXnRELOCprep-expiry, + unknown-GUAMI-ID, + unknown-local-NG-RAN-node-UE-XnAP-ID, + inconsistent-remote-NG-RAN-node-UE-XnAP-ID, + encryption-and-or-integrity-protection-algorithms-not-supported, + protection-algorithms-not-supported, + multiple-PDU-session-ID-instances, + unknown-PDU-session-ID, + unknown-QoS-Flow-ID, + multiple-QoS-Flow-ID-instances, + switch-off-ongoing, + not-supported-5QI-value, + tXnDCoverall-expiry, + tXnDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-supported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + up-integrity-protection-not-possible, + up-confidentiality-protection-not-possible, + resources-not-available-for-the-slice-s, + ue-max-IP-data-rate-reason, + cP-integrity-protection-failure, + uP-integrity-protection-failure, + slice-not-supported-by-NG-RAN, + mN-Mobility, + sN-Mobility, + count-reaches-max-value, + unknown-old-NG-RAN-node-UE-XnAP-ID, + pDCP-Overload, + drb-id-not-available, + unspecified, + ..., + ue-context-id-not-known, + non-relocation-of-context, + cho-cpc-resources-tobechanged, + rSN-not-available-for-the-UP, + npn-access-denied +} + +CauseTransportLayer ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} + +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + abstract-syntax-error-falsely-constructed-message, + unspecified, + ... +} + +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + o-and-M-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} + +CellAssistanceInfo-NR ::= CHOICE { + limitedNR-List SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF NR-CGI, + full-List ENUMERATED {all-served-cells-NR, ...}, + choice-extension ProtocolIE-Single-Container { {CellAssistanceInfo-NR-ExtIEs} } +} + +CellAssistanceInfo-NR-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +CellAndCapacityAssistanceInfo-NR ::= SEQUENCE { + maximumCellListSize MaximumCellListSize OPTIONAL, + cellAssistanceInfo-NR CellAssistanceInfo-NR OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CellAndCapacityAssistanceInfo-NR-ExtIEs} } OPTIONAL, + ... +} + + +CellAndCapacityAssistanceInfo-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellAndCapacityAssistanceInfo-EUTRA ::= SEQUENCE { + maximumCellListSize MaximumCellListSize OPTIONAL, + cellAssistanceInfo-EUTRA CellAssistanceInfo-EUTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CellAndCapacityAssistanceInfo-EUTRA-ExtIEs} } OPTIONAL, + ... +} + + +CellAndCapacityAssistanceInfo-EUTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +CellAssistanceInfo-EUTRA ::= CHOICE { + limitedEUTRA-List SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI, + full-List ENUMERATED {all-served-cells-NR, ...}, + choice-extension ProtocolIE-Single-Container { {CellAssistanceInfo-EUTRA-ExtIEs} } +} + +CellAssistanceInfo-EUTRA-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +CellBasedMDT-NR::= SEQUENCE { + cellIdListforMDT-NR CellIdListforMDT-NR, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-NR-ExtIEs} } OPTIONAL, + ... +} + +CellBasedMDT-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIdListforMDT-NR ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF NR-CGI + +CellBasedMDT-EUTRA::= SEQUENCE { + cellIdListforMDT-EUTRA CellIdListforMDT-EUTRA, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-EUTRA-ExtIEs} } OPTIONAL, + ... +} + +CellBasedMDT-EUTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} +CellIdListforMDT-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF E-UTRA-CGI + + +CellCapacityClassValue ::= INTEGER (1..100,...) + + +CellGroupID ::= INTEGER (0..maxnoofSCellGroups) + + +CellMeasurementResult ::= SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF CellMeasurementResult-Item + +CellMeasurementResult-Item ::= SEQUENCE { + cell-ID GlobalNG-RANCell-ID, +radioResourceStatus RadioResourceStatus OPTIONAL, +tNLCapacityIndicator TNLCapacityIndicator OPTIONAL, +compositeAvailableCapacityGroup CompositeAvailableCapacityGroup OPTIONAL, +sliceAvailableCapacity SliceAvailableCapacity OPTIONAL, +numberofActiveUEs NumberofActiveUEs OPTIONAL, +rRCConnections RRCConnections OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + ... +} + + +CellMeasurementResult-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +CellToReport ::= SEQUENCE (SIZE(1..maxnoofCellsinNG-RANnode)) OF CellToReport-Item + +CellToReport-Item ::= SEQUENCE { + cell-ID GlobalNG-RANCell-ID, +sSBToReport-List SSBToReport-List, +sliceToReport-List SliceToReport-List, + iE-Extensions ProtocolExtensionContainer { { CellToReport-Item-ExtIEs} } OPTIONAL, + ... +} + + +CellToReport-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +CompositeAvailableCapacityGroup ::= SEQUENCE { + compositeAvailableCapacityDownlink CompositeAvailableCapacity, + compositeAvailableCapacityUplink CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} + +CompositeAvailableCapacityGroup-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValueInfo CapacityValueInfo, -- this IE represents the IE “CapacityValue” in 9.2.2.a, it’s used to distinguish the “CapacityValue” in 9.2.2.c + iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacity-ExtIEs} }OPTIONAL, + ... +} + +CompositeAvailableCapacity-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +CHO-MRDC-Indicator ::= ENUMERATED {true, ...} + + +CHOtrigger ::= ENUMERATED { + cho-initiation, + cho-replace, + ... +} + +CHOinformation-Req ::= SEQUENCE { + cho-trigger CHOtrigger, + targetNG-RANnodeUEXnAPID NG-RANnodeUEXnAPID OPTIONAL + -- This IE shall be present if the cho-trigger IE is present and set to "CHO-replace" --, + cHO-EstimatedArrivalProbability CHO-Probability OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CHOinformation-Req-ExtIEs} } OPTIONAL, + ... +} + +CHOinformation-Req-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +CHOinformation-Ack ::= SEQUENCE { + requestedTargetCellGlobalID Target-CGI, + maxCHOoperations MaxCHOpreparations OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CHOinformation-Ack-ExtIEs} } OPTIONAL, + ... +} + +CHOinformation-Ack-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +CHO-Probability ::= INTEGER (1..100) + + +Connectivity-Support ::= SEQUENCE { + eNDC-Support ENUMERATED {supported, not-supported, ...}, + iE-Extensions ProtocolExtensionContainer { {Connectivity-Support-ExtIEs} } OPTIONAL, + ... +} + +Connectivity-Support-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +COUNT-PDCP-SN12 ::= SEQUENCE { + pdcp-SN12 INTEGER (0..4095), + hfn-PDCP-SN12 INTEGER (0..1048575), + iE-Extensions ProtocolExtensionContainer { {COUNT-PDCP-SN12-ExtIEs} } OPTIONAL, + ... +} + +COUNT-PDCP-SN12-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +COUNT-PDCP-SN18 ::= SEQUENCE { + pdcp-SN18 INTEGER (0..262143), + hfn-PDCP-SN18 INTEGER (0..16383), + iE-Extensions ProtocolExtensionContainer { {COUNT-PDCP-SN18-ExtIEs} } OPTIONAL, + ... +} + +COUNT-PDCP-SN18-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +CPTransportLayerInformation ::= CHOICE { + endpointIPAddress TransportLayerAddress, + choice-extension ProtocolIE-Single-Container { {CPTransportLayerInformation-ExtIEs} } +} + +CPTransportLayerInformation-ExtIEs XNAP-PROTOCOL-IES ::= { + { ID id-EndpointIPAddressAndPort CRITICALITY reject TYPE EndpointIPAddressAndPort PRESENCE mandatory}, + ... +} + + +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} + +CriticalityDiagnostics-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} + +CriticalityDiagnostics-IE-List-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +C-RNTI ::= BIT STRING (SIZE(16)) + + +CyclicPrefix-E-UTRA-DL ::= ENUMERATED { + normal, + extended, + ... +} + + +CyclicPrefix-E-UTRA-UL ::= ENUMERATED { + normal, + extended, + ... +} + +CSI-RSTransmissionIndication ::= ENUMERATED { + activated, + deactivated, + ... +} + + +-- D + + +XnUAddressInfoperPDUSession-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF XnUAddressInfoperPDUSession-Item + +XnUAddressInfoperPDUSession-Item ::= SEQUENCE { + pduSession-ID PDUSession-ID, + dataForwardingInfoFromTargetNGRANnode DataForwardingInfoFromTargetNGRANnode OPTIONAL, + pduSessionResourceSetupCompleteInfo-SNterm PDUSessionResourceBearerSetupCompleteInfo-SNterminated OPTIONAL, + iE-Extension ProtocolExtensionContainer { { XnUAddressInfoperPDUSession-Item-ExtIEs} } OPTIONAL, + ... +} + +XnUAddressInfoperPDUSession-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-SecondarydataForwardingInfoFromTarget-List CRITICALITY ignore EXTENSION SecondarydataForwardingInfoFromTarget-List PRESENCE optional}| +{ ID id-DRB-IDs-takenintouse CRITICALITY reject EXTENSION DRB-List PRESENCE optional}, + ... +} + +DataForwardingAccepted ::= ENUMERATED {data-forwarding-accepted, ...} + + +DataForwardingInfoFromTargetNGRANnode ::= SEQUENCE { + qosFlowsAcceptedForDataForwarding-List QoSFLowsAcceptedToBeForwarded-List, + pduSessionLevelDLDataForwardingInfo UPTransportLayerInformation OPTIONAL, + pduSessionLevelULDataForwardingInfo UPTransportLayerInformation OPTIONAL, + dataForwardingResponseDRBItemList DataForwardingResponseDRBItemList OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DataForwardingInfoFromTargetNGRANnode-ExtIEs} } OPTIONAL, + ... +} + +DataForwardingInfoFromTargetNGRANnode-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +QoSFLowsAcceptedToBeForwarded-List ::= SEQUENCE (SIZE(1.. maxnoofQoSFlows)) OF QoSFLowsAcceptedToBeForwarded-Item + +QoSFLowsAcceptedToBeForwarded-Item ::= SEQUENCE { + qosFlowIdentifier QoSFlowIdentifier, + iE-Extension ProtocolExtensionContainer { {QoSFLowsAcceptedToBeForwarded-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFLowsAcceptedToBeForwarded-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DataforwardingandOffloadingInfofromSource ::= SEQUENCE { + qosFlowsToBeForwarded QoSFLowsToBeForwarded-List, + sourceDRBtoQoSFlowMapping DRBToQoSFlowMapping-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DataforwardingandOffloadingInfofromSource-ExtIEs} } OPTIONAL, + ... +} + +DataforwardingandOffloadingInfofromSource-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +QoSFLowsToBeForwarded-List ::= SEQUENCE (SIZE(1.. maxnoofQoSFlows)) OF QoSFLowsToBeForwarded-Item + +QoSFLowsToBeForwarded-Item ::= SEQUENCE { + qosFlowIdentifier QoSFlowIdentifier, + dl-dataforwarding DLForwarding, + ul-dataforwarding ULForwarding, + iE-Extension ProtocolExtensionContainer { {QoSFLowsToBeForwarded-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFLowsToBeForwarded-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-ULForwardingProposal CRITICALITY ignore EXTENSION ULForwardingProposal PRESENCE optional }, + ... +} + + + +DataForwardingResponseDRBItemList ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DataForwardingResponseDRBItem + +DataForwardingResponseDRBItem ::= SEQUENCE { + drb-ID DRB-ID, + dlForwardingUPTNL UPTransportLayerInformation OPTIONAL, + ulForwardingUPTNL UPTransportLayerInformation OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DataForwardingResponseDRBItem-ExtIEs} } OPTIONAL, + ... +} + +DataForwardingResponseDRBItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) + + +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN ActivationSFN, + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, + ... +} + +DataTrafficResourceIndication-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DAPSRequestInfo ::= SEQUENCE { + dapsIndicator ENUMERATED {daps-HO-required, ...}, + iE-Extensions ProtocolExtensionContainer { {DAPSRequestInfo-ExtIEs} } OPTIONAL, + ... +} + +DAPSRequestInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DAPSResponseInfo-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DAPSResponseInfo-Item + +DAPSResponseInfo-Item ::= SEQUENCE { + drbID DRB-ID, + dapsResponseIndicator ENUMERATED {daps-HO-accepted, daps-HO-not-accepted, ...}, + iE-Extensions ProtocolExtensionContainer { {DAPSResponseInfo-Item-ExtIEs} } OPTIONAL, + ... +} + +DAPSResponseInfo-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DeliveryStatus ::= INTEGER (0..4095, ...) + + +DesiredActNotificationLevel ::= ENUMERATED {none, qos-flow, pdu-session, ue-level, ...} + +DefaultDRB-Allowed ::= ENUMERATED {true, false, ...} + + +DLCountChoice ::= CHOICE { + count12bits COUNT-PDCP-SN12, + count18bits COUNT-PDCP-SN18, + choice-extension ProtocolIE-Single-Container { {DLCountChoice-ExtIEs} } +} + +DLCountChoice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +DLForwarding ::= ENUMERATED {dl-forwarding-proposed, ...} + + +DL-GBR-PRB-usage::= INTEGER (0..100) + + +DL-non-GBR-PRB-usage::= INTEGER (0..100) + + +DL-Total-PRB-usage::= INTEGER (0..100) + + +DRB-ID ::= INTEGER (1..32, ...) + + +DRB-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRB-ID + + +DRB-List-withCause ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRB-List-withCause-Item + +DRB-List-withCause-Item ::= SEQUENCE { + drb-id DRB-ID, + cause Cause, + rLC-Mode RLCMode OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DRB-List-withCause-Item-ExtIEs} } OPTIONAL, + ... +} + +DRB-List-withCause-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRB-Number ::= INTEGER (1..32, ...) + + +DRBsSubjectToDLDiscarding-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRBsSubjectToDLDiscarding-Item + +DRBsSubjectToDLDiscarding-Item ::= SEQUENCE { + drbID DRB-ID, + dlCount DLCountChoice, + iE-Extension ProtocolExtensionContainer { { DRBsSubjectToDLDiscarding-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsSubjectToDLDiscarding-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBsSubjectToEarlyStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRBsSubjectToEarlyStatusTransfer-Item + +DRBsSubjectToEarlyStatusTransfer-Item ::= SEQUENCE { + drbID DRB-ID, + dlCount DLCountChoice, + iE-Extension ProtocolExtensionContainer { { DRBsSubjectToEarlyStatusTransfer-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsSubjectToEarlyStatusTransfer-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBsSubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRBsSubjectToStatusTransfer-Item + +DRBsSubjectToStatusTransfer-Item ::= SEQUENCE { + drbID DRB-ID, + pdcpStatusTransfer-UL DRBBStatusTransferChoice, + pdcpStatusTransfer-DL DRBBStatusTransferChoice, + iE-Extension ProtocolExtensionContainer { {DRBsSubjectToStatusTransfer-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsSubjectToStatusTransfer-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-OldQoSFlowMap-ULendmarkerexpected CRITICALITY reject EXTENSION QoSFlows-List PRESENCE optional }, + ... +} + + +DRBBStatusTransferChoice ::= CHOICE { + pdcp-sn-12bits DRBBStatusTransfer12bitsSN, + pdcp-sn-18bits DRBBStatusTransfer18bitsSN, + choice-extension ProtocolIE-Single-Container { {DRBBStatusTransferChoice-ExtIEs} } +} + +DRBBStatusTransferChoice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +DRBBStatusTransfer12bitsSN ::= SEQUENCE { + receiveStatusofPDCPSDU BIT STRING (SIZE(1..2048)) OPTIONAL, + cOUNTValue COUNT-PDCP-SN12, + iE-Extension ProtocolExtensionContainer { {DRBBStatusTransfer12bitsSN-ExtIEs} } OPTIONAL, + ... +} + +DRBBStatusTransfer12bitsSN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBBStatusTransfer18bitsSN ::= SEQUENCE { + receiveStatusofPDCPSDU BIT STRING (SIZE(1..131072)) OPTIONAL, + cOUNTValue COUNT-PDCP-SN18, + iE-Extension ProtocolExtensionContainer { {DRBBStatusTransfer18bitsSN-ExtIEs} } OPTIONAL, + ... +} + +DRBBStatusTransfer18bitsSN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBToQoSFlowMapping-List ::= SEQUENCE (SIZE (1..maxnoofDRBs)) OF DRBToQoSFlowMapping-Item + +DRBToQoSFlowMapping-Item ::= SEQUENCE { + drb-ID DRB-ID, + qosFlows-List QoSFlows-List, + rLC-Mode RLCMode OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DRBToQoSFlowMapping-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBToQoSFlowMapping-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-DAPSRequestInfo CRITICALITY ignore EXTENSION DAPSRequestInfo PRESENCE optional }, + ... +} + + +DuplicationActivation ::= ENUMERATED {active, inactive, ...} + + +Dynamic5QIDescriptor ::= SEQUENCE { + priorityLevelQoS PriorityLevelQoS, + packetDelayBudget PacketDelayBudget, + packetErrorRate PacketErrorRate, + fiveQI FiveQI OPTIONAL, + delayCritical ENUMERATED {delay-critical, non-delay-critical, ...} OPTIONAL, +-- This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE. + averagingWindow AveragingWindow OPTIONAL, +-- This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE. + maximumDataBurstVolume MaximumDataBurstVolume OPTIONAL, + iE-Extension ProtocolExtensionContainer { {Dynamic5QIDescriptor-ExtIEs } } OPTIONAL, + ... +} + +Dynamic5QIDescriptor-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-ExtendedPacketDelayBudget CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional}| + { ID id-CNPacketDelayBudgetDownlink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional}| + { ID id-CNPacketDelayBudgetUplink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional}, + ... +} + + +-- E + + +E-RAB-ID ::= INTEGER (0..15, ...) + + +E-UTRAARFCN ::= INTEGER (0..maxEARFCN) + + +E-UTRA-Cell-Identity ::= BIT STRING (SIZE(28)) + + +E-UTRA-CGI ::= SEQUENCE { + plmn-id PLMN-Identity, + e-utra-CI E-UTRA-Cell-Identity, + iE-Extension ProtocolExtensionContainer { {E-UTRA-CGI-ExtIEs} } OPTIONAL, + ... +} + +E-UTRA-CGI-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +E-UTRAFrequencyBandIndicator ::= INTEGER (1..256, ...) + + +E-UTRAMultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofEUTRABands)) OF E-UTRAFrequencyBandIndicator + + +E-UTRAPCI ::= INTEGER (0..503, ...) + + +E-UTRAPRACHConfiguration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag ENUMERATED {true, false, ...}, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, +-- C-ifTDD: This IE shall be present if the EUTRA-Mode-Info IE in the Served Cell Information IE is set to the value “TDD” -- + iE-Extensions ProtocolExtensionContainer { {E-UTRAPRACHConfiguration-ExtIEs} } OPTIONAL, + ... +} + +E-UTRAPRACHConfiguration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +E-UTRATransmissionBandwidth ::= ENUMERATED {bw6, bw15, bw25, bw50, bw75, bw100, ..., bw1} + +EndpointIPAddressAndPort ::=SEQUENCE { + endpointIPAddress TransportLayerAddress, + portNumber PortNumber, + iE-Extensions ProtocolExtensionContainer { { EndpointIPAddressAndPort-ExtIEs} } OPTIONAL +} + +EndpointIPAddressAndPort-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +EventTriggered ::= SEQUENCE { + loggedEventTriggeredConfig LoggedEventTriggeredConfig, + iE-Extensions ProtocolExtensionContainer { { EventTriggered-ExtIEs} } OPTIONAL, + ... +} + +EventTriggered-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +EventType ::= ENUMERATED { + report-upon-change-of-serving-cell, + report-UE-moving-presence-into-or-out-of-the-Area-of-Interest, + ... +} + + +EventTypeTrigger ::= CHOICE { + outOfCoverage ENUMERATED {true, ...}, + eventL1 EventL1, + choice-Extensions ProtocolIE-Single-Container { {EventTypeTrigger-ExtIEs} } +} + +EventTypeTrigger-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +EventL1 ::= SEQUENCE { + l1Threshold MeasurementThresholdL1LoggedMDT, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger, + iE-Extensions ProtocolExtensionContainer { { EventL1-ExtIEs} } OPTIONAL, + ... +} + +EventL1-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +MeasurementThresholdL1LoggedMDT ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} + +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181, ...) + +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} + +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181, ...) + +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceOfUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEActivityBehaviour-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExpectedUEBehaviour ::= SEQUENCE { + expectedUEActivityBehaviour ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + expectedUEMobility ExpectedUEMobility OPTIONAL, + expectedUEMovingTrajectory ExpectedUEMovingTrajectory OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEBehaviour-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExpectedUEMobility ::= ENUMERATED { + stationary, + mobile, + ... +} + +ExpectedUEMovingTrajectory ::= SEQUENCE (SIZE(1..maxnoofCellsUEMovingTrajectory)) OF ExpectedUEMovingTrajectoryItem + +ExpectedUEMovingTrajectoryItem ::= SEQUENCE { + nGRAN-CGI GlobalNG-RANCell-ID, + timeStayedInCell INTEGER (0..4095) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEMovingTrajectoryItem-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEMovingTrajectoryItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} + +ExtendedRATRestrictionInformation ::= SEQUENCE { + primaryRATRestriction BIT STRING (SIZE(8, ...)), + secondaryRATRestriction BIT STRING (SIZE(8, ...)), + iE-Extensions ProtocolExtensionContainer { {ExtendedRATRestrictionInformation-ExtIEs} } OPTIONAL, + ... +} + +ExtendedRATRestrictionInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ExtendedPacketDelayBudget ::= INTEGER (0..65535, ...) + +ExtendedSliceSupportList ::= SEQUENCE (SIZE(1..maxnoofExtSliceItems)) OF S-NSSAI + +ExtTLAs ::= SEQUENCE (SIZE(1..maxnoofExtTLAs)) OF ExtTLA-Item + +ExtTLA-Item ::= SEQUENCE { + iPsecTLA TransportLayerAddress OPTIONAL, + gTPTransportLayerAddresses GTPTLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExtTLA-Item-ExtIEs} } OPTIONAL, + ... +} + +ExtTLA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GTPTLAs ::= SEQUENCE (SIZE(1.. maxnoofGTPTLAs)) OF GTPTLA-Item + + +GTPTLA-Item ::= SEQUENCE { + gTPTransportLayerAddresses TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { { GTPTLA-Item-ExtIEs } } OPTIONAL, + ... +} + +GTPTLA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- F + +FiveGCMobilityRestrictionListContainer ::= OCTET STRING +-- This octets of the OCTET STRING contain the Mobility Restriction List IE as specified in TS 38.413 [5]. -- + +FiveQI ::= INTEGER (0..255, ...) + +FrequencyShift7p5khz ::= ENUMERATED {false, true, ...} + +-- G + + +GBRQoSFlowInfo ::= SEQUENCE { + maxFlowBitRateDL BitRate, + maxFlowBitRateUL BitRate, + guaranteedFlowBitRateDL BitRate, + guaranteedFlowBitRateUL BitRate, + notificationControl ENUMERATED {notification-requested, ...} OPTIONAL, + maxPacketLossRateDL PacketLossRate OPTIONAL, + maxPacketLossRateUL PacketLossRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {GBRQoSFlowInfo-ExtIEs} } OPTIONAL, + ... +} + +GBRQoSFlowInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-AlternativeQoSParaSetList CRITICALITY ignore EXTENSION AlternativeQoSParaSetList PRESENCE optional }, + ... +} + +GlobalgNB-ID ::= SEQUENCE { + plmn-id PLMN-Identity, + gnb-id GNB-ID-Choice, + iE-Extensions ProtocolExtensionContainer { {GlobalgNB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalgNB-ID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GNB-ID-Choice ::= CHOICE { + gnb-ID BIT STRING (SIZE(22..32)), + choice-extension ProtocolIE-Single-Container { {GNB-ID-Choice-ExtIEs} } +} + +GNB-ID-Choice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +GNB-RadioResourceStatus ::= SEQUENCE { + ssbAreaRadioResourceStatus-List SSBAreaRadioResourceStatus-List, + iE-Extensions ProtocolExtensionContainer { { GNB-RadioResourceStatus-ExtIEs} }, + ... +} + +GNB-RadioResourceStatus-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +GlobalngeNB-ID ::= SEQUENCE { + plmn-id PLMN-Identity, + enb-id ENB-ID-Choice, + iE-Extensions ProtocolExtensionContainer { {GlobaleNB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobaleNB-ID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ENB-ID-Choice ::= CHOICE { + enb-ID-macro BIT STRING (SIZE(20)), + enb-ID-shortmacro BIT STRING (SIZE(18)), + enb-ID-longmacro BIT STRING (SIZE(21)), + choice-extension ProtocolIE-Single-Container { {ENB-ID-Choice-ExtIEs} } +} + +ENB-ID-Choice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +GlobalNG-RANCell-ID ::= SEQUENCE { + plmn-id PLMN-Identity, + ng-RAN-Cell-id NG-RAN-Cell-Identity, + iE-Extensions ProtocolExtensionContainer { {GlobalNG-RANCell-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalNG-RANCell-ID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GlobalNG-RANNode-ID ::= CHOICE { + gNB GlobalgNB-ID, + ng-eNB GlobalngeNB-ID, + choice-extension ProtocolIE-Single-Container { {GlobalNG-RANNode-ID-ExtIEs} } +} + +GlobalNG-RANNode-ID-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +GTP-TEID ::= OCTET STRING (SIZE(4)) + + +GTPtunnelTransportLayerInformation ::= SEQUENCE { + tnl-address TransportLayerAddress, + gtp-teid GTP-TEID, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelTransportLayerInformation-ExtIEs} } OPTIONAL, + ... +} + +GTPtunnelTransportLayerInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GUAMI ::= SEQUENCE { + plmn-ID PLMN-Identity, + amf-region-id BIT STRING (SIZE (8)), + amf-set-id BIT STRING (SIZE (10)), + amf-pointer BIT STRING (SIZE (6)), + iE-Extensions ProtocolExtensionContainer { {GUAMI-ExtIEs} } OPTIONAL, + ... +} + +GUAMI-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- H + + +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + intersystempingpong, + ... +} + +Hysteresis ::= INTEGER (0..30) + + +-- I + +IABNodeIndication ::= ENUMERATED {true,...} + +ImmediateMDT-EUTRA ::= OCTET STRING + + +ImmediateMDT-NR ::= SEQUENCE { + measurementsToActivate MeasurementsToActivate, + m1Configuration M1Configuration OPTIONAL, + m4Configuration M4Configuration OPTIONAL, + m5Configuration M5Configuration OPTIONAL, + mDT-Location-Info MDT-Location-Info OPTIONAL, + m6Configuration M6Configuration OPTIONAL, + m7Configuration M7Configuration OPTIONAL, + bluetoothMeasurementConfiguration BluetoothMeasurementConfiguration OPTIONAL, + wLANMeasurementConfiguration WLANMeasurementConfiguration OPTIONAL, + sensorMeasurementConfiguration SensorMeasurementConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ImmediateMDT-NR-ExtIEs} } OPTIONAL, + ... +} + +ImmediateMDT-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +InitiatingCondition-FailureIndication ::= CHOICE { + rRCReestab RRCReestab-initiated, + rRCSetup RRCSetup-initiated, + choice-extension ProtocolIE-Single-Container { {InitiatingCondition-FailureIndication-ExtIEs} } +} + +InitiatingCondition-FailureIndication-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +IntendedTDD-DL-ULConfiguration-NR ::= SEQUENCE { + nrscs NRSCS, + nrCyclicPrefix NRCyclicPrefix, + nrDL-ULTransmissionPeriodicity NRDL-ULTransmissionPeriodicity, + slotConfiguration-List SlotConfiguration-List, + iE-Extensions ProtocolExtensionContainer { {IntendedTDD-DL-ULConfiguration-NR-ExtIEs} } OPTIONAL, + ... +} + +IntendedTDD-DL-ULConfiguration-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +InterfaceInstanceIndication ::= INTEGER (0..255, ...) + +InterfacesToTrace ::= BIT STRING { ng-c (0), x-nc (1), uu (2), f1-c (3), e1 (4)} (SIZE(8)) + + +I-RNTI ::= CHOICE { + i-RNTI-full BIT STRING (SIZE(40)), + i-RNTI-short BIT STRING (SIZE(24)), + choice-extension ProtocolIE-Single-Container { {I-RNTI-ExtIEs} } +} + +I-RNTI-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +-- J + + +-- K + + +-- L + + +LastVisitedCell-Item ::= CHOICE { + nG-RAN-Cell LastVisitedNGRANCellInformation, + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + choice-extension ProtocolIE-Single-Container { { LastVisitedCell-Item-ExtIEs} } +} + +LastVisitedCell-Item-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +LastVisitedEUTRANCellInformation ::= OCTET STRING + +LastVisitedGERANCellInformation ::= OCTET STRING + +LastVisitedNGRANCellInformation ::= OCTET STRING + +LastVisitedUTRANCellInformation ::= OCTET STRING + + +LCID ::= INTEGER (1..32, ...) + +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} + + +ListOfCells ::= SEQUENCE (SIZE(1..maxnoofCellsinAoI)) OF CellsinAoI-Item + +CellsinAoI-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + ng-ran-cell-id NG-RAN-Cell-Identity, + iE-Extensions ProtocolExtensionContainer { {CellsinAoI-Item-ExtIEs} } OPTIONAL, + ... +} + +CellsinAoI-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ListOfRANNodesinAoI ::= SEQUENCE (SIZE(1.. maxnoofRANNodesinAoI)) OF GlobalNG-RANNodesinAoI-Item + +GlobalNG-RANNodesinAoI-Item ::= SEQUENCE { + global-NG-RAN-Node-ID GlobalNG-RANNode-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalNG-RANNodesinAoI-Item-ExtIEs} } OPTIONAL, + ... +} + +GlobalNG-RANNodesinAoI-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ListOfTAIsinAoI ::= SEQUENCE (SIZE(1..maxnoofTAIsinAoI)) OF TAIsinAoI-Item + +TAIsinAoI-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + tAC TAC, + iE-Extensions ProtocolExtensionContainer { {TAIsinAoI-Item-ExtIEs} } OPTIONAL, + ... +} + +TAIsinAoI-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +LocationInformationSNReporting ::= ENUMERATED { + pSCell, + ... +} + +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + areaOfInterest AreaOfInterestInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} + +LocationReportingInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +LoggedMDT-EUTRA ::= SEQUENCE { + loggingInterval LoggingInterval, + loggingDuration LoggingDuration, + bluetoothMeasurementConfiguration BluetoothMeasurementConfiguration OPTIONAL, + wLANMeasurementConfiguration WLANMeasurementConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LoggedMDT-EUTRA-ExtIEs} } OPTIONAL, + ... +} + +LoggedMDT-EUTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +... +} + +LoggedEventTriggeredConfig ::= SEQUENCE { + eventTypeTrigger EventTypeTrigger, + iE-Extensions ProtocolExtensionContainer { { LoggedEventTriggeredConfig-ExtIEs} } OPTIONAL, + ... +} + +LoggedEventTriggeredConfig-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +LoggedMDT-NR ::= SEQUENCE { + loggingInterval LoggingInterval, + loggingDuration LoggingDuration, + reportType ReportType, + bluetoothMeasurementConfiguration BluetoothMeasurementConfiguration OPTIONAL, + wLANMeasurementConfiguration WLANMeasurementConfiguration OPTIONAL, + sensorMeasurementConfiguration SensorMeasurementConfiguration OPTIONAL, + areaScopeOfNeighCellsList AreaScopeOfNeighCellsList OPTIONAL, iE-Extensions ProtocolExtensionContainer { {LoggedMDT-NR-ExtIEs} } OPTIONAL, + ... +} + +LoggedMDT-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +... +} + +LoggingInterval ::= ENUMERATED { ms320, ms640, ms1280, ms2560, ms5120, ms10240, ms20480, ms30720, ms40960, ms61440} + +LoggingDuration ::= ENUMERATED {m10, m20, m40, m60, m90, m120} + +LowerLayerPresenceStatusChange ::= ENUMERATED { + release-lower-layers, + re-establish-lower-layers, + ..., + suspend-lower-layers, + resume-lower-layers +} + +LTEV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LTEV2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} + +LTEV2XServicesAuthorized-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +LTEUESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {LTEUESidelinkAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +LTEUESidelinkAggregateMaximumBitRate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- M + + +M1Configuration ::= SEQUENCE { + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic or event-triggered periodic reporting + iE-Extensions ProtocolExtensionContainer { { M1Configuration-ExtIEs} } OPTIONAL, + ... +} + +M1Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { { M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} + +M1PeriodicReporting-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +M1ReportingTrigger ::= ENUMERATED{ + periodic, + a2eventtriggered, + a2eventtriggered-periodic, + ... + +} + +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { { M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} + +M1ThresholdEventA2-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M4Configuration-ExtIEs} } OPTIONAL, + ... +} + +M4Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } + +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL, + ... +} + +M5Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } + +M6Configuration ::= SEQUENCE { + m6report-Interval M6report-Interval, + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL, + ... +} + +M6Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +M6report-Interval ::= ENUMERATED { ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, min6, min12, min30,... } + + +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL, + ... +} + +M7Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +M7period ::= INTEGER(1..60, ...) + + +MAC-I ::= BIT STRING (SIZE(16)) + + +MaskedIMEISV ::= BIT STRING (SIZE(64)) + + +MaxCHOpreparations ::= INTEGER (1..8, ...) + + +MaximumDataBurstVolume ::= INTEGER (0..4095, ..., 4096.. 2000000) + + +MaximumIPdatarate ::= SEQUENCE { + maxIPrate-UL MaxIPrate, + iE-Extensions ProtocolExtensionContainer { {MaximumIPdatarate-ExtIEs} } OPTIONAL, + ... +} + +MaximumIPdatarate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-MaxIPrate-DL CRITICALITY ignore EXTENSION MaxIPrate PRESENCE optional}, + ... +} + +MaxIPrate ::= ENUMERATED { + bitrate64kbs, + max-UErate, + ... +} + + +MBSFNControlRegionLength ::= INTEGER (0..3) + + +MBSFNSubframeAllocation-E-UTRA ::= CHOICE { + oneframe BIT STRING (SIZE(6)), + fourframes BIT STRING (SIZE(24)), + choice-extension ProtocolIE-Single-Container { {MBSFNSubframeAllocation-E-UTRA-ExtIEs} } +} + +MBSFNSubframeAllocation-E-UTRA-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +MBSFNSubframeInfo-E-UTRA ::= SEQUENCE (SIZE(1..maxnoofMBSFNEUTRA)) OF MBSFNSubframeInfo-E-UTRA-Item + + +MBSFNSubframeInfo-E-UTRA-Item ::= SEQUENCE { + radioframeAllocationPeriod ENUMERATED{n1,n2,n4,n8,n16,n32,...}, + radioframeAllocationOffset INTEGER (0..7, ...), + subframeAllocation MBSFNSubframeAllocation-E-UTRA, + iE-Extensions ProtocolExtensionContainer { {MBSFNSubframeInfo-E-UTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +MBSFNSubframeInfo-E-UTRA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + logged-MDT-only, + ... +} + +MDT-Configuration ::= SEQUENCE { + mDT-Configuration-NR MDT-Configuration-NR OPTIONAL, + mDT-Configuration-EUTRA MDT-Configuration-EUTRA OPTIONAL, +iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +MDT-Configuration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Configuration-NR ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT-NR AreaScopeOfMDT-NR OPTIONAL, + mDTMode-NR MDTMode-NR, + signallingBasedMDTPLMNList MDTPLMNList, + iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-NR-ExtIEs} } OPTIONAL, + ... +} +MDT-Configuration-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Configuration-EUTRA ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT-EUTRA AreaScopeOfMDT-EUTRA OPTIONAL, + mDTMode-EUTRA MDTMode-EUTRA, + signallingBasedMDTPLMNList MDTPLMNList, + iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-EUTRA-ExtIEs} } OPTIONAL, + ... +} +MDT-Configuration-EUTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +MDT-Location-Info ::= BIT STRING (SIZE (8)) + + +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity + +MDTMode-NR ::= CHOICE { + immediateMDT ImmediateMDT-NR, + loggedMDT LoggedMDT-NR, + ..., + mDTMode-NR-Extension MDTMode-NR-Extension +} + +MDTMode-NR-Extension ::= ProtocolIE-Single-Container {{ MDTMode-NR-ExtensionIE }} + +MDTMode-NR-ExtensionIE XNAP-PROTOCOL-IES ::= { + ... +} + +MDTMode-EUTRA ::= CHOICE { + immediateMDT ImmediateMDT-EUTRA, + loggedMDT LoggedMDT-EUTRA, + ..., + mDTMode-EUTRA-Extension MDTMode-EUTRA-Extension +} + +MDTMode-EUTRA-Extension ::= ProtocolIE-Single-Container {{ MDTMode-EUTRA-ExtensionIE }} + +MDTMode-EUTRA-ExtensionIE XNAP-PROTOCOL-IES ::= { + ... +} + +MeasurementsToActivate ::= BIT STRING (SIZE (8)) + +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + threshold-SINR Threshold-SINR, + choice-extension ProtocolIE-Single-Container { { MeasurementThresholdA2-ExtIEs} } +} + +MeasurementThresholdA2-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +Measurement-ID ::= INTEGER (1..4095,...) + + +MobilityInformation ::= BIT STRING (SIZE(32)) + +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} + +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} + + +MobilityRestrictionList ::= SEQUENCE { + serving-PLMN PLMN-Identity, + equivalent-PLMNs SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity OPTIONAL, + rat-Restrictions RAT-RestrictionsList OPTIONAL, + forbiddenAreaInformation ForbiddenAreaList OPTIONAL, + serviceAreaInformation ServiceAreaList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MobilityRestrictionList-ExtIEs} } OPTIONAL, + ... +} + +MobilityRestrictionList-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ +{ ID id-LastE-UTRANPLMNIdentity CRITICALITY ignore EXTENSION PLMN-Identity PRESENCE optional }| +{ ID id-CNTypeRestrictionsForServing CRITICALITY ignore EXTENSION CNTypeRestrictionsForServing PRESENCE optional }| +{ ID id-CNTypeRestrictionsForEquivalent CRITICALITY ignore EXTENSION CNTypeRestrictionsForEquivalent PRESENCE optional }| +{ ID id-NPNMobilityInformation CRITICALITY reject EXTENSION NPNMobilityInformation PRESENCE optional }, + ... +} + +CNTypeRestrictionsForEquivalent ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF CNTypeRestrictionsForEquivalentItem + +CNTypeRestrictionsForEquivalentItem ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cn-Type ENUMERATED {epc-forbidden, fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsForEquivalentItem-ExtIEs} } OPTIONAL, + ... +} + +CNTypeRestrictionsForEquivalentItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + +CNTypeRestrictionsForServing ::= ENUMERATED { + epc-forbidden, + ... +} + +RAT-RestrictionsList ::= SEQUENCE (SIZE(1..maxnoofPLMNs)) OF RAT-RestrictionsItem + + +RAT-RestrictionsItem ::= SEQUENCE { + plmn-Identity PLMN-Identity, + rat-RestrictionInformation RAT-RestrictionInformation, + iE-Extensions ProtocolExtensionContainer { {RAT-RestrictionsItem-ExtIEs} } OPTIONAL, + ... +} + +RAT-RestrictionsItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + { ID id-ExtendedRATRestrictionInformation CRITICALITY ignore EXTENSION ExtendedRATRestrictionInformation PRESENCE optional}, + ... +} + + +RAT-RestrictionInformation ::= BIT STRING {e-UTRA (0),nR (1)} (SIZE(8, ...)) + + +ForbiddenAreaList ::= SEQUENCE (SIZE(1..maxnoofPLMNs)) OF ForbiddenAreaItem + + +ForbiddenAreaItem ::= SEQUENCE { + plmn-Identity PLMN-Identity, + forbidden-TACs SEQUENCE (SIZE(1..maxnoofForbiddenTACs)) OF TAC, + iE-Extensions ProtocolExtensionContainer { {ForbiddenAreaItem-ExtIEs} } OPTIONAL, + ... +} + +ForbiddenAreaItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +ServiceAreaList ::= SEQUENCE (SIZE(1..maxnoofPLMNs)) OF ServiceAreaItem + + +ServiceAreaItem ::= SEQUENCE { + plmn-Identity PLMN-Identity, + allowed-TACs-ServiceArea SEQUENCE (SIZE(1..maxnoofAllowedAreas)) OF TAC OPTIONAL, + not-allowed-TACs-ServiceArea SEQUENCE (SIZE(1..maxnoofAllowedAreas)) OF TAC OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServiceAreaItem-ExtIEs} } OPTIONAL, + ... +} + +ServiceAreaItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + +MR-DC-ResourceCoordinationInfo ::= SEQUENCE { + ng-RAN-Node-ResourceCoordinationInfo NG-RAN-Node-ResourceCoordinationInfo, + iE-Extension ProtocolExtensionContainer { {MR-DC-ResourceCoordinationInfo-ExtIEs}} OPTIONAL, + ... +} + +MR-DC-ResourceCoordinationInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +... +} + +NG-RAN-Node-ResourceCoordinationInfo ::= CHOICE { + eutra-resource-coordination-info E-UTRA-ResourceCoordinationInfo, + nr-resource-coordination-info NR-ResourceCoordinationInfo +} + +E-UTRA-ResourceCoordinationInfo ::= SEQUENCE { + e-utra-cell E-UTRA-CGI, + ul-coordination-info BIT STRING (SIZE (6..4400)), + dl-coordination-info BIT STRING (SIZE (6..4400)) OPTIONAL, + nr-cell NR-CGI OPTIONAL, + e-utra-coordination-assistance-info E-UTRA-CoordinationAssistanceInfo OPTIONAL, + iE-Extension ProtocolExtensionContainer { {E-UTRA-ResourceCoordinationInfo-ExtIEs} } OPTIONAL, + ... +} + +E-UTRA-ResourceCoordinationInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +E-UTRA-CoordinationAssistanceInfo ::= ENUMERATED {coordination-not-required, ...} + +NR-ResourceCoordinationInfo ::= SEQUENCE { + nr-cell NR-CGI, + ul-coordination-info BIT STRING (SIZE (6..4400)), + dl-coordination-info BIT STRING (SIZE (6..4400)) OPTIONAL, + e-utra-cell E-UTRA-CGI OPTIONAL, + nr-coordination-assistance-info NR-CoordinationAssistanceInfo OPTIONAL, + iE-Extension ProtocolExtensionContainer { {NR-ResourceCoordinationInfo-ExtIEs} } OPTIONAL, + ... +} + +NR-ResourceCoordinationInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NR-CoordinationAssistanceInfo ::= ENUMERATED {coordination-not-required, ...} + +MessageOversizeNotification ::= SEQUENCE { + maximumCellListSize MaximumCellListSize, + iE-Extension ProtocolExtensionContainer { {MessageOversizeNotification-ExtIEs}} OPTIONAL, + ... +} + +MessageOversizeNotification-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +MaximumCellListSize ::= INTEGER(1..16384, ...) + +-- N + +NBIoT-UL-DL-AlignmentOffset ::= ENUMERATED { + khz-7dot5, + khz0, + khz7dot5, + ... +} +NE-DC-TDM-Pattern ::= SEQUENCE { + subframeAssignment ENUMERATED {sa0,sa1,sa2,sa3,sa4,sa5,sa6}, + harqOffset INTEGER (0..9), + iE-Extension ProtocolExtensionContainer { {NE-DC-TDM-Pattern-ExtIEs}} OPTIONAL, + ... +} + +NE-DC-TDM-Pattern-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +... +} + +NeighbourInformation-E-UTRA ::= SEQUENCE (SIZE(1..maxnoofNeighbours)) OF NeighbourInformation-E-UTRA-Item + +NeighbourInformation-E-UTRA-Item ::= SEQUENCE { + e-utra-PCI E-UTRAPCI, + e-utra-cgi E-UTRA-CGI, + earfcn E-UTRAARFCN, + tac TAC, + ranac RANAC OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NeighbourInformation-E-UTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +NeighbourInformation-E-UTRA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +NeighbourInformation-NR ::= SEQUENCE (SIZE(1..maxnoofNeighbours)) OF NeighbourInformation-NR-Item + +NeighbourInformation-NR-Item ::= SEQUENCE { + nr-PCI NRPCI, + nr-cgi NR-CGI, + tac TAC, + ranac RANAC OPTIONAL, + nr-mode-info NeighbourInformation-NR-ModeInfo, + connectivitySupport Connectivity-Support, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {NeighbourInformation-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +NeighbourInformation-NR-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::={ + ... +} + + +NeighbourInformation-NR-ModeInfo ::= CHOICE { + fdd-info NeighbourInformation-NR-ModeFDDInfo, + tdd-info NeighbourInformation-NR-ModeTDDInfo, + choice-extension ProtocolIE-Single-Container { {NeighbourInformation-NR-ModeInfo-ExtIEs} } +} + +NeighbourInformation-NR-ModeInfo-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +NeighbourInformation-NR-ModeFDDInfo ::= SEQUENCE { + ul-NR-FreqInfo NRFrequencyInfo, + dl-NR-FequInfo NRFrequencyInfo, + ie-Extensions ProtocolExtensionContainer { {NeighbourInformation-NR-ModeFDDInfo-ExtIEs} } OPTIONAL, + ... +} + +NeighbourInformation-NR-ModeFDDInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NeighbourInformation-NR-ModeTDDInfo ::= SEQUENCE { + nr-FreqInfo NRFrequencyInfo, + ie-Extensions ProtocolExtensionContainer { {NeighbourInformation-NR-ModeTDDInfo-ExtIEs} } OPTIONAL, + ... +} + +NeighbourInformation-NR-ModeTDDInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NID ::= BIT STRING (SIZE(44)) + + +NRCarrierList ::= SEQUENCE (SIZE(1..maxnoofNRSCSs)) OF NRCarrierItem + +NRCarrierItem ::= SEQUENCE { + carrierSCS NRSCS, + offsetToCarrier INTEGER (0..2199, ...), + carrierBandwidth INTEGER (0..maxnoofPhysicalResourceBlocks, ...), + iE-Extension ProtocolExtensionContainer { {NRCarrierItem-ExtIEs} } OPTIONAL, + ... +} + +NRCarrierItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NRCellPRACHConfig ::= OCTET STRING + + +NG-RAN-Cell-Identity ::= CHOICE { + nr NR-Cell-Identity, + e-utra E-UTRA-Cell-Identity, + choice-extension ProtocolIE-Single-Container { {NG-RAN-Cell-Identity-ExtIEs} } +} + +NG-RAN-Cell-Identity-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +NG-RAN-CellPCI ::= CHOICE { + nr NRPCI, + e-utra E-UTRAPCI, + choice-extension ProtocolIE-Single-Container { {NG-RAN-CellPCI-ExtIEs} } +} + +NG-RAN-CellPCI-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +NG-RANnodeUEXnAPID ::= INTEGER (0.. 4294967295) + + +NumberofActiveUEs::= INTEGER(0..16777215, ...) + + +NoofRRCConnections ::= INTEGER (1..65536,...) + + +NonDynamic5QIDescriptor ::= SEQUENCE { + fiveQI FiveQI, + priorityLevelQoS PriorityLevelQoS OPTIONAL, + averagingWindow AveragingWindow OPTIONAL, + maximumDataBurstVolume MaximumDataBurstVolume OPTIONAL, + iE-Extension ProtocolExtensionContainer { {NonDynamic5QIDescriptor-ExtIEs } } OPTIONAL, + ... +} + +NonDynamic5QIDescriptor-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-CNPacketDelayBudgetDownlink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional}| + { ID id-CNPacketDelayBudgetUplink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional}, + ... +} + + +NRARFCN ::= INTEGER (0.. maxNRARFCN) + + +NG-eNB-RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { { NG-eNB-RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} + +NG-eNB-RadioResourceStatus-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNLCapacityIndicator ::= SEQUENCE { + dLTNLOfferedCapacity OfferedCapacity, +dLTNLAvailableCapacity AvailableCapacity, +uLTNLOfferedCapacity OfferedCapacity, + uLTNLAvailableCapacity AvailableCapacity, + iE-Extensions ProtocolExtensionContainer { { TNLCapacityIndicator-ExtIEs} } OPTIONAL, + ... +} + +TNLCapacityIndicator-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NPN-Broadcast-Information ::= CHOICE { + snpn-Information NPN-Broadcast-Information-SNPN, + pni-npn-Information NPN-Broadcast-Information-PNI-NPN, + choice-extension ProtocolIE-Single-Container { {NPN-Broadcast-Information-ExtIEs} } +} + +NPN-Broadcast-Information-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +NPN-Broadcast-Information-SNPN ::= SEQUENCE { + broadcastSNPNID-List BroadcastSNPNID-List, + iE-Extension ProtocolExtensionContainer { {NPN-Broadcast-Information-SNPN-ExtIEs} } OPTIONAL, + ... +} + +NPN-Broadcast-Information-SNPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} +NPN-Broadcast-Information-PNI-NPN ::= SEQUENCE { + broadcastPNI-NPN-ID-Information BroadcastPNI-NPN-ID-Information, + iE-Extension ProtocolExtensionContainer { {NPN-Broadcast-Information-PNI-NPN-ExtIEs} } OPTIONAL, + ... +} + +NPN-Broadcast-Information-PNI-NPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NPNMobilityInformation::= CHOICE { + snpn-mobility-information NPNMobilityInformation-SNPN, + pni-npn-mobility-information NPNMobilityInformation-PNI-NPN, + choice-extension ProtocolIE-Single-Container { {NPNMobilityInformation-ExtIEs} } +} + +NPNMobilityInformation-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +NPNMobilityInformation-SNPN ::= SEQUENCE { + serving-NID NID, + iE-Extension ProtocolExtensionContainer { {NPNMobilityInformation-SNPN-ExtIEs} } OPTIONAL, + ... +} + +NPNMobilityInformation-SNPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NPNMobilityInformation-PNI-NPN ::= SEQUENCE { + allowedPNI-NPN-ID-List AllowedPNI-NPN-ID-List, + iE-Extension ProtocolExtensionContainer { {NPNMobilityInformation-PNI-NPN-ExtIEs} } OPTIONAL, + ... +} + +NPNMobilityInformation-PNI-NPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NPNPagingAssistanceInformation ::= CHOICE { + pni-npn-Information NPNPagingAssistanceInformation-PNI-NPN, + choice-extension ProtocolIE-Single-Container { {NPNPagingAssistanceInformation-ExtIEs} } +} + +NPNPagingAssistanceInformation-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +NPNPagingAssistanceInformation-PNI-NPN ::= SEQUENCE { + allowedPNI-NPN-ID-List AllowedPNI-NPN-ID-List, + iE-Extension ProtocolExtensionContainer { {NPNPagingAssistanceInformation-PNI-NPN-ExtIEs} } OPTIONAL, + ... +} + +NPNPagingAssistanceInformation-PNI-NPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NPN-Support ::= CHOICE { + sNPN NPN-Support-SNPN, + choice-Extensions ProtocolIE-Single-Container { {NPN-Support-ExtIEs} } +} + +NPN-Support-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +NPN-Support-SNPN ::= SEQUENCE { + nid NID, + ie-Extension ProtocolExtensionContainer { {NPN-Support-SNPN-ExtIEs} } +} + +NPN-Support-SNPN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-Cell-Identity ::= BIT STRING (SIZE (36)) + + +NG-RAN-Cell-Identity-ListinRANPagingArea ::= SEQUENCE (SIZE (1..maxnoofCellsinRNA)) OF NG-RAN-Cell-Identity + + +NR-CGI ::= SEQUENCE { + plmn-id PLMN-Identity, + nr-CI NR-Cell-Identity, + iE-Extension ProtocolExtensionContainer { {NR-CGI-ExtIEs} } OPTIONAL, + ... +} + +NR-CGI-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NRCyclicPrefix ::= ENUMERATED {normal, extended, ...} + +NRDL-ULTransmissionPeriodicity ::= ENUMERATED {ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms3, ms4, ms5, ms10, ms20, ms40, ms60, ms80, ms100, ms120, ms140, ms160, ...} + +NRFrequencyBand ::= INTEGER (1..1024, ...) + + +NRFrequencyBand-List ::= SEQUENCE (SIZE(1..maxnoofNRCellBands)) OF NRFrequencyBandItem + +NRFrequencyBandItem ::= SEQUENCE { + nr-frequency-band NRFrequencyBand, + supported-SUL-Band-List SupportedSULBandList OPTIONAL, + iE-Extension ProtocolExtensionContainer { {NRFrequencyBandItem-ExtIEs} } OPTIONAL, + ... +} + +NRFrequencyBandItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + +NRFrequencyInfo ::= SEQUENCE { + nrARFCN NRARFCN, + sul-information SUL-Information OPTIONAL, + frequencyBand-List NRFrequencyBand-List, + iE-Extension ProtocolExtensionContainer { {NRFrequencyInfo-ExtIEs} } OPTIONAL, + ... +} + +NRFrequencyInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-FrequencyShift7p5khz CRITICALITY ignore EXTENSION FrequencyShift7p5khz PRESENCE optional },... +} + +NRMobilityHistoryReport ::= OCTET STRING + +NRFrequencyInfoforMDT ::= SEQUENCE { + nrARFCN NRARFCN, + frequencyBand-List NRFrequencyBand-List, + iE-Extension ProtocolExtensionContainer { {NRFrequencyInfoforMDT-ExtIEs} } OPTIONAL, + ... +} + +NRFrequencyInfoforMDT-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +NRModeInfo ::= CHOICE { + fdd NRModeInfoFDD, + tdd NRModeInfoTDD, + choice-extension ProtocolIE-Single-Container { {NRModeInfo-ExtIEs} } +} + +NRModeInfo-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +NRModeInfoFDD ::= SEQUENCE { + ulNRFrequencyInfo NRFrequencyInfo, + dlNRFrequencyInfo NRFrequencyInfo, + ulNRTransmissonBandwidth NRTransmissionBandwidth, + dlNRTransmissonBandwidth NRTransmissionBandwidth, + iE-Extension ProtocolExtensionContainer { {NRModeInfoFDD-ExtIEs} } OPTIONAL, + ... +} + +NRModeInfoFDD-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-ULCarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }, +... +} + + +NRModeInfoTDD ::= SEQUENCE { + nrFrequencyInfo NRFrequencyInfo, + nrTransmissonBandwidth NRTransmissionBandwidth, + iE-Extension ProtocolExtensionContainer { {NRModeInfoTDD-ExtIEs} } OPTIONAL, + ... +} + +NRModeInfoTDD-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-IntendedTDD-DL-ULConfiguration-NR CRITICALITY ignore EXTENSION IntendedTDD-DL-ULConfiguration-NR PRESENCE optional }| + {ID id-TDDULDLConfigurationCommonNR CRITICALITY ignore EXTENSION TDDULDLConfigurationCommonNR PRESENCE optional }| + { ID id-CarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }, + ... +} + + +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} + +NRPCI ::= INTEGER (0..1007, ...) + +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} + + +NRTransmissionBandwidth ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NRTransmissionBandwidth-ExtIEs} } OPTIONAL, + ... +} + +NRTransmissionBandwidth-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NumberOfAntennaPorts-E-UTRA ::= ENUMERATED {an1, an2, an4, ...} + +NG-RANTraceID ::=OCTET STRING (SIZE (8)) + +NonGBRResources-Offered ::= ENUMERATED {true, ...} + +NRV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRV2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} + +NRV2XServicesAuthorized-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NRUESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {NRUESidelinkAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +NRUESidelinkAggregateMaximumBitRate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +OfferedCapacity ::= INTEGER (1.. 16777216,...) + +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEightDotFive, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFourDotFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + threeDotFive, + four, + five, + six, + seven, + sevenDotFive, + eight, + nine, + ... +} + +-- P + + +PacketDelayBudget ::= INTEGER (0..1023, ...) + + +PacketErrorRate ::= SEQUENCE { + pER-Scalar PER-Scalar, + pER-Exponent PER-Exponent, + iE-Extensions ProtocolExtensionContainer { {PacketErrorRate-ExtIEs} } OPTIONAL, + ... +} + +PacketErrorRate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +PER-Scalar ::= INTEGER (0..9, ...) + +PER-Exponent ::= INTEGER (0..9, ...) + + +PacketLossRate ::= INTEGER (0..1000, ...) + + +PagingDRX ::= ENUMERATED { + v32, + v64, + v128, + v256, + ... , + v512, + v1024 + } + + +PagingPriority ::= ENUMERATED { + priolevel1, + priolevel2, + priolevel3, + priolevel4, + priolevel5, + priolevel6, + priolevel7, + priolevel8, + ... +} + +PartialListIndicator ::= ENUMERATED {partial, ...} + +PC5QoSParameters ::= SEQUENCE { + pc5QoSFlowList PC5QoSFlowList, + pc5LinkAggregatedBitRates BitRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PC5QoSParameters-ExtIEs} } OPTIONAL, + ... +} + + +PC5QoSParameters-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PC5QoSFlowList ::= SEQUENCE (SIZE(1..maxnoofPC5QoSFlows)) OF PC5QoSFlowItem + +PC5QoSFlowItem::= SEQUENCE { + pQI FiveQI, + pc5FlowBitRates PC5FlowBitRates OPTIONAL, + range Range OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PC5QoSFlowItem-ExtIEs} } OPTIONAL, + ... +} + +PC5QoSFlowItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PC5FlowBitRates ::= SEQUENCE { + guaranteedFlowBitRate BitRate, + maximumFlowBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { { PC5FlowBitRates-ExtIEs} } OPTIONAL, + ... +} + +PC5FlowBitRates-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDCPChangeIndication ::= CHOICE { + from-S-NG-RAN-node ENUMERATED {s-ng-ran-node-key-update-required, pdcp-data-recovery-required, ...}, + from-M-NG-RAN-node ENUMERATED {pdcp-data-recovery-required, ...}, + choice-extension ProtocolIE-Single-Container { {PDCPChangeIndication-ExtIEs} } +} + +PDCPChangeIndication-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +PDCPDuplicationConfiguration ::= ENUMERATED { + configured, + de-configured, + ... +} + + +PDCPSNLength ::= SEQUENCE { + ulPDCPSNLength ENUMERATED {v12bits, v18bits, ...}, + dlPDCPSNLength ENUMERATED {v12bits, v18bits, ...}, + iE-Extension ProtocolExtensionContainer { {PDCPSNLength-ExtIEs} } OPTIONAL, + ... +} + +PDCPSNLength-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + +PDUSessionAggregateMaximumBitRate ::= SEQUENCE { + downlink-session-AMBR BitRate, + uplink-session-AMBR BitRate, + iE-Extensions ProtocolExtensionContainer { {PDUSessionAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAggregateMaximumBitRate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSession-List ::= SEQUENCE (SIZE (1.. maxnoofPDUSessions)) OF PDUSession-ID + + +PDUSession-List-withCause ::= SEQUENCE (SIZE (1.. maxnoofPDUSessions)) OF PDUSession-List-withCause-Item + +PDUSession-List-withCause-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + cause Cause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSession-List-withCause-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSession-List-withCause-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSession-List-withDataForwardingFromTarget ::= SEQUENCE (SIZE (1.. maxnoofPDUSessions)) OF + PDUSession-List-withDataForwardingFromTarget-Item + +PDUSession-List-withDataForwardingFromTarget-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + dataforwardinginfoTarget DataForwardingInfoFromTargetNGRANnode, + iE-Extension ProtocolExtensionContainer { {PDUSession-List-withDataForwardingFromTarget-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSession-List-withDataForwardingFromTarget-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-DRB-IDs-takenintouse CRITICALITY reject EXTENSION DRB-List PRESENCE optional}, + ... +} + + +PDUSession-List-withDataForwardingRequest ::= SEQUENCE (SIZE (1.. maxnoofPDUSessions)) OF + PDUSession-List-withDataForwardingRequest-Item + +PDUSession-List-withDataForwardingRequest-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + dataforwardingInfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + dRBtoBeReleasedList DRBToQoSFlowMapping-List OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSession-List-withDataForwardingRequest-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSession-List-withDataForwardingRequest-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + +-- ************************************************************** +-- +-- PDU Session related message level IEs BEGIN +-- +-- ************************************************************** + + +-- ************************************************************** +-- +-- PDU Session Resources Admitted List +-- +-- ************************************************************** + + +PDUSessionResourcesAdmitted-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourcesAdmitted-Item + +PDUSessionResourcesAdmitted-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + pduSessionResourceAdmittedInfo PDUSessionResourceAdmittedInfo, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourcesAdmitted-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourcesAdmitted-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSessionResourceAdmittedInfo ::= SEQUENCE { + dL-NG-U-TNL-Information-Unchanged ENUMERATED {true, ...} OPTIONAL, + qosFlowsAdmitted-List QoSFlowsAdmitted-List, + qosFlowsNotAdmitted-List QoSFlows-List-withCause OPTIONAL, + dataForwardingInfoFromTarget DataForwardingInfoFromTargetNGRANnode OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceAdmittedInfo-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceAdmittedInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-SecondarydataForwardingInfoFromTarget-List CRITICALITY ignore EXTENSION SecondarydataForwardingInfoFromTarget-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resources Not Admitted List +-- +-- ************************************************************** + + +PDUSessionResourcesNotAdmitted-List ::= SEQUENCE (SIZE (1..maxnoofPDUSessions)) OF PDUSessionResourcesNotAdmitted-Item + +PDUSessionResourcesNotAdmitted-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + cause Cause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {PDUSessionResourcesNotAdmitted-Item-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourcesNotAdmitted-Item-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resources To Be Setup List +-- +-- ************************************************************** + + +PDUSessionResourcesToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourcesToBeSetup-Item + +PDUSessionResourcesToBeSetup-Item ::= SEQUENCE { + pduSessionId PDUSession-ID, + s-NSSAI S-NSSAI, + pduSessionAMBR PDUSessionAggregateMaximumBitRate OPTIONAL, + uL-NG-U-TNLatUPF UPTransportLayerInformation, + source-DL-NG-U-TNL-Information UPTransportLayerInformation OPTIONAL, + securityIndication SecurityIndication OPTIONAL, + pduSessionType PDUSessionType, + pduSessionNetworkInstance PDUSessionNetworkInstance OPTIONAL, + qosFlowsToBeSetup-List QoSFlowsToBeSetup-List, + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourcesToBeSetup-Item-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourcesToBeSetup-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-Additional-UL-NG-U-TNLatUPF-List CRITICALITY ignore EXTENSION Additional-UL-NG-U-TNLatUPF-List PRESENCE optional}| +{ ID id-PDUSessionCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}| +{ ID id-Redundant-UL-NG-U-TNLatUPF CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}| +{ ID id-Additional-Redundant-UL-NG-U-TNLatUPF-List CRITICALITY ignore EXTENSION Additional-UL-NG-U-TNLatUPF-List PRESENCE optional}| +{ ID id-RedundantCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}| +{ ID id-RedundantPDUSessionInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Setup Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceSetupInfo-SNterminated ::= SEQUENCE { + uL-NG-U-TNLatUPF UPTransportLayerInformation, + pduSessionType PDUSessionType, + pduSessionNetworkInstance PDUSessionNetworkInstance OPTIONAL, + qosFlowsToBeSetup-List QoSFlowsToBeSetup-List-Setup-SNterminated, + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + securityIndication SecurityIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-SecurityResult CRITICALITY reject EXTENSION SecurityResult PRESENCE optional}| + { ID id-PDUSessionCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}| + {ID id-DefaultDRB-Allowed CRITICALITY ignore EXTENSION DefaultDRB-Allowed PRESENCE optional}| + { ID id-SplitSessionIndicator CRITICALITY reject EXTENSION SplitSessionIndicator PRESENCE optional}| + {ID id-NonGBRResources-Offered CRITICALITY ignore EXTENSION NonGBRResources-Offered PRESENCE optional}| + { ID id-Redundant-UL-NG-U-TNLatUPF CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}| + { ID id-RedundantCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}| + { ID id-RedundantPDUSessionInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional}, + ... +} + +QoSFlowsToBeSetup-List-Setup-SNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF QoSFlowsToBeSetup-List-Setup-SNterminated-Item + +QoSFlowsToBeSetup-List-Setup-SNterminated-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + qosFlowLevelQoSParameters QoSFlowLevelQoSParameters, + offeredGBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsToBeSetup-List-Setup-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsToBeSetup-List-Setup-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional}| + { ID id-RedundantQoSFlowIndicator CRITICALITY ignore EXTENSION RedundantQoSFlowIndicator PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- PDU Session Resource Setup Response Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceSetupResponseInfo-SNterminated ::= SEQUENCE { + dL-NG-U-TNLatNG-RAN UPTransportLayerInformation, + dRBsToBeSetup DRBsToBeSetupList-SetupResponse-SNterminated OPTIONAL, + dataforwardinginfoTarget DataForwardingInfoFromTargetNGRANnode OPTIONAL, + qosFlowsNotAdmittedList QoSFlows-List-withCause OPTIONAL, + securityResult SecurityResult OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupResponseInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupResponseInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Redundant-DL-NG-U-TNLatNG-RAN CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}| + { ID id-UsedRSNInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional}, + ... +} + +DRBsToBeSetupList-SetupResponse-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeSetupList-SetupResponse-SNterminated-Item + +DRBsToBeSetupList-SetupResponse-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-UL-PDCP-UP-TNLInfo UPTransportParameters, + dRB-QoS QoSFlowLevelQoSParameters, + pDCP-SNLength PDCPSNLength OPTIONAL, + rLC-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, + secondary-SN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + qoSFlowsMappedtoDRB-SetupResponse-SNterminated QoSFlowsMappedtoDRB-SetupResponse-SNterminated, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeSetupList-SetupResponse-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeSetupList-SetupResponse-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + +QoSFlowsMappedtoDRB-SetupResponse-SNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF + QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item + +QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item ::= SEQUENCE { + qoSFlowIdentifier QoSFlowIdentifier, + mCGRequestedGBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + qosFlowMappingIndication QoSFlowMappingIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Setup Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceSetupInfo-MNterminated ::= SEQUENCE { + pduSessionType PDUSessionType, + dRBsToBeSetup DRBsToBeSetupList-Setup-MNterminated, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToBeSetupList-Setup-MNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeSetupList-Setup-MNterminated-Item + +DRBsToBeSetupList-Setup-MNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + mN-UL-PDCP-UP-TNLInfo UPTransportParameters, + rLC-Mode RLCMode, + uL-Configuration ULConfiguration OPTIONAL, + dRB-QoS QoSFlowLevelQoSParameters, + pDCP-SNLength PDCPSNLength OPTIONAL, + secondary-MN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + qoSFlowsMappedtoDRB-Setup-MNterminated QoSFlowsMappedtoDRB-Setup-MNterminated, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeSetupList-Setup-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeSetupList-Setup-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + +QoSFlowsMappedtoDRB-Setup-MNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF QoSFlowsMappedtoDRB-Setup-MNterminated-Item + +QoSFlowsMappedtoDRB-Setup-MNterminated-Item ::= SEQUENCE { + qoSFlowIdentifier QoSFlowIdentifier, + qoSFlowLevelQoSParameters QoSFlowLevelQoSParameters, + qosFlowMappingIndication QoSFlowMappingIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsMappedtoDRB-Setup-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsMappedtoDRB-Setup-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Setup Response Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceSetupResponseInfo-MNterminated ::= SEQUENCE { + dRBsAdmittedList DRBsAdmittedList-SetupResponse-MNterminated, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupResponseInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupResponseInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-DRBsNotAdmittedSetupModifyList CRITICALITY ignore EXTENSION DRB-List-withCause PRESENCE optional}, + ... +} + +DRBsAdmittedList-SetupResponse-MNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsAdmittedList-SetupResponse-MNterminated-Item + +DRBsAdmittedList-SetupResponse-MNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-DL-SCG-UP-TNLInfo UPTransportParameters, + secondary-SN-DL-SCG-UP-TNLInfo UPTransportParameters OPTIONAL, + lCID LCID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsAdmittedList-SetupResponse-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsAdmittedList-SetupResponse-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModificationInfo-SNterminated ::= SEQUENCE { + uL-NG-U-TNLatUPF UPTransportLayerInformation OPTIONAL, + pduSessionNetworkInstance PDUSessionNetworkInstance OPTIONAL, + qosFlowsToBeSetup-List QoSFlowsToBeSetup-List-Setup-SNterminated OPTIONAL, + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + qosFlowsToBeModified-List QoSFlowsToBeSetup-List-Modified-SNterminated OPTIONAL, + qoSFlowsToBeReleased-List QoSFlows-List-withCause OPTIONAL, + drbsToBeModifiedList DRBsToBeModified-List-Modified-SNterminated OPTIONAL, + dRBsToBeReleased DRB-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModificationInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModificationInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-PDUSessionCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}| + {ID id-DefaultDRB-Allowed CRITICALITY ignore EXTENSION DefaultDRB-Allowed PRESENCE optional}| + {ID id-NonGBRResources-Offered CRITICALITY ignore EXTENSION NonGBRResources-Offered PRESENCE optional}| + {ID id-Redundant-UL-NG-U-TNLatUPF CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}| + {ID id-RedundantCommonNetworkInstance CRITICALITY ignore EXTENSION PDUSessionCommonNetworkInstance PRESENCE optional}, + ... +} + +QoSFlowsToBeSetup-List-Modified-SNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF QoSFlowsToBeSetup-List-Modified-SNterminated-Item + +QoSFlowsToBeSetup-List-Modified-SNterminated-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + qosFlowLevelQoSParameters QoSFlowLevelQoSParameters OPTIONAL, + offeredGBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + qosFlowMappingIndication QoSFlowMappingIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsToBeSetup-List-Modified-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsToBeSetup-List-Modified-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional}| + { ID id-RedundantQoSFlowIndicator CRITICALITY ignore EXTENSION RedundantQoSFlowIndicator PRESENCE optional}, + ... +} + +DRBsToBeModified-List-Modified-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeModified-List-Modified-SNterminated-Item + +DRBsToBeModified-List-Modified-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + mN-DL-SCG-UP-TNLInfo UPTransportParameters OPTIONAL, + secondary-MN-DL-SCG-UP-TNLInfo UPTransportParameters OPTIONAL, + lCID LCID OPTIONAL, + rlc-status RLC-Status OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeModified-List-Modified-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeModified-List-Modified-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- PDU Session Resource Modification Response Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModificationResponseInfo-SNterminated ::= SEQUENCE { + dL-NG-U-TNLatNG-RAN UPTransportLayerInformation OPTIONAL, + dRBsToBeSetup DRBsToBeSetupList-SetupResponse-SNterminated OPTIONAL, + dataforwardinginfoTarget DataForwardingInfoFromTargetNGRANnode OPTIONAL, + dRBsToBeModified DRBsToBeModifiedList-ModificationResponse-SNterminated OPTIONAL, + dRBsToBeReleased DRB-List-withCause OPTIONAL, + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + qosFlowsNotAdmittedTBAdded QoSFlows-List-withCause OPTIONAL, + qosFlowsReleased QoSFlows-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModificationResponseInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModificationResponseInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-DRB-IDs-takenintouse CRITICALITY reject EXTENSION DRB-List PRESENCE optional}| + { ID id-Redundant-DL-NG-U-TNLatNG-RAN CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}, + ... +} + +DRBsToBeModifiedList-ModificationResponse-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF + DRBsToBeModifiedList-ModificationResponse-SNterminated-Item + +DRBsToBeModifiedList-ModificationResponse-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + dRB-QoS QoSFlowLevelQoSParameters OPTIONAL, + qoSFlowsMappedtoDRB-SetupResponse-SNterminated QoSFlowsMappedtoDRB-SetupResponse-SNterminated OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeModifiedList-ModificationResponse-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeModifiedList-ModificationResponse-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModificationInfo-MNterminated ::= SEQUENCE { + pduSessionType PDUSessionType, + dRBsToBeSetup DRBsToBeSetupList-Setup-MNterminated OPTIONAL, + dRBsToBeModified DRBsToBeModifiedList-Modification-MNterminated OPTIONAL, + dRBsToBeReleased DRB-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModificationInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModificationInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToBeModifiedList-Modification-MNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF + DRBsToBeModifiedList-Modification-MNterminated-Item + +DRBsToBeModifiedList-Modification-MNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + mN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + dRB-QoS QoSFlowLevelQoSParameters OPTIONAL, + secondary-MN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + pdcpDuplicationConfiguration PDCPDuplicationConfiguration OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + qoSFlowsMappedtoDRB-Setup-MNterminated QoSFlowsMappedtoDRB-Setup-MNterminated OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeModifiedList-Modification-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeModifiedList-Modification-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Response Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModificationResponseInfo-MNterminated ::= SEQUENCE { + dRBsAdmittedList DRBsAdmittedList-ModificationResponse-MNterminated, + dRBsReleasedList DRB-List OPTIONAL, + dRBsNotAdmittedSetupModifyList DRB-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModificationResponseInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModificationResponseInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsAdmittedList-ModificationResponse-MNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsAdmittedList-ModificationResponse-MNterminated-Item + +DRBsAdmittedList-ModificationResponse-MNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-DL-SCG-UP-TNLInfo UPTransportParameters OPTIONAL, + secondary-SN-DL-SCG-UP-TNLInfo UPTransportParameters OPTIONAL, + lCID LCID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsAdmittedList-ModificationResponse-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsAdmittedList-ModificationResponse-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Change Required Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceChangeRequiredInfo-SNterminated ::= SEQUENCE { + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceChangeRequiredInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceChangeRequiredInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Change Confirm Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceChangeConfirmInfo-SNterminated ::= SEQUENCE { + dataforwardinginfoTarget DataForwardingInfoFromTargetNGRANnode OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceChangeConfirmInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceChangeConfirmInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-DRB-IDs-takenintouse CRITICALITY reject EXTENSION DRB-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Change Required Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceChangeRequiredInfo-MNterminated ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceChangeRequiredInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceChangeRequiredInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Change Confirm Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceChangeConfirmInfo-MNterminated ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceChangeConfirmInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceChangeConfirmInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Required Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModRqdInfo-SNterminated ::= SEQUENCE { + dL-NG-U-TNLatNG-RAN UPTransportLayerInformation OPTIONAL, + qoSFlowsToBeReleased-List QoSFlows-List-withCause OPTIONAL, + dataforwardinginfofromSource DataforwardingandOffloadingInfofromSource OPTIONAL, + drbsToBeSetupList DRBsToBeSetup-List-ModRqd-SNterminated OPTIONAL, + drbsToBeModifiedList DRBsToBeModified-List-ModRqd-SNterminated OPTIONAL, + dRBsToBeReleased DRB-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModRqdInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModRqdInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToBeSetup-List-ModRqd-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeSetup-List-ModRqd-SNterminated-Item + +DRBsToBeSetup-List-ModRqd-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + pDCP-SNLength PDCPSNLength OPTIONAL, + sn-UL-PDCP-UPTNLinfo UPTransportParameters, + dRB-QoS QoSFlowLevelQoSParameters, + secondary-SN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + qoSFlowsMappedtoDRB-ModRqd-SNterminated QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated, + rLC-Mode RLCMode, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeSetup-List-ModRqd-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeSetup-List-ModRqd-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + +QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF + QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item + +QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item ::= SEQUENCE { + qoSFlowIdentifier QoSFlowIdentifier, + mCGRequestedGBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToBeModified-List-ModRqd-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeModified-List-ModRqd-SNterminated-Item + +DRBsToBeModified-List-ModRqd-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + dRB-QoS QoSFlowLevelQoSParameters OPTIONAL, + secondary-SN-UL-PDCP-UP-TNLInfo UPTransportParameters OPTIONAL, + uL-Configuration ULConfiguration OPTIONAL, + pdcpDuplicationConfiguration PDCPDuplicationConfiguration OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + qoSFlowsMappedtoDRB-ModRqd-SNterminated QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeModified-List-ModRqd-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeModified-List-ModRqd-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + +QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF + QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item + +QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item ::= SEQUENCE { + qoSFlowIdentifier QoSFlowIdentifier, + mCGRequestedGBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Confirm Info - SN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModConfirmInfo-SNterminated ::= SEQUENCE { + uL-NG-U-TNLatUPF UPTransportLayerInformation OPTIONAL, + dRBsAdmittedList DRBsAdmittedList-ModConfirm-SNterminated, + dRBsNotAdmittedSetupModifyList DRB-List-withCause OPTIONAL, + dataforwardinginfoTarget DataForwardingInfoFromTargetNGRANnode OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModConfirmInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModConfirmInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-DRB-IDs-takenintouse CRITICALITY reject EXTENSION DRB-List PRESENCE optional}, + ... +} + +DRBsAdmittedList-ModConfirm-SNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF + DRBsAdmittedList-ModConfirm-SNterminated-Item + +DRBsAdmittedList-ModConfirm-SNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + mN-DL-CG-UP-TNLInfo UPTransportParameters OPTIONAL, + secondary-MN-DL-CG-UP-TNLInfo UPTransportParameters OPTIONAL, + lCID LCID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsAdmittedList-ModConfirm-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsAdmittedList-ModConfirm-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Required Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModRqdInfo-MNterminated ::= SEQUENCE { + dRBsToBeModified DRBsToBeModified-List-ModRqd-MNterminated OPTIONAL, + dRBsToBeReleased DRB-List-withCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModRqdInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModRqdInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBsToBeModified-List-ModRqd-MNterminated ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeModified-List-ModRqd-MNterminated-Item + +DRBsToBeModified-List-ModRqd-MNterminated-Item ::= SEQUENCE { + drb-ID DRB-ID, + sN-DL-SCG-UP-TNLInfo UPTransportLayerInformation, + secondary-SN-DL-SCG-UP-TNLInfo UPTransportLayerInformation OPTIONAL, + lCID LCID OPTIONAL, + rlc-status RLC-Status OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeModified-List-ModRqd-MNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeModified-List-ModRqd-MNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-Additional-PDCP-Duplication-TNL-List CRITICALITY ignore EXTENSION Additional-PDCP-Duplication-TNL-List PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modification Confirm Info - MN terminated +-- +-- ************************************************************** + + +PDUSessionResourceModConfirmInfo-MNterminated ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModConfirmInfo-MNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModConfirmInfo-MNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Setup Complete Info - SN terminated +-- +-- ************************************************************** + +PDUSessionResourceBearerSetupCompleteInfo-SNterminated ::= SEQUENCE { + dRBsToBeSetupList SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceBearerSetupCompleteInfo-SNterminated-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceBearerSetupCompleteInfo-SNterminated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item ::= SEQUENCE { + dRB-ID DRB-ID, + mN-Xn-U-TNLInfoatM UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-Secondary-MN-Xn-U-TNLInfoatM CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- PDU Session related message level IEs END +-- +-- ************************************************************** + +PDUSessionResourceSecondaryRATUsageList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSecondaryRATUsageItem + +PDUSessionResourceSecondaryRATUsageItem ::= SEQUENCE { + pDUSessionID PDUSession-ID, + secondaryRATUsageInformation SecondaryRATUsageInformation, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSecondaryRATUsageItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSecondaryRATUsageItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionUsageReport ::= SEQUENCE { + rATType ENUMERATED {nr, eutra, ..., nr-unlicensed, e-utra-unlicensed}, + pDUSessionTimedReportList VolumeTimedReportList, + iE-Extensions ProtocolExtensionContainer { {PDUSessionUsageReport-ExtIEs} } OPTIONAL, +... +} + +PDUSessionUsageReport-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionType ::= ENUMERATED {ipv4, ipv6, ipv4v6, ethernet, unstructured, ...} + +PDUSession-ID ::= INTEGER (0..255) + +PDUSessionNetworkInstance ::= INTEGER (1..256, ...) + +PDUSessionCommonNetworkInstance ::= OCTET STRING + +Periodical ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { { Periodical-ExtIEs} } OPTIONAL, + ... +} + +Periodical-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PLMN-Identity ::= OCTET STRING (SIZE(3)) + +PCIListForMDT ::= SEQUENCE (SIZE(1.. maxnoofNeighPCIforMDT)) OF NRPCI + + +PNI-NPN-Restricted-Information ::= ENUMERATED { restriced, not-restricted, ...} + +PortNumber ::= BIT STRING (SIZE (16)) + +PriorityLevelQoS ::= INTEGER (1..127, ...) + + +ProtectedE-UTRAResourceIndication ::= SEQUENCE { + activationSFN ActivationSFN, + protectedResourceList ProtectedE-UTRAResourceList, + mbsfnControlRegionLength MBSFNControlRegionLength OPTIONAL, + pDCCHRegionLength INTEGER (1..3), + iE-Extensions ProtocolExtensionContainer { {ProtectedE-UTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} + +ProtectedE-UTRAResourceIndication-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ProtectedE-UTRAResourceList ::= SEQUENCE (SIZE (1.. maxnoofProtectedResourcePatterns)) OF ProtectedE-UTRAResource-Item + +ProtectedE-UTRAResource-Item ::= SEQUENCE { + resourceType ENUMERATED {downlinknonCRS, cRS, uplink, ...}, + intra-PRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedE-UTRAFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedE-UTRAResource-Item-ExtIEs} } OPTIONAL, + ... +} + +ProtectedE-UTRAResource-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ProtectedE-UTRAFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimeperiodicity INTEGER (1..320, ...), + protectedFootrpintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedE-UTRAFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} + +ProtectedE-UTRAFootprintTimePattern-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- Q + + +QoSCharacteristics ::= CHOICE { + non-dynamic NonDynamic5QIDescriptor, + dynamic Dynamic5QIDescriptor, + choice-extension ProtocolIE-Single-Container { {QoSCharacteristics-ExtIEs} } +} + +QoSCharacteristics-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +QoSFlowIdentifier ::= INTEGER (0..63, ...) + + +QoSFlowLevelQoSParameters ::= SEQUENCE { + qos-characteristics QoSCharacteristics, + allocationAndRetentionPrio AllocationandRetentionPriority, + gBRQoSFlowInfo GBRQoSFlowInfo OPTIONAL, + relectiveQoS ReflectiveQoSAttribute OPTIONAL, + additionalQoSflowInfo ENUMERATED {more-likely, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QoSFlowLevelQoSParameters-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowLevelQoSParameters-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + {ID id-QoSMonitoringRequest CRITICALITY ignore EXTENSION QosMonitoringRequest PRESENCE optional}, + ... +} + + +QoSFlowMappingIndication ::= ENUMERATED { + ul, + dl, + ... +} + + +QoSFlowNotificationControlIndicationInfo ::= SEQUENCE (SIZE (1..maxnoofQoSFlows)) OF QoSFlowNotify-Item + +QoSFlowNotify-Item ::= SEQUENCE { + qosFlowIdentifier QoSFlowIdentifier, + notificationInformation ENUMERATED {fulfilled, not-fulfilled, ...}, + iE-Extensions ProtocolExtensionContainer { {QoSFlowNotificationControlIndicationInfo-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowNotificationControlIndicationInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetNotifyIndex PRESENCE optional }, + ... +} + + +QoSFlows-List ::= SEQUENCE (SIZE (1..maxnoofQoSFlows)) OF QoSFlow-Item + +QoSFlow-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + qosFlowMappingIndication QoSFlowMappingIndication OPTIONAL, + iE-Extension ProtocolExtensionContainer { {QoSFlow-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlow-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +QoSFlows-List-withCause ::= SEQUENCE (SIZE (1..maxnoofQoSFlows)) OF QoSFlowwithCause-Item + +QoSFlowwithCause-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + cause Cause OPTIONAL, + iE-Extension ProtocolExtensionContainer { {QoSFlowwithCause-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowwithCause-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +QoSParaSetIndex ::= INTEGER (1..8,...) +QoSParaSetNotifyIndex ::= INTEGER (0..8,...) + + +QoSFlowsAdmitted-List ::= SEQUENCE (SIZE (1..maxnoofQoSFlows)) OF QoSFlowsAdmitted-Item + +QoSFlowsAdmitted-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + iE-Extension ProtocolExtensionContainer { {QoSFlowsAdmitted-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsAdmitted-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +{ ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetIndex PRESENCE optional }, + ... +} + + +QoSFlowsToBeSetup-List ::= SEQUENCE (SIZE (1..maxnoofQoSFlows)) OF QoSFlowsToBeSetup-Item + +QoSFlowsToBeSetup-Item ::= SEQUENCE { + qfi QoSFlowIdentifier, + qosFlowLevelQoSParameters QoSFlowLevelQoSParameters, + e-RAB-ID E-RAB-ID OPTIONAL, + iE-Extension ProtocolExtensionContainer { {QoSFlowsToBeSetup-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsToBeSetup-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional}| + { ID id-RedundantQoSFlowIndicator CRITICALITY ignore EXTENSION RedundantQoSFlowIndicator PRESENCE optional}, + ... +} + +QoSFlowsUsageReportList ::= SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF QoSFlowsUsageReport-Item + +QoSFlowsUsageReport-Item ::= SEQUENCE { + qosFlowIdentifier QoSFlowIdentifier, + rATType ENUMERATED {nr, eutra, ..., nr-unlicensed, e-utra-unlicensed}, + qoSFlowsTimedReportList VolumeTimedReportList, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsUsageReport-Item-ExtIEs} } OPTIONAL, +... +} + +QoSFlowsUsageReport-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosMonitoringRequest ::= ENUMERATED {ul, dl, both} + +-- R + +RACHReportInformation ::= SEQUENCE (SIZE(1.. maxnoofRACHReports)) OF RACHReportList-Item +RACHReportList-Item ::= SEQUENCE { + rACHReport RACHReportContainer, + iE-Extensions ProtocolExtensionContainer { { RACHReportList-Item-ExtIEs} } OPTIONAL, + ... +} + +RACHReportList-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RACHReportContainer ::= OCTET STRING + + +RadioResourceStatus ::= CHOICE { + ng-eNB-RadioResourceStatus NG-eNB-RadioResourceStatus, + gNB-RadioResourceStatus GNB-RadioResourceStatus, + choice-extension ProtocolIE-Single-Container { { RadioResourceStatus-ExtIEs} } + +} + +RadioResourceStatus-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +RANAC ::= INTEGER (0..255) + + +RANAreaID ::= SEQUENCE { + tAC TAC, + rANAC RANAC OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RANAreaID-ExtIEs} } OPTIONAL, + ... +} + +RANAreaID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RANAreaID-List ::= SEQUENCE (SIZE(1..maxnoofRANAreasinRNA)) OF RANAreaID + +Range ::= ENUMERATED {m50, m80, m180, m200, m350, m400, m500, m700, m1000, ...} + +RANPagingArea ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + rANPagingAreaChoice RANPagingAreaChoice, + iE-Extensions ProtocolExtensionContainer { {RANPagingArea-ExtIEs} } OPTIONAL, + ... +} + +RANPagingArea-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RANPagingAreaChoice ::= CHOICE { + cell-List NG-RAN-Cell-Identity-ListinRANPagingArea, + rANAreaID-List RANAreaID-List, + choice-extension ProtocolIE-Single-Container { {RANPagingAreaChoice-ExtIEs} } +} + +RANPagingAreaChoice-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +RANPagingAttemptInfo ::= SEQUENCE { + pagingAttemptCount INTEGER (1..16, ...), + intendedNumberOfPagingAttempts INTEGER (1..16, ...), + nextPagingAreaScope ENUMERATED {same, changed, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RANPagingAttemptInfo-ExtIEs} } OPTIONAL, + ... +} + +RANPagingAttemptInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RANPagingFailure ::= ENUMERATED { + true, + ... +} + +RedundantQoSFlowIndicator ::= ENUMERATED {true, false} + +RedundantPDUSessionInformation ::= SEQUENCE { + rSN RSN, + iE-Extensions ProtocolExtensionContainer { {RedundantPDUSessionInformation-ExtIEs} } OPTIONAL, + ... +} + +RedundantPDUSessionInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RSN ::= ENUMERATED {v1, v2, ...} + +ReferenceID ::= INTEGER (1..64, ...) -- This IE may need to be refined. + + +ReflectiveQoSAttribute ::= ENUMERATED {subject-to-reflective-QoS, ...} + +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, infinity, ...} + + +ReportArea ::= ENUMERATED { + cell, + ... +} + +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60, ...} + +ReportType ::= CHOICE { + periodical Periodical, + eventTriggered EventTriggered, + ... +} + +ReportCharacteristics ::= BIT STRING(SIZE(32)) + + +ReportingPeriodicity ::= ENUMERATED { + half-thousand-ms, +one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} + + +RegistrationRequest ::= ENUMERATED {start, stop, add, ... } + +RequestReferenceID ::= INTEGER (1..64, ...) + + +ReservedSubframePattern ::= SEQUENCE { + subframeType ENUMERATED {mbsfn, non-mbsfn, ...}, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mbsfnControlRegionLength MBSFNControlRegionLength OPTIONAL, + iE-Extension ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} + +ReservedSubframePattern-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + +ResetRequestTypeInfo ::= CHOICE { + fullReset ResetRequestTypeInfo-Full, + partialReset ResetRequestTypeInfo-Partial, + choice-extension ProtocolIE-Single-Container { {ResetRequestTypeInfo-ExtIEs} } +} + +ResetRequestTypeInfo-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +ResetRequestTypeInfo-Full ::= SEQUENCE { + iE-Extension ProtocolExtensionContainer { {ResetRequestTypeInfo-Full-ExtIEs} } OPTIONAL, + ... +} + +ResetRequestTypeInfo-Full-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResetRequestTypeInfo-Partial ::= SEQUENCE { + ue-contexts-ToBeReleasedList ResetRequestPartialReleaseList, + iE-Extension ProtocolExtensionContainer { {ResetRequestTypeInfo-Partial-ExtIEs} } OPTIONAL, + ... +} + +ResetRequestTypeInfo-Partial-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResetRequestPartialReleaseList ::= SEQUENCE (SIZE(1..maxnoofUEContexts)) OF ResetRequestPartialReleaseItem + +ResetRequestPartialReleaseItem ::= SEQUENCE { + ng-ran-node1UEXnAPID NG-RANnodeUEXnAPID OPTIONAL, + ng-ran-node2UEXnAPID NG-RANnodeUEXnAPID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResetRequestPartialReleaseItem-ExtIEs} } OPTIONAL, + ... +} + +ResetRequestPartialReleaseItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ResetResponseTypeInfo ::= CHOICE { + fullReset ResetResponseTypeInfo-Full, + partialReset ResetResponseTypeInfo-Partial, + choice-extension ProtocolIE-Single-Container { {ResetResponseTypeInfo-ExtIEs} } +} + +ResetResponseTypeInfo-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +ResetResponseTypeInfo-Full ::= SEQUENCE { + iE-Extension ProtocolExtensionContainer { {ResetResponseTypeInfo-Full-ExtIEs} } OPTIONAL, + ... +} + +ResetResponseTypeInfo-Full-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResetResponseTypeInfo-Partial ::= SEQUENCE { + ue-contexts-AdmittedToBeReleasedList ResetResponsePartialReleaseList, + iE-Extension ProtocolExtensionContainer { {ResetResponseTypeInfo-Partial-ExtIEs} } OPTIONAL, + ... +} + +ResetResponseTypeInfo-Partial-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResetResponsePartialReleaseList ::= SEQUENCE (SIZE(1..maxnoofUEContexts)) OF ResetResponsePartialReleaseItem + +ResetResponsePartialReleaseItem ::= SEQUENCE { + ng-ran-node1UEXnAPID NG-RANnodeUEXnAPID OPTIONAL, + ng-ran-node2UEXnAPID NG-RANnodeUEXnAPID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ResetResponsePartialReleaseItem-ExtIEs} } OPTIONAL, + ... +} + +ResetResponsePartialReleaseItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... + } + + +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} + +RLC-Status-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCDuplicationInformation ::= SEQUENCE { + rLCDuplicationStateList RLCDuplicationStateList, + rLC-PrimaryIndicator ENUMERATED {true, false} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RLCDuplicationInformation-ItemExtIEs} } OPTIONAL +} + +RLCDuplicationInformation-ItemExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCDuplicationStateList ::= SEQUENCE (SIZE(1..maxnoofRLCDuplicationstate)) OF RLCDuplicationState-Item + +RLCDuplicationState-Item ::= SEQUENCE { + duplicationState ENUMERATED {active,inactive, ...}, + iE-Extensions ProtocolExtensionContainer { {RLCDuplicationState-ItemExtIEs } } OPTIONAL, + ... +} + +RLCDuplicationState-ItemExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} + + +RFSP-Index ::= INTEGER (1..256) + + +RRCConfigIndication ::= ENUMERATED { + full-config, + delta-config, + ... +} + +RRCConnections::= SEQUENCE { + noofRRCConnections NoofRRCConnections, + availableRRCConnectionCapacityValue AvailableRRCConnectionCapacityValue, + iE-Extensions ProtocolExtensionContainer { { RRCConnections-ExtIEs} } OPTIONAL, + ... +} + +RRCConnections-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RRCReestab-initiated ::= SEQUENCE { + failureCellPCI NG-RAN-CellPCI ,-- This IE shall be present if the UE RLF Report Container IE is absent +reestabCellCGI GlobalNG-RANCell-ID, -- This IE shall be present if the UE RLF Report Container IE is absent +c-RNTI C-RNTI, -- This IE shall be present if the UE RLF Report Container IE is absent +shortMAC-I MAC-I, -- This IE shall be present if the UE RLF Report Container IE is absent +uERLFReportContainer UERLFReportContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { RRCReestab-initiated-ExtIEs} } OPTIONAL, + ... +} + +RRCReestab-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RRCSetup-initiated ::= SEQUENCE { + uERLFReportContainer UERLFReportContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { RRCSetup-initiated-ExtIEs} } OPTIONAL, + ... +} + +RRCSetup-initiated-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +RRCResumeCause ::= ENUMERATED { + rna-Update, + ... +} + + +-- S + +SecondarydataForwardingInfoFromTarget-Item::= SEQUENCE { + secondarydataForwardingInfoFromTarget DataForwardingInfoFromTargetNGRANnode, + iE-Extensions ProtocolExtensionContainer { { SecondarydataForwardingInfoFromTarget-Item-ExtIEs} } OPTIONAL, + ... +} + +SecondarydataForwardingInfoFromTarget-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SecondarydataForwardingInfoFromTarget-List ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF SecondarydataForwardingInfoFromTarget-Item + +SCGConfigurationQuery ::= ENUMERATED {true, ...} + +SecondaryRATUsageInformation ::= SEQUENCE { + pDUSessionUsageReport PDUSessionUsageReport OPTIONAL, + qosFlowsUsageReportList QoSFlowsUsageReportList OPTIONAL, + iE-Extension ProtocolExtensionContainer { {SecondaryRATUsageInformation-ExtIEs} } OPTIONAL, + ... +} + +SecondaryRATUsageInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SecurityIndication ::= SEQUENCE { + integrityProtectionIndication ENUMERATED {required, preferred, not-needed, ...}, + confidentialityProtectionIndication ENUMERATED {required, preferred, not-needed, ...}, + maximumIPdatarate MaximumIPdatarate OPTIONAL, +-- This IE shall be present if the Integrity Protection IE within the Security Indication IE is present and set to "required" or "preferred". -- + iE-Extensions ProtocolExtensionContainer { {SecurityIndication-ExtIEs} } OPTIONAL, + ... +} + +SecurityIndication-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SecurityResult ::= SEQUENCE { + integrityProtectionResult ENUMERATED {performed, not-performed, ...}, + confidentialityProtectionResult ENUMERATED {performed, not-performed, ...}, + iE-Extensions ProtocolExtensionContainer { {SecurityResult-ExtIEs} } OPTIONAL, + ... +} + +SecurityResult-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SensorMeasurementConfiguration ::= SEQUENCE { + sensorMeasConfig SensorMeasConfig, + sensorMeasConfigNameList SensorMeasConfigNameList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SensorMeasurementConfiguration-ExtIEs } } OPTIONAL, + ... +} + +SensorMeasurementConfiguration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SensorMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofSensorName)) OF SensorName + +SensorMeasConfig::= ENUMERATED {setup,...} + +SensorName ::= SEQUENCE { + uncompensatedBarometricConfig ENUMERATED {true, ...} OPTIONAL, + ueSpeedConfig ENUMERATED {true, ...} OPTIONAL, + ueOrientationConfig ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SensorNameConfig-ExtIEs} } OPTIONAL, +... +} + +SensorNameConfig-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- Served Cells E-UTRA IEs + + +ServedCellInformation-E-UTRA ::= SEQUENCE { + e-utra-pci E-UTRAPCI, + e-utra-cgi E-UTRA-CGI, + tac TAC, + ranac RANAC OPTIONAL, + broadcastPLMNs SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF ServedCellInformation-E-UTRA-perBPLMN, + e-utra-mode-info ServedCellInformation-E-UTRA-ModeInfo, + numberofAntennaPorts NumberOfAntennaPorts-E-UTRA OPTIONAL, + prach-configuration E-UTRAPRACHConfiguration OPTIONAL, + mBSFNsubframeInfo MBSFNSubframeInfo-E-UTRA OPTIONAL, + multibandInfo E-UTRAMultibandInfoList OPTIONAL, + freqBandIndicatorPriority ENUMERATED {not-broadcast, broadcast, ...} OPTIONAL, + bandwidthReducedSI ENUMERATED {scheduled, ...} OPTIONAL, + protectedE-UTRAResourceIndication ProtectedE-UTRAResourceIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellInformation-E-UTRA-ExtIEs} } OPTIONAL, + ... +} + +ServedCellInformation-E-UTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-BPLMN-ID-Info-EUTRA CRITICALITY ignore EXTENSION BPLMN-ID-Info-EUTRA PRESENCE optional }, + ... +} + + +ServedCellInformation-E-UTRA-perBPLMN ::= SEQUENCE { + plmn-id PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {ServedCellInformation-E-UTRA-perBPLMN-ExtIEs} } OPTIONAL, + ... +} + +ServedCellInformation-E-UTRA-perBPLMN-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServedCellInformation-E-UTRA-ModeInfo ::= CHOICE { + fdd ServedCellInformation-E-UTRA-FDDInfo, + tdd ServedCellInformation-E-UTRA-TDDInfo, + choice-extension ProtocolIE-Single-Container{ {ServedCellInformation-E-UTRA-ModeInfo-ExtIEs} } +} + +ServedCellInformation-E-UTRA-ModeInfo-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +ServedCellInformation-E-UTRA-FDDInfo ::= SEQUENCE { + ul-earfcn E-UTRAARFCN, + dl-earfcn E-UTRAARFCN, + ul-e-utraTxBW E-UTRATransmissionBandwidth, + dl-e-utraTxBW E-UTRATransmissionBandwidth, + iE-Extensions ProtocolExtensionContainer { {ServedCellInformation-E-UTRA-FDDInfo-ExtIEs} } OPTIONAL, + ... +} + +ServedCellInformation-E-UTRA-FDDInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}, + ... +} + + +ServedCellInformation-E-UTRA-TDDInfo ::= SEQUENCE { + earfcn E-UTRAARFCN, + e-utraTxBW E-UTRATransmissionBandwidth, + subframeAssignmnet ENUMERATED {sa0,sa1,sa2,sa3,sa4,sa5,sa6,...}, + specialSubframeInfo SpecialSubframeInfo-E-UTRA, + iE-Extensions ProtocolExtensionContainer { {ServedCellInformation-E-UTRA-TDDInfo-ExtIEs} } OPTIONAL, + ... +} + +ServedCellInformation-E-UTRA-TDDInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NBIoT-UL-DL-AlignmentOffset CRITICALITY reject EXTENSION NBIoT-UL-DL-AlignmentOffset PRESENCE optional}, + ... +} + + +ServedCells-E-UTRA ::= SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF ServedCells-E-UTRA-Item + +ServedCells-E-UTRA-Item ::= SEQUENCE { + served-cell-info-E-UTRA ServedCellInformation-E-UTRA, + neighbour-info-NR NeighbourInformation-NR OPTIONAL, + neighbour-info-E-UTRA NeighbourInformation-E-UTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCells-E-UTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +ServedCells-E-UTRA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServedCellsToUpdate-E-UTRA ::= SEQUENCE { + served-Cells-ToAdd-E-UTRA ServedCells-E-UTRA OPTIONAL, + served-Cells-ToModify-E-UTRA ServedCells-ToModify-E-UTRA OPTIONAL, + served-Cells-ToDelete-E-UTRA SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF E-UTRA-CGI OPTIONAL, +iE-Extensions ProtocolExtensionContainer { {ServedCellsToUpdate-E-UTRA-ExtIEs} } OPTIONAL, + ... +} + +ServedCellsToUpdate-E-UTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServedCells-ToModify-E-UTRA ::= SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF ServedCells-ToModify-E-UTRA-Item + +ServedCells-ToModify-E-UTRA-Item ::= SEQUENCE { + old-ECGI E-UTRA-CGI, + served-cell-info-E-UTRA ServedCellInformation-E-UTRA, + neighbour-info-NR NeighbourInformation-NR OPTIONAL, + neighbour-info-E-UTRA NeighbourInformation-E-UTRA OPTIONAL, + deactivation-indication ENUMERATED {deactivated, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Served-cells-ToModify-E-UTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +Served-cells-ToModify-E-UTRA-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- Served Cells NR IEs + + +ServedCellInformation-NR ::= SEQUENCE { + nrPCI NRPCI, + cellID NR-CGI, + tac TAC, + ranac RANAC OPTIONAL, + broadcastPLMN BroadcastPLMNs, + nrModeInfo NRModeInfo, + measurementTimingConfiguration OCTET STRING, + connectivitySupport Connectivity-Support, + iE-Extensions ProtocolExtensionContainer { {ServedCellInformation-NR-ExtIEs} } OPTIONAL, + ... +} + +ServedCellInformation-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-BPLMN-ID-Info-NR CRITICALITY ignore EXTENSION BPLMN-ID-Info-NR PRESENCE optional }| + { ID id-SSB-PositionsInBurst CRITICALITY ignore EXTENSION SSB-PositionsInBurst PRESENCE optional }| + { ID id-NRCellPRACHConfig CRITICALITY ignore EXTENSION NRCellPRACHConfig PRESENCE optional }| + { ID id-NPN-Broadcast-Information CRITICALITY reject EXTENSION NPN-Broadcast-Information PRESENCE optional }| + { ID id-CSI-RSTransmissionIndication CRITICALITY ignore EXTENSION CSI-RSTransmissionIndication PRESENCE optional }, + ... +} + + +ServedCells-NR ::= SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF ServedCells-NR-Item + +ServedCells-NR-Item ::= SEQUENCE { + served-cell-info-NR ServedCellInformation-NR, + neighbour-info-NR NeighbourInformation-NR OPTIONAL, + neighbour-info-E-UTRA NeighbourInformation-E-UTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCells-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +ServedCells-NR-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServedCells-ToModify-NR ::= SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF ServedCells-ToModify-NR-Item + +ServedCells-ToModify-NR-Item ::= SEQUENCE { + old-NR-CGI NR-CGI, + served-cell-info-NR ServedCellInformation-NR, + neighbour-info-NR NeighbourInformation-NR OPTIONAL, + neighbour-info-E-UTRA NeighbourInformation-E-UTRA OPTIONAL, + deactivation-indication ENUMERATED {deactivated, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Served-cells-ToModify-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +Served-cells-ToModify-NR-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServedCellsToUpdate-NR ::= SEQUENCE { + served-Cells-ToAdd-NR ServedCells-NR OPTIONAL, + served-Cells-ToModify-NR ServedCells-ToModify-NR OPTIONAL, + served-Cells-ToDelete-NR SEQUENCE (SIZE (1..maxnoofCellsinNG-RANnode)) OF NR-CGI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCellsToUpdate-NR-ExtIEs} } OPTIONAL, + ... +} + +ServedCellsToUpdate-NR-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ServingSNPNID ::= SEQUENCE { + plmn-id PLMN-Identity, + nid NID, + iE-Extension ProtocolExtensionContainer { {ServingSNPNID-ExtIEs} } OPTIONAL, + ... +} + +ServingSNPNID-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SharedResourceType ::= CHOICE { + ul-onlySharing SharedResourceType-UL-OnlySharing, + ul-and-dl-Sharing SharedResourceType-ULDL-Sharing, + choice-extension ProtocolIE-Single-Container { {SharedResourceType-ExtIEs} } +} + +SharedResourceType-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +SharedResourceType-UL-OnlySharing ::= SEQUENCE { + ul-resourceBitmap DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {SharedResourceType-UL-OnlySharing-ExtIEs} } OPTIONAL, + ... +} + +SharedResourceType-UL-OnlySharing-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SharedResourceType-ULDL-Sharing ::= CHOICE { + ul-resources SharedResourceType-ULDL-Sharing-UL-Resources, + dl-resources SharedResourceType-ULDL-Sharing-DL-Resources, + choice-extension ProtocolIE-Single-Container { {SharedResourceType-ULDL-Sharing-ExtIEs} } +} + +SharedResourceType-ULDL-Sharing-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +SharedResourceType-ULDL-Sharing-UL-Resources ::= CHOICE { + unchanged NULL, + changed SharedResourceType-ULDL-Sharing-UL-ResourcesChanged, + choice-extension ProtocolIE-Single-Container { {SharedResourceType-ULDL-Sharing-UL-Resources-ExtIEs} } +} + +SharedResourceType-ULDL-Sharing-UL-Resources-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +SharedResourceType-ULDL-Sharing-UL-ResourcesChanged ::= SEQUENCE { + ul-resourceBitmap DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {SharedResourceType-ULDL-Sharing-UL-ResourcesChanged-ExtIEs} } OPTIONAL, + ... +} + +SharedResourceType-ULDL-Sharing-UL-ResourcesChanged-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SharedResourceType-ULDL-Sharing-DL-Resources ::= CHOICE { + unchanged NULL, + changed SharedResourceType-ULDL-Sharing-DL-ResourcesChanged, + choice-extension ProtocolIE-Single-Container { {SharedResourceType-ULDL-Sharing-DL-Resources-ExtIEs} } +} + +SharedResourceType-ULDL-Sharing-DL-Resources-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +SharedResourceType-ULDL-Sharing-DL-ResourcesChanged ::= SEQUENCE { + dl-resourceBitmap DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {SharedResourceType-ULDL-Sharing-DL-ResourcesChanged-ExtIEs} } OPTIONAL, + ... +} + +SharedResourceType-ULDL-Sharing-DL-ResourcesChanged-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceAvailableCapacity ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF SliceAvailableCapacity-Item + +SliceAvailableCapacity-Item ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + sNSSAIAvailableCapacity-List SNSSAIAvailableCapacity-List, + iE-Extensions ProtocolExtensionContainer { { SliceAvailableCapacity-Item-ExtIEs} } OPTIONAL, + ... +} + + +SliceAvailableCapacity-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SNSSAIAvailableCapacity-List ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAIAvailableCapacity-Item + +SNSSAIAvailableCapacity-Item ::= SEQUENCE { + sNSSAI S-NSSAI, + sliceAvailableCapacityValueDownlink INTEGER (0..100), + sliceAvailableCapacityValueUplink INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { SNSSAIAvailableCapacity-Item-ExtIEs } } OPTIONAL +} + +SNSSAIAvailableCapacity-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceSupport-List ::= SEQUENCE (SIZE(1..maxnoofSliceItems)) OF S-NSSAI + +SliceToReport-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF SliceToReport-List-Item + +SliceToReport-List-Item ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + sNSSAIlist SNSSAI-list, + iE-Extensions ProtocolExtensionContainer { { SliceToReport-List-Item-ExtIEs} } OPTIONAL, + ... +} + + +SliceToReport-List-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SNSSAI-list ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAI-Item + +SNSSAI-Item ::= SEQUENCE { + sNSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { { SNSSAI-Item-ExtIEs } } OPTIONAL +} + +SNSSAI-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SlotConfiguration-List ::= SEQUENCE (SIZE (1..maxnoofslots)) OF SlotConfiguration-List-Item + +SlotConfiguration-List-Item ::= SEQUENCE { + slotIndex INTEGER (0..5119), + symbolAllocation-in-Slot SymbolAllocation-in-Slot, + iE-Extensions ProtocolExtensionContainer { {SlotConfiguration-List-Item-ExtIEs} } OPTIONAL, + ... +} + +SlotConfiguration-List-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +S-NG-RANnode-SecurityKey ::= BIT STRING (SIZE(256)) + +S-NG-RANnode-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-MN-HO, + intra-MN-HO, + ... +} + +S-NSSAI ::= SEQUENCE { + sst OCTET STRING (SIZE(1)), + sd OCTET STRING (SIZE(3)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {S-NSSAI-ExtIEs} } OPTIONAL, + ... +} + +S-NSSAI-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +SNTriggered ::=ENUMERATED{ +true, +... +} + +SpecialSubframeInfo-E-UTRA ::= SEQUENCE { + specialSubframePattern SpecialSubframePatterns-E-UTRA, + cyclicPrefixDL CyclicPrefix-E-UTRA-DL, + cyclicPrefixUL CyclicPrefix-E-UTRA-UL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframeInfo-E-UTRA-ExtIEs} } OPTIONAL, + ... +} + +SpecialSubframeInfo-E-UTRA-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SpecialSubframePatterns-E-UTRA ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ssp10, + ... +} + + +SpectrumSharingGroupID ::= INTEGER (1..maxnoofCellsinNG-RANnode) + +SplitSessionIndicator ::= ENUMERATED { + split, + ... +} + +SplitSRBsTypes ::= ENUMERATED {srb1, srb2, srb1and2, ...} + +SSBAreaCapacityValue-List ::= SEQUENCE (SIZE(1..maxnoofSSBAreas)) OF SSBAreaCapacityValue-List-Item + +SSBAreaCapacityValue-List-Item ::= SEQUENCE { +sSBIndex INTEGER(0..63), +ssbAreaCapacityValue INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { SSBAreaCapacityValue-List-Item-ExtIEs} } OPTIONAL, + ... +} + + +SSBAreaCapacityValue-List-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SSBAreaRadioResourceStatus-List ::= SEQUENCE (SIZE(1..maxnoofSSBAreas)) OF SSBAreaRadioResourceStatus-List-Item + +SSBAreaRadioResourceStatus-List-Item ::= SEQUENCE { + sSBIndex INTEGER(0..63), +ssb-Area-DL-GBR-PRB-usage DL-GBR-PRB-usage, +ssb-Area-UL-GBR-PRB-usage UL-GBR-PRB-usage, +ssb-Area-dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + ssb-Area-uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + ssb-Area-dL-Total-PRB-usage DL-Total-PRB-usage, + ssb-Area-uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { { SSBAreaRadioResourceStatus-List-Item-ExtIEs} } OPTIONAL, + ... +} + + +SSBAreaRadioResourceStatus-List-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SSB-PositionsInBurst ::= CHOICE { + shortBitmap BIT STRING (SIZE (4)), + mediumBitmap BIT STRING (SIZE (8)), + longBitmap BIT STRING (SIZE (64)), + choice-extension ProtocolIE-Single-Container { {SSB-PositionsInBurst-ExtIEs} } +} + +SSB-PositionsInBurst-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +SSBToReport-List ::= SEQUENCE (SIZE(1..maxnoofSSBAreas)) OF SSBToReport-List-Item + +SSBToReport-List-Item ::= SEQUENCE { + sSBIndex INTEGER(0..63), + iE-Extensions ProtocolExtensionContainer { { SSBToReport-List-Item-ExtIEs} } OPTIONAL, + ... +} + + +SSBToReport-List-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SUL-FrequencyBand ::= INTEGER (1..1024) + + +SUL-Information ::= SEQUENCE { + sulFrequencyInfo NRARFCN, + sulTransmissionBandwidth NRTransmissionBandwidth, + iE-Extensions ProtocolExtensionContainer { {SUL-Information-ExtIEs} } OPTIONAL, + ... +} + +SUL-Information-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-CarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }| + { ID id-FrequencyShift7p5khz CRITICALITY ignore EXTENSION FrequencyShift7p5khz PRESENCE optional }, + +... +} + + +SupportedSULBandList ::= SEQUENCE (SIZE(1..maxnoofNRCellBands)) OF SupportedSULBandItem + +SupportedSULBandItem ::= SEQUENCE { + sulBandItem SUL-FrequencyBand, + iE-Extensions ProtocolExtensionContainer { {SupportedSULBandItem-ExtIEs} } OPTIONAL, + ... +} + +SupportedSULBandItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SymbolAllocation-in-Slot ::= CHOICE { + allDL SymbolAllocation-in-Slot-AllDL, + allUL SymbolAllocation-in-Slot-AllUL, + bothDLandUL SymbolAllocation-in-Slot-BothDLandUL, + choice-extension ProtocolIE-Single-Container { {SymbolAllocation-in-Slot-ExtIEs} } +} + +SymbolAllocation-in-Slot-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +SymbolAllocation-in-Slot-AllDL ::= SEQUENCE { + iE-Extension ProtocolExtensionContainer { {SymbolAllocation-in-Slot-AllDL-ExtIEs} } OPTIONAL, + ... +} + +SymbolAllocation-in-Slot-AllDL-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SymbolAllocation-in-Slot-AllUL ::= SEQUENCE { + iE-Extension ProtocolExtensionContainer { {SymbolAllocation-in-Slot-AllUL-ExtIEs} } OPTIONAL, + ... +} + +SymbolAllocation-in-Slot-AllUL-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +SymbolAllocation-in-Slot-BothDLandUL ::= SEQUENCE { + numberofDLSymbols INTEGER (0..13), + numberofULSymbols INTEGER (0..13), + iE-Extension ProtocolExtensionContainer { {SymbolAllocation-in-Slot-BothDLandUL-ExtIEs} } OPTIONAL, + ... +} + +SymbolAllocation-in-Slot-BothDLandUL-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- T + +TABasedMDT ::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} + +TABasedMDT-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + + + +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} + +TAIBasedMDT-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAIforMDT-Item + +TAIforMDT-Item ::= SEQUENCE { + plmn-ID PLMN-Identity, + tAC TAC, + iE-Extensions ProtocolExtensionContainer { {TAIforMDT-Item-ExtIEs} } OPTIONAL, + ... +} + +TAIforMDT-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAC ::= OCTET STRING (SIZE (3)) + + +TAISupport-List ::= SEQUENCE (SIZE(1..maxnoofsupportedTACs)) OF TAISupport-Item + +TAISupport-Item ::= SEQUENCE { + tac TAC, + broadcastPLMNs SEQUENCE (SIZE(1..maxnoofsupportedPLMNs)) OF BroadcastPLMNinTAISupport-Item, + iE-Extensions ProtocolExtensionContainer { {TAISupport-Item-ExtIEs} } OPTIONAL, + ... +} + +TAISupport-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC + + +TargetCellinEUTRAN ::= OCTET STRING -- This IE is to be encoded according to Global Cell ID in the Last Visited E-UTRAN Cell Information IE, as defined in in TS 36.413 [31] + + + +Target-CGI ::= CHOICE { + nr NR-CGI, + e-utra E-UTRA-CGI, + choice-extension ProtocolIE-Single-Container { {TargetCGI-ExtIEs} } +} + +TargetCGI-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +TDDULDLConfigurationCommonNR ::= OCTET STRING + + +TargetCellList ::= SEQUENCE (SIZE(1..maxnoofCHOcells)) OF TargetCellList-Item + +TargetCellList-Item ::= SEQUENCE { + target-cell NR-CGI, + iE-Extensions ProtocolExtensionContainer { { TargetCellList-Item-ExtIEs} } OPTIONAL +} + +TargetCellList-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +Threshold-RSRQ ::= INTEGER(0..34) +Threshold-RSRP ::= INTEGER(0..97) +Threshold-SINR ::= INTEGER(0..127) +TimeToTrigger ::= ENUMERATED {ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, ms5120} + + +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} + +TNLConfigurationInfo ::= SEQUENCE { + extendedUPTransportLayerAddressesToAdd ExtTLAs OPTIONAL, + extendedUPTransportLayerAddressesToRemove ExtTLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TNLConfigurationInfo-ExtIEs} } OPTIONAL, + ... +} + +TNLConfigurationInfo-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TNLA-To-Add-List ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLA-To-Add-Item + +TNLA-To-Add-Item ::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + tNLAssociationUsage TNLAssociationUsage, + iE-Extensions ProtocolExtensionContainer { { TNLA-To-Add-Item-ExtIEs} } OPTIONAL +} + +TNLA-To-Add-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNLA-To-Update-List ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLA-To-Update-Item + +TNLA-To-Update-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + tNLAssociationUsage TNLAssociationUsage OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { TNLA-To-Update-Item-ExtIEs} } OPTIONAL +} + +TNLA-To-Update-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TNLA-To-Remove-List ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLA-To-Remove-Item + +TNLA-To-Remove-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { TNLA-To-Remove-Item-ExtIEs} } OPTIONAL +} + +TNLA-To-Remove-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNLA-Setup-List ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLA-Setup-Item + +TNLA-Setup-Item ::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { TNLA-Setup-Item-ExtIEs} } OPTIONAL, + ... +} + +TNLA-Setup-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNLA-Failed-To-Setup-List ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLA-Failed-To-Setup-Item + +TNLA-Failed-To-Setup-Item ::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + cause Cause, + iE-Extensions ProtocolExtensionContainer { { TNLA-Failed-To-Setup-Item-ExtIEs} } OPTIONAL +} + +TNLA-Failed-To-Setup-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TNLAssociationUsage ::= ENUMERATED { + ue, + non-ue, + both, + ... +} + + +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) + + +TraceActivation ::= SEQUENCE { + ng-ran-TraceID NG-RANTraceID, + interfaces-to-trace BIT STRING { ng-c (0), x-nc (1), uu (2), f1-c (3), e1 (4)} (SIZE(8)), + trace-depth Trace-Depth, + trace-coll-address TransportLayerAddress, + ie-Extension ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} + +TraceActivation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { +-- Extension to support MDT – + { ID id-TraceCollectionEntityURI CRITICALITY ignore EXTENSION URIaddress PRESENCE optional}| + { ID id-MDT-Configuration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}, + ... +} + + +Trace-Depth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} + + +TSCTrafficCharacteristics ::= SEQUENCE { + tSCAssistanceInformationDownlink TSCAssistanceInformation OPTIONAL, + tSCAssistanceInformationUplink TSCAssistanceInformation OPTIONAL, + ie-Extension ProtocolExtensionContainer { {TSCTrafficCharacteristics-ExtIEs} } OPTIONAL, + ... +} + +TSCTrafficCharacteristics-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +TSCAssistanceInformation ::= SEQUENCE { + periodicity INTEGER (0.. 640000, ...), + burstArrivalTime OCTET STRING OPTIONAL, + ie-Extension ProtocolExtensionContainer { { TSCAssistanceInformation-ExtIEs} } OPTIONAL, + ... +} + +TSCAssistanceInformation-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} + + +-- U + + +UEAggregateMaximumBitRate ::= SEQUENCE { + dl-UE-AMBR BitRate, + ul-UE-AMBR BitRate, + iE-Extension ProtocolExtensionContainer { {UEAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +UEAggregateMaximumBitRate-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +UEContextKeptIndicator ::= ENUMERATED {true, ...} + + +UEContextID ::= CHOICE { + rRCResume UEContextIDforRRCResume, + rRRCReestablishment UEContextIDforRRCReestablishment, + choice-extension ProtocolIE-Single-Container { {UEContextID-ExtIEs} } +} + +UEContextID-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +UEContextIDforRRCResume ::= SEQUENCE { + i-rnti I-RNTI, + allocated-c-rnti C-RNTI, + accessPCI NG-RAN-CellPCI, + iE-Extension ProtocolExtensionContainer { {UEContextIDforRRCResume-ExtIEs} } OPTIONAL, + ... +} + +UEContextIDforRRCResume-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +UEContextIDforRRCReestablishment ::= SEQUENCE { + c-rnti C-RNTI, + failureCellPCI NG-RAN-CellPCI, + iE-Extension ProtocolExtensionContainer { {UEContextIDforRRCReestablishment-ExtIEs} } OPTIONAL, + ... +} + +UEContextIDforRRCReestablishment-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +UEContextInfoRetrUECtxtResp ::= SEQUENCE { + ng-c-UE-signalling-ref AMF-UE-NGAP-ID, + signalling-TNL-at-source CPTransportLayerInformation, + ueSecurityCapabilities UESecurityCapabilities, + securityInformation AS-SecurityInformation, + ue-AMBR UEAggregateMaximumBitRate, + pduSessionResourcesToBeSetup-List PDUSessionResourcesToBeSetup-List, + rrc-Context OCTET STRING, + mobilityRestrictionList MobilityRestrictionList OPTIONAL, + indexToRatFrequencySelectionPriority RFSP-Index OPTIONAL, + iE-Extension ProtocolExtensionContainer { {UEContextInfoRetrUECtxtResp-ExtIEs} } OPTIONAL, + ... +} + +UEContextInfoRetrUECtxtResp-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + { ID id-FiveGCMobilityRestrictionListContainer CRITICALITY ignore EXTENSION FiveGCMobilityRestrictionListContainer PRESENCE optional }| +{ ID id-NRUESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION NRUESidelinkAggregateMaximumBitRate PRESENCE optional}| +{ ID id-LTEUESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION LTEUESidelinkAggregateMaximumBitRate PRESENCE optional}| + { ID id-UERadioCapabilityID CRITICALITY reject EXTENSION UERadioCapabilityID PRESENCE optional }, + ... +} + + +UEHistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCellsinUEHistoryInfo)) OF LastVisitedCell-Item + + +UEHistoryInformationFromTheUE ::= CHOICE { + nR NRMobilityHistoryReport, + choice-extension ProtocolIE-Single-Container { {UEHistoryInformationFromTheUE-ExtIEs} } +} + +UEHistoryInformationFromTheUE-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +UEIdentityIndexValue ::= CHOICE { + indexLength10 BIT STRING (SIZE(10)), + choice-extension ProtocolIE-Single-Container { {UEIdentityIndexValue-ExtIEs} } +} + +UEIdentityIndexValue-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +UERadioCapabilityForPaging ::= SEQUENCE { + uERadioCapabilityForPagingOfNR UERadioCapabilityForPagingOfNR OPTIONAL, + uERadioCapabilityForPagingOfEUTRA UERadioCapabilityForPagingOfEUTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UERadioCapabilityForPaging-ExtIEs} } OPTIONAL, + ... +} + +UERadioCapabilityForPaging-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +UERadioCapabilityForPagingOfNR ::= OCTET STRING + +UERadioCapabilityForPagingOfEUTRA ::= OCTET STRING + +UERadioCapabilityID ::= OCTET STRING + +UERANPagingIdentity ::= CHOICE { + i-RNTI-full BIT STRING ( SIZE (40)), + choice-extension ProtocolIE-Single-Container { {UERANPagingIdentity-ExtIEs} } +} + +UERANPagingIdentity-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +UERLFReportContainer ::= CHOICE { + nR-UERLFReportContainer UERLFReportContainerNR, + lTE-UERLFReportContainer UERLFReportContainerLTE, + choice-Extension ProtocolIE-Single-Container { {UERLFReportContainer-ExtIEs} } +} +UERLFReportContainer-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + +UERLFReportContainerLTE ::= OCTET STRING +-- This IE is a transparent container and shall be encoded as the RLF-Report-r9 IE contained in the UEInformationResponse message (TS 36.331 [14]) + +UERLFReportContainerNR ::= OCTET STRING +-- This IE is a transparent container and shall be encoded as the nr-RLF-Report-r16 IE contained in the UEInformationResponse message (TS 38.331 [10]) + + +UESecurityCapabilities ::= SEQUENCE { + nr-EncyptionAlgorithms BIT STRING {nea1-128(1), + nea2-128(2), + nea3-128(3)} (SIZE(16, ...)), + nr-IntegrityProtectionAlgorithms BIT STRING {nia1-128(1), + nia2-128(2), + nia3-128(3)} (SIZE(16, ...)), + e-utra-EncyptionAlgorithms BIT STRING {eea1-128(1), + eea2-128(2), + eea3-128(3)} (SIZE(16, ...)), + e-utra-IntegrityProtectionAlgorithms BIT STRING {eia1-128(1), + eia2-128(2), + eia3-128(3)} (SIZE(16, ...)), + iE-Extension ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, + ... +} + +UESecurityCapabilities-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} + +ULConfiguration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-UE-Configuration::= ENUMERATED {no-data, shared, only, ...} + +ULForwarding ::= ENUMERATED {ul-forwarding-proposed, ...} + +ULForwardingProposal ::= ENUMERATED {ul-forwarding-proposed, ...} + + +UL-GBR-PRB-usage::= INTEGER (0..100) + + +UL-non-GBR-PRB-usage::= INTEGER (0..100) + + +UL-Total-PRB-usage::= INTEGER (0..100) + + +UPTransportLayerInformation ::= CHOICE { + gtpTunnel GTPtunnelTransportLayerInformation, + choice-extension ProtocolIE-Single-Container { {UPTransportLayerInformation-ExtIEs} } +} + +UPTransportLayerInformation-ExtIEs XNAP-PROTOCOL-IES ::= { + ... +} + + +UPTransportParameters ::= SEQUENCE (SIZE(1..maxnoofSCellGroupsplus1)) OF UPTransportParametersItem + +UPTransportParametersItem ::= SEQUENCE { + upTNLInfo UPTransportLayerInformation, + cellGroupID CellGroupID, + iE-Extension ProtocolExtensionContainer { {UPTransportParametersItem-ExtIEs} } OPTIONAL, + ... +} + +UPTransportParametersItem-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + + +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} + +URIaddress ::= VisibleString + +-- V + +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +VolumeTimedReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF VolumeTimedReport-Item + +VolumeTimedReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..18446744073709551615), + usageCountDL INTEGER (0..18446744073709551615), + iE-Extensions ProtocolExtensionContainer { {VolumeTimedReport-Item-ExtIEs} } OPTIONAL, +... +} + +VolumeTimedReport-Item-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- W + +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { WLANMeasurementConfiguration-ExtIEs } } OPTIONAL, + ... +} + +WLANMeasurementConfiguration-ExtIEs XNAP-PROTOCOL-EXTENSION ::= { + ... +} + +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName + +WLANMeasConfig::= ENUMERATED {setup,...} + +WLANName ::= OCTET STRING (SIZE (1..32)) + + +-- X + +XnBenefitValue ::= INTEGER (1..8, ...) + + +-- Y + + +-- Z + + +END + + +-- ************************************************************** +-- +-- Common definitions +-- +-- ************************************************************** + +XnAP-CommonDataTypes { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) xnap (2) version1 (1) xnap-CommonDataTypes (3) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +maxPrivateIEs INTEGER ::= 65535 +maxProtocolExtensions INTEGER ::= 65535 +maxProtocolIEs INTEGER ::= 65535 + +-- ************************************************************** +-- +-- Common Data Types +-- +-- ************************************************************** + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +PrivateIE-ID ::= CHOICE { + local INTEGER (0.. maxPrivateIEs), + global OBJECT IDENTIFIER +} + +ProcedureCode ::= INTEGER (0..255) + + +ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs) + + +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} + +END + + +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +XnAP-Constants { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) xnap (2) version1 (1) xnap-Constants (4) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + ProcedureCode, + ProtocolIE-ID +FROM XnAP-CommonDataTypes; + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** + +id-handoverPreparation ProcedureCode ::= 0 +id-sNStatusTransfer ProcedureCode ::= 1 +id-handoverCancel ProcedureCode ::= 2 +id-retrieveUEContext ProcedureCode ::= 3 +id-rANPaging ProcedureCode ::= 4 +id-xnUAddressIndication ProcedureCode ::= 5 +id-uEContextRelease ProcedureCode ::= 6 +id-sNGRANnodeAdditionPreparation ProcedureCode ::= 7 +id-sNGRANnodeReconfigurationCompletion ProcedureCode ::= 8 +id-mNGRANnodeinitiatedSNGRANnodeModificationPreparation ProcedureCode ::= 9 +id-sNGRANnodeinitiatedSNGRANnodeModificationPreparation ProcedureCode ::= 10 +id-mNGRANnodeinitiatedSNGRANnodeRelease ProcedureCode ::= 11 +id-sNGRANnodeinitiatedSNGRANnodeRelease ProcedureCode ::= 12 +id-sNGRANnodeCounterCheck ProcedureCode ::= 13 +id-sNGRANnodeChange ProcedureCode ::= 14 +id-rRCTransfer ProcedureCode ::= 15 +id-xnRemoval ProcedureCode ::= 16 +id-xnSetup ProcedureCode ::= 17 +id-nGRANnodeConfigurationUpdate ProcedureCode ::= 18 +id-cellActivation ProcedureCode ::= 19 +id-reset ProcedureCode ::= 20 +id-errorIndication ProcedureCode ::= 21 +id-privateMessage ProcedureCode ::= 22 +id-notificationControl ProcedureCode ::= 23 +id-activityNotification ProcedureCode ::= 24 +id-e-UTRA-NR-CellResourceCoordination ProcedureCode ::= 25 +id-secondaryRATDataUsageReport ProcedureCode ::= 26 +id-deactivateTrace ProcedureCode ::= 27 +id-traceStart ProcedureCode ::= 28 +id-handoverSuccess ProcedureCode ::= 29 +id-conditionalHandoverCancel ProcedureCode ::= 30 +id-earlyStatusTransfer ProcedureCode ::= 31 +id-failureIndication ProcedureCode ::= 32 +id-handoverReport ProcedureCode ::= 33 +id-resourceStatusReportingInitiation ProcedureCode ::= 34 +id-resourceStatusReporting ProcedureCode ::= 35 +id-mobilitySettingsChange ProcedureCode ::= 36 +id-accessAndMobilityIndication ProcedureCode ::= 37 + + + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxEARFCN INTEGER ::= 262143 +maxnoofAllowedAreas INTEGER ::= 16 +maxnoofAMFRegions INTEGER ::= 16 +maxnoofAoIs INTEGER ::= 64 +maxnoofBluetoothName INTEGER ::= 4 +maxnoofBPLMNs INTEGER ::= 12 +maxnoofCAGs INTEGER ::= 12 +maxnoofCAGsperPLMN INTEGER ::= 256 +maxnoofCellIDforMDT INTEGER ::= 32 +maxnoofCellsinAoI INTEGER ::= 256 +maxnoofCellsinUEHistoryInfo INTEGER ::= 16 +maxnoofCellsinNG-RANnode INTEGER ::= 16384 +maxnoofCellsinRNA INTEGER ::= 32 +maxnoofCellsUEMovingTrajectory INTEGER ::= 16 +maxnoofDRBs INTEGER ::= 32 +maxnoofEUTRABands INTEGER ::= 16 +maxnoofEUTRABPLMNs INTEGER ::= 6 +maxnoofEPLMNs INTEGER ::= 15 +maxnoofExtSliceItems INTEGER ::= 65535 +maxnoofEPLMNsplus1 INTEGER ::= 16 +maxnoofForbiddenTACs INTEGER ::= 4096 +maxnoofFreqforMDT INTEGER ::= 8 +maxnoofMBSFNEUTRA INTEGER ::= 8 +maxnoofMDTPLMNs INTEGER ::= 16 +maxnoofMultiConnectivityMinusOne INTEGER ::= 3 +maxnoofNeighbours INTEGER ::= 1024 +maxnoofNeighPCIforMDT INTEGER ::= 32 +maxnoofNIDs INTEGER ::= 12 +maxnoofNRCellBands INTEGER ::= 32 +maxnoofPLMNs INTEGER ::= 16 +maxnoofPDUSessions INTEGER ::= 256 +maxnoofProtectedResourcePatterns INTEGER ::= 16 +maxnoofQoSFlows INTEGER ::= 64 +maxnoofQoSParaSets INTEGER ::= 8 +maxnoofRANAreaCodes INTEGER ::= 32 +maxnoofRANAreasinRNA INTEGER ::= 16 +maxnoofRANNodesinAoI INTEGER ::= 64 +maxnoofSCellGroups INTEGER ::= 3 +maxnoofSCellGroupsplus1 INTEGER ::= 4 +maxnoofSensorName INTEGER ::= 3 +maxnoofSliceItems INTEGER ::= 1024 +maxnoofSNPNIDs INTEGER ::= 12 +maxnoofsupportedPLMNs INTEGER ::= 12 +maxnoofsupportedTACs INTEGER ::= 256 +maxnoofTAforMDT INTEGER ::= 8 +maxnoofTAI INTEGER ::= 16 +maxnoofTAIsinAoI INTEGER ::= 16 +maxnooftimeperiods INTEGER ::= 2 +maxnoofTNLAssociations INTEGER ::= 32 +maxnoofUEContexts INTEGER ::= 8192 +maxNRARFCN INTEGER ::= 3279165 +maxNrOfErrors INTEGER ::= 256 +maxnoofslots INTEGER ::= 5120 +maxnoofExtTLAs INTEGER ::= 16 +maxnoofGTPTLAs INTEGER ::= 16 +maxnoofCHOcells INTEGER ::= 8 +maxnoofPC5QoSFlows INTEGER ::= 2064 +maxnoofSSBAreas INTEGER ::= 64 +maxnoofRACHReports INTEGER ::= 64 +maxnoofNRSCSs INTEGER ::= 5 +maxnoofPhysicalResourceBlocks INTEGER ::= 275 +maxnoofAdditionalPDCPDuplicationTNL INTEGER ::= 2 +maxnoofRLCDuplicationstate INTEGER ::= 3 +maxnoofWLANName INTEGER ::= 4 + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** + +id-ActivatedServedCells ProtocolIE-ID ::= 0 +id-ActivationIDforCellActivation ProtocolIE-ID ::= 1 +id-admittedSplitSRB ProtocolIE-ID ::= 2 +id-admittedSplitSRBrelease ProtocolIE-ID ::= 3 +id-AMF-Region-Information ProtocolIE-ID ::= 4 +id-AssistanceDataForRANPaging ProtocolIE-ID ::= 5 +id-BearersSubjectToCounterCheck ProtocolIE-ID ::= 6 +id-Cause ProtocolIE-ID ::= 7 +id-cellAssistanceInfo-NR ProtocolIE-ID ::= 8 +id-ConfigurationUpdateInitiatingNodeChoice ProtocolIE-ID ::= 9 +id-CriticalityDiagnostics ProtocolIE-ID ::= 10 +id-XnUAddressInfoperPDUSession-List ProtocolIE-ID ::= 11 +id-DRBsSubjectToStatusTransfer-List ProtocolIE-ID ::= 12 +id-ExpectedUEBehaviour ProtocolIE-ID ::= 13 +id-GlobalNG-RAN-node-ID ProtocolIE-ID ::= 14 +id-GUAMI ProtocolIE-ID ::= 15 +id-indexToRatFrequSelectionPriority ProtocolIE-ID ::= 16 +id-initiatingNodeType-ResourceCoordRequest ProtocolIE-ID ::= 17 +id-List-of-served-cells-E-UTRA ProtocolIE-ID ::= 18 +id-List-of-served-cells-NR ProtocolIE-ID ::= 19 +id-LocationReportingInformation ProtocolIE-ID ::= 20 +id-MAC-I ProtocolIE-ID ::= 21 +id-MaskedIMEISV ProtocolIE-ID ::= 22 +id-M-NG-RANnodeUEXnAPID ProtocolIE-ID ::= 23 +id-MN-to-SN-Container ProtocolIE-ID ::= 24 +id-MobilityRestrictionList ProtocolIE-ID ::= 25 +id-new-NG-RAN-Cell-Identity ProtocolIE-ID ::= 26 +id-newNG-RANnodeUEXnAPID ProtocolIE-ID ::= 27 +id-UEReportRRCTransfer ProtocolIE-ID ::= 28 +id-oldNG-RANnodeUEXnAPID ProtocolIE-ID ::= 29 +id-OldtoNewNG-RANnodeResumeContainer ProtocolIE-ID ::= 30 +id-PagingDRX ProtocolIE-ID ::= 31 +id-PCellID ProtocolIE-ID ::= 32 +id-PDCPChangeIndication ProtocolIE-ID ::= 33 +id-PDUSessionAdmittedAddedAddReqAck ProtocolIE-ID ::= 34 +id-PDUSessionAdmittedModSNModConfirm ProtocolIE-ID ::= 35 +id-PDUSessionAdmitted-SNModResponse ProtocolIE-ID ::= 36 +id-PDUSessionNotAdmittedAddReqAck ProtocolIE-ID ::= 37 +id-PDUSessionNotAdmitted-SNModResponse ProtocolIE-ID ::= 38 +id-PDUSessionReleasedList-RelConf ProtocolIE-ID ::= 39 +id-PDUSessionReleasedSNModConfirm ProtocolIE-ID ::= 40 +id-PDUSessionResourcesActivityNotifyList ProtocolIE-ID ::= 41 +id-PDUSessionResourcesAdmitted-List ProtocolIE-ID ::= 42 +id-PDUSessionResourcesNotAdmitted-List ProtocolIE-ID ::= 43 +id-PDUSessionResourcesNotifyList ProtocolIE-ID ::= 44 +id-PDUSession-SNChangeConfirm-List ProtocolIE-ID ::= 45 +id-PDUSession-SNChangeRequired-List ProtocolIE-ID ::= 46 +id-PDUSessionToBeAddedAddReq ProtocolIE-ID ::= 47 +id-PDUSessionToBeModifiedSNModRequired ProtocolIE-ID ::= 48 +id-PDUSessionToBeReleasedList-RelRqd ProtocolIE-ID ::= 49 +id-PDUSessionToBeReleased-RelReq ProtocolIE-ID ::= 50 +id-PDUSessionToBeReleasedSNModRequired ProtocolIE-ID ::= 51 +id-RANPagingArea ProtocolIE-ID ::= 52 +id-PagingPriority ProtocolIE-ID ::= 53 +id-requestedSplitSRB ProtocolIE-ID ::= 54 +id-requestedSplitSRBrelease ProtocolIE-ID ::= 55 +id-ResetRequestTypeInfo ProtocolIE-ID ::= 56 +id-ResetResponseTypeInfo ProtocolIE-ID ::= 57 +id-RespondingNodeTypeConfigUpdateAck ProtocolIE-ID ::= 58 +id-respondingNodeType-ResourceCoordResponse ProtocolIE-ID ::= 59 +id-ResponseInfo-ReconfCompl ProtocolIE-ID ::= 60 +id-RRCConfigIndication ProtocolIE-ID ::= 61 +id-RRCResumeCause ProtocolIE-ID ::= 62 +id-SCGConfigurationQuery ProtocolIE-ID ::= 63 +id-selectedPLMN ProtocolIE-ID ::= 64 +id-ServedCellsToActivate ProtocolIE-ID ::= 65 +id-servedCellsToUpdate-E-UTRA ProtocolIE-ID ::= 66 +id-ServedCellsToUpdateInitiatingNodeChoice ProtocolIE-ID ::= 67 +id-servedCellsToUpdate-NR ProtocolIE-ID ::= 68 +id-s-ng-RANnode-SecurityKey ProtocolIE-ID ::= 69 +id-S-NG-RANnodeUE-AMBR ProtocolIE-ID ::= 70 +id-S-NG-RANnodeUEXnAPID ProtocolIE-ID ::= 71 +id-SN-to-MN-Container ProtocolIE-ID ::= 72 +id-sourceNG-RANnodeUEXnAPID ProtocolIE-ID ::= 73 +id-SplitSRB-RRCTransfer ProtocolIE-ID ::= 74 +id-TAISupport-list ProtocolIE-ID ::= 75 +id-TimeToWait ProtocolIE-ID ::= 76 +id-Target2SourceNG-RANnodeTranspContainer ProtocolIE-ID ::= 77 +id-targetCellGlobalID ProtocolIE-ID ::= 78 +id-targetNG-RANnodeUEXnAPID ProtocolIE-ID ::= 79 +id-target-S-NG-RANnodeID ProtocolIE-ID ::= 80 +id-TraceActivation ProtocolIE-ID ::= 81 +id-UEContextID ProtocolIE-ID ::= 82 +id-UEContextInfoHORequest ProtocolIE-ID ::= 83 +id-UEContextInfoRetrUECtxtResp ProtocolIE-ID ::= 84 +id-UEContextInfo-SNModRequest ProtocolIE-ID ::= 85 +id-UEContextKeptIndicator ProtocolIE-ID ::= 86 +id-UEContextRefAtSN-HORequest ProtocolIE-ID ::= 87 +id-UEHistoryInformation ProtocolIE-ID ::= 88 +id-UEIdentityIndexValue ProtocolIE-ID ::= 89 +id-UERANPagingIdentity ProtocolIE-ID ::= 90 +id-UESecurityCapabilities ProtocolIE-ID ::= 91 +id-UserPlaneTrafficActivityReport ProtocolIE-ID ::= 92 +id-XnRemovalThreshold ProtocolIE-ID ::= 93 +id-DesiredActNotificationLevel ProtocolIE-ID ::= 94 +id-AvailableDRBIDs ProtocolIE-ID ::= 95 +id-AdditionalDRBIDs ProtocolIE-ID ::= 96 +id-SpareDRBIDs ProtocolIE-ID ::= 97 +id-RequiredNumberOfDRBIDs ProtocolIE-ID ::= 98 +id-TNLA-To-Add-List ProtocolIE-ID ::= 99 +id-TNLA-To-Update-List ProtocolIE-ID ::= 100 +id-TNLA-To-Remove-List ProtocolIE-ID ::= 101 +id-TNLA-Setup-List ProtocolIE-ID ::= 102 +id-TNLA-Failed-To-Setup-List ProtocolIE-ID ::= 103 +id-PDUSessionToBeReleased-RelReqAck ProtocolIE-ID ::= 104 +id-S-NG-RANnodeMaxIPDataRate-UL ProtocolIE-ID ::= 105 +id-PDUSessionResourceSecondaryRATUsageList ProtocolIE-ID ::= 107 +id-Additional-UL-NG-U-TNLatUPF-List ProtocolIE-ID ::= 108 +id-SecondarydataForwardingInfoFromTarget-List ProtocolIE-ID ::= 109 +id-LocationInformationSNReporting ProtocolIE-ID ::= 110 +id-LocationInformationSN ProtocolIE-ID ::= 111 +id-LastE-UTRANPLMNIdentity ProtocolIE-ID ::= 112 +id-S-NG-RANnodeMaxIPDataRate-DL ProtocolIE-ID ::= 113 +id-MaxIPrate-DL ProtocolIE-ID ::= 114 +id-SecurityResult ProtocolIE-ID ::= 115 +id-S-NSSAI ProtocolIE-ID ::= 116 +id-MR-DC-ResourceCoordinationInfo ProtocolIE-ID ::= 117 +id-AMF-Region-Information-To-Add ProtocolIE-ID ::= 118 +id-AMF-Region-Information-To-Delete ProtocolIE-ID ::= 119 +id-OldQoSFlowMap-ULendmarkerexpected ProtocolIE-ID ::= 120 +id-RANPagingFailure ProtocolIE-ID ::= 121 +id-UERadioCapabilityForPaging ProtocolIE-ID ::= 122 +id-PDUSessionDataForwarding-SNModResponse ProtocolIE-ID ::= 123 +id-DRBsNotAdmittedSetupModifyList ProtocolIE-ID ::= 124 +id-Secondary-MN-Xn-U-TNLInfoatM ProtocolIE-ID ::= 125 +id-NE-DC-TDM-Pattern ProtocolIE-ID ::= 126 +id-PDUSessionCommonNetworkInstance ProtocolIE-ID ::= 127 +id-BPLMN-ID-Info-EUTRA ProtocolIE-ID ::= 128 +id-BPLMN-ID-Info-NR ProtocolIE-ID ::= 129 +id-InterfaceInstanceIndication ProtocolIE-ID ::= 130 +id-S-NG-RANnode-Addition-Trigger-Ind ProtocolIE-ID ::= 131 +id-DefaultDRB-Allowed ProtocolIE-ID ::= 132 +id-DRB-IDs-takenintouse ProtocolIE-ID ::= 133 +id-SplitSessionIndicator ProtocolIE-ID ::= 134 +id-CNTypeRestrictionsForEquivalent ProtocolIE-ID ::= 135 +id-CNTypeRestrictionsForServing ProtocolIE-ID ::= 136 +id-DRBs-transferred-to-MN ProtocolIE-ID ::= 137 +id-ULForwardingProposal ProtocolIE-ID ::= 138 +id-EndpointIPAddressAndPort ProtocolIE-ID ::= 139 +id-IntendedTDD-DL-ULConfiguration-NR ProtocolIE-ID ::= 140 +id-TNLConfigurationInfo ProtocolIE-ID ::= 141 +id-PartialListIndicator-NR ProtocolIE-ID ::= 142 +id-MessageOversizeNotification ProtocolIE-ID ::= 143 +id-CellAndCapacityAssistanceInfo-NR ProtocolIE-ID ::= 144 +id-NG-RANTraceID ProtocolIE-ID ::= 145 +id-NonGBRResources-Offered ProtocolIE-ID ::= 146 +id-FastMCGRecoveryRRCTransfer-SN-to-MN ProtocolIE-ID ::= 147 +id-RequestedFastMCGRecoveryViaSRB3 ProtocolIE-ID ::= 148 +id-AvailableFastMCGRecoveryViaSRB3 ProtocolIE-ID ::= 149 +id-RequestedFastMCGRecoveryViaSRB3Release ProtocolIE-ID ::= 150 +id-ReleaseFastMCGRecoveryViaSRB3 ProtocolIE-ID ::= 151 +id-FastMCGRecoveryRRCTransfer-MN-to-SN ProtocolIE-ID ::= 152 +id-ExtendedRATRestrictionInformation ProtocolIE-ID ::= 153 +id-QoSMonitoringRequest ProtocolIE-ID ::= 154 +id-FiveGCMobilityRestrictionListContainer ProtocolIE-ID ::= 155 +id-PartialListIndicator-EUTRA ProtocolIE-ID ::= 156 +id-CellAndCapacityAssistanceInfo-EUTRA ProtocolIE-ID ::= 157 +id-CHOinformation-Req ProtocolIE-ID ::= 158 +id-CHOinformation-Ack ProtocolIE-ID ::= 159 +id-targetCellsToCancel ProtocolIE-ID ::= 160 +id-requestedTargetCellGlobalID ProtocolIE-ID ::= 161 +id-procedureStage ProtocolIE-ID ::= 162 +id-DAPSRequestInfo ProtocolIE-ID ::= 163 +id-DAPSResponseInfo-List ProtocolIE-ID ::= 164 +id-CHO-MRDC-Indicator ProtocolIE-ID ::= 165 +id-OffsetOfNbiotChannelNumberToDL-EARFCN ProtocolIE-ID ::= 166 +id-OffsetOfNbiotChannelNumberToUL-EARFCN ProtocolIE-ID ::= 167 +id-NBIoT-UL-DL-AlignmentOffset ProtocolIE-ID ::= 168 +id-LTEV2XServicesAuthorized ProtocolIE-ID ::= 169 +id-NRV2XServicesAuthorized ProtocolIE-ID ::= 170 +id-LTEUESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 171 +id-NRUESidelinkAggregateMaximumBitRate ProtocolIE-ID ::= 172 +id-PC5QoSParameters ProtocolIE-ID ::= 173 +id-AlternativeQoSParaSetList ProtocolIE-ID ::= 174 +id-CurrentQoSParaSetIndex ProtocolIE-ID ::= 175 +id-MobilityInformation ProtocolIE-ID ::= 176 +id-InitiatingCondition-FailureIndication ProtocolIE-ID ::= 177 +id-UEHistoryInformationFromTheUE ProtocolIE-ID ::= 178 +id-HandoverReportType ProtocolIE-ID ::= 179 +id-HandoverCause ProtocolIE-ID ::= 180 +id-SourceCellCGI ProtocolIE-ID ::= 181 +id-TargetCellCGI ProtocolIE-ID ::= 182 +id-ReEstablishmentCellCGI ProtocolIE-ID ::= 183 +id-TargetCellinEUTRAN ProtocolIE-ID ::= 184 +id-SourceCellCRNTI ProtocolIE-ID ::= 185 +id-UERLFReportContainer ProtocolIE-ID ::= 186 +id-NGRAN-Node1-Measurement-ID ProtocolIE-ID ::= 187 +id-NGRAN-Node2-Measurement-ID ProtocolIE-ID ::= 188 +id-RegistrationRequest ProtocolIE-ID ::= 189 +id-ReportCharacteristics ProtocolIE-ID ::= 190 +id-CellToReport ProtocolIE-ID ::= 191 +id-ReportingPeriodicity ProtocolIE-ID ::= 192 +id-CellMeasurementResult ProtocolIE-ID ::= 193 +id-NG-RANnode1CellID ProtocolIE-ID ::= 194 +id-NG-RANnode2CellID ProtocolIE-ID ::= 195 +id-NG-RANnode1MobilityParameters ProtocolIE-ID ::= 196 +id-NG-RANnode2ProposedMobilityParameters ProtocolIE-ID ::= 197 +id-MobilityParametersModificationRange ProtocolIE-ID ::= 198 +id-TDDULDLConfigurationCommonNR ProtocolIE-ID ::= 199 +id-CarrierList ProtocolIE-ID ::= 200 +id-ULCarrierList ProtocolIE-ID ::= 201 +id-FrequencyShift7p5khz ProtocolIE-ID ::= 202 +id-SSB-PositionsInBurst ProtocolIE-ID ::= 203 +id-NRCellPRACHConfig ProtocolIE-ID ::= 204 +id-RACHReportInformation ProtocolIE-ID ::= 205 +id-IABNodeIndication ProtocolIE-ID ::= 206 +id-Redundant-UL-NG-U-TNLatUPF ProtocolIE-ID ::= 207 +id-CNPacketDelayBudgetDownlink ProtocolIE-ID ::= 208 +id-CNPacketDelayBudgetUplink ProtocolIE-ID ::= 209 +id-Additional-Redundant-UL-NG-U-TNLatUPF-List ProtocolIE-ID ::= 210 +id-RedundantCommonNetworkInstance ProtocolIE-ID ::= 211 +id-TSCTrafficCharacteristics ProtocolIE-ID ::= 212 +id-RedundantQoSFlowIndicator ProtocolIE-ID ::= 213 +id-Redundant-DL-NG-U-TNLatNG-RAN ProtocolIE-ID ::= 214 +id-ExtendedPacketDelayBudget ProtocolIE-ID ::= 215 +id-Additional-PDCP-Duplication-TNL-List ProtocolIE-ID ::= 216 +id-RedundantPDUSessionInformation ProtocolIE-ID ::= 217 +id-UsedRSNInformation ProtocolIE-ID ::= 218 +id-RLCDuplicationInformation ProtocolIE-ID ::= 219 +id-NPN-Broadcast-Information ProtocolIE-ID ::= 220 +id-NPNPagingAssistanceInformation ProtocolIE-ID ::= 221 +id-NPNMobilityInformation ProtocolIE-ID ::= 222 +id-NPN-Support ProtocolIE-ID ::= 223 +id-MDT-Configuration ProtocolIE-ID ::= 224 +id-MDTPLMNList ProtocolIE-ID ::= 225 +id-TraceCollectionEntityURI ProtocolIE-ID ::= 226 +id-UERadioCapabilityID ProtocolIE-ID ::= 227 +id-CSI-RSTransmissionIndication ProtocolIE-ID ::= 228 +id-SNTriggered ProtocolIE-ID ::= 229 +id-DLCarrierList ProtocolIE-ID ::= 230 +id-ExtendedTAISliceSupportList ProtocolIE-ID ::= 231 +id-cellAssistanceInfo-EUTRA ProtocolIE-ID ::= 232 + + +END + + +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +XnAP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) xnap (2) version1 (1) xnap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + maxPrivateIEs, + maxProtocolExtensions, + maxProtocolIEs, + Criticality, + Presence, + PrivateIE-ID, + ProtocolIE-ID +FROM XnAP-CommonDataTypes; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +XNAP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol IE pairs +-- +-- ************************************************************** + +XNAP-PROTOCOL-IES-PAIR ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &firstCriticality Criticality, + &FirstValue, + &secondCriticality Criticality, + &SecondValue, + &presence Presence +} +WITH SYNTAX { + ID &id + FIRST CRITICALITY &firstCriticality + FIRST TYPE &FirstValue + SECOND CRITICALITY &secondCriticality + SECOND TYPE &SecondValue + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +XNAP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Private IEs +-- +-- ************************************************************** + +XNAP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {XNAP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Single-Container {XNAP-PROTOCOL-IES : IEsSetParam} ::= ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {XNAP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id XNAP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality XNAP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value XNAP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {XNAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {XNAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id XNAP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality XNAP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue XNAP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality XNAP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue XNAP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, XNAP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-Container {{IEsSetParam}} + +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, XNAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {XNAP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {XNAP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id XNAP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality XNAP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue XNAP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Private IEs +-- +-- ************************************************************** + +PrivateIE-Container {XNAP-PRIVATE-IES : IEsSetParam} ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} + +PrivateIE-Field {XNAP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id XNAP-PRIVATE-IES.&id ({IEsSetParam}), + criticality XNAP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value XNAP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} + +END + diff --git a/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.cmake b/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.cmake new file mode 100644 index 0000000000..3cc71e8415 --- /dev/null +++ b/openair2/XNAP/MESSAGES/ASN1/xnap_R16.2.0.cmake @@ -0,0 +1,1648 @@ +set( XNAP_GRAMMAR ASN1/xnap_R16.2.0.asn) + +set(xnap_source + ANY.c + aper_decoder.c + aper_encoder.c + aper_opentype.c + aper_support.c + asn_application.c + asn_bit_data.c + asn_codecs_prim.c + asn_internal.c + asn_random_fill.c + asn_SEQUENCE_OF.c + asn_SET_OF.c + ber_tlv_length.c + ber_tlv_tag.c + BIT_STRING.c + constraints.c + constr_CHOICE.c + constr_SEQUENCE.c + constr_SEQUENCE_OF.c + constr_SET_OF.c + constr_TYPE.c + INTEGER.c + Makefile.am.libasncodec + NativeEnumerated.c + NativeInteger.c + NULL.c + OBJECT_IDENTIFIER.c + OCTET_STRING.c + OPEN_TYPE.c + VisibleString.c + xer_decoder.c + xer_encoder.c + xer_support.c + XNAP_AccessAndMobilityIndication.c + XNAP_ActivatedServedCells.c + XNAP_ActivationIDforCellActivation.c + XNAP_ActivationSFN.c + XNAP_ActivityNotification.c + XNAP_Additional-PDCP-Duplication-TNL-Item.c + XNAP_Additional-PDCP-Duplication-TNL-List.c + XNAP_Additional-UL-NG-U-TNLatUPF-Item.c + XNAP_Additional-UL-NG-U-TNLatUPF-List.c + XNAP_AllocationandRetentionPriority.c + XNAP_AllowedCAG-ID-List-perPLMN.c + XNAP_AllowedPNI-NPN-ID-Item.c + XNAP_AllowedPNI-NPN-ID-List.c + XNAP_AlternativeQoSParaSetItem.c + XNAP_AlternativeQoSParaSetList.c + XNAP_AMF-Region-Information.c + XNAP_AMF-UE-NGAP-ID.c + XNAP_AreaOfInterestInformation.c + XNAP_AreaOfInterest-Item.c + XNAP_AreaScopeOfMDT-EUTRA.c + XNAP_AreaScopeOfMDT-NR.c + XNAP_AreaScopeOfNeighCellsItem.c + XNAP_AreaScopeOfNeighCellsList.c + XNAP_AS-SecurityInformation.c + XNAP_AssistanceDataForRANPaging.c + XNAP_AvailableCapacity.c + XNAP_AvailableFastMCGRecoveryViaSRB3.c + XNAP_AvailableRRCConnectionCapacityValue.c + XNAP_AveragingWindow.c + XNAP_BearersSubjectToCounterCheck-Item.c + XNAP_BearersSubjectToCounterCheck-List.c + XNAP_BitRate.c + XNAP_BluetoothMeasConfig.c + XNAP_BluetoothMeasConfigNameList.c + XNAP_BluetoothMeasurementConfiguration.c + XNAP_BluetoothName.c + XNAP_BPLMN-ID-Info-EUTRA.c + XNAP_BPLMN-ID-Info-EUTRA-Item.c + XNAP_BPLMN-ID-Info-NR.c + XNAP_BPLMN-ID-Info-NR-Item.c + XNAP_BroadcastCAG-Identifier-Item.c + XNAP_BroadcastCAG-Identifier-List.c + XNAP_BroadcastEUTRAPLMNs.c + XNAP_BroadcastNID-Item.c + XNAP_BroadcastNID-List.c + XNAP_BroadcastPLMNinTAISupport-Item.c + XNAP_BroadcastPLMNs.c + XNAP_BroadcastPNI-NPN-ID-Information.c + XNAP_BroadcastPNI-NPN-ID-Information-Item.c + XNAP_BroadcastSNPNID.c + XNAP_BroadcastSNPNID-List.c + XNAP_CAG-Identifier.c + XNAP_CapacityValue.c + XNAP_CapacityValueInfo.c + XNAP_Cause.c + XNAP_CauseMisc.c + XNAP_CauseProtocol.c + XNAP_CauseRadioNetworkLayer.c + XNAP_CauseTransportLayer.c + XNAP_CellActivationFailure.c + XNAP_CellActivationRequest.c + XNAP_CellActivationResponse.c + XNAP_CellAndCapacityAssistanceInfo-EUTRA.c + XNAP_CellAndCapacityAssistanceInfo-NR.c + XNAP_CellAssistanceInfo-EUTRA.c + XNAP_CellAssistanceInfo-NR.c + XNAP_CellBasedMDT-EUTRA.c + XNAP_CellBasedMDT-NR.c + XNAP_CellCapacityClassValue.c + XNAP_CellGroupID.c + XNAP_CellIdListforMDT-EUTRA.c + XNAP_CellIdListforMDT-NR.c + XNAP_CellMeasurementResult.c + XNAP_CellMeasurementResult-Item.c + XNAP_CellsinAoI-Item.c + XNAP_CellToReport.c + XNAP_CellToReport-Item.c + XNAP_CHOinformation-Ack.c + XNAP_CHOinformation-Req.c + XNAP_CHO-MRDC-Indicator.c + XNAP_CHO-Probability.c + XNAP_CHOtrigger.c + XNAP_CNTypeRestrictionsForEquivalent.c + XNAP_CNTypeRestrictionsForEquivalentItem.c + XNAP_CNTypeRestrictionsForServing.c + XNAP_CompositeAvailableCapacity.c + XNAP_CompositeAvailableCapacityGroup.c + XNAP_ConditionalHandoverCancel.c + XNAP_Configuration-rejected-by-M-NG-RANNode.c + XNAP_Configuration-successfully-applied.c + XNAP_ConfigurationUpdateInitiatingNodeChoice.c + XNAP_Connectivity-Support.c + XNAP_COUNT-PDCP-SN12.c + XNAP_COUNT-PDCP-SN18.c + XNAP_CPTransportLayerInformation.c + XNAP_Criticality.c + XNAP_CriticalityDiagnostics.c + XNAP_CriticalityDiagnostics-IE-List.c + XNAP_C-RNTI.c + XNAP_CSI-RSTransmissionIndication.c + XNAP_CyclicPrefix-E-UTRA-DL.c + XNAP_CyclicPrefix-E-UTRA-UL.c + XNAP_DAPSRequestInfo.c + XNAP_DAPSResponseInfo-Item.c + XNAP_DAPSResponseInfo-List.c + XNAP_DataForwardingAccepted.c + XNAP_DataforwardingandOffloadingInfofromSource.c + XNAP_DataForwardingInfoFromTargetNGRANnode.c + XNAP_DataForwardingResponseDRBItem.c + XNAP_DataForwardingResponseDRBItemList.c + XNAP_DataTrafficResourceIndication.c + XNAP_DataTrafficResources.c + XNAP_DeactivateTrace.c + XNAP_DefaultDRB-Allowed.c + XNAP_DeliveryStatus.c + XNAP_DesiredActNotificationLevel.c + XNAP_DLCountChoice.c + XNAP_DLDiscarding.c + XNAP_DLForwarding.c + XNAP_DL-GBR-PRB-usage.c + XNAP_DL-non-GBR-PRB-usage.c + XNAP_DL-Total-PRB-usage.c + XNAP_DRBBStatusTransfer12bitsSN.c + XNAP_DRBBStatusTransfer18bitsSN.c + XNAP_DRBBStatusTransferChoice.c + XNAP_DRB-ID.c + XNAP_DRB-List.c + XNAP_DRB-List-withCause.c + XNAP_DRB-List-withCause-Item.c + XNAP_DRB-Number.c + XNAP_DRBsAdmittedList-ModConfirm-SNterminated.c + XNAP_DRBsAdmittedList-ModConfirm-SNterminated-Item.c + XNAP_DRBsAdmittedList-ModificationResponse-MNterminated.c + XNAP_DRBsAdmittedList-ModificationResponse-MNterminated-Item.c + XNAP_DRBsAdmittedList-SetupResponse-MNterminated.c + XNAP_DRBsAdmittedList-SetupResponse-MNterminated-Item.c + XNAP_DRBsSubjectToDLDiscarding-Item.c + XNAP_DRBsSubjectToDLDiscarding-List.c + XNAP_DRBsSubjectToEarlyStatusTransfer-Item.c + XNAP_DRBsSubjectToEarlyStatusTransfer-List.c + XNAP_DRBsSubjectToStatusTransfer-Item.c + XNAP_DRBsSubjectToStatusTransfer-List.c + XNAP_DRBsToBeModifiedList-Modification-MNterminated.c + XNAP_DRBsToBeModifiedList-Modification-MNterminated-Item.c + XNAP_DRBsToBeModifiedList-ModificationResponse-SNterminated.c + XNAP_DRBsToBeModifiedList-ModificationResponse-SNterminated-Item.c + XNAP_DRBsToBeModified-List-Modified-SNterminated.c + XNAP_DRBsToBeModified-List-Modified-SNterminated-Item.c + XNAP_DRBsToBeModified-List-ModRqd-MNterminated.c + XNAP_DRBsToBeModified-List-ModRqd-MNterminated-Item.c + XNAP_DRBsToBeModified-List-ModRqd-SNterminated.c + XNAP_DRBsToBeModified-List-ModRqd-SNterminated-Item.c + XNAP_DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item.c + XNAP_DRBsToBeSetup-List-ModRqd-SNterminated.c + XNAP_DRBsToBeSetup-List-ModRqd-SNterminated-Item.c + XNAP_DRBsToBeSetupList-Setup-MNterminated.c + XNAP_DRBsToBeSetupList-Setup-MNterminated-Item.c + XNAP_DRBsToBeSetupList-SetupResponse-SNterminated.c + XNAP_DRBsToBeSetupList-SetupResponse-SNterminated-Item.c + XNAP_DRBToQoSFlowMapping-Item.c + XNAP_DRBToQoSFlowMapping-List.c + XNAP_DuplicationActivation.c + XNAP_Dynamic5QIDescriptor.c + XNAP_EarlyStatusTransfer.c + XNAP_ENB-ID-Choice.c + XNAP_EndpointIPAddressAndPort.c + XNAP_E-RAB-ID.c + XNAP_ErrorIndication.c + XNAP_E-UTRAARFCN.c + XNAP_E-UTRA-Cell-Identity.c + XNAP_E-UTRA-CGI.c + XNAP_E-UTRA-CoordinationAssistanceInfo.c + XNAP_E-UTRAFrequencyBandIndicator.c + XNAP_E-UTRAMultibandInfoList.c + XNAP_E-UTRA-NR-CellResourceCoordinationRequest.c + XNAP_E-UTRA-NR-CellResourceCoordinationResponse.c + XNAP_E-UTRAPCI.c + XNAP_E-UTRAPRACHConfiguration.c + XNAP_E-UTRA-ResourceCoordinationInfo.c + XNAP_E-UTRATransmissionBandwidth.c + XNAP_EventL1.c + XNAP_EventTriggered.c + XNAP_EventType.c + XNAP_EventTypeTrigger.c + XNAP_ExpectedActivityPeriod.c + XNAP_ExpectedHOInterval.c + XNAP_ExpectedIdlePeriod.c + XNAP_ExpectedUEActivityBehaviour.c + XNAP_ExpectedUEBehaviour.c + XNAP_ExpectedUEMobility.c + XNAP_ExpectedUEMovingTrajectory.c + XNAP_ExpectedUEMovingTrajectoryItem.c + XNAP_ExtendedPacketDelayBudget.c + XNAP_ExtendedRATRestrictionInformation.c + XNAP_ExtendedSliceSupportList.c + XNAP_ExtTLA-Item.c + XNAP_ExtTLAs.c + XNAP_FailureIndication.c + XNAP_FastMCGRecoveryRRCTransfer.c + XNAP_FirstDLCount.c + XNAP_FiveGCMobilityRestrictionListContainer.c + XNAP_FiveQI.c + XNAP_ForbiddenAreaItem.c + XNAP_ForbiddenAreaList.c + XNAP_FrequencyShift7p5khz.c + XNAP_GBRQoSFlowInfo.c + XNAP_GlobalAMF-Region-Information.c + XNAP_GlobalgNB-ID.c + XNAP_GlobalngeNB-ID.c + XNAP_GlobalNG-RANCell-ID.c + XNAP_GlobalNG-RANNode-ID.c + XNAP_GlobalNG-RANNodesinAoI-Item.c + XNAP_GNB-ID-Choice.c + XNAP_GNB-RadioResourceStatus.c + XNAP_GTP-TEID.c + XNAP_GTPTLA-Item.c + XNAP_GTPTLAs.c + XNAP_GTPtunnelTransportLayerInformation.c + XNAP_GUAMI.c + XNAP_HandoverCancel.c + XNAP_HandoverPreparationFailure.c + XNAP_HandoverReport.c + XNAP_HandoverReportType.c + XNAP_HandoverRequestAcknowledge.c + XNAP_HandoverRequest.c + XNAP_HandoverSuccess.c + XNAP_Hysteresis.c + XNAP_IABNodeIndication.c + XNAP_ImmediateMDT-EUTRA.c + XNAP_ImmediateMDT-NR.c + XNAP_InitiatingCondition-FailureIndication.c + XNAP_InitiatingMessage.c + XNAP_InitiatingNodeType-ResourceCoordRequest.c + XNAP_IntendedTDD-DL-ULConfiguration-NR.c + XNAP_InterfaceInstanceIndication.c + XNAP_InterfacesToTrace.c + XNAP_I-RNTI.c + XNAP_LastVisitedCell-Item.c + XNAP_LastVisitedEUTRANCellInformation.c + XNAP_LastVisitedGERANCellInformation.c + XNAP_LastVisitedNGRANCellInformation.c + XNAP_LastVisitedUTRANCellInformation.c + XNAP_LCID.c + XNAP_Links-to-log.c + XNAP_ListOfCells.c + XNAP_ListOfRANNodesinAoI.c + XNAP_ListOfTAIsinAoI.c + XNAP_LocationInformationSNReporting.c + XNAP_LocationReportingInformation.c + XNAP_LoggedEventTriggeredConfig.c + XNAP_LoggedMDT-EUTRA.c + XNAP_LoggedMDT-NR.c + XNAP_LoggingDuration.c + XNAP_LoggingInterval.c + XNAP_LowerLayerPresenceStatusChange.c + XNAP_LTEUESidelinkAggregateMaximumBitRate.c + XNAP_LTEV2XServicesAuthorized.c + XNAP_M1Configuration.c + XNAP_M1PeriodicReporting.c + XNAP_M1ReportingTrigger.c + XNAP_M1ThresholdEventA2.c + XNAP_M4Configuration.c + XNAP_M4period.c + XNAP_M5Configuration.c + XNAP_M5period.c + XNAP_M6Configuration.c + XNAP_M6report-Interval.c + XNAP_M7Configuration.c + XNAP_M7period.c + XNAP_MAC-I.c + XNAP_MaskedIMEISV.c + XNAP_MaxCHOpreparations.c + XNAP_MaximumCellListSize.c + XNAP_MaximumDataBurstVolume.c + XNAP_MaximumIPdatarate.c + XNAP_MaxIPrate.c + XNAP_MBSFNControlRegionLength.c + XNAP_MBSFNSubframeAllocation-E-UTRA.c + XNAP_MBSFNSubframeInfo-E-UTRA.c + XNAP_MBSFNSubframeInfo-E-UTRA-Item.c + XNAP_MDT-Activation.c + XNAP_MDT-Configuration.c + XNAP_MDT-Configuration-EUTRA.c + XNAP_MDT-Configuration-NR.c + XNAP_MDT-Location-Info.c + XNAP_MDTMode-EUTRA.c + XNAP_MDTMode-EUTRA-Extension.c + XNAP_MDTMode-NR.c + XNAP_MDTMode-NR-Extension.c + XNAP_MDTPLMNList.c + XNAP_Measurement-ID.c + XNAP_MeasurementsToActivate.c + XNAP_MeasurementThresholdA2.c + XNAP_MeasurementThresholdL1LoggedMDT.c + XNAP_MessageOversizeNotification.c + XNAP_MobilityChangeAcknowledge.c + XNAP_MobilityChangeFailure.c + XNAP_MobilityChangeRequest.c + XNAP_MobilityInformation.c + XNAP_MobilityParametersInformation.c + XNAP_MobilityParametersModificationRange.c + XNAP_MobilityRestrictionList.c + XNAP_MR-DC-ResourceCoordinationInfo.c + XNAP_NBIoT-UL-DL-AlignmentOffset.c + XNAP_NE-DC-TDM-Pattern.c + XNAP_NeighbourInformation-E-UTRA.c + XNAP_NeighbourInformation-E-UTRA-Item.c + XNAP_NeighbourInformation-NR.c + XNAP_NeighbourInformation-NR-Item.c + XNAP_NeighbourInformation-NR-ModeFDDInfo.c + XNAP_NeighbourInformation-NR-ModeInfo.c + XNAP_NeighbourInformation-NR-ModeTDDInfo.c + XNAP_NG-eNB-RadioResourceStatus.c + XNAP_NG-RAN-Cell-Identity.c + XNAP_NG-RAN-Cell-Identity-ListinRANPagingArea.c + XNAP_NG-RAN-CellPCI.c + XNAP_NGRANNodeConfigurationUpdateAcknowledge.c + XNAP_NGRANNodeConfigurationUpdate.c + XNAP_NGRANNodeConfigurationUpdateFailure.c + XNAP_NG-RAN-Node-ResourceCoordinationInfo.c + XNAP_NG-RANnodeUEXnAPID.c + XNAP_NG-RANTraceID.c + XNAP_NID.c + XNAP_NonDynamic5QIDescriptor.c + XNAP_NonGBRResources-Offered.c + XNAP_NoofRRCConnections.c + XNAP_NotificationControlIndication.c + XNAP_NPN-Broadcast-Information.c + XNAP_NPN-Broadcast-Information-PNI-NPN.c + XNAP_NPN-Broadcast-Information-SNPN.c + XNAP_NPNMobilityInformation.c + XNAP_NPNMobilityInformation-PNI-NPN.c + XNAP_NPNMobilityInformation-SNPN.c + XNAP_NPNPagingAssistanceInformation.c + XNAP_NPNPagingAssistanceInformation-PNI-NPN.c + XNAP_NPN-Support.c + XNAP_NPN-Support-SNPN.c + XNAP_NRARFCN.c + XNAP_NRCarrierItem.c + XNAP_NRCarrierList.c + XNAP_NR-Cell-Identity.c + XNAP_NRCellPRACHConfig.c + XNAP_NR-CGI.c + XNAP_NR-CoordinationAssistanceInfo.c + XNAP_NRCyclicPrefix.c + XNAP_NRDL-ULTransmissionPeriodicity.c + XNAP_NRFrequencyBand.c + XNAP_NRFrequencyBandItem.c + XNAP_NRFrequencyBand-List.c + XNAP_NRFrequencyInfo.c + XNAP_NRFrequencyInfoforMDT.c + XNAP_NRMobilityHistoryReport.c + XNAP_NRModeInfo.c + XNAP_NRModeInfoFDD.c + XNAP_NRModeInfoTDD.c + XNAP_NRNRB.c + XNAP_NRPCI.c + XNAP_NR-ResourceCoordinationInfo.c + XNAP_NRSCS.c + XNAP_NRTransmissionBandwidth.c + XNAP_NRUESidelinkAggregateMaximumBitRate.c + XNAP_NRV2XServicesAuthorized.c + XNAP_NumberofActiveUEs.c + XNAP_NumberOfAntennaPorts-E-UTRA.c + XNAP_OfferedCapacity.c + XNAP_OffsetOfNbiotChannelNumberToEARFCN.c + XNAP_PacketDelayBudget.c + XNAP_PacketErrorRate.c + XNAP_PacketLossRate.c + XNAP_PagingDRX.c + XNAP_PagingPriority.c + XNAP_PartialListIndicator.c + XNAP_PC5FlowBitRates.c + XNAP_PC5QoSFlowItem.c + XNAP_PC5QoSFlowList.c + XNAP_PC5QoSParameters.c + XNAP_PCIListForMDT.c + XNAP_PDCPChangeIndication.c + XNAP_PDCPDuplicationConfiguration.c + XNAP_PDCPSNLength.c + XNAP_PDUSessionAdmittedAddedAddReqAck.c + XNAP_PDUSessionAdmittedAddedAddReqAck-Item.c + XNAP_PDUSessionAdmittedModSNModConfirm.c + XNAP_PDUSessionAdmittedModSNModConfirm-Item.c + XNAP_PDUSessionAdmitted-SNModResponse.c + XNAP_PDUSessionAdmittedToBeAddedSNModResponse.c + XNAP_PDUSessionAdmittedToBeAddedSNModResponse-Item.c + XNAP_PDUSessionAdmittedToBeModifiedSNModResponse.c + XNAP_PDUSessionAdmittedToBeModifiedSNModResponse-Item.c + XNAP_PDUSessionAdmittedToBeReleasedSNModResponse.c + XNAP_PDUSessionAggregateMaximumBitRate.c + XNAP_PDUSessionCommonNetworkInstance.c + XNAP_PDUSessionDataForwarding-SNModResponse.c + XNAP_PDUSession-ID.c + XNAP_PDUSession-List.c + XNAP_PDUSession-List-withCause.c + XNAP_PDUSession-List-withCause-Item.c + XNAP_PDUSession-List-withDataForwardingFromTarget.c + XNAP_PDUSession-List-withDataForwardingFromTarget-Item.c + XNAP_PDUSession-List-withDataForwardingRequest.c + XNAP_PDUSession-List-withDataForwardingRequest-Item.c + XNAP_PDUSessionNetworkInstance.c + XNAP_PDUSessionNotAdmittedAddReqAck.c + XNAP_PDUSessionNotAdmitted-SNModResponse.c + XNAP_PDUSessionReleasedList-RelConf.c + XNAP_PDUSessionReleasedSNModConfirm.c + XNAP_PDUSessionResourceAdmittedInfo.c + XNAP_PDUSessionResourceBearerSetupCompleteInfo-SNterminated.c + XNAP_PDUSessionResourceChangeConfirmInfo-MNterminated.c + XNAP_PDUSessionResourceChangeConfirmInfo-SNterminated.c + XNAP_PDUSessionResourceChangeRequiredInfo-MNterminated.c + XNAP_PDUSessionResourceChangeRequiredInfo-SNterminated.c + XNAP_PDUSessionResourceModConfirmInfo-MNterminated.c + XNAP_PDUSessionResourceModConfirmInfo-SNterminated.c + XNAP_PDUSessionResourceModificationInfo-MNterminated.c + XNAP_PDUSessionResourceModificationInfo-SNterminated.c + XNAP_PDUSessionResourceModificationResponseInfo-MNterminated.c + XNAP_PDUSessionResourceModificationResponseInfo-SNterminated.c + XNAP_PDUSessionResourceModRqdInfo-MNterminated.c + XNAP_PDUSessionResourceModRqdInfo-SNterminated.c + XNAP_PDUSessionResourcesActivityNotify-Item.c + XNAP_PDUSessionResourcesActivityNotifyList.c + XNAP_PDUSessionResourcesAdmitted-Item.c + XNAP_PDUSessionResourcesAdmitted-List.c + XNAP_PDUSessionResourceSecondaryRATUsageItem.c + XNAP_PDUSessionResourceSecondaryRATUsageList.c + XNAP_PDUSessionResourceSetupInfo-MNterminated.c + XNAP_PDUSessionResourceSetupInfo-SNterminated.c + XNAP_PDUSessionResourceSetupResponseInfo-MNterminated.c + XNAP_PDUSessionResourceSetupResponseInfo-SNterminated.c + XNAP_PDUSessionResourcesNotAdmitted-Item.c + XNAP_PDUSessionResourcesNotAdmitted-List.c + XNAP_PDUSessionResourcesNotify-Item.c + XNAP_PDUSessionResourcesNotifyList.c + XNAP_PDUSessionResourcesToBeSetup-Item.c + XNAP_PDUSessionResourcesToBeSetup-List.c + XNAP_PDUSession-SNChangeConfirm-Item.c + XNAP_PDUSession-SNChangeConfirm-List.c + XNAP_PDUSession-SNChangeRequired-Item.c + XNAP_PDUSession-SNChangeRequired-List.c + XNAP_PDUSessionsToBeAdded-SNModRequest-Item.c + XNAP_PDUSessionsToBeAdded-SNModRequest-List.c + XNAP_PDUSessionsToBeModified-SNModRequest-Item.c + XNAP_PDUSessionsToBeModified-SNModRequest-List.c + XNAP_PDUSessionsToBeReleased-SNModRequest-List.c + XNAP_PDUSessionToBeAddedAddReq.c + XNAP_PDUSessionToBeAddedAddReq-Item.c + XNAP_PDUSessionToBeModifiedSNModRequired.c + XNAP_PDUSessionToBeModifiedSNModRequired-Item.c + XNAP_PDUSessionToBeReleasedList-RelReqAck.c + XNAP_PDUSessionToBeReleasedList-RelRqd.c + XNAP_PDUSessionToBeReleasedSNModRequired.c + XNAP_PDUSessionType.c + XNAP_PDUSessionUsageReport.c + XNAP_PedestrianUE.c + XNAP_PER-Exponent.c + XNAP_Periodical.c + XNAP_PER-Scalar.c + XNAP_PLMN-Identity.c + XNAP_PNI-NPN-Restricted-Information.c + XNAP_PortNumber.c + XNAP_Presence.c + XNAP_PriorityLevelQoS.c + XNAP_PrivateIE-Container.c + XNAP_PrivateIE-Field.c + XNAP_PrivateIE-ID.c + XNAP_PrivateMessage.c + XNAP_ProcedureCode.c + XNAP_ProcedureStageChoice.c + XNAP_ProtectedE-UTRAFootprintTimePattern.c + XNAP_ProtectedE-UTRAResourceIndication.c + XNAP_ProtectedE-UTRAResource-Item.c + XNAP_ProtectedE-UTRAResourceList.c + XNAP_ProtocolExtensionContainer.c + XNAP_ProtocolExtensionField.c + XNAP_ProtocolIE-Container.c + XNAP_ProtocolIE-ContainerList.c + XNAP_ProtocolIE-ContainerPair.c + XNAP_ProtocolIE-ContainerPairList.c + XNAP_ProtocolIE-Field.c + XNAP_ProtocolIE-FieldPair.c + XNAP_ProtocolIE-ID.c + XNAP_ProtocolIE-Single-Container.c + XNAP_QoSCharacteristics.c + XNAP_QoSFlowIdentifier.c + XNAP_QoSFlow-Item.c + XNAP_QoSFlowLevelQoSParameters.c + XNAP_QoSFlowMappingIndication.c + XNAP_QoSFlowNotificationControlIndicationInfo.c + XNAP_QoSFlowNotify-Item.c + XNAP_QoSFLowsAcceptedToBeForwarded-Item.c + XNAP_QoSFLowsAcceptedToBeForwarded-List.c + XNAP_QoSFlowsActivityNotifyItem.c + XNAP_QoSFlowsActivityNotifyList.c + XNAP_QoSFlowsAdmitted-Item.c + XNAP_QoSFlowsAdmitted-List.c + XNAP_QoSFlows-List.c + XNAP_QoSFlows-List-withCause.c + XNAP_QoSFlowsMappedtoDRB-Setup-MNterminated.c + XNAP_QoSFlowsMappedtoDRB-Setup-MNterminated-Item.c + XNAP_QoSFlowsMappedtoDRB-SetupResponse-SNterminated.c + XNAP_QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item.c + XNAP_QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated.c + XNAP_QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item.c + XNAP_QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated.c + XNAP_QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item.c + XNAP_QoSFLowsToBeForwarded-Item.c + XNAP_QoSFLowsToBeForwarded-List.c + XNAP_QoSFlowsToBeSetup-Item.c + XNAP_QoSFlowsToBeSetup-List.c + XNAP_QoSFlowsToBeSetup-List-Modified-SNterminated.c + XNAP_QoSFlowsToBeSetup-List-Modified-SNterminated-Item.c + XNAP_QoSFlowsToBeSetup-List-Setup-SNterminated.c + XNAP_QoSFlowsToBeSetup-List-Setup-SNterminated-Item.c + XNAP_QoSFlowsUsageReport-Item.c + XNAP_QoSFlowsUsageReportList.c + XNAP_QoSFlowwithCause-Item.c + XNAP_QosMonitoringRequest.c + XNAP_QoSParaSetIndex.c + XNAP_QoSParaSetNotifyIndex.c + XNAP_RACHReportContainer.c + XNAP_RACHReportInformation.c + XNAP_RACHReportList-Item.c + XNAP_RadioResourceStatus.c + XNAP_RANAC.c + XNAP_RANAreaID.c + XNAP_RANAreaID-List.c + XNAP_Range.c + XNAP_RANPagingArea.c + XNAP_RANPagingAreaChoice.c + XNAP_RANPagingAttemptInfo.c + XNAP_RANPaging.c + XNAP_RANPagingFailure.c + XNAP_RAT-RestrictionInformation.c + XNAP_RAT-RestrictionsItem.c + XNAP_RAT-RestrictionsList.c + XNAP_RedundantPDUSessionInformation.c + XNAP_RedundantQoSFlowIndicator.c + XNAP_Reestablishment-Indication.c + XNAP_ReferenceID.c + XNAP_ReflectiveQoSAttribute.c + XNAP_RegistrationRequest.c + XNAP_ReleaseFastMCGRecoveryViaSRB3.c + XNAP_ReportAmountMDT.c + XNAP_ReportArea.c + XNAP_ReportCharacteristics.c + XNAP_ReportingPeriodicity.c + XNAP_ReportIntervalMDT.c + XNAP_ReportType.c + XNAP_RequestedFastMCGRecoveryViaSRB3.c + XNAP_RequestedFastMCGRecoveryViaSRB3Release.c + XNAP_RequestReferenceID.c + XNAP_ReservedSubframePattern.c + XNAP_ResetRequest.c + XNAP_ResetRequestPartialReleaseItem.c + XNAP_ResetRequestPartialReleaseList.c + XNAP_ResetRequestTypeInfo.c + XNAP_ResetRequestTypeInfo-Full.c + XNAP_ResetRequestTypeInfo-Partial.c + XNAP_ResetResponse.c + XNAP_ResetResponsePartialReleaseItem.c + XNAP_ResetResponsePartialReleaseList.c + XNAP_ResetResponseTypeInfo.c + XNAP_ResetResponseTypeInfo-Full.c + XNAP_ResetResponseTypeInfo-Partial.c + XNAP_ResourceCoordRequest-gNB-initiated.c + XNAP_ResourceCoordRequest-ng-eNB-initiated.c + XNAP_ResourceCoordResponse-gNB-initiated.c + XNAP_ResourceCoordResponse-ng-eNB-initiated.c + XNAP_ResourceStatusFailure.c + XNAP_ResourceStatusRequest.c + XNAP_ResourceStatusResponse.c + XNAP_ResourceStatusUpdate.c + XNAP_RespondingNodeTypeConfigUpdateAck.c + XNAP_RespondingNodeTypeConfigUpdateAck-gNB.c + XNAP_RespondingNodeTypeConfigUpdateAck-ng-eNB.c + XNAP_RespondingNodeType-ResourceCoordResponse.c + XNAP_ResponseInfo-ReconfCompl.c + XNAP_ResponseType-ReconfComplete.c + XNAP_RetrieveUEContextFailure.c + XNAP_RetrieveUEContextRequest.c + XNAP_RetrieveUEContextResponse.c + XNAP_RFSP-Index.c + XNAP_RLCDuplicationInformation.c + XNAP_RLCDuplicationState-Item.c + XNAP_RLCDuplicationStateList.c + XNAP_RLCMode.c + XNAP_RLC-Status.c + XNAP_RRCConfigIndication.c + XNAP_RRCConnections.c + XNAP_RRCReestab-initiated.c + XNAP_RRCResumeCause.c + XNAP_RRCSetup-initiated.c + XNAP_RRCTransfer.c + XNAP_RSN.c + XNAP_SCGConfigurationQuery.c + XNAP_SecondarydataForwardingInfoFromTarget-Item.c + XNAP_SecondarydataForwardingInfoFromTarget-List.c + XNAP_SecondaryRATDataUsageReport.c + XNAP_SecondaryRATUsageInformation.c + XNAP_SecurityIndication.c + XNAP_SecurityResult.c + XNAP_SensorMeasConfig.c + XNAP_SensorMeasConfigNameList.c + XNAP_SensorMeasurementConfiguration.c + XNAP_SensorName.c + XNAP_ServedCellInformation-E-UTRA.c + XNAP_ServedCellInformation-E-UTRA-FDDInfo.c + XNAP_ServedCellInformation-E-UTRA-ModeInfo.c + XNAP_ServedCellInformation-E-UTRA-perBPLMN.c + XNAP_ServedCellInformation-E-UTRA-TDDInfo.c + XNAP_ServedCellInformation-NR.c + XNAP_ServedCells-E-UTRA.c + XNAP_ServedCells-E-UTRA-Item.c + XNAP_ServedCells-NR.c + XNAP_ServedCells-NR-Item.c + XNAP_ServedCellsToActivate.c + XNAP_ServedCells-ToModify-E-UTRA.c + XNAP_ServedCells-ToModify-E-UTRA-Item.c + XNAP_ServedCells-ToModify-NR.c + XNAP_ServedCells-ToModify-NR-Item.c + XNAP_ServedCellsToUpdate-E-UTRA.c + XNAP_ServedCellsToUpdate-NR.c + XNAP_ServiceAreaItem.c + XNAP_ServiceAreaList.c + XNAP_ServingSNPNID.c + XNAP_SharedResourceType.c + XNAP_SharedResourceType-ULDL-Sharing.c + XNAP_SharedResourceType-ULDL-Sharing-DL-Resources.c + XNAP_SharedResourceType-ULDL-Sharing-DL-ResourcesChanged.c + XNAP_SharedResourceType-ULDL-Sharing-UL-Resources.c + XNAP_SharedResourceType-ULDL-Sharing-UL-ResourcesChanged.c + XNAP_SharedResourceType-UL-OnlySharing.c + XNAP_SliceAvailableCapacity.c + XNAP_SliceAvailableCapacity-Item.c + XNAP_SliceSupport-List.c + XNAP_SliceToReport-List.c + XNAP_SliceToReport-List-Item.c + XNAP_SlotConfiguration-List.c + XNAP_SlotConfiguration-List-Item.c + XNAP_S-NG-RANnode-Addition-Trigger-Ind.c + XNAP_S-NG-RANnode-SecurityKey.c + XNAP_SNodeAdditionRequestAcknowledge.c + XNAP_SNodeAdditionRequest.c + XNAP_SNodeAdditionRequestReject.c + XNAP_SNodeChangeConfirm.c + XNAP_SNodeChangeRefuse.c + XNAP_SNodeChangeRequired.c + XNAP_SNodeCounterCheckRequest.c + XNAP_SNodeModificationConfirm.c + XNAP_SNodeModificationRefuse.c + XNAP_SNodeModificationRequestAcknowledge.c + XNAP_SNodeModificationRequest.c + XNAP_SNodeModificationRequestReject.c + XNAP_SNodeModificationRequired.c + XNAP_SNodeReconfigurationComplete.c + XNAP_SNodeReleaseConfirm.c + XNAP_SNodeReleaseReject.c + XNAP_SNodeReleaseRequestAcknowledge.c + XNAP_SNodeReleaseRequest.c + XNAP_SNodeReleaseRequired.c + XNAP_SNSSAIAvailableCapacity-Item.c + XNAP_SNSSAIAvailableCapacity-List.c + XNAP_S-NSSAI.c + XNAP_SNSSAI-Item.c + XNAP_SNSSAI-list.c + XNAP_SNStatusTransfer.c + XNAP_SNTriggered.c + XNAP_SourceOfUEActivityBehaviourInformation.c + XNAP_SpecialSubframeInfo-E-UTRA.c + XNAP_SpecialSubframePatterns-E-UTRA.c + XNAP_SpectrumSharingGroupID.c + XNAP_SplitSessionIndicator.c + XNAP_SplitSRB-RRCTransfer.c + XNAP_SplitSRBsTypes.c + XNAP_SSBAreaCapacityValue-List.c + XNAP_SSBAreaCapacityValue-List-Item.c + XNAP_SSBAreaRadioResourceStatus-List.c + XNAP_SSBAreaRadioResourceStatus-List-Item.c + XNAP_SSB-PositionsInBurst.c + XNAP_SSBToReport-List.c + XNAP_SSBToReport-List-Item.c + XNAP_SuccessfulOutcome.c + XNAP_SUL-FrequencyBand.c + XNAP_SUL-Information.c + XNAP_SupportedSULBandItem.c + XNAP_SupportedSULBandList.c + XNAP_SymbolAllocation-in-Slot-AllDL.c + XNAP_SymbolAllocation-in-Slot-AllUL.c + XNAP_SymbolAllocation-in-Slot-BothDLandUL.c + XNAP_SymbolAllocation-in-Slot.c + XNAP_TABasedMDT.c + XNAP_TAC.c + XNAP_TAIBasedMDT.c + XNAP_TAIforMDT-Item.c + XNAP_TAIListforMDT.c + XNAP_TAIsinAoI-Item.c + XNAP_TAISupport-Item.c + XNAP_TAISupport-List.c + XNAP_TAListforMDT.c + XNAP_TargetCellinEUTRAN.c + XNAP_TargetCellList.c + XNAP_TargetCellList-Item.c + XNAP_Target-CGI.c + XNAP_TDDULDLConfigurationCommonNR.c + XNAP_Threshold-RSRP.c + XNAP_Threshold-RSRQ.c + XNAP_Threshold-SINR.c + XNAP_TimeToTrigger.c + XNAP_TimeToWait.c + XNAP_TNLA-Failed-To-Setup-Item.c + XNAP_TNLA-Failed-To-Setup-List.c + XNAP_TNLA-Setup-Item.c + XNAP_TNLA-Setup-List.c + XNAP_TNLAssociationUsage.c + XNAP_TNLA-To-Add-Item.c + XNAP_TNLA-To-Add-List.c + XNAP_TNLA-To-Remove-Item.c + XNAP_TNLA-To-Remove-List.c + XNAP_TNLA-To-Update-Item.c + XNAP_TNLA-To-Update-List.c + XNAP_TNLCapacityIndicator.c + XNAP_TNLConfigurationInfo.c + XNAP_TraceActivation.c + XNAP_Trace-Depth.c + XNAP_TraceStart.c + XNAP_TransportLayerAddress.c + XNAP_TriggeringMessage.c + XNAP_TSCAssistanceInformation.c + XNAP_TSCTrafficCharacteristics.c + XNAP_TypeOfError.c + XNAP_UEAggregateMaximumBitRate.c + XNAP_UEContextID.c + XNAP_UEContextIDforRRCReestablishment.c + XNAP_UEContextIDforRRCResume.c + XNAP_UEContextInfoHORequest.c + XNAP_UEContextInfoRetrUECtxtResp.c + XNAP_UEContextInfo-SNModRequest.c + XNAP_UEContextKeptIndicator.c + XNAP_UEContextRefAtSN-HORequest.c + XNAP_UEContextRelease.c + XNAP_UEHistoryInformation.c + XNAP_UEHistoryInformationFromTheUE.c + XNAP_UEIdentityIndexValue.c + XNAP_UERadioCapabilityForPaging.c + XNAP_UERadioCapabilityForPagingOfEUTRA.c + XNAP_UERadioCapabilityForPagingOfNR.c + XNAP_UERadioCapabilityID.c + XNAP_UERANPagingIdentity.c + XNAP_UEReportRRCTransfer.c + XNAP_UERLFReportContainer.c + XNAP_UERLFReportContainerLTE.c + XNAP_UERLFReportContainerNR.c + XNAP_UESecurityCapabilities.c + XNAP_ULConfiguration.c + XNAP_ULForwarding.c + XNAP_ULForwardingProposal.c + XNAP_UL-GBR-PRB-usage.c + XNAP_UL-non-GBR-PRB-usage.c + XNAP_UL-Total-PRB-usage.c + XNAP_UL-UE-Configuration.c + XNAP_UnsuccessfulOutcome.c + XNAP_UPTransportLayerInformation.c + XNAP_UPTransportParameters.c + XNAP_UPTransportParametersItem.c + XNAP_URIaddress.c + XNAP_UserPlaneTrafficActivityReport.c + XNAP_VehicleUE.c + XNAP_VolumeTimedReport-Item.c + XNAP_VolumeTimedReportList.c + XNAP_WLANMeasConfig.c + XNAP_WLANMeasConfigNameList.c + XNAP_WLANMeasurementConfiguration.c + XNAP_WLANName.c + XNAP_XnAP-PDU.c + XNAP_XnBenefitValue.c + XNAP_XnRemovalFailure.c + XNAP_XnRemovalRequest.c + XNAP_XnRemovalResponse.c + XNAP_XnSetupFailure.c + XNAP_XnSetupRequest.c + XNAP_XnSetupResponse.c + XNAP_XnUAddressIndication.c + XNAP_XnUAddressInfoperPDUSession-Item.c + XNAP_XnUAddressInfoperPDUSession-List.c +) + +set(xnap_headers + ANY.h + asn_application.h + asn_bit_data.h + asn_codecs.h + asn_codecs_prim.h + asn_internal.h + asn_ioc.h + asn_random_fill.h + asn_SEQUENCE_OF.h + asn_SET_OF.h + asn_system.h + ber_decoder.h + ber_tlv_length.h + ber_tlv_tag.h + BIT_STRING.h + constraints.h + constr_CHOICE.h + constr_SEQUENCE.h + constr_SEQUENCE_OF.h + constr_SET_OF.h + constr_TYPE.h + INTEGER.h + NativeEnumerated.h + NativeInteger.h + NULL.h + OBJECT_IDENTIFIER.h + OCTET_STRING.h + OPEN_TYPE.h + aper_decoder.h + aper_encoder.h + aper_opentype.h + aper_support.h + VisibleString.h + xer_decoder.h + xer_encoder.h + xer_support.h + XNAP_AccessAndMobilityIndication.h + XNAP_ActivatedServedCells.h + XNAP_ActivationIDforCellActivation.h + XNAP_ActivationSFN.h + XNAP_ActivityNotification.h + XNAP_Additional-PDCP-Duplication-TNL-Item.h + XNAP_Additional-PDCP-Duplication-TNL-List.h + XNAP_Additional-UL-NG-U-TNLatUPF-Item.h + XNAP_Additional-UL-NG-U-TNLatUPF-List.h + XNAP_AllocationandRetentionPriority.h + XNAP_AllowedCAG-ID-List-perPLMN.h + XNAP_AllowedPNI-NPN-ID-Item.h + XNAP_AllowedPNI-NPN-ID-List.h + XNAP_AlternativeQoSParaSetItem.h + XNAP_AlternativeQoSParaSetList.h + XNAP_AMF-Region-Information.h + XNAP_AMF-UE-NGAP-ID.h + XNAP_AreaOfInterestInformation.h + XNAP_AreaOfInterest-Item.h + XNAP_AreaScopeOfMDT-EUTRA.h + XNAP_AreaScopeOfMDT-NR.h + XNAP_AreaScopeOfNeighCellsItem.h + XNAP_AreaScopeOfNeighCellsList.h + XNAP_asn_constant.h + XNAP_AS-SecurityInformation.h + XNAP_AssistanceDataForRANPaging.h + XNAP_AvailableCapacity.h + XNAP_AvailableFastMCGRecoveryViaSRB3.h + XNAP_AvailableRRCConnectionCapacityValue.h + XNAP_AveragingWindow.h + XNAP_BearersSubjectToCounterCheck-Item.h + XNAP_BearersSubjectToCounterCheck-List.h + XNAP_BitRate.h + XNAP_BluetoothMeasConfig.h + XNAP_BluetoothMeasConfigNameList.h + XNAP_BluetoothMeasurementConfiguration.h + XNAP_BluetoothName.h + XNAP_BPLMN-ID-Info-EUTRA.h + XNAP_BPLMN-ID-Info-EUTRA-Item.h + XNAP_BPLMN-ID-Info-NR.h + XNAP_BPLMN-ID-Info-NR-Item.h + XNAP_BroadcastCAG-Identifier-Item.h + XNAP_BroadcastCAG-Identifier-List.h + XNAP_BroadcastEUTRAPLMNs.h + XNAP_BroadcastNID-Item.h + XNAP_BroadcastNID-List.h + XNAP_BroadcastPLMNinTAISupport-Item.h + XNAP_BroadcastPLMNs.h + XNAP_BroadcastPNI-NPN-ID-Information.h + XNAP_BroadcastPNI-NPN-ID-Information-Item.h + XNAP_BroadcastSNPNID.h + XNAP_BroadcastSNPNID-List.h + XNAP_CAG-Identifier.h + XNAP_CapacityValue.h + XNAP_CapacityValueInfo.h + XNAP_Cause.h + XNAP_CauseMisc.h + XNAP_CauseProtocol.h + XNAP_CauseRadioNetworkLayer.h + XNAP_CauseTransportLayer.h + XNAP_CellActivationFailure.h + XNAP_CellActivationRequest.h + XNAP_CellActivationResponse.h + XNAP_CellAndCapacityAssistanceInfo-EUTRA.h + XNAP_CellAndCapacityAssistanceInfo-NR.h + XNAP_CellAssistanceInfo-EUTRA.h + XNAP_CellAssistanceInfo-NR.h + XNAP_CellBasedMDT-EUTRA.h + XNAP_CellBasedMDT-NR.h + XNAP_CellCapacityClassValue.h + XNAP_CellGroupID.h + XNAP_CellIdListforMDT-EUTRA.h + XNAP_CellIdListforMDT-NR.h + XNAP_CellMeasurementResult.h + XNAP_CellMeasurementResult-Item.h + XNAP_CellsinAoI-Item.h + XNAP_CellToReport.h + XNAP_CellToReport-Item.h + XNAP_CHOinformation-Ack.h + XNAP_CHOinformation-Req.h + XNAP_CHO-MRDC-Indicator.h + XNAP_CHO-Probability.h + XNAP_CHOtrigger.h + XNAP_CNTypeRestrictionsForEquivalent.h + XNAP_CNTypeRestrictionsForEquivalentItem.h + XNAP_CNTypeRestrictionsForServing.h + XNAP_CompositeAvailableCapacityGroup.h + XNAP_CompositeAvailableCapacity.h + XNAP_ConditionalHandoverCancel.h + XNAP_Configuration-rejected-by-M-NG-RANNode.h + XNAP_Configuration-successfully-applied.h + XNAP_ConfigurationUpdateInitiatingNodeChoice.h + XNAP_Connectivity-Support.h + XNAP_COUNT-PDCP-SN12.h + XNAP_COUNT-PDCP-SN18.h + XNAP_CPTransportLayerInformation.h + XNAP_CriticalityDiagnostics.h + XNAP_CriticalityDiagnostics-IE-List.h + XNAP_Criticality.h + XNAP_C-RNTI.h + XNAP_CSI-RSTransmissionIndication.h + XNAP_CyclicPrefix-E-UTRA-DL.h + XNAP_CyclicPrefix-E-UTRA-UL.h + XNAP_DAPSRequestInfo.h + XNAP_DAPSResponseInfo-Item.h + XNAP_DAPSResponseInfo-List.h + XNAP_DataForwardingAccepted.h + XNAP_DataforwardingandOffloadingInfofromSource.h + XNAP_DataForwardingInfoFromTargetNGRANnode.h + XNAP_DataForwardingResponseDRBItem.h + XNAP_DataForwardingResponseDRBItemList.h + XNAP_DataTrafficResourceIndication.h + XNAP_DataTrafficResources.h + XNAP_DeactivateTrace.h + XNAP_DefaultDRB-Allowed.h + XNAP_DeliveryStatus.h + XNAP_DesiredActNotificationLevel.h + XNAP_DLCountChoice.h + XNAP_DLDiscarding.h + XNAP_DLForwarding.h + XNAP_DL-GBR-PRB-usage.h + XNAP_DL-non-GBR-PRB-usage.h + XNAP_DL-Total-PRB-usage.h + XNAP_DRBBStatusTransfer12bitsSN.h + XNAP_DRBBStatusTransfer18bitsSN.h + XNAP_DRBBStatusTransferChoice.h + XNAP_DRB-ID.h + XNAP_DRB-List.h + XNAP_DRB-List-withCause.h + XNAP_DRB-List-withCause-Item.h + XNAP_DRB-Number.h + XNAP_DRBsAdmittedList-ModConfirm-SNterminated.h + XNAP_DRBsAdmittedList-ModConfirm-SNterminated-Item.h + XNAP_DRBsAdmittedList-ModificationResponse-MNterminated.h + XNAP_DRBsAdmittedList-ModificationResponse-MNterminated-Item.h + XNAP_DRBsAdmittedList-SetupResponse-MNterminated.h + XNAP_DRBsAdmittedList-SetupResponse-MNterminated-Item.h + XNAP_DRBsSubjectToDLDiscarding-Item.h + XNAP_DRBsSubjectToDLDiscarding-List.h + XNAP_DRBsSubjectToEarlyStatusTransfer-Item.h + XNAP_DRBsSubjectToEarlyStatusTransfer-List.h + XNAP_DRBsSubjectToStatusTransfer-Item.h + XNAP_DRBsSubjectToStatusTransfer-List.h + XNAP_DRBsToBeModifiedList-Modification-MNterminated.h + XNAP_DRBsToBeModifiedList-Modification-MNterminated-Item.h + XNAP_DRBsToBeModifiedList-ModificationResponse-SNterminated.h + XNAP_DRBsToBeModifiedList-ModificationResponse-SNterminated-Item.h + XNAP_DRBsToBeModified-List-Modified-SNterminated.h + XNAP_DRBsToBeModified-List-Modified-SNterminated-Item.h + XNAP_DRBsToBeModified-List-ModRqd-MNterminated.h + XNAP_DRBsToBeModified-List-ModRqd-MNterminated-Item.h + XNAP_DRBsToBeModified-List-ModRqd-SNterminated.h + XNAP_DRBsToBeModified-List-ModRqd-SNterminated-Item.h + XNAP_DRBsToBeSetupList-BearerSetupComplete-SNterminated-Item.h + XNAP_DRBsToBeSetup-List-ModRqd-SNterminated.h + XNAP_DRBsToBeSetup-List-ModRqd-SNterminated-Item.h + XNAP_DRBsToBeSetupList-Setup-MNterminated.h + XNAP_DRBsToBeSetupList-Setup-MNterminated-Item.h + XNAP_DRBsToBeSetupList-SetupResponse-SNterminated.h + XNAP_DRBsToBeSetupList-SetupResponse-SNterminated-Item.h + XNAP_DRBToQoSFlowMapping-Item.h + XNAP_DRBToQoSFlowMapping-List.h + XNAP_DuplicationActivation.h + XNAP_Dynamic5QIDescriptor.h + XNAP_EarlyStatusTransfer.h + XNAP_ENB-ID-Choice.h + XNAP_EndpointIPAddressAndPort.h + XNAP_E-RAB-ID.h + XNAP_ErrorIndication.h + XNAP_E-UTRAARFCN.h + XNAP_E-UTRA-Cell-Identity.h + XNAP_E-UTRA-CGI.h + XNAP_E-UTRA-CoordinationAssistanceInfo.h + XNAP_E-UTRAFrequencyBandIndicator.h + XNAP_E-UTRAMultibandInfoList.h + XNAP_E-UTRA-NR-CellResourceCoordinationRequest.h + XNAP_E-UTRA-NR-CellResourceCoordinationResponse.h + XNAP_E-UTRAPCI.h + XNAP_E-UTRAPRACHConfiguration.h + XNAP_E-UTRA-ResourceCoordinationInfo.h + XNAP_E-UTRATransmissionBandwidth.h + XNAP_EventL1.h + XNAP_EventTriggered.h + XNAP_EventType.h + XNAP_EventTypeTrigger.h + XNAP_ExpectedActivityPeriod.h + XNAP_ExpectedHOInterval.h + XNAP_ExpectedIdlePeriod.h + XNAP_ExpectedUEActivityBehaviour.h + XNAP_ExpectedUEBehaviour.h + XNAP_ExpectedUEMobility.h + XNAP_ExpectedUEMovingTrajectory.h + XNAP_ExpectedUEMovingTrajectoryItem.h + XNAP_ExtendedPacketDelayBudget.h + XNAP_ExtendedRATRestrictionInformation.h + XNAP_ExtendedSliceSupportList.h + XNAP_ExtTLA-Item.h + XNAP_ExtTLAs.h + XNAP_FailureIndication.h + XNAP_FastMCGRecoveryRRCTransfer.h + XNAP_FirstDLCount.h + XNAP_FiveGCMobilityRestrictionListContainer.h + XNAP_FiveQI.h + XNAP_ForbiddenAreaItem.h + XNAP_ForbiddenAreaList.h + XNAP_FrequencyShift7p5khz.h + XNAP_GBRQoSFlowInfo.h + XNAP_GlobalAMF-Region-Information.h + XNAP_GlobalgNB-ID.h + XNAP_GlobalngeNB-ID.h + XNAP_GlobalNG-RANCell-ID.h + XNAP_GlobalNG-RANNode-ID.h + XNAP_GlobalNG-RANNodesinAoI-Item.h + XNAP_GNB-ID-Choice.h + XNAP_GNB-RadioResourceStatus.h + XNAP_GTP-TEID.h + XNAP_GTPTLA-Item.h + XNAP_GTPTLAs.h + XNAP_GTPtunnelTransportLayerInformation.h + XNAP_GUAMI.h + XNAP_HandoverCancel.h + XNAP_HandoverPreparationFailure.h + XNAP_HandoverReport.h + XNAP_HandoverReportType.h + XNAP_HandoverRequestAcknowledge.h + XNAP_HandoverRequest.h + XNAP_HandoverSuccess.h + XNAP_Hysteresis.h + XNAP_IABNodeIndication.h + XNAP_ImmediateMDT-EUTRA.h + XNAP_ImmediateMDT-NR.h + XNAP_InitiatingCondition-FailureIndication.h + XNAP_InitiatingMessage.h + XNAP_InitiatingNodeType-ResourceCoordRequest.h + XNAP_IntendedTDD-DL-ULConfiguration-NR.h + XNAP_InterfaceInstanceIndication.h + XNAP_InterfacesToTrace.h + XNAP_I-RNTI.h + XNAP_LastVisitedCell-Item.h + XNAP_LastVisitedEUTRANCellInformation.h + XNAP_LastVisitedGERANCellInformation.h + XNAP_LastVisitedNGRANCellInformation.h + XNAP_LastVisitedUTRANCellInformation.h + XNAP_LCID.h + XNAP_Links-to-log.h + XNAP_ListOfCells.h + XNAP_ListOfRANNodesinAoI.h + XNAP_ListOfTAIsinAoI.h + XNAP_LocationInformationSNReporting.h + XNAP_LocationReportingInformation.h + XNAP_LoggedEventTriggeredConfig.h + XNAP_LoggedMDT-EUTRA.h + XNAP_LoggedMDT-NR.h + XNAP_LoggingDuration.h + XNAP_LoggingInterval.h + XNAP_LowerLayerPresenceStatusChange.h + XNAP_LTEUESidelinkAggregateMaximumBitRate.h + XNAP_LTEV2XServicesAuthorized.h + XNAP_M1Configuration.h + XNAP_M1PeriodicReporting.h + XNAP_M1ReportingTrigger.h + XNAP_M1ThresholdEventA2.h + XNAP_M4Configuration.h + XNAP_M4period.h + XNAP_M5Configuration.h + XNAP_M5period.h + XNAP_M6Configuration.h + XNAP_M6report-Interval.h + XNAP_M7Configuration.h + XNAP_M7period.h + XNAP_MAC-I.h + XNAP_MaskedIMEISV.h + XNAP_MaxCHOpreparations.h + XNAP_MaximumCellListSize.h + XNAP_MaximumDataBurstVolume.h + XNAP_MaximumIPdatarate.h + XNAP_MaxIPrate.h + XNAP_MBSFNControlRegionLength.h + XNAP_MBSFNSubframeAllocation-E-UTRA.h + XNAP_MBSFNSubframeInfo-E-UTRA.h + XNAP_MBSFNSubframeInfo-E-UTRA-Item.h + XNAP_MDT-Activation.h + XNAP_MDT-Configuration-EUTRA.h + XNAP_MDT-Configuration.h + XNAP_MDT-Configuration-NR.h + XNAP_MDT-Location-Info.h + XNAP_MDTMode-EUTRA-Extension.h + XNAP_MDTMode-EUTRA.h + XNAP_MDTMode-NR-Extension.h + XNAP_MDTMode-NR.h + XNAP_MDTPLMNList.h + XNAP_Measurement-ID.h + XNAP_MeasurementsToActivate.h + XNAP_MeasurementThresholdA2.h + XNAP_MeasurementThresholdL1LoggedMDT.h + XNAP_MessageOversizeNotification.h + XNAP_MobilityChangeAcknowledge.h + XNAP_MobilityChangeFailure.h + XNAP_MobilityChangeRequest.h + XNAP_MobilityInformation.h + XNAP_MobilityParametersInformation.h + XNAP_MobilityParametersModificationRange.h + XNAP_MobilityRestrictionList.h + XNAP_MR-DC-ResourceCoordinationInfo.h + XNAP_NBIoT-UL-DL-AlignmentOffset.h + XNAP_NE-DC-TDM-Pattern.h + XNAP_NeighbourInformation-E-UTRA.h + XNAP_NeighbourInformation-E-UTRA-Item.h + XNAP_NeighbourInformation-NR.h + XNAP_NeighbourInformation-NR-Item.h + XNAP_NeighbourInformation-NR-ModeFDDInfo.h + XNAP_NeighbourInformation-NR-ModeInfo.h + XNAP_NeighbourInformation-NR-ModeTDDInfo.h + XNAP_NG-eNB-RadioResourceStatus.h + XNAP_NG-RAN-Cell-Identity.h + XNAP_NG-RAN-Cell-Identity-ListinRANPagingArea.h + XNAP_NG-RAN-CellPCI.h + XNAP_NGRANNodeConfigurationUpdateAcknowledge.h + XNAP_NGRANNodeConfigurationUpdateFailure.h + XNAP_NGRANNodeConfigurationUpdate.h + XNAP_NG-RAN-Node-ResourceCoordinationInfo.h + XNAP_NG-RANnodeUEXnAPID.h + XNAP_NG-RANTraceID.h + XNAP_NID.h + XNAP_NonDynamic5QIDescriptor.h + XNAP_NonGBRResources-Offered.h + XNAP_NoofRRCConnections.h + XNAP_NotificationControlIndication.h + XNAP_NPN-Broadcast-Information.h + XNAP_NPN-Broadcast-Information-PNI-NPN.h + XNAP_NPN-Broadcast-Information-SNPN.h + XNAP_NPNMobilityInformation.h + XNAP_NPNMobilityInformation-PNI-NPN.h + XNAP_NPNMobilityInformation-SNPN.h + XNAP_NPNPagingAssistanceInformation.h + XNAP_NPNPagingAssistanceInformation-PNI-NPN.h + XNAP_NPN-Support.h + XNAP_NPN-Support-SNPN.h + XNAP_NRARFCN.h + XNAP_NRCarrierItem.h + XNAP_NRCarrierList.h + XNAP_NR-Cell-Identity.h + XNAP_NRCellPRACHConfig.h + XNAP_NR-CGI.h + XNAP_NR-CoordinationAssistanceInfo.h + XNAP_NRCyclicPrefix.h + XNAP_NRDL-ULTransmissionPeriodicity.h + XNAP_NRFrequencyBand.h + XNAP_NRFrequencyBandItem.h + XNAP_NRFrequencyBand-List.h + XNAP_NRFrequencyInfoforMDT.h + XNAP_NRFrequencyInfo.h + XNAP_NRMobilityHistoryReport.h + XNAP_NRModeInfoFDD.h + XNAP_NRModeInfo.h + XNAP_NRModeInfoTDD.h + XNAP_NRNRB.h + XNAP_NRPCI.h + XNAP_NR-ResourceCoordinationInfo.h + XNAP_NRSCS.h + XNAP_NRTransmissionBandwidth.h + XNAP_NRUESidelinkAggregateMaximumBitRate.h + XNAP_NRV2XServicesAuthorized.h + XNAP_NumberofActiveUEs.h + XNAP_NumberOfAntennaPorts-E-UTRA.h + XNAP_OfferedCapacity.h + XNAP_OffsetOfNbiotChannelNumberToEARFCN.h + XNAP_PacketDelayBudget.h + XNAP_PacketErrorRate.h + XNAP_PacketLossRate.h + XNAP_PagingDRX.h + XNAP_PagingPriority.h + XNAP_PartialListIndicator.h + XNAP_PC5FlowBitRates.h + XNAP_PC5QoSFlowItem.h + XNAP_PC5QoSFlowList.h + XNAP_PC5QoSParameters.h + XNAP_PCIListForMDT.h + XNAP_PDCPChangeIndication.h + XNAP_PDCPDuplicationConfiguration.h + XNAP_PDCPSNLength.h + XNAP_PDUSessionAdmittedAddedAddReqAck.h + XNAP_PDUSessionAdmittedAddedAddReqAck-Item.h + XNAP_PDUSessionAdmittedModSNModConfirm.h + XNAP_PDUSessionAdmittedModSNModConfirm-Item.h + XNAP_PDUSessionAdmitted-SNModResponse.h + XNAP_PDUSessionAdmittedToBeAddedSNModResponse.h + XNAP_PDUSessionAdmittedToBeAddedSNModResponse-Item.h + XNAP_PDUSessionAdmittedToBeModifiedSNModResponse.h + XNAP_PDUSessionAdmittedToBeModifiedSNModResponse-Item.h + XNAP_PDUSessionAdmittedToBeReleasedSNModResponse.h + XNAP_PDUSessionAggregateMaximumBitRate.h + XNAP_PDUSessionCommonNetworkInstance.h + XNAP_PDUSessionDataForwarding-SNModResponse.h + XNAP_PDUSession-ID.h + XNAP_PDUSession-List.h + XNAP_PDUSession-List-withCause.h + XNAP_PDUSession-List-withCause-Item.h + XNAP_PDUSession-List-withDataForwardingFromTarget.h + XNAP_PDUSession-List-withDataForwardingFromTarget-Item.h + XNAP_PDUSession-List-withDataForwardingRequest.h + XNAP_PDUSession-List-withDataForwardingRequest-Item.h + XNAP_PDUSessionNetworkInstance.h + XNAP_PDUSessionNotAdmittedAddReqAck.h + XNAP_PDUSessionNotAdmitted-SNModResponse.h + XNAP_PDUSessionReleasedList-RelConf.h + XNAP_PDUSessionReleasedSNModConfirm.h + XNAP_PDUSessionResourceAdmittedInfo.h + XNAP_PDUSessionResourceBearerSetupCompleteInfo-SNterminated.h + XNAP_PDUSessionResourceChangeConfirmInfo-MNterminated.h + XNAP_PDUSessionResourceChangeConfirmInfo-SNterminated.h + XNAP_PDUSessionResourceChangeRequiredInfo-MNterminated.h + XNAP_PDUSessionResourceChangeRequiredInfo-SNterminated.h + XNAP_PDUSessionResourceModConfirmInfo-MNterminated.h + XNAP_PDUSessionResourceModConfirmInfo-SNterminated.h + XNAP_PDUSessionResourceModificationInfo-MNterminated.h + XNAP_PDUSessionResourceModificationInfo-SNterminated.h + XNAP_PDUSessionResourceModificationResponseInfo-MNterminated.h + XNAP_PDUSessionResourceModificationResponseInfo-SNterminated.h + XNAP_PDUSessionResourceModRqdInfo-MNterminated.h + XNAP_PDUSessionResourceModRqdInfo-SNterminated.h + XNAP_PDUSessionResourcesActivityNotify-Item.h + XNAP_PDUSessionResourcesActivityNotifyList.h + XNAP_PDUSessionResourcesAdmitted-Item.h + XNAP_PDUSessionResourcesAdmitted-List.h + XNAP_PDUSessionResourceSecondaryRATUsageItem.h + XNAP_PDUSessionResourceSecondaryRATUsageList.h + XNAP_PDUSessionResourceSetupInfo-MNterminated.h + XNAP_PDUSessionResourceSetupInfo-SNterminated.h + XNAP_PDUSessionResourceSetupResponseInfo-MNterminated.h + XNAP_PDUSessionResourceSetupResponseInfo-SNterminated.h + XNAP_PDUSessionResourcesNotAdmitted-Item.h + XNAP_PDUSessionResourcesNotAdmitted-List.h + XNAP_PDUSessionResourcesNotify-Item.h + XNAP_PDUSessionResourcesNotifyList.h + XNAP_PDUSessionResourcesToBeSetup-Item.h + XNAP_PDUSessionResourcesToBeSetup-List.h + XNAP_PDUSession-SNChangeConfirm-Item.h + XNAP_PDUSession-SNChangeConfirm-List.h + XNAP_PDUSession-SNChangeRequired-Item.h + XNAP_PDUSession-SNChangeRequired-List.h + XNAP_PDUSessionsToBeAdded-SNModRequest-Item.h + XNAP_PDUSessionsToBeAdded-SNModRequest-List.h + XNAP_PDUSessionsToBeModified-SNModRequest-Item.h + XNAP_PDUSessionsToBeModified-SNModRequest-List.h + XNAP_PDUSessionsToBeReleased-SNModRequest-List.h + XNAP_PDUSessionToBeAddedAddReq.h + XNAP_PDUSessionToBeAddedAddReq-Item.h + XNAP_PDUSessionToBeModifiedSNModRequired.h + XNAP_PDUSessionToBeModifiedSNModRequired-Item.h + XNAP_PDUSessionToBeReleasedList-RelReqAck.h + XNAP_PDUSessionToBeReleasedList-RelRqd.h + XNAP_PDUSessionToBeReleasedSNModRequired.h + XNAP_PDUSessionType.h + XNAP_PDUSessionUsageReport.h + XNAP_PedestrianUE.h + XNAP_PER-Exponent.h + XNAP_Periodical.h + XNAP_PER-Scalar.h + XNAP_PLMN-Identity.h + XNAP_PNI-NPN-Restricted-Information.h + XNAP_PortNumber.h + XNAP_Presence.h + XNAP_PriorityLevelQoS.h + XNAP_PrivateIE-Container.h + XNAP_PrivateIE-Field.h + XNAP_PrivateIE-ID.h + XNAP_PrivateMessage.h + XNAP_ProcedureCode.h + XNAP_ProcedureStageChoice.h + XNAP_ProtectedE-UTRAFootprintTimePattern.h + XNAP_ProtectedE-UTRAResourceIndication.h + XNAP_ProtectedE-UTRAResource-Item.h + XNAP_ProtectedE-UTRAResourceList.h + XNAP_ProtocolExtensionContainer.h + XNAP_ProtocolExtensionField.h + XNAP_ProtocolIE-Container.h + XNAP_ProtocolIE-ContainerList.h + XNAP_ProtocolIE-ContainerPair.h + XNAP_ProtocolIE-ContainerPairList.h + XNAP_ProtocolIE-Field.h + XNAP_ProtocolIE-FieldPair.h + XNAP_ProtocolIE-ID.h + XNAP_ProtocolIE-Single-Container.h + XNAP_QoSCharacteristics.h + XNAP_QoSFlowIdentifier.h + XNAP_QoSFlow-Item.h + XNAP_QoSFlowLevelQoSParameters.h + XNAP_QoSFlowMappingIndication.h + XNAP_QoSFlowNotificationControlIndicationInfo.h + XNAP_QoSFlowNotify-Item.h + XNAP_QoSFLowsAcceptedToBeForwarded-Item.h + XNAP_QoSFLowsAcceptedToBeForwarded-List.h + XNAP_QoSFlowsActivityNotifyItem.h + XNAP_QoSFlowsActivityNotifyList.h + XNAP_QoSFlowsAdmitted-Item.h + XNAP_QoSFlowsAdmitted-List.h + XNAP_QoSFlows-List.h + XNAP_QoSFlows-List-withCause.h + XNAP_QoSFlowsMappedtoDRB-Setup-MNterminated.h + XNAP_QoSFlowsMappedtoDRB-Setup-MNterminated-Item.h + XNAP_QoSFlowsMappedtoDRB-SetupResponse-SNterminated.h + XNAP_QoSFlowsMappedtoDRB-SetupResponse-SNterminated-Item.h + XNAP_QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated.h + XNAP_QoSFlowsModifiedMappedtoDRB-ModRqd-SNterminated-Item.h + XNAP_QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated.h + XNAP_QoSFlowsSetupMappedtoDRB-ModRqd-SNterminated-Item.h + XNAP_QoSFLowsToBeForwarded-Item.h + XNAP_QoSFLowsToBeForwarded-List.h + XNAP_QoSFlowsToBeSetup-Item.h + XNAP_QoSFlowsToBeSetup-List.h + XNAP_QoSFlowsToBeSetup-List-Modified-SNterminated.h + XNAP_QoSFlowsToBeSetup-List-Modified-SNterminated-Item.h + XNAP_QoSFlowsToBeSetup-List-Setup-SNterminated.h + XNAP_QoSFlowsToBeSetup-List-Setup-SNterminated-Item.h + XNAP_QoSFlowsUsageReport-Item.h + XNAP_QoSFlowsUsageReportList.h + XNAP_QoSFlowwithCause-Item.h + XNAP_QosMonitoringRequest.h + XNAP_QoSParaSetIndex.h + XNAP_QoSParaSetNotifyIndex.h + XNAP_RACHReportContainer.h + XNAP_RACHReportInformation.h + XNAP_RACHReportList-Item.h + XNAP_RadioResourceStatus.h + XNAP_RANAC.h + XNAP_RANAreaID.h + XNAP_RANAreaID-List.h + XNAP_Range.h + XNAP_RANPagingAreaChoice.h + XNAP_RANPagingArea.h + XNAP_RANPagingAttemptInfo.h + XNAP_RANPagingFailure.h + XNAP_RANPaging.h + XNAP_RAT-RestrictionInformation.h + XNAP_RAT-RestrictionsItem.h + XNAP_RAT-RestrictionsList.h + XNAP_RedundantPDUSessionInformation.h + XNAP_RedundantQoSFlowIndicator.h + XNAP_Reestablishment-Indication.h + XNAP_ReferenceID.h + XNAP_ReflectiveQoSAttribute.h + XNAP_RegistrationRequest.h + XNAP_ReleaseFastMCGRecoveryViaSRB3.h + XNAP_ReportAmountMDT.h + XNAP_ReportArea.h + XNAP_ReportCharacteristics.h + XNAP_ReportingPeriodicity.h + XNAP_ReportIntervalMDT.h + XNAP_ReportType.h + XNAP_RequestedFastMCGRecoveryViaSRB3.h + XNAP_RequestedFastMCGRecoveryViaSRB3Release.h + XNAP_RequestReferenceID.h + XNAP_ReservedSubframePattern.h + XNAP_ResetRequest.h + XNAP_ResetRequestPartialReleaseItem.h + XNAP_ResetRequestPartialReleaseList.h + XNAP_ResetRequestTypeInfo-Full.h + XNAP_ResetRequestTypeInfo.h + XNAP_ResetRequestTypeInfo-Partial.h + XNAP_ResetResponse.h + XNAP_ResetResponsePartialReleaseItem.h + XNAP_ResetResponsePartialReleaseList.h + XNAP_ResetResponseTypeInfo-Full.h + XNAP_ResetResponseTypeInfo.h + XNAP_ResetResponseTypeInfo-Partial.h + XNAP_ResourceCoordRequest-gNB-initiated.h + XNAP_ResourceCoordRequest-ng-eNB-initiated.h + XNAP_ResourceCoordResponse-gNB-initiated.h + XNAP_ResourceCoordResponse-ng-eNB-initiated.h + XNAP_ResourceStatusFailure.h + XNAP_ResourceStatusRequest.h + XNAP_ResourceStatusResponse.h + XNAP_ResourceStatusUpdate.h + XNAP_RespondingNodeTypeConfigUpdateAck-gNB.h + XNAP_RespondingNodeTypeConfigUpdateAck.h + XNAP_RespondingNodeTypeConfigUpdateAck-ng-eNB.h + XNAP_RespondingNodeType-ResourceCoordResponse.h + XNAP_ResponseInfo-ReconfCompl.h + XNAP_ResponseType-ReconfComplete.h + XNAP_RetrieveUEContextFailure.h + XNAP_RetrieveUEContextRequest.h + XNAP_RetrieveUEContextResponse.h + XNAP_RFSP-Index.h + XNAP_RLCDuplicationInformation.h + XNAP_RLCDuplicationState-Item.h + XNAP_RLCDuplicationStateList.h + XNAP_RLCMode.h + XNAP_RLC-Status.h + XNAP_RRCConfigIndication.h + XNAP_RRCConnections.h + XNAP_RRCReestab-initiated.h + XNAP_RRCResumeCause.h + XNAP_RRCSetup-initiated.h + XNAP_RRCTransfer.h + XNAP_RSN.h + XNAP_SCGConfigurationQuery.h + XNAP_SecondarydataForwardingInfoFromTarget-Item.h + XNAP_SecondarydataForwardingInfoFromTarget-List.h + XNAP_SecondaryRATDataUsageReport.h + XNAP_SecondaryRATUsageInformation.h + XNAP_SecurityIndication.h + XNAP_SecurityResult.h + XNAP_SensorMeasConfig.h + XNAP_SensorMeasConfigNameList.h + XNAP_SensorMeasurementConfiguration.h + XNAP_SensorName.h + XNAP_ServedCellInformation-E-UTRA-FDDInfo.h + XNAP_ServedCellInformation-E-UTRA.h + XNAP_ServedCellInformation-E-UTRA-ModeInfo.h + XNAP_ServedCellInformation-E-UTRA-perBPLMN.h + XNAP_ServedCellInformation-E-UTRA-TDDInfo.h + XNAP_ServedCellInformation-NR.h + XNAP_ServedCells-E-UTRA.h + XNAP_ServedCells-E-UTRA-Item.h + XNAP_ServedCells-NR.h + XNAP_ServedCells-NR-Item.h + XNAP_ServedCellsToActivate.h + XNAP_ServedCells-ToModify-E-UTRA.h + XNAP_ServedCells-ToModify-E-UTRA-Item.h + XNAP_ServedCells-ToModify-NR.h + XNAP_ServedCells-ToModify-NR-Item.h + XNAP_ServedCellsToUpdate-E-UTRA.h + XNAP_ServedCellsToUpdate-NR.h + XNAP_ServiceAreaItem.h + XNAP_ServiceAreaList.h + XNAP_ServingSNPNID.h + XNAP_SharedResourceType.h + XNAP_SharedResourceType-ULDL-Sharing-DL-ResourcesChanged.h + XNAP_SharedResourceType-ULDL-Sharing-DL-Resources.h + XNAP_SharedResourceType-ULDL-Sharing.h + XNAP_SharedResourceType-ULDL-Sharing-UL-ResourcesChanged.h + XNAP_SharedResourceType-ULDL-Sharing-UL-Resources.h + XNAP_SharedResourceType-UL-OnlySharing.h + XNAP_SliceAvailableCapacity.h + XNAP_SliceAvailableCapacity-Item.h + XNAP_SliceSupport-List.h + XNAP_SliceToReport-List.h + XNAP_SliceToReport-List-Item.h + XNAP_SlotConfiguration-List.h + XNAP_SlotConfiguration-List-Item.h + XNAP_S-NG-RANnode-Addition-Trigger-Ind.h + XNAP_S-NG-RANnode-SecurityKey.h + XNAP_SNodeAdditionRequestAcknowledge.h + XNAP_SNodeAdditionRequest.h + XNAP_SNodeAdditionRequestReject.h + XNAP_SNodeChangeConfirm.h + XNAP_SNodeChangeRefuse.h + XNAP_SNodeChangeRequired.h + XNAP_SNodeCounterCheckRequest.h + XNAP_SNodeModificationConfirm.h + XNAP_SNodeModificationRefuse.h + XNAP_SNodeModificationRequestAcknowledge.h + XNAP_SNodeModificationRequest.h + XNAP_SNodeModificationRequestReject.h + XNAP_SNodeModificationRequired.h + XNAP_SNodeReconfigurationComplete.h + XNAP_SNodeReleaseConfirm.h + XNAP_SNodeReleaseReject.h + XNAP_SNodeReleaseRequestAcknowledge.h + XNAP_SNodeReleaseRequest.h + XNAP_SNodeReleaseRequired.h + XNAP_SNSSAIAvailableCapacity-Item.h + XNAP_SNSSAIAvailableCapacity-List.h + XNAP_S-NSSAI.h + XNAP_SNSSAI-Item.h + XNAP_SNSSAI-list.h + XNAP_SNStatusTransfer.h + XNAP_SNTriggered.h + XNAP_SourceOfUEActivityBehaviourInformation.h + XNAP_SpecialSubframeInfo-E-UTRA.h + XNAP_SpecialSubframePatterns-E-UTRA.h + XNAP_SpectrumSharingGroupID.h + XNAP_SplitSessionIndicator.h + XNAP_SplitSRB-RRCTransfer.h + XNAP_SplitSRBsTypes.h + XNAP_SSBAreaCapacityValue-List.h + XNAP_SSBAreaCapacityValue-List-Item.h + XNAP_SSBAreaRadioResourceStatus-List.h + XNAP_SSBAreaRadioResourceStatus-List-Item.h + XNAP_SSB-PositionsInBurst.h + XNAP_SSBToReport-List.h + XNAP_SSBToReport-List-Item.h + XNAP_SuccessfulOutcome.h + XNAP_SUL-FrequencyBand.h + XNAP_SUL-Information.h + XNAP_SupportedSULBandItem.h + XNAP_SupportedSULBandList.h + XNAP_SymbolAllocation-in-Slot-AllDL.h + XNAP_SymbolAllocation-in-Slot-AllUL.h + XNAP_SymbolAllocation-in-Slot-BothDLandUL.h + XNAP_SymbolAllocation-in-Slot.h + XNAP_TABasedMDT.h + XNAP_TAC.h + XNAP_TAIBasedMDT.h + XNAP_TAIforMDT-Item.h + XNAP_TAIListforMDT.h + XNAP_TAIsinAoI-Item.h + XNAP_TAISupport-Item.h + XNAP_TAISupport-List.h + XNAP_TAListforMDT.h + XNAP_TargetCellinEUTRAN.h + XNAP_TargetCellList.h + XNAP_TargetCellList-Item.h + XNAP_Target-CGI.h + XNAP_TDDULDLConfigurationCommonNR.h + XNAP_Threshold-RSRP.h + XNAP_Threshold-RSRQ.h + XNAP_Threshold-SINR.h + XNAP_TimeToTrigger.h + XNAP_TimeToWait.h + XNAP_TNLA-Failed-To-Setup-Item.h + XNAP_TNLA-Failed-To-Setup-List.h + XNAP_TNLA-Setup-Item.h + XNAP_TNLA-Setup-List.h + XNAP_TNLAssociationUsage.h + XNAP_TNLA-To-Add-Item.h + XNAP_TNLA-To-Add-List.h + XNAP_TNLA-To-Remove-Item.h + XNAP_TNLA-To-Remove-List.h + XNAP_TNLA-To-Update-Item.h + XNAP_TNLA-To-Update-List.h + XNAP_TNLCapacityIndicator.h + XNAP_TNLConfigurationInfo.h + XNAP_TraceActivation.h + XNAP_Trace-Depth.h + XNAP_TraceStart.h + XNAP_TransportLayerAddress.h + XNAP_TriggeringMessage.h + XNAP_TSCAssistanceInformation.h + XNAP_TSCTrafficCharacteristics.h + XNAP_TypeOfError.h + XNAP_UEAggregateMaximumBitRate.h + XNAP_UEContextIDforRRCReestablishment.h + XNAP_UEContextIDforRRCResume.h + XNAP_UEContextID.h + XNAP_UEContextInfoHORequest.h + XNAP_UEContextInfoRetrUECtxtResp.h + XNAP_UEContextInfo-SNModRequest.h + XNAP_UEContextKeptIndicator.h + XNAP_UEContextRefAtSN-HORequest.h + XNAP_UEContextRelease.h + XNAP_UEHistoryInformationFromTheUE.h + XNAP_UEHistoryInformation.h + XNAP_UEIdentityIndexValue.h + XNAP_UERadioCapabilityForPaging.h + XNAP_UERadioCapabilityForPagingOfEUTRA.h + XNAP_UERadioCapabilityForPagingOfNR.h + XNAP_UERadioCapabilityID.h + XNAP_UERANPagingIdentity.h + XNAP_UEReportRRCTransfer.h + XNAP_UERLFReportContainer.h + XNAP_UERLFReportContainerLTE.h + XNAP_UERLFReportContainerNR.h + XNAP_UESecurityCapabilities.h + XNAP_ULConfiguration.h + XNAP_ULForwarding.h + XNAP_ULForwardingProposal.h + XNAP_UL-GBR-PRB-usage.h + XNAP_UL-non-GBR-PRB-usage.h + XNAP_UL-Total-PRB-usage.h + XNAP_UL-UE-Configuration.h + XNAP_UnsuccessfulOutcome.h + XNAP_UPTransportLayerInformation.h + XNAP_UPTransportParameters.h + XNAP_UPTransportParametersItem.h + XNAP_URIaddress.h + XNAP_UserPlaneTrafficActivityReport.h + XNAP_VehicleUE.h + XNAP_VolumeTimedReport-Item.h + XNAP_VolumeTimedReportList.h + XNAP_WLANMeasConfig.h + XNAP_WLANMeasConfigNameList.h + XNAP_WLANMeasurementConfiguration.h + XNAP_WLANName.h + XNAP_XnAP-PDU.h + XNAP_XnBenefitValue.h + XNAP_XnRemovalFailure.h + XNAP_XnRemovalRequest.h + XNAP_XnRemovalResponse.h + XNAP_XnSetupFailure.h + XNAP_XnSetupRequest.h + XNAP_XnSetupResponse.h + XNAP_XnUAddressIndication.h + XNAP_XnUAddressInfoperPDUSession-Item.h + XNAP_XnUAddressInfoperPDUSession-List.h +) + diff --git a/openair2/XNAP/MESSAGES/CMakeLists.txt b/openair2/XNAP/MESSAGES/CMakeLists.txt new file mode 100644 index 0000000000..078388e3c0 --- /dev/null +++ b/openair2/XNAP/MESSAGES/CMakeLists.txt @@ -0,0 +1,21 @@ +set(XNAP_VERSION 16 2 0) +make_version(XNAP_cc ${XNAP_VERSION}) +#add_definitions(-DXNAP_VERSION=${XNAP_cc}) +string(REPLACE ";" "." XNAP_RELEASE "${XNAP_VERSION}") + +if(XNAP_RELEASE VERSION_EQUAL "16.2.0") + include(ASN1/xnap_R16.2.0.cmake) +else() + message(FATAL_ERROR "unknown XNAP_RELEASE ${XNAP_RELEASE}") +endif() + +add_custom_command(OUTPUT ${xnap_source} ${xnap_headers} + COMMAND ASN1C_PREFIX=XNAP_ ${ASN1C_EXEC} -pdu=all -gen-APER -no-gen-BER -no-gen-JER -no-gen-OER -gen-UPER -fcompound-names -no-gen-example -fno-include-deps -findirect-choice -D ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${XNAP_GRAMMAR} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${XNAP_GRAMMAR} + COMMENT "Generating XNAP source files from ${CMAKE_CURRENT_SOURCE_DIR}/${XNAP_GRAMMAR}" + ) + +add_library(asn1_xnap ${xnap_source}) +target_include_directories(asn1_xnap PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") +target_compile_options(asn1_xnap PRIVATE -DASN_DISABLE_OER_SUPPORT -w) + diff --git a/openair2/XNAP/xnap_common.c b/openair2/XNAP/xnap_common.c new file mode 100644 index 0000000000..3dda62a32d --- /dev/null +++ b/openair2/XNAP/xnap_common.c @@ -0,0 +1,48 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#include +#include "xnap_common.h" +#include "XNAP_XnAP-PDU.h" + +ssize_t XNAP_generate_initiating_message(uint8_t **buffer, + uint32_t *length, + XNAP_ProcedureCode_t procedureCode, + XNAP_Criticality_t criticality, + asn_TYPE_descriptor_t *td, + void *sptr) +{ + XNAP_XnAP_PDU_t pdu; + ssize_t encoded; + memset(&pdu, 0, sizeof(XNAP_XnAP_PDU_t)); + pdu.present = XNAP_XnAP_PDU_PR_initiatingMessage; + pdu.choice.initiatingMessage->procedureCode = procedureCode; + pdu.choice.initiatingMessage->criticality = criticality; + ANY_fromType_aper((ANY_t *)&pdu.choice.initiatingMessage->value, td, sptr); + + if ((encoded = aper_encode_to_new_buffer(&asn_DEF_XNAP_XnAP_PDU, 0, &pdu, (void **)buffer)) < 0) { + return -1; + } + + *length = encoded; + return encoded; +} + diff --git a/openair2/XNAP/xnap_common.h b/openair2/XNAP/xnap_common.h new file mode 100644 index 0000000000..78de8b17a1 --- /dev/null +++ b/openair2/XNAP/xnap_common.h @@ -0,0 +1,64 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Author and copyright: Laurent Thomas, open-cells.com + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#ifndef XNAP_COMMON_H_ +#define XNAP_COMMON_H_ + +#include "XNAP_XnAP-PDU.h" +#include "intertask_interface.h" +#include "common/openairinterface5g_limits.h" +#include "oai_asn1.h" +#include "XNAP_ProtocolIE-Field.h" +#include "XNAP_InitiatingMessage.h" +#include "XNAP_ProtocolIE-ContainerPair.h" +#include "XNAP_ProtocolExtensionField.h" +#include "XNAP_ProtocolExtensionContainer.h" +#include "XNAP_asn_constant.h" + +#ifndef XNAP_PORT +#define XNAP_PORT 38422 +#endif + +#define XNAP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \ + do { \ + IE_TYPE **ptr; \ + ie = NULL; \ + for (ptr = container->protocolIEs.list.array; ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \ + ptr++) { \ + if ((*ptr)->id == IE_ID) { \ + ie = *ptr; \ + break; \ + } \ + } \ + if (mandatory) \ + DevAssert(ie != NULL); \ + } while (0) + +ssize_t xnap_generate_initiating_message(uint8_t **buffer, + uint32_t *length, + XNAP_ProcedureCode_t procedureCode, + XNAP_Criticality_t criticality, + asn_TYPE_descriptor_t *td, + void *sptr); + +#endif /* XNAP_COMMON_H_ */ diff --git a/radio/BLADERF/CMakeLists.txt b/radio/BLADERF/CMakeLists.txt index 551cc8ef1d..5504eb4051 100644 --- a/radio/BLADERF/CMakeLists.txt +++ b/radio/BLADERF/CMakeLists.txt @@ -1,6 +1,7 @@ pkg_check_modules(bladeRF REQUIRED libbladeRF) add_library(oai_bladerfdevif MODULE bladerf_lib.c) target_link_libraries(oai_bladerfdevif PRIVATE bladeRF) +target_link_libraries(oai_bladerfdevif PRIVATE UTIL) set_target_properties(oai_bladerfdevif PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_command(TARGET oai_bladerfdevif POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink liboai_bladerfdevif.so liboai_device.so diff --git a/radio/BLADERF/bladerf_lib.c b/radio/BLADERF/bladerf_lib.c index d832a932d2..9ac15bcd1e 100644 --- a/radio/BLADERF/bladerf_lib.c +++ b/radio/BLADERF/bladerf_lib.c @@ -1131,7 +1131,16 @@ int device_init(openair0_device *device, printf("[BRF] calibration OK\n"); #endif - bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg->log_level)); + /* set log to info, available log levels are: + * - BLADERF_LOG_LEVEL_VERBOSE + * - BLADERF_LOG_LEVEL_DEBUG + * - BLADERF_LOG_LEVEL_INFO + * - BLADERF_LOG_LEVEL_WARNING + * - BLADERF_LOG_LEVEL_ERROR + * - BLADERF_LOG_LEVEL_CRITICAL + * - BLADERF_LOG_LEVEL_SILENT + */ + bladerf_log_set_verbosity(BLADERF_LOG_LEVEL_INFO); printf("BLADERF: Initializing openair0_device\n"); device->Mod_id = num_devices++; @@ -1208,38 +1217,4 @@ struct bladerf * open_bladerf_from_serial(const char *serial) return dev; } } - - -/*! \brief Get BladeRF log level - * \param log_level log level - * \returns log level of BLADERF device - */ -int get_brf_log_level(int log_level) -{ - int level=BLADERF_LOG_LEVEL_INFO; - return BLADERF_LOG_LEVEL_INFO; - switch(log_level) { - case LOG_DEBUG: - level=BLADERF_LOG_LEVEL_DEBUG; - break; - case LOG_INFO: - level= BLADERF_LOG_LEVEL_INFO; - break; - case LOG_WARNING: - level=BLADERF_LOG_LEVEL_WARNING; - break; - case LOG_ERR: - level=BLADERF_LOG_LEVEL_ERROR; - break; - case LOG_CRIT: - level=BLADERF_LOG_LEVEL_CRITICAL; - break; - case LOG_EMERG: - level = BLADERF_LOG_LEVEL_SILENT; - break; - default: - break; - } - return level; -} /*@}*/ diff --git a/radio/BLADERF/bladerf_lib.h b/radio/BLADERF/bladerf_lib.h index c9d0027bf2..7c736eb098 100644 --- a/radio/BLADERF/bladerf_lib.h +++ b/radio/BLADERF/bladerf_lib.h @@ -24,10 +24,12 @@ * Author: navid nikaein */ +#ifndef BLADERF_LIB_H +#define BLADERF_LIB_H + #include #include "common_lib.h" -#include "LOG/log.h" /** @addtogroup _BLADERF_PHY_RF_INTERFACE_ * @{ @@ -109,12 +111,6 @@ int trx_brf_init(openair0_device *device); */ openair0_timestamp trx_get_timestamp(openair0_device *device, bladerf_module module); -/*! \brief Get BladeRF log level - * \param log_level log level - * \returns log level of BLADERF device - */ -int get_brf_log_level(int log_level); - /*! \brief bladeRF error report * \param status * \returns 0 on success @@ -122,3 +118,5 @@ int get_brf_log_level(int log_level); int brf_error(int status); /*@}*/ + +#endif /* BLADERF_LIB_H */ diff --git a/radio/ETHERNET/eth_udp.c b/radio/ETHERNET/eth_udp.c index 0d46d793ba..fcf34661f5 100644 --- a/radio/ETHERNET/eth_udp.c +++ b/radio/ETHERNET/eth_udp.c @@ -45,7 +45,6 @@ #include #include #include -#include "common/utils/LOG/vcd_signal_dumper.h" #include #include "common_lib.h" diff --git a/radio/USRP/CMakeLists.txt b/radio/USRP/CMakeLists.txt index 4aef8b1f8d..2fa278ab42 100644 --- a/radio/USRP/CMakeLists.txt +++ b/radio/USRP/CMakeLists.txt @@ -3,7 +3,8 @@ find_package(UHD REQUIRED) add_library(oai_usrpdevif MODULE usrp_lib.cpp) #target_include_directories(oai_usrpdevif PRIVATE Boost::boost) -target_link_libraries(oai_usrpdevif uhd) +target_link_libraries(oai_usrpdevif PRIVATE uhd) +target_link_libraries(oai_usrpdevif PRIVATE UTIL) set_target_properties(oai_usrpdevif PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) add_custom_command(TARGET oai_usrpdevif POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink liboai_usrpdevif.so liboai_device.so diff --git a/radio/rfsimulator/CMakeLists.txt b/radio/rfsimulator/CMakeLists.txt index 512383dcc2..efba710bad 100644 --- a/radio/rfsimulator/CMakeLists.txt +++ b/radio/rfsimulator/CMakeLists.txt @@ -4,7 +4,6 @@ add_library(rfsimulator MODULE ../../openair1/PHY/TOOLS/signal_energy.c ) target_link_libraries(rfsimulator PRIVATE SIMU) -target_link_libraries(rfsimulator PRIVATE asn1_nr_rrc asn1_lte_rrc) set_target_properties(rfsimulator PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) add_executable(replay_node stored_node.c)