Merge remote-tracking branch 'origin/lte-sim-tools' into integration_2025_w31 (!3530)
remove specific directory for LTE SIM management tools This is very old code has never been integrated with the "main" OAI cmake infrastructure and more recent libraries. This MR integrates the three binaries for LTE virtual sim management in the regular build process and log system
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
cmake_targets/log/
|
||||
cmake_targets/*/build/
|
||||
cmake_targets/ran_build/
|
||||
cmake_targets/nas_sim_tools/build/
|
||||
log/
|
||||
lte_build_oai/
|
||||
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+2
-19
@@ -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)
|
||||
@@ -244,7 +241,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)
|
||||
@@ -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")
|
||||
@@ -513,18 +507,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"
|
||||
|
||||
@@ -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})
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -46,8 +46,6 @@
|
||||
#include <openair2/RRC/LTE/rrc_proto.h>
|
||||
#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);
|
||||
|
||||
@@ -2892,9 +2892,13 @@ 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];
|
||||
memcpy( (void *)sib1,
|
||||
(void *)&bcch_message->message.choice.c1.choice.systemInformationBlockType1,
|
||||
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 );
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
add_subdirectory(COMMON)
|
||||
add_subdirectory(NR_UE)
|
||||
add_subdirectory(UE)
|
||||
add_subdirectory(TOOLS)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Executable
+36
@@ -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})
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <string.h> // memset, strncpy
|
||||
#include <getopt.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
+257
-274
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ Description Implements the utility used to generate data stored in the
|
||||
#include <stdbool.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#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 ) {
|
||||
|
||||
@@ -42,6 +42,7 @@ Description Implements the utility used to generate data stored in the
|
||||
#include <stdbool.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#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);
|
||||
|
||||
Reference in New Issue
Block a user