From b65b5dd40e22b343f0f4ddd5c1141203c8a44ab0 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Thu, 17 Jul 2025 12:40:47 +0200 Subject: [PATCH 1/5] Remove specific directory for LTE SIM management tools Move into openair3/NAS/TOOLS/CMakeLists.txt, and simplify the CMakeLists.txt. Co-authored-by: Robert Schmidt --- .gitignore | 1 - CMakeLists.txt | 2 +- cmake_targets/build_oai | 15 +--- cmake_targets/nas_sim_tools/CMakeLists.txt | 79 ---------------------- cmake_targets/tools/build_helper | 1 - docker/Dockerfile.lteUE.rhel9 | 6 +- docker/Dockerfile.lteUE.rocky | 6 +- docker/Dockerfile.lteUE.ubuntu22 | 6 +- openair3/NAS/CMakeLists.txt | 1 + openair3/NAS/TOOLS/CMakeLists.txt | 36 ++++++++++ openair3/NAS/TOOLS/conf2uedata.c | 2 + openair3/NAS/TOOLS/nvram.c | 2 + openair3/NAS/TOOLS/usim.c | 2 + 13 files changed, 55 insertions(+), 104 deletions(-) delete mode 100755 cmake_targets/nas_sim_tools/CMakeLists.txt create mode 100755 openair3/NAS/TOOLS/CMakeLists.txt diff --git a/.gitignore b/.gitignore index c4a4022fba..d1c6979e76 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ cmake_targets/log/ cmake_targets/*/build/ cmake_targets/ran_build/ -cmake_targets/nas_sim_tools/build/ log/ lte_build_oai/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 99c537dc22..4765d8d9c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,7 +172,7 @@ else () endif() # add autotools definitions that were maybe used! -add_definitions("-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP") +add_definitions(-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP) # we need -rdynamic to incorporate all symbols in shared objects, see man page set(commonOpts "-pipe -fPIC -Wall -fno-strict-aliasing -rdynamic") diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index cbe197c973..83570c80eb 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -244,7 +244,7 @@ function main() { shift;; --UE) UE=1 - TARGET_LIST="$TARGET_LIST lte-uesoftmodem" + TARGET_LIST="$TARGET_LIST lte-uesoftmodem conf2uedata usim nvram" echo_info "Will compile UE" shift;; --nrUE) @@ -513,18 +513,7 @@ function main() { fi if [ "$UE" = 1 ] ; then - - echo_info "Compiling UE specific part" - - [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build - mkdir -p $DIR/nas_sim_tools/build - cd $DIR/nas_sim_tools/build - - ${CMAKE_CMD% *} .. - compilations nas_sim_tools usim.txt "usim" "${BUILD_TOOL_OPT}" - compilations nas_sim_tools nvram.txt "nvram" "${BUILD_TOOL_OPT}" - compilations nas_sim_tools conf2uedata.txt "conf2uedata" "${BUILD_TOOL_OPT}" - + echo_info "Generate LTE USIM default sim content UE specific part" # generate USIM data if [ -f conf2uedata ]; then install_nas_tools $conf_nvram_path $DIR/$BUILD_DIR/build "$DIR/$BUILD_DIR/build/conf2uedata.txt" diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt deleted file mode 100755 index 98b0772582..0000000000 --- a/cmake_targets/nas_sim_tools/CMakeLists.txt +++ /dev/null @@ -1,79 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -project(NAS_SIM_TOOLS) - -include(FindPkgConfig) -pkg_search_module(CONFIG libconfig REQUIRED) -include_directories(${CONFIG_INCLUDE_DIRS}) -add_definitions(-std=gnu99) -include("../macros.cmake") - -ENABLE_LANGUAGE(C) - -set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -Werror -Wall -Wstrict-prototypes -g") - -set(OPENAIR_DIR $ENV{OPENAIR_DIR}) -set(OPENAIR3_DIR $ENV{OPENAIR_DIR}/openair3) -include_directories (${OPENAIR_DIR}/openair2/COMMON) -include_directories (${OPENAIR_DIR}) - -set(CONF2UEDATA_LIB_SRC - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_emm.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_user_data.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_usim.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_network.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_user_plmn.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_parser.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/fs.c - ${OPENAIR_DIR}/openair3/NAS/TOOLS/display.c - ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c - ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c - ${OPENAIR_DIR}/common/utils/mem/memory.c - ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c - ${OPENAIR_DIR}/common/utils/utils.c -) - -include_directories( - ${OPENAIR_DIR}/common/utils - ${OPENAIR_DIR}/openair3/NAS/UE - ${OPENAIR_DIR}/openair3/NAS/COMMON - ${OPENAIR_DIR}/openair3/NAS/UE/API/USER - ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM - ${OPENAIR_DIR}/openair3/NAS/UE/EMM/ - ${OPENAIR_DIR}/openair3/NAS/UE/ESM/ - ${OPENAIR_DIR}/openair3/NAS/COMMON/IES/ - ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL -) - -# conf2uedata binary - -set(conf2uedata_SRC - ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf2uedata.c - ${CONF2UEDATA_LIB_SRC} -) - -add_executable(conf2uedata ${conf2uedata_SRC} ) -target_link_libraries(conf2uedata ${CONFIG_LIBRARIES}) - -# usim binary - -set(usim_SRC - ${OPENAIR_DIR}/openair3/NAS/TOOLS/usim.c - ${CONF2UEDATA_LIB_SRC} -) - - -add_executable(usim ${usim_SRC} ) -target_link_libraries(usim ${CONFIG_LIBRARIES}) - -# nvram binary - -set(nvram_SRC - ${OPENAIR_DIR}/openair3/NAS/TOOLS/nvram.c - ${CONF2UEDATA_LIB_SRC} -) - - -add_executable(nvram ${nvram_SRC}) -target_link_libraries(nvram ${CONFIG_LIBRARIES}) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 264e26d890..f13dd314ef 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -177,7 +177,6 @@ clean_all_files() { dir=$OPENAIR_DIR/cmake_targets rm -rf $dir/ran_build $dir/ran_build_noLOG rm -rf $dir/lte-simulators/build - rm -rf $dir/nas_sim_tools/build rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build } diff --git a/docker/Dockerfile.lteUE.rhel9 b/docker/Dockerfile.lteUE.rhel9 index 9ddf9e1f32..56b7266331 100644 --- a/docker/Dockerfile.lteUE.rhel9 +++ b/docker/Dockerfile.lteUE.rhel9 @@ -55,9 +55,9 @@ RUN dnf update -y && \ WORKDIR /opt/oai-lte-ue/bin COPY --from=lte-ue-build \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ - /oai-ran/cmake_targets/nas_sim_tools/build/conf2uedata \ - /oai-ran/cmake_targets/nas_sim_tools/build/nvram \ - /oai-ran/cmake_targets/nas_sim_tools/build/usim \ + /oai-ran/cmake_targets/ran_build/build/conf2uedata \ + /oai-ran/cmake_targets/ran_build/build/nvram \ + /oai-ran/cmake_targets/ran_build/build/usim \ ./ COPY ./docker/scripts/lte_ue_entrypoint.sh ./entrypoint.sh diff --git a/docker/Dockerfile.lteUE.rocky b/docker/Dockerfile.lteUE.rocky index 4d98776c1d..39b99f4e0e 100644 --- a/docker/Dockerfile.lteUE.rocky +++ b/docker/Dockerfile.lteUE.rocky @@ -56,9 +56,9 @@ RUN dnf update -y && \ WORKDIR /opt/oai-lte-ue/bin COPY --from=lte-ue-build \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ - /oai-ran/cmake_targets/nas_sim_tools/build/conf2uedata \ - /oai-ran/cmake_targets/nas_sim_tools/build/nvram \ - /oai-ran/cmake_targets/nas_sim_tools/build/usim \ + /oai-ran/cmake_targets/ran_build/build/conf2uedata \ + /oai-ran/cmake_targets/ran_build/build/nvram \ + /oai-ran/cmake_targets/ran_build/build/usim \ ./ COPY ./docker/scripts/lte_ue_entrypoint.sh ./entrypoint.sh diff --git a/docker/Dockerfile.lteUE.ubuntu22 b/docker/Dockerfile.lteUE.ubuntu22 index 5174dab36a..27623dbd33 100644 --- a/docker/Dockerfile.lteUE.ubuntu22 +++ b/docker/Dockerfile.lteUE.ubuntu22 @@ -89,9 +89,9 @@ COPY --from=lte-ue-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86 WORKDIR /opt/oai-lte-ue/bin COPY --from=lte-ue-build \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ - /oai-ran/cmake_targets/nas_sim_tools/build/conf2uedata \ - /oai-ran/cmake_targets/nas_sim_tools/build/nvram \ - /oai-ran/cmake_targets/nas_sim_tools/build/usim \ + /oai-ran/cmake_targets/ran_build/build/conf2uedata \ + /oai-ran/cmake_targets/ran_build/build/nvram \ + /oai-ran/cmake_targets/ran_build/build/usim \ ./ COPY ./docker/scripts/lte_ue_entrypoint.sh ./entrypoint.sh diff --git a/openair3/NAS/CMakeLists.txt b/openair3/NAS/CMakeLists.txt index 50bfe97bc3..54ccefb0f5 100644 --- a/openair3/NAS/CMakeLists.txt +++ b/openair3/NAS/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(COMMON) add_subdirectory(NR_UE) add_subdirectory(UE) +add_subdirectory(TOOLS) diff --git a/openair3/NAS/TOOLS/CMakeLists.txt b/openair3/NAS/TOOLS/CMakeLists.txt new file mode 100755 index 0000000000..e57db8255f --- /dev/null +++ b/openair3/NAS/TOOLS/CMakeLists.txt @@ -0,0 +1,36 @@ +add_library(conf2uedata_lib OBJECT + conf_emm.c + conf_user_data.c + conf_usim.c + conf_network.c + conf_user_plmn.c + conf_parser.c + fs.c + display.c + ../UE/API/USIM/usim_api.c + ../UE/API/USIM/aka_functions.c + ../COMMON/UTIL/OctetString.c + ${OPENAIR_DIR}/common/utils/mem/memory.c + ${OPENAIR_DIR}/common/utils/utils.c +) + +add_executable(conf2uedata conf2uedata.c) +target_link_libraries(conf2uedata PRIVATE conf2uedata_lib) +set_target_properties(conf2uedata PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +target_link_libraries(conf2uedata PRIVATE LOG minimal_lib ${libconfig_LIBRARIES}) + +add_executable(usim usim.c) +target_link_libraries(usim PRIVATE conf2uedata_lib) +set_target_properties(usim PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +target_link_libraries(usim PRIVATE LOG minimal_lib ${libconfig_LIBRARIES}) + +add_executable(nvram nvram.c) +target_link_libraries(nvram PRIVATE conf2uedata_lib) +set_target_properties(nvram PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +target_link_libraries(nvram PRIVATE LOG minimal_lib ${libconfig_LIBRARIES}) + +if (${T_TRACER}) + add_dependencies(conf2uedata generate_T) + add_dependencies(usim generate_T) + add_dependencies(nvram generate_T) +endif (${T_TRACER}) diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c index 80a6933c05..d746d5ed3d 100644 --- a/openair3/NAS/TOOLS/conf2uedata.c +++ b/openair3/NAS/TOOLS/conf2uedata.c @@ -3,6 +3,7 @@ #include // memset, strncpy #include +#include "log.h" #include "conf2uedata.h" #include "display.h" #include "conf_parser.h" @@ -42,6 +43,7 @@ int main(int argc, char**argv) { exit(1); } + logInit(); if ( parse_config_file(output_dir, conf_file, OUTPUT_ALL) == false ) { exit(1); } diff --git a/openair3/NAS/TOOLS/nvram.c b/openair3/NAS/TOOLS/nvram.c index ad39462dc9..4162e5fc58 100644 --- a/openair3/NAS/TOOLS/nvram.c +++ b/openair3/NAS/TOOLS/nvram.c @@ -42,6 +42,7 @@ Description Implements the utility used to generate data stored in the #include #include +#include "log.h" #include "conf_parser.h" #include "display.h" @@ -104,6 +105,7 @@ int main (int argc, char * const argv[]) _display_usage(argv[0]); exit(EXIT_SUCCESS); } + logInit(); /* compute default data directory if no output_dir is given */ if ( output_dir == NULL ) { diff --git a/openair3/NAS/TOOLS/usim.c b/openair3/NAS/TOOLS/usim.c index 9d74499144..40de38e4b2 100644 --- a/openair3/NAS/TOOLS/usim.c +++ b/openair3/NAS/TOOLS/usim.c @@ -42,6 +42,7 @@ Description Implements the utility used to generate data stored in the #include #include +#include "log.h" #include "conf_parser.h" #include "display.h" @@ -105,6 +106,7 @@ int main (int argc, char * const argv[]) exit(EXIT_SUCCESS); } + logInit(); /* compute default data directory if no output_dir is given */ if ( output_dir == NULL ) { output_dir = getenv(OUTPUT_DIR_ENV); From 990fc9c55ad346baac1019018ca66c2a434e141b Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Thu, 17 Jul 2025 14:28:15 +0200 Subject: [PATCH 2/5] Fix potential out-of-bound write MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tell strncpy() the size including the NULL byte to make sure we copy all data. This just fixes these warnings: openair3/NAS/TOOLS/conf_usim.c: In function ‘gen_usim_data’: openair3/NAS/TOOLS/conf_usim.c:191:17: warning: ‘strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation] openair3/NAS/TOOLS/conf_usim.c:190:53: note: length computed here openair3/NAS/TOOLS/conf_usim.c:195:17: warning: ‘strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation] openair3/NAS/TOOLS/conf_usim.c:194:54: note: length computed here add copy with limited size and truncate properly with null C string termination. As clang-format doesn't handle tab indented files and as it is not the OAI coding rule, the entire file is re-indented with present OAI coding rule. --- openair3/NAS/COMMON/UTIL/nas_log.h | 4 +- openair3/NAS/TOOLS/conf_usim.c | 531 ++++++++++++++--------------- 2 files changed, 258 insertions(+), 277 deletions(-) diff --git a/openair3/NAS/COMMON/UTIL/nas_log.h b/openair3/NAS/COMMON/UTIL/nas_log.h index 710c165440..de7b6357fe 100644 --- a/openair3/NAS/COMMON/UTIL/nas_log.h +++ b/openair3/NAS/COMMON/UTIL/nas_log.h @@ -97,6 +97,7 @@ typedef enum { #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #ifdef LOG_E + # define LOG_TRACE(s, x, args...) \ do { \ switch (s) { \ @@ -111,9 +112,6 @@ do { \ # define LOG_FUNC_IN LOG_ENTER(NAS) # define LOG_FUNC_OUT LOG_END(NAS) # define LOG_FUNC_RETURN(rETURNcODE) LOG_RETURN(NAS,rETURNcODE) - -extern int nas_log_func_indent; - #else # define LOG_TRACE(s, x, args...) # define LOG_DUMP(dATA, lEN) LOG_DUMPMSG(NAS, LOG_DUMP_CHAR,dATA, lEN, " Dump %d:\n", lEN) diff --git a/openair3/NAS/TOOLS/conf_usim.c b/openair3/NAS/TOOLS/conf_usim.c index 3a5c6dbf6d..f66df1457c 100644 --- a/openair3/NAS/TOOLS/conf_usim.c +++ b/openair3/NAS/TOOLS/conf_usim.c @@ -8,301 +8,284 @@ #include "conf_usim.h" bool parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf_t *u) { - int rc = true; - config_setting_t *ue_param_setting = NULL; - ue_param_setting = config_setting_get_member(ue_setting, SIM); - if (ue_param_setting == NULL) { - printf("Check SIM section for UE%d. EXITING...\n", user_id); - return false; - } - rc = config_setting_lookup_string(ue_param_setting, MSIN, &u->msin); - if (rc != 1 || strlen(u->msin) > 10 || strlen(u->msin) < 9) { - printf("Check SIM MSIN section for UE%d. Exiting\n", user_id); - return false; - } - rc = config_setting_lookup_string(ue_param_setting, USIM_API_K, - &u->usim_api_k); - if (rc != 1) { - printf("Check SIM USIM_API_K section for UE%d. Exiting\n", user_id); - return false; - } - rc = config_setting_lookup_string(ue_param_setting, OPC, &u->opc); - if (rc != 1) { - printf("Check SIM OPC section for UE%d. Exiting\n", user_id); - return false; - } - rc = config_setting_lookup_string(ue_param_setting, MSISDN, &u->msisdn); - if (rc != 1) { - printf("Check SIM MSISDN section for UE%d. Exiting\n", user_id); - return false; - } - return true; + int rc = true; + config_setting_t *ue_param_setting = NULL; + ue_param_setting = config_setting_get_member(ue_setting, SIM); + if (ue_param_setting == NULL) { + printf("Check SIM section for UE%d. EXITING...\n", user_id); + return false; + } + rc = config_setting_lookup_string(ue_param_setting, MSIN, &u->msin); + if (rc != 1 || strlen(u->msin) > 10 || strlen(u->msin) < 9) { + printf("Check SIM MSIN section for UE%d. Exiting\n", user_id); + return false; + } + rc = config_setting_lookup_string(ue_param_setting, USIM_API_K, &u->usim_api_k); + if (rc != 1) { + printf("Check SIM USIM_API_K section for UE%d. Exiting\n", user_id); + return false; + } + rc = config_setting_lookup_string(ue_param_setting, OPC, &u->opc); + if (rc != 1) { + printf("Check SIM OPC section for UE%d. Exiting\n", user_id); + return false; + } + rc = config_setting_lookup_string(ue_param_setting, MSISDN, &u->msisdn); + if (rc != 1) { + printf("Check SIM MSISDN section for UE%d. Exiting\n", user_id); + return false; + } + return true; } void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, const user_plmns_t *user_plmns, const networks_t networks) { - int hplmn_index = get_plmn_index(u->hplmn, networks); - const plmn_conf_param_t *conf = &networks.items[hplmn_index].conf; - memset(usim_data, 0, sizeof(usim_data_t)); - usim_data->imsi.length = 8; - usim_data->imsi.u.num.parity = get_msin_parity(u->msin, - conf->mcc, - conf->mnc); + int hplmn_index = get_plmn_index(u->hplmn, networks); + const plmn_conf_param_t *conf = &networks.items[hplmn_index].conf; + memset(usim_data, 0, sizeof(usim_data_t)); + usim_data->imsi.length = 8; + usim_data->imsi.u.num.parity = get_msin_parity(u->msin, conf->mcc, conf->mnc); - usim_data->imsi.u.num.digit1 = conf->mcc[0]; - usim_data->imsi.u.num.digit2 = conf->mcc[1]; - usim_data->imsi.u.num.digit3 = conf->mcc[2]; + usim_data->imsi.u.num.digit1 = conf->mcc[0]; + usim_data->imsi.u.num.digit2 = conf->mcc[1]; + usim_data->imsi.u.num.digit3 = conf->mcc[2]; - usim_data->imsi.u.num.digit4 = conf->mnc[0]; - usim_data->imsi.u.num.digit5 = conf->mnc[1]; + usim_data->imsi.u.num.digit4 = conf->mnc[0]; + usim_data->imsi.u.num.digit5 = conf->mnc[1]; - if (strlen(conf->mnc) == 2) { - usim_data->imsi.u.num.digit6 = u->msin[0]; - usim_data->imsi.u.num.digit7 = u->msin[1]; - usim_data->imsi.u.num.digit8 = u->msin[2]; - usim_data->imsi.u.num.digit9 = u->msin[3]; - usim_data->imsi.u.num.digit10 = u->msin[4]; - usim_data->imsi.u.num.digit11 = u->msin[5]; - usim_data->imsi.u.num.digit12 = u->msin[6]; - usim_data->imsi.u.num.digit13 = u->msin[7]; - usim_data->imsi.u.num.digit14 = u->msin[8]; - usim_data->imsi.u.num.digit15 = u->msin[9]; - } else { - usim_data->imsi.u.num.digit6 = conf->mnc[2]; - usim_data->imsi.u.num.digit7 = u->msin[0]; - usim_data->imsi.u.num.digit8 = u->msin[1]; - usim_data->imsi.u.num.digit9 = u->msin[2]; - usim_data->imsi.u.num.digit10 = u->msin[3]; - usim_data->imsi.u.num.digit11 = u->msin[4]; - usim_data->imsi.u.num.digit12 = u->msin[5]; - usim_data->imsi.u.num.digit13 = u->msin[6]; - usim_data->imsi.u.num.digit14 = u->msin[7]; - usim_data->imsi.u.num.digit15 = u->msin[8]; - } + if (strlen(conf->mnc) == 2) { + usim_data->imsi.u.num.digit6 = u->msin[0]; + usim_data->imsi.u.num.digit7 = u->msin[1]; + usim_data->imsi.u.num.digit8 = u->msin[2]; + usim_data->imsi.u.num.digit9 = u->msin[3]; + usim_data->imsi.u.num.digit10 = u->msin[4]; + usim_data->imsi.u.num.digit11 = u->msin[5]; + usim_data->imsi.u.num.digit12 = u->msin[6]; + usim_data->imsi.u.num.digit13 = u->msin[7]; + usim_data->imsi.u.num.digit14 = u->msin[8]; + usim_data->imsi.u.num.digit15 = u->msin[9]; + } else { + usim_data->imsi.u.num.digit6 = conf->mnc[2]; + usim_data->imsi.u.num.digit7 = u->msin[0]; + usim_data->imsi.u.num.digit8 = u->msin[1]; + usim_data->imsi.u.num.digit9 = u->msin[2]; + usim_data->imsi.u.num.digit10 = u->msin[3]; + usim_data->imsi.u.num.digit11 = u->msin[4]; + usim_data->imsi.u.num.digit12 = u->msin[5]; + usim_data->imsi.u.num.digit13 = u->msin[6]; + usim_data->imsi.u.num.digit14 = u->msin[7]; + usim_data->imsi.u.num.digit15 = u->msin[8]; + } - /* - * Ciphering and Integrity Keys - */ - usim_data->keys.ksi = KSI; - memset(&usim_data->keys.ck, 0, USIM_CK_SIZE); - memset(&usim_data->keys.ik, 0, USIM_IK_SIZE); - /* - * Higher Priority PLMN search period - */ - usim_data->hpplmn = 0x00; /* Disable timer */ + /* + * Ciphering and Integrity Keys + */ + usim_data->keys.ksi = KSI; + memset(&usim_data->keys.ck, 0, USIM_CK_SIZE); + memset(&usim_data->keys.ik, 0, USIM_IK_SIZE); + /* + * Higher Priority PLMN search period + */ + usim_data->hpplmn = 0x00; /* Disable timer */ - /* - * List of Forbidden PLMNs - */ - for (int i = 0; i < USIM_FPLMN_MAX; i++) { - memset(&usim_data->fplmn[i], 0xff, sizeof(plmn_t)); - } - if (user_plmns->forbiddens.size > 0) { - for (int i = 0; i < user_plmns->forbiddens.size; i++) { - usim_data->fplmn[i] = networks.items[user_plmns->forbiddens.items[i]].plmn; - } - } + /* + * List of Forbidden PLMNs + */ + for (int i = 0; i < USIM_FPLMN_MAX; i++) { + memset(&usim_data->fplmn[i], 0xff, sizeof(plmn_t)); + } + if (user_plmns->forbiddens.size > 0) { + for (int i = 0; i < user_plmns->forbiddens.size; i++) { + usim_data->fplmn[i] = networks.items[user_plmns->forbiddens.items[i]].plmn; + } + } - /* - * Location Information - */ - usim_data->loci.tmsi = DEFAULT_TMSI; - usim_data->loci.lai.plmn = networks.items[hplmn_index].plmn; - usim_data->loci.lai.lac = DEFAULT_LAC; - usim_data->loci.status = USIM_LOCI_NOT_UPDATED; - /* - * Packet Switched Location Information - */ - usim_data->psloci.p_tmsi = DEFAULT_P_TMSI; - usim_data->psloci.signature[0] = 0x01; - usim_data->psloci.signature[1] = 0x02; - usim_data->psloci.signature[2] = 0x03; - usim_data->psloci.rai.plmn = networks.items[hplmn_index].plmn; - usim_data->psloci.rai.lac = DEFAULT_LAC; - usim_data->psloci.rai.rac = DEFAULT_RAC; - usim_data->psloci.status = USIM_PSLOCI_NOT_UPDATED; - /* - * Administrative Data - */ - usim_data->ad.UE_Operation_Mode = USIM_NORMAL_MODE; - usim_data->ad.Additional_Info = 0xffff; - usim_data->ad.MNC_Length = strlen(conf->mnc); - /* - * EPS NAS security context - */ - usim_data->securityctx.length = 52; - usim_data->securityctx.KSIasme.type = USIM_KSI_ASME_TAG; - usim_data->securityctx.KSIasme.length = 1; - usim_data->securityctx.KSIasme.value[0] = KSI_ASME; - usim_data->securityctx.Kasme.type = USIM_K_ASME_TAG; - usim_data->securityctx.Kasme.length = USIM_K_ASME_SIZE; - memset(usim_data->securityctx.Kasme.value, 0, - usim_data->securityctx.Kasme.length); - usim_data->securityctx.ulNAScount.type = USIM_UL_NAS_COUNT_TAG; - usim_data->securityctx.ulNAScount.length = USIM_UL_NAS_COUNT_SIZE; - memset(usim_data->securityctx.ulNAScount.value, 0, - usim_data->securityctx.ulNAScount.length); - usim_data->securityctx.dlNAScount.type = USIM_DL_NAS_COUNT_TAG; - usim_data->securityctx.dlNAScount.length = USIM_DL_NAS_COUNT_SIZE; - memset(usim_data->securityctx.dlNAScount.value, 0, - usim_data->securityctx.dlNAScount.length); - usim_data->securityctx.algorithmID.type = USIM_INT_ENC_ALGORITHMS_TAG; - usim_data->securityctx.algorithmID.length = 1; - usim_data->securityctx.algorithmID.value[0] = SECURITY_ALGORITHMS; - /* - * Subcriber's Number - */ - usim_data->msisdn.length = 7; - usim_data->msisdn.number.ext = 1; - usim_data->msisdn.number.ton = MSISDN_TON_UNKNOWKN; - usim_data->msisdn.number.npi = MSISDN_NPI_ISDN_TELEPHONY; - usim_data->msisdn.conf1_record_id = 0xff; /* Not used */ - usim_data->msisdn.ext1_record_id = 0xff; /* Not used */ - int j = 0; - for (int i = 0; i < strlen(u->msisdn); i += 2) { - usim_data->msisdn.number.digit[j].msb = u->msisdn[i]; - j++; - } - j = 0; - for (int i = 1; i < strlen(u->msisdn); i += 2) { - usim_data->msisdn.number.digit[j].lsb = u->msisdn[i]; - j++; + /* + * Location Information + */ + usim_data->loci.tmsi = DEFAULT_TMSI; + usim_data->loci.lai.plmn = networks.items[hplmn_index].plmn; + usim_data->loci.lai.lac = DEFAULT_LAC; + usim_data->loci.status = USIM_LOCI_NOT_UPDATED; + /* + * Packet Switched Location Information + */ + usim_data->psloci.p_tmsi = DEFAULT_P_TMSI; + usim_data->psloci.signature[0] = 0x01; + usim_data->psloci.signature[1] = 0x02; + usim_data->psloci.signature[2] = 0x03; + usim_data->psloci.rai.plmn = networks.items[hplmn_index].plmn; + usim_data->psloci.rai.lac = DEFAULT_LAC; + usim_data->psloci.rai.rac = DEFAULT_RAC; + usim_data->psloci.status = USIM_PSLOCI_NOT_UPDATED; + /* + * Administrative Data + */ + usim_data->ad.UE_Operation_Mode = USIM_NORMAL_MODE; + usim_data->ad.Additional_Info = 0xffff; + usim_data->ad.MNC_Length = strlen(conf->mnc); + /* + * EPS NAS security context + */ + usim_data->securityctx.length = 52; + usim_data->securityctx.KSIasme.type = USIM_KSI_ASME_TAG; + usim_data->securityctx.KSIasme.length = 1; + usim_data->securityctx.KSIasme.value[0] = KSI_ASME; + usim_data->securityctx.Kasme.type = USIM_K_ASME_TAG; + usim_data->securityctx.Kasme.length = USIM_K_ASME_SIZE; + memset(usim_data->securityctx.Kasme.value, 0, usim_data->securityctx.Kasme.length); + usim_data->securityctx.ulNAScount.type = USIM_UL_NAS_COUNT_TAG; + usim_data->securityctx.ulNAScount.length = USIM_UL_NAS_COUNT_SIZE; + memset(usim_data->securityctx.ulNAScount.value, 0, usim_data->securityctx.ulNAScount.length); + usim_data->securityctx.dlNAScount.type = USIM_DL_NAS_COUNT_TAG; + usim_data->securityctx.dlNAScount.length = USIM_DL_NAS_COUNT_SIZE; + memset(usim_data->securityctx.dlNAScount.value, 0, usim_data->securityctx.dlNAScount.length); + usim_data->securityctx.algorithmID.type = USIM_INT_ENC_ALGORITHMS_TAG; + usim_data->securityctx.algorithmID.length = 1; + usim_data->securityctx.algorithmID.value[0] = SECURITY_ALGORITHMS; + /* + * Subcriber's Number + */ + usim_data->msisdn.length = 7; + usim_data->msisdn.number.ext = 1; + usim_data->msisdn.number.ton = MSISDN_TON_UNKNOWKN; + usim_data->msisdn.number.npi = MSISDN_NPI_ISDN_TELEPHONY; + usim_data->msisdn.conf1_record_id = 0xff; /* Not used */ + usim_data->msisdn.ext1_record_id = 0xff; /* Not used */ + int j = 0; + for (int i = 0; i < strlen(u->msisdn); i += 2) { + usim_data->msisdn.number.digit[j].msb = u->msisdn[i]; + j++; + } + j = 0; + for (int i = 1; i < strlen(u->msisdn); i += 2) { + usim_data->msisdn.number.digit[j].lsb = u->msisdn[i]; + j++; + } + if (strlen(u->msisdn) % 2 == 0) { + for (int i = strlen(u->msisdn) / 2; i < 10; i++) { + usim_data->msisdn.number.digit[i].msb = 0xf; + usim_data->msisdn.number.digit[i].lsb = 0xf; + } + } else { + usim_data->msisdn.number.digit[strlen(u->msisdn) / 2].lsb = 0xf; + for (int i = (strlen(u->msisdn) / 2) + 1; i < 10; i++) { + usim_data->msisdn.number.digit[i].msb = 0xf; + usim_data->msisdn.number.digit[i].lsb = 0xf; + } + } + /* + * PLMN Network Name and Operator PLMN List + */ + for (int i = 0; i < user_plmns->operators.size; i++) { + network_record_t record = networks.items[user_plmns->operators.items[i]].record; + usim_pnn_t *pnn = usim_data->pnn + i; + pnn->fullname.type = USIM_PNN_FULLNAME_TAG; + pnn->fullname.length = min(sizeof(pnn->fullname.value) - 1, strlen(record.fullname)); + memcpy(pnn->fullname.value, record.fullname + 1, pnn->fullname.length); + pnn->fullname.value[pnn->fullname.length] = 0; + pnn->shortname.type = USIM_PNN_SHORTNAME_TAG; + pnn->shortname.length = min(sizeof(pnn->shortname.value) - 1, strlen(record.shortname)); + memcpy(pnn->shortname.value, record.shortname + 1, pnn->shortname.length); + pnn->shortname.value[pnn->shortname.length] = 0; + usim_data->opl[i] = (usim_opl_t){record.plmn, record.tac_start, record.tac_end, i}; + } + if (user_plmns->operators.size < USIM_OPL_MAX) { + for (int i = user_plmns->operators.size; i < USIM_OPL_MAX; i++) { + memset(&usim_data->opl[i].plmn, 0xff, sizeof(plmn_t)); + } + } - } - if (strlen(u->msisdn) % 2 == 0) { - for (int i = strlen(u->msisdn) / 2; i < 10; i++) { - usim_data->msisdn.number.digit[i].msb = 0xf; - usim_data->msisdn.number.digit[i].lsb = 0xf; - } - } else { - usim_data->msisdn.number.digit[strlen(u->msisdn) / 2].lsb = 0xf; - for (int i = (strlen(u->msisdn) / 2) + 1; i < 10; i++) { - usim_data->msisdn.number.digit[i].msb = 0xf; - usim_data->msisdn.number.digit[i].lsb = 0xf; - } - } - /* - * PLMN Network Name and Operator PLMN List - */ - for (int i = 0; i < user_plmns->operators.size; i++) { - network_record_t record = networks.items[user_plmns->operators.items[i]].record; - usim_data->pnn[i].fullname.type = USIM_PNN_FULLNAME_TAG; - usim_data->pnn[i].fullname.length = strlen(record.fullname); - strncpy((char*) usim_data->pnn[i].fullname.value, record.fullname, - usim_data->pnn[i].fullname.length); - usim_data->pnn[i].shortname.type = USIM_PNN_SHORTNAME_TAG; - usim_data->pnn[i].shortname.length = strlen(record.shortname); - strncpy((char*) usim_data->pnn[i].shortname.value, record.shortname, - usim_data->pnn[i].shortname.length); - usim_data->opl[i].plmn = record.plmn; - usim_data->opl[i].start = record.tac_start; - usim_data->opl[i].end = record.tac_end; - usim_data->opl[i].record_id = i; - } - if (user_plmns->operators.size < USIM_OPL_MAX) { - for (int i = user_plmns->operators.size; i < USIM_OPL_MAX; i++) { - memset(&usim_data->opl[i].plmn, 0xff, sizeof(plmn_t)); - } - } + /* + * List of Equivalent HPLMNs + */ + for (int i = 0; i < user_plmns->equivalents_home.size; i++) { + usim_data->ehplmn[i] = networks.items[user_plmns->equivalents_home.items[i]].plmn; + } + if (user_plmns->equivalents_home.size < USIM_EHPLMN_MAX) { + for (int i = user_plmns->equivalents_home.size; i < USIM_EHPLMN_MAX; i++) { + memset(&usim_data->ehplmn[i], 0xff, sizeof(plmn_t)); + } + } + /* + * Home PLMN Selector with Access Technology + */ + usim_data->hplmn.plmn = networks.items[hplmn_index].plmn; + usim_data->hplmn.AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); - /* - * List of Equivalent HPLMNs - */ - for (int i = 0; i < user_plmns->equivalents_home.size; i++) { - usim_data->ehplmn[i] = networks.items[user_plmns->equivalents_home.items[i]].plmn; - } - if (user_plmns->equivalents_home.size < USIM_EHPLMN_MAX) { - for (int i = user_plmns->equivalents_home.size; i < USIM_EHPLMN_MAX; i++) { - memset(&usim_data->ehplmn[i], 0xff, sizeof(plmn_t)); - } - } - /* - * Home PLMN Selector with Access Technology - */ - usim_data->hplmn.plmn = networks.items[hplmn_index].plmn; - usim_data->hplmn.AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); + /* + * List of user controlled PLMN selector with Access Technology + */ + for (int i = 0; i < USIM_PLMN_MAX; i++) { + memset(&usim_data->plmn[i], 0xff, sizeof(plmn_t)); + } + if (user_plmns->users_controlled.size > 0) { + for (int i = 0; i < user_plmns->users_controlled.size; i++) { + usim_data->plmn[i].plmn = networks.items[user_plmns->users_controlled.items[i]].plmn; + } + } - /* - * List of user controlled PLMN selector with Access Technology - */ - for (int i = 0; i < USIM_PLMN_MAX; i++) { - memset(&usim_data->plmn[i], 0xff, sizeof(plmn_t)); - } - if (user_plmns->users_controlled.size > 0) { - for (int i = 0; i < user_plmns->users_controlled.size; i++) { - usim_data->plmn[i].plmn = networks.items[user_plmns->users_controlled.items[i]].plmn; - } - } + // List of operator controlled PLMN selector with Access Technology - // List of operator controlled PLMN selector with Access Technology - - for (int i = 0; i < USIM_OPLMN_MAX; i++) { - memset(&usim_data->oplmn[i], 0xff, sizeof(plmn_t)); - } - if (user_plmns->operators_controlled.size > 0) { - for (int i = 0; i < user_plmns->operators_controlled.size; i++) { - usim_data->oplmn[i].plmn = networks.items[user_plmns->operators_controlled.items[i]].plmn; - usim_data->oplmn[i].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN - | USIM_ACT_EUTRAN); - } - } - /* - * EPS Location Information - */ - usim_data->epsloci.guti.gummei.plmn = - networks.items[hplmn_index].plmn; - usim_data->epsloci.guti.gummei.MMEgid = DEFAULT_MME_ID; - usim_data->epsloci.guti.gummei.MMEcode = DEFAULT_MME_CODE; - usim_data->epsloci.guti.m_tmsi = DEFAULT_M_TMSI; - usim_data->epsloci.tai.plmn = usim_data->epsloci.guti.gummei.plmn; - usim_data->epsloci.tai.tac = DEFAULT_TAC; - usim_data->epsloci.status = USIM_EPSLOCI_UPDATED; - /* - * Non-Access Stratum configuration - */ - usim_data->nasconfig.NAS_SignallingPriority.type = - USIM_NAS_SIGNALLING_PRIORITY_TAG; - usim_data->nasconfig.NAS_SignallingPriority.length = 1; - usim_data->nasconfig.NAS_SignallingPriority.value[0] = 0x00; - usim_data->nasconfig.NMO_I_Behaviour.type = USIM_NMO_I_BEHAVIOUR_TAG; - usim_data->nasconfig.NMO_I_Behaviour.length = 1; - usim_data->nasconfig.NMO_I_Behaviour.value[0] = 0x00; - usim_data->nasconfig.AttachWithImsi.type = USIM_ATTACH_WITH_IMSI_TAG; - usim_data->nasconfig.AttachWithImsi.length = 1; + for (int i = 0; i < USIM_OPLMN_MAX; i++) { + memset(&usim_data->oplmn[i], 0xff, sizeof(plmn_t)); + } + if (user_plmns->operators_controlled.size > 0) { + for (int i = 0; i < user_plmns->operators_controlled.size; i++) { + usim_data->oplmn[i].plmn = networks.items[user_plmns->operators_controlled.items[i]].plmn; + usim_data->oplmn[i].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); + } + } + /* + * EPS Location Information + */ + usim_data->epsloci.guti.gummei.plmn = networks.items[hplmn_index].plmn; + usim_data->epsloci.guti.gummei.MMEgid = DEFAULT_MME_ID; + usim_data->epsloci.guti.gummei.MMEcode = DEFAULT_MME_CODE; + usim_data->epsloci.guti.m_tmsi = DEFAULT_M_TMSI; + usim_data->epsloci.tai.plmn = usim_data->epsloci.guti.gummei.plmn; + usim_data->epsloci.tai.tac = DEFAULT_TAC; + usim_data->epsloci.status = USIM_EPSLOCI_UPDATED; + /* + * Non-Access Stratum configuration + */ + usim_data->nasconfig.NAS_SignallingPriority.type = USIM_NAS_SIGNALLING_PRIORITY_TAG; + usim_data->nasconfig.NAS_SignallingPriority.length = 1; + usim_data->nasconfig.NAS_SignallingPriority.value[0] = 0x00; + usim_data->nasconfig.NMO_I_Behaviour.type = USIM_NMO_I_BEHAVIOUR_TAG; + usim_data->nasconfig.NMO_I_Behaviour.length = 1; + usim_data->nasconfig.NMO_I_Behaviour.value[0] = 0x00; + usim_data->nasconfig.AttachWithImsi.type = USIM_ATTACH_WITH_IMSI_TAG; + usim_data->nasconfig.AttachWithImsi.length = 1; #if defined(START_WITH_GUTI) - usim_data->nasconfig.AttachWithImsi.value[0] = 0x00; + usim_data->nasconfig.AttachWithImsi.value[0] = 0x00; #else - usim_data->nasconfig.AttachWithImsi.value[0] = 0x01; + usim_data->nasconfig.AttachWithImsi.value[0] = 0x01; #endif - usim_data->nasconfig.MinimumPeriodicSearchTimer.type = - USIM_MINIMUM_PERIODIC_SEARCH_TIMER_TAG; - usim_data->nasconfig.MinimumPeriodicSearchTimer.length = 1; - usim_data->nasconfig.MinimumPeriodicSearchTimer.value[0] = 0x00; - usim_data->nasconfig.ExtendedAccessBarring.type = - USIM_EXTENDED_ACCESS_BARRING_TAG; - usim_data->nasconfig.ExtendedAccessBarring.length = 1; - usim_data->nasconfig.ExtendedAccessBarring.value[0] = 0x00; - usim_data->nasconfig.Timer_T3245_Behaviour.type = - USIM_TIMER_T3245_BEHAVIOUR_TAG; - usim_data->nasconfig.Timer_T3245_Behaviour.length = 1; - usim_data->nasconfig.Timer_T3245_Behaviour.value[0] = 0x00; + usim_data->nasconfig.MinimumPeriodicSearchTimer.type = USIM_MINIMUM_PERIODIC_SEARCH_TIMER_TAG; + usim_data->nasconfig.MinimumPeriodicSearchTimer.length = 1; + usim_data->nasconfig.MinimumPeriodicSearchTimer.value[0] = 0x00; + usim_data->nasconfig.ExtendedAccessBarring.type = USIM_EXTENDED_ACCESS_BARRING_TAG; + usim_data->nasconfig.ExtendedAccessBarring.length = 1; + usim_data->nasconfig.ExtendedAccessBarring.value[0] = 0x00; + usim_data->nasconfig.Timer_T3245_Behaviour.type = USIM_TIMER_T3245_BEHAVIOUR_TAG; + usim_data->nasconfig.Timer_T3245_Behaviour.length = 1; + usim_data->nasconfig.Timer_T3245_Behaviour.value[0] = 0x00; - /* initialize the subscriber authentication security key */ - if (hex_string_to_hex_value(usim_data->keys.usim_api_k, - u->usim_api_k, USIM_API_K_SIZE) == -1 || - hex_string_to_hex_value(usim_data->keys.opc, - u->opc, OPC_SIZE) == -1) { - fprintf(stderr, "fix your configuration file\n"); - exit(1); - } + /* initialize the subscriber authentication security key */ + if (hex_string_to_hex_value(usim_data->keys.usim_api_k, u->usim_api_k, USIM_API_K_SIZE) == -1 + || hex_string_to_hex_value(usim_data->keys.opc, u->opc, OPC_SIZE) == -1) { + fprintf(stderr, "fix your configuration file\n"); + exit(1); + } } bool write_usim_data(const char *directory, int user_id, usim_data_t *usim_data){ - int rc; - char *filename = make_filename(directory, USIM_API_NVRAM_FILENAME, user_id); - rc = usim_api_write(filename, usim_data); - free(filename); - return rc; + int rc; + char *filename = make_filename(directory, USIM_API_NVRAM_FILENAME, user_id); + rc = usim_api_write(filename, usim_data); + free(filename); + return rc; } From ff52194857cec573e9259c771818fdf36310178f Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 17 Jul 2025 14:02:49 +0200 Subject: [PATCH 3/5] Remove unused parameter from build_oai --- cmake_targets/build_oai | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 83570c80eb..0b6f31d930 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -34,7 +34,6 @@ source "$THIS_SCRIPT_PATH"/tools/build_helper set_openair_env # Variables for UE data generation -gen_nvram_path=$OPENAIR_DIR/cmake_targets/ran_build/build conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf HW="" @@ -93,8 +92,6 @@ Options: Makes the NR UE softmodem --UE-conf-nvram [configuration file] Specify conf_nvram_path (default \"$conf_nvram_path\") ---UE-gen-nvram [output path] - Specify gen_nvram_path (default \"$gen_nvram_path\") -w | --hardware USRP, BLADERF, LMSSDR, IRIS, SIMU, AW2SORI, AERIAL, None (Default) Adds this RF board support (in external packages installation and in compilation) @@ -259,9 +256,6 @@ function main() { --UE-conf-nvram) conf_nvram_path=$(readlink -f "$2") shift 2;; - --UE-gen-nvram) - gen_nvram_path=$(readlink -f "$2") - shift 2;; -w | --hardware) case "$2" in "USRP" | "BLADERF" | "LMSSDR" | "IRIS") From 426e3453cd73dfb363dde8a149c1eb778e00a8d2 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 18 Jul 2025 10:56:18 +0200 Subject: [PATCH 4/5] trace to try to debug old 4G bug --- openair2/RRC/LTE/rrc_UE.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index 39b8f426ce..d53d4ea1b1 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -2893,8 +2893,10 @@ int decode_BCCH_DLSCH_Message( // even frame if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 0) { LTE_SystemInformationBlockType1_t *sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - memcpy( (void *)sib1, - (void *)&bcch_message->message.choice.c1.choice.systemInformationBlockType1, + if (!sib1) + LOG_E(PHY,"UE_rrc_inst[%d][%d] is null\n", ctxt_pP->module_id, eNB_index); + memcpy( sib1, + &bcch_message->message.choice.c1.choice.systemInformationBlockType1, sizeof(LTE_SystemInformationBlockType1_t) ); LOG_D( RRC, "[UE %"PRIu8"] Decoding First SIB1\n", ctxt_pP->module_id ); decode_SIB1( ctxt_pP, eNB_index, rsrq, rsrp ); From 02ce4aaf82525b2e82de79bfb65f69332484d081 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 18 Jul 2025 22:05:02 +0200 Subject: [PATCH 5/5] Fix a 4G UE bug --- openair2/LAYER2/MAC/main_ue.c | 2 -- openair2/RRC/LTE/rrc_UE.c | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openair2/LAYER2/MAC/main_ue.c b/openair2/LAYER2/MAC/main_ue.c index bed2aa5b09..324668b981 100644 --- a/openair2/LAYER2/MAC/main_ue.c +++ b/openair2/LAYER2/MAC/main_ue.c @@ -46,8 +46,6 @@ #include #include "executables/softmodem-common.h" -extern void openair_rrc_top_init_ue( int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active); - void dl_phy_sync_success(module_id_t module_idP, frame_t frameP, unsigned char eNB_index, uint8_t first_sync) { //init as MR LOG_D(MAC, "[UE %d] Frame %d: PHY Sync to eNB_index %d successful \n", module_idP, frameP, eNB_index); diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index d53d4ea1b1..b9d2551fcb 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -2892,9 +2892,11 @@ int decode_BCCH_DLSCH_Message( if ((ctxt_pP->frame % 2) == 0) { // even frame if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 0) { + if (!UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]) { + LOG_E(PHY,"UE_rrc_inst[%d].sib1[%d] is null, allocating\n", ctxt_pP->module_id, eNB_index); + openair_rrc_ue_init(ctxt_pP->module_id, eNB_index); + } LTE_SystemInformationBlockType1_t *sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - if (!sib1) - LOG_E(PHY,"UE_rrc_inst[%d][%d] is null\n", ctxt_pP->module_id, eNB_index); memcpy( sib1, &bcch_message->message.choice.c1.choice.systemInformationBlockType1, sizeof(LTE_SystemInformationBlockType1_t) );